VOICE → WORDS https://hex.kitlangton.com
  • Swift 99.1%
  • TypeScript 0.8%
  • Ruby 0.1%
Find a file
History 2026-01-02 19:30:10 -05:00
.changeset Release 0.6.4 2026-01-02 19:30:10 -05:00
.cursor/rules init 2025-02-21 19:27:22 -06:00
.github Update README: highlight Parakeet as default transcription engine, remove CI workflow 2025-11-14 20:07:21 -05:00
bin Add Sparkle generate_appcast binary 2025-11-14 14:16:46 -05:00
docs Remove LLM text transformations, add word remappings 2025-12-30 20:56:55 -05:00
Hex Release 0.6.4 2026-01-02 19:30:10 -05:00
Hex.xcodeproj Release 0.6.4 2026-01-02 19:30:10 -05:00
HexCore Reduce code duplication across the codebase 2025-12-31 09:12:02 -05:00
tools/scripts attemtp to fix regression 2025-11-17 17:12:34 -05:00
.gitignore fix entitlements 2025-12-30 11:48:13 -05:00
.swiftlint.yml add github ci steps for releasing and building 2025-05-30 09:35:57 -05:00
AGENTS.md Migrate HexSettings to HexCore with backward compat 2025-11-15 22:37:01 -05:00
bun.lock Update lockfile 2025-12-30 21:07:14 -05:00
CHANGELOG.md Release 0.6.4 2026-01-02 19:30:10 -05:00
CLAUDE.md Document release process in CLAUDE.md 2025-12-30 21:19:24 -05:00
hex.rb Add TypeScript release pipeline with tag-based versioning 2025-11-14 12:46:43 -05:00
LICENSE Add MIT license and minor UI/model adjustments (resolves #84) 2025-11-13 22:15:00 -05:00
Localizable.xcstrings Remove LLM text transformations, add word remappings 2025-12-30 20:56:55 -05:00
package.json Release 0.6.4 2026-01-02 19:30:10 -05:00
README.md Reorganize README: move Instructions before Contributing, remove auto-download note 2025-11-17 19:16:51 -05:00
test_logger add transformations 2025-11-18 17:02:07 -05:00

Hex — Voice → Text

Press-and-hold a hotkey to transcribe your voice and paste the result wherever you're typing.

Download Hex for macOS

Note: Hex is currently only available for Apple Silicon Macs.

I've opened-sourced the project in the hopes that others will find it useful! Hex supports both Parakeet TDT v3 via the awesome FluidAudio (the default—it's frickin' unbelievable: fast, multilingual, and cloud-optimized) and the awesome WhisperKit for on-device transcription. We use the incredible Swift Composable Architecture for structuring the app. Please open issues with any questions or feedback! ❤️

Instructions

Once you open Hex, you'll need to grant it microphone and accessibility permissions—so it can record your voice and paste the transcribed text into any application, respectively.

Once you've configured a global hotkey, there are two recording modes:

  1. Press-and-hold the hotkey to begin recording, say whatever you want, and then release the hotkey to start the transcription process.
  2. Double-tap the hotkey to lock recording, say whatever you want, and then tap the hotkey once more to start the transcription process.

Contributing

Issue reports are welcome! If you encounter bugs or have feature requests, please open an issue.

Note on Pull Requests: At this stage, I'm not actively reviewing code contributions for significant features or core logic changes. The project is evolving rapidly and it's easier for me to work directly from issue reports. Bug fixes and documentation improvements are still appreciated, but please open an issue first to discuss before investing time in a large PR. Thanks for understanding!

Changelog workflow

  • For AI agents: Run bun run changeset:add-ai <type> "summary" (e.g., bun run changeset:add-ai patch "Fix clipboard timing") to create a changeset non-interactively.
  • For humans: Run bunx changeset when your PR needs release notes. Pick patch, minor, or major and write a short summary—this creates a .changeset/*.md fragment.
  • Check what will ship with bunx changeset status --verbose.
  • npm run sync-changelog (or bun run tools/scripts/sync-changelog.ts) mirrors the root CHANGELOG.md into Hex/Resources/changelog.md so the in-app sheet always matches GitHub releases.
  • The release tool consumes the pending fragments, bumps package.json + Info.plist, regenerates CHANGELOG.md, and feeds the resulting section to GitHub + Sparkle automatically. Releases fail fast if no changesets are queued, so you can't forget.
  • If you truly need to ship without pending Changesets (for example, re-running a failed publish), the release script will now prompt you to confirm and choose a patch/minor/major bump interactively before continuing.

License

This project is licensed under the MIT License. See LICENSE for details.