Local-first, open-source apps
Own your data. Use any model you want. Free and open source ❤️
📢 Repository Update: Whispering has become Epicenter! The original repository moved here. Everything else remains the same—same tools, same philosophy, same team.
Full details...
- Whispering's evolution beyond transcription required changes to the repository's structure and branding.
- Everything else remains the same—same tools, same philosophy, same team.
- The original app lives on as Epicenter Whispering, keeping a tight focus on transcription.
- This makes room for standalone apps with complementary, but non-transcription-related features (like Epicenter Assistant).
- The new root of the Epicenter repository contains common files supporting all the apps in the ecosystem.
- Note: the old URL github.com/braden-w/whispering is now just a thin placeholder redirecting to this rebranded repository.
Tools • Vision • Contributing • Discord •
Epicenter is an ecosystem of open-source, local-first apps. Our eventual goal is to store all of your data—notes, transcripts, chat histories—in a single folder of plain text and SQLite. Every tool we build shares this memory. It's open, tweakable, and yours. Grep it, open it in Obsidian, host it wherever you like. The choice is yours.
🎙️ Epicenter WhisperingPress shortcut → speak → get text. Desktop transcription that cuts out the middleman. Bring your own API key. |
🤖 Epicenter AssistantCurrently being rebuilt. A local-first assistant you can chat with. It lives in your folder, becoming the access point to everything you've ever written, thought, or built. → Track rebuild progress on the rebuild-assistant branch |
Our vision is to build a personal workspace where you own your data, choose your models, and replace siloed apps with open, interoperable alternatives. All while preserving authenticity and being free and open source.
Epicenter encrypts data inside the CRDT structure before it ever leaves the application. We use AES-256-GCM via @noble/ciphers to wrap individual values, ensuring that every downstream layer—IndexedDB, sync servers, SQLite databases, and cloud backups—only ever handles ciphertext.
App Code -> [Encrypt] -> Y.Doc -> IndexedDB / Sync Server / Backups (Ciphertext)
The server holds the key. It can decrypt your data. We chose this trade-off because genuine zero-knowledge encryption breaks the features people actually use: server-side search, AI processing, and simple password recovery. PGP has spent decades proving that manual key management is a UX dead end that even technical users avoid.
This is defense in depth. A database dump or a compromised storage bucket yields nothing but noise without the application secret. It reduces the blast radius of a breach while keeping the app fast and functional.
If you don't trust the server, self-host. When you run the server on your own infrastructure, server-managed encryption is zero-knowledge. The key derives from your own environment variables or password, and the server never sends it to us. Same code, same primitives, different trust boundary.
Further reading:
Our first app in the ecosystem. Choose your installation method:
macOS (Homebrew)
brew install --cask whispering
macOS, Windows, Linux (Direct Download)
Download the installer for your platform from GitHub Releases:
.dmg (Apple Silicon or Intel).msi or .exe.AppImage, .deb, or .rpm→ Full installation guide and setup instructions
For developers or contributors:
# Prerequisites:
# - Install Bun from https://bun.sh (run bun upgrade if there's issues)
# - Install Rust and Cargo from https://www.rust-lang.org/tools/install (brew install rustup)
git clone https://github.com/EpicenterHQ/epicenter.git
cd epicenter
bun install # Will prompt to upgrade if your Bun version is too old
cd apps/whispering
bun dev
Want to contribute? See CONTRIBUTING.md for fork and PR instructions.
If you encounter issues after switching branches or pulling changes (like "render_fn is not a function" errors), run from the repo root:
bun clean # Clears caches and node_modules
bun install # Reinstall dependencies
For a complete reset including Rust build artifacts (~10GB, takes longer to rebuild):
bun nuke # Clears everything including Rust target
bun install
Note: You rarely need bun nuke since Cargo handles incremental Rust builds well. Use bun clean first; reserve bun nuke for when things are truly broken.
If you think like a generalist, build like a hacker, and value tools that respect your mind—you'll fit right in.
If you're passionate about open source, local-first software, or are just a cracked Svelte/TypeScript developer—we'd love to build with you.
→ Read our Contributing Guide to get started
Contributors coordinate and share ideas in our Discord community.
Most packages are MIT. The sync server is AGPL-3.0. See LICENSE for details. Build on it. Fork it. Make it yours.
Contact: [email protected] | Discord | @braden_wong_
Built with ❤️ for data ownership, local-first, and open-source