npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

vocafuse

v0.1.3

Published

VocaFuse Frontend SDK for voice recording and upload

Readme

VocaFuse Voice Recording SDK

Add cross-browser voice recording to your app in 5 minutes. Handles recording, transcription, and storage.

Note: Requires a backend to generate auth tokens. Backend setup → | Full tutorial →

Install

npm install vocafuse

Tip: Works best with modern bundlers like Vite, Next.js, or Create React App.

Quick Start

import { useEffect, useState } from 'react'
import { VocaFuseSDK } from 'vocafuse'

export default function VoiceRecorder() {
  const [recorder, setRecorder] = useState(null)

  useEffect(() => {
    const sdk = new VocaFuseSDK({ 
      tokenEndpoint: '/api/token' // your backend returns VocaFuse tokens
    })
    
    sdk.init().then(() => {
      setRecorder(sdk.createRecorder({
        maxDuration: 60,
        onComplete: (result) => console.log('Uploaded:', result.voicenote_id),
        onError: (err) => console.error(err),
        onStateChange: () => setRecorder(r => ({ ...r })) // trigger re-render
      }))
    })
  }, [])

  if (!recorder) return <button disabled>Loading…</button>

  return (
    <button onClick={() => recorder.isRecording ? recorder.stop() : recorder.start()}>
      {recorder.isRecording ? '⏹ Stop' : '🎤 Record'}
    </button>
  )
}

That's it! The SDK handles microphone access, recording, and upload automatically.

API Reference

SDK Setup

const sdk = new VocaFuseSDK({
  tokenEndpoint: '/api/token',  // required - your backend endpoint
  apiBaseUrl: 'https://api.vocafuse.com'  // optional
})

await sdk.init()  // fetches initial token

Create Recorder

const recorder = sdk.createRecorder({
  maxDuration: 60,        // seconds (default: 60)
  autoUpload: true,       // upload on stop (default: true)
  
  // Callbacks
  onStateChange: (state) => {},      // 'idle' | 'recording' | 'uploading' | 'uploaded'
  onRecordProgress: (seconds) => {}, // fired every 100ms while recording
  onUploadProgress: (percent) => {}, // 0-100
  onComplete: (result) => {},        // { voicenote_id, url, ... }
  onError: (error) => {},
  onCancel: () => {}
})

Recorder Methods

await recorder.start()   // start recording (requests mic permission)
await recorder.stop()    // stop and auto-upload
await recorder.cancel()  // stop without uploading
recorder.pause()         // pause recording
recorder.resume()        // resume recording
recorder.destroy()       // cleanup

Recorder Properties

recorder.state        // current state
recorder.duration     // current duration in seconds
recorder.isRecording  // boolean
recorder.isUploading  // boolean

Common Issues

Microphone not working?

  • Requires HTTPS (or localhost for development)
  • User must grant microphone permission
  • Check: sdk.isVoicenoteSupported() returns true

Upload failing?

  • Verify your /api/token endpoint returns valid VocaFuse tokens
  • Check browser console for errors
  • Use onError callback to handle errors

Need help?

Notes

  • TypeScript types included
  • Works with React, Vue, Next.js, Vite, etc.
  • Supports Chrome, Firefox, Safari, Edge (modern versions)