cjpais/HandyPublic

A free, open source, and extensible speech-to-text application that works completely offline.

AI summary: A privacy-focused, cross-platform desktop application for completely offline speech-to-text transcription.

Stars
28.9K
+160 today
Forks
2.5K
Watchers
83
Open issues
82
Open PRs
97
Contributors
~137
Commits
755
Branches
131

RustMITCreated Feb 13, 2025Last push todayLatest release v0.9.4+1K stars this week+1.2K this month

Star history

since Jun 15, 2025
010K20KJun 2025Oct 2025Mar 2026Aug 2026
28.9K stars as of Aug 7, 2026, tracked back to Jun 15, 2025. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulMonWedFri2025-08-03: 1 commit2025-08-04: 0 commits2025-08-05: 0 commits2025-08-06: 1 commit2025-08-07: 5 commits2025-08-08: 3 commits2025-08-09: 6 commits2025-08-10: 0 commits2025-08-11: 7 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 2 commits2025-08-15: 5 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 8 commits2025-08-19: 9 commits2025-08-20: 5 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 0 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 3 commits2025-09-04: 0 commits2025-09-05: 5 commits2025-09-06: 2 commits2025-09-07: 0 commits2025-09-08: 1 commit2025-09-09: 5 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 1 commit2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 2 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 2 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 10 commits2025-10-09: 5 commits2025-10-10: 1 commit2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 4 commits2025-10-14: 0 commits2025-10-15: 1 commit2025-10-16: 0 commits2025-10-17: 4 commits2025-10-18: 1 commit2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 1 commit2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 3 commits2025-10-28: 3 commits2025-10-29: 1 commit2025-10-30: 1 commit2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 6 commits2025-11-04: 1 commit2025-11-05: 4 commits2025-11-06: 0 commits2025-11-07: 1 commit2025-11-08: 1 commit2025-11-09: 0 commits2025-11-10: 1 commit2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 1 commit2025-11-16: 2 commits2025-11-17: 5 commits2025-11-18: 2 commits2025-11-19: 4 commits2025-11-20: 2 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 9 commits2025-11-28: 2 commits2025-11-29: 3 commits2025-11-30: 2 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 1 commit2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 1 commit2025-12-09: 3 commits2025-12-10: 2 commits2025-12-11: 2 commits2025-12-12: 8 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 3 commits2025-12-16: 2 commits2025-12-17: 1 commit2025-12-18: 3 commits2025-12-19: 1 commit2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 2 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 2 commits2025-12-28: 0 commits2025-12-29: 2 commits2025-12-30: 0 commits2025-12-31: 1 commit2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 2 commits2026-01-05: 0 commits2026-01-06: 2 commits2026-01-07: 2 commits2026-01-08: 0 commits2026-01-09: 2 commits2026-01-10: 7 commits2026-01-11: 0 commits2026-01-12: 1 commit2026-01-13: 1 commit2026-01-14: 2 commits2026-01-15: 1 commit2026-01-16: 0 commits2026-01-17: 2 commits2026-01-18: 1 commit2026-01-19: 2 commits2026-01-20: 5 commits2026-01-21: 0 commits2026-01-22: 1 commit2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 1 commit2026-02-01: 6 commits2026-02-02: 0 commits2026-02-03: 1 commit2026-02-04: 1 commit2026-02-05: 5 commits2026-02-06: 6 commits2026-02-07: 2 commits2026-02-08: 3 commits2026-02-09: 6 commits2026-02-10: 6 commits2026-02-11: 12 commits2026-02-12: 1 commit2026-02-13: 1 commit2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 4 commits2026-02-17: 5 commits2026-02-18: 0 commits2026-02-19: 7 commits2026-02-20: 3 commits2026-02-21: 0 commits2026-02-22: 1 commit2026-02-23: 0 commits2026-02-24: 5 commits2026-02-25: 1 commit2026-02-26: 0 commits2026-02-27: 1 commit2026-02-28: 1 commit2026-03-01: 7 commits2026-03-02: 1 commit2026-03-03: 0 commits2026-03-04: 1 commit2026-03-05: 1 commit2026-03-06: 5 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 2 commits2026-03-11: 4 commits2026-03-12: 2 commits2026-03-13: 5 commits2026-03-14: 7 commits2026-03-15: 3 commits2026-03-16: 4 commits2026-03-17: 2 commits2026-03-18: 6 commits2026-03-19: 9 commits2026-03-20: 0 commits2026-03-21: 2 commits2026-03-22: 4 commits2026-03-23: 5 commits2026-03-24: 1 commit2026-03-25: 0 commits2026-03-26: 6 commits2026-03-27: 2 commits2026-03-28: 5 commits2026-03-29: 4 commits2026-03-30: 0 commits2026-03-31: 2 commits2026-04-01: 1 commit2026-04-02: 3 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 1 commit2026-04-06: 0 commits2026-04-07: 2 commits2026-04-08: 0 commits2026-04-09: 1 commit2026-04-10: 1 commit2026-04-11: 4 commits2026-04-12: 0 commits2026-04-13: 1 commit2026-04-14: 0 commits2026-04-15: 1 commit2026-04-16: 1 commit2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 1 commit2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 1 commit2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 2 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 1 commit2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 1 commit2026-05-13: 1 commit2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 2 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 1 commit2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 1 commit2026-06-11: 1 commit2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 1 commit2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 3 commits2026-06-24: 1 commit2026-06-25: 1 commit2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 3 commits2026-07-02: 1 commit2026-07-03: 3 commits2026-07-04: 3 commits2026-07-05: 2 commits2026-07-06: 1 commit2026-07-07: 3 commits2026-07-08: 13 commits2026-07-09: 4 commits2026-07-10: 5 commits2026-07-11: 2 commits2026-07-12: 2 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 6 commits2026-07-16: 0 commits2026-07-17: 2 commits2026-07-18: 2 commits2026-07-19: 0 commits2026-07-20: 6 commits2026-07-21: 9 commits2026-07-22: 2 commits2026-07-23: 1 commit2026-07-24: 0 commits2026-07-25: 1 commit2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 3 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits
496 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    28,924 stars

  • Actively maintained

    Pushed within 48 hours

  • Community-driven

    ~137 contributors

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

What Handy does

Handy provides a seamless, keyboard-driven interface for converting speech into text across any desktop application without compromising user privacy. It operates entirely offline, ensuring that voice data never leaves the user's local machine or gets sent to cloud APIs. The technical architecture leverages the Tauri framework (v2) to deliver a lightweight, cross-platform binary that injects transcribed text directly into the active input field. What's distinctive is its uncompromising commitment to simplicity and privacy—it does one job exceptionally well, acting as an open-source, extensible alternative to built-in OS dictation tools or paid SaaS products. It makes high-quality accessibility tooling freely available to everyone.

This application is designed for anyone who wants fast, reliable speech-to-text capabilities without sacrificing privacy or paying subscriptions. It requires no technical knowledge to install and use, making it highly accessible.

  • Completely Offline Execution: runs speech recognition models locally, ensuring sensitive voice data is never transmitted over the internet.
  • Global Shortcut Activation: allows users to trigger transcription instantly from anywhere via a customizable keyboard shortcut.
  • Direct Text Injection: automatically pastes the transcribed text into the currently active text field or application.
  • Cross-Platform Support: provides a consistent experience across Windows, macOS, and Linux thanks to its Tauri-based architecture.
  • Open and Extensible: allows developers to easily fork, modify, and integrate custom speech models or new features.

Where teams use it

Privacy-Preserving Dictation

Professionals handling sensitive information, like lawyers or doctors, use it to dictate notes without violating data privacy regulations.

Repetitive Strain Injury Relief

Developers and writers suffering from RSI rely on the global shortcut to dictate code comments or emails effortlessly.

Accessibility Enhancement

Users with mobility impairments utilize the tool as a reliable, free alternative to expensive commercial dictation software.

Frictionless Note-Taking

Knowledge workers quickly capture fleeting thoughts into their preferred note-taking apps without interrupting their workflow.

Getting started: Download the latest release from the GitHub repository and run the installer for your OS.

README

main branch

Handy

Discord

A free, open source, and extensible speech-to-text application that works completely offline.

Handy is a cross-platform desktop application that provides simple, privacy-focused speech transcription. Press a shortcut, speak, and have your words appear in any text field. This happens on your own computer without sending any information to the cloud.

Why Handy?

Handy was created to fill the gap for a truly open source, extensible speech-to-text tool. As stated on handy.computer:

  • Free: Accessibility tooling belongs in everyone's hands, not behind a paywall
  • Open Source: Together we can build further. Extend Handy for yourself and contribute to something bigger
  • Private: Your voice stays on your computer. Get transcriptions without sending audio to the cloud
  • Simple: One tool, one job. Transcribe what you say and put it into a text box

Handy isn't trying to be the best speech-to-text app—it's trying to be the most forkable one.

How It Works

  1. Press a configurable keyboard shortcut to start/stop recording (or use push-to-talk mode)
  2. Speak your words while the shortcut is active
  3. Release and Handy processes your speech using Whisper
  4. Get your transcribed text pasted directly into whatever app you're using

The process is entirely local:

  • Silence is filtered using VAD (Voice Activity Detection) with Silero
  • Transcription uses your choice of models:
    • Whisper models (Small/Medium/Turbo/Large) with GPU acceleration when available
    • Parakeet V3 - CPU-optimized model with excellent performance and automatic language detection
  • Works on Windows, macOS, and Linux

Quick Start

Installation

  1. Download the latest release from the releases page or the website
    • macOS: Also available via Homebrew cask: brew install --cask handy
    • Windows: Also available via winget: winget install cjpais.Handy
      Note: The Homebrew cask and winget package are not maintained by the Handy developers.
  2. Install the application
  3. Launch Handy and grant necessary system permissions (microphone, accessibility)
  4. Configure your preferred keyboard shortcuts in Settings
  5. Start transcribing!

Development Setup

For detailed build instructions including platform-specific requirements, see BUILD.md.

Integrations

Install handy Raycast Extension

Control Handy from Raycast — start/stop recording, browse transcript history, manage dictionary, switch models and languages.

Source · by @mattiacolombomc

Architecture

Handy is built as a Tauri application combining:

  • Frontend: React + TypeScript with Tailwind CSS for the settings UI
  • Backend: Rust for system integration, audio processing, and ML inference
  • Core Libraries:
    • transcribe-cpp: Local speech recognition with Whisper-family models (GGML/GGUF)
    • transcribe-rs: CPU-optimized speech recognition with Parakeet models
    • cpal: Cross-platform audio I/O
    • vad-rs: Voice Activity Detection
    • rdev: Global keyboard shortcuts and system events
    • rubato: Audio resampling

Debug Mode

Handy includes an advanced debug mode for development and troubleshooting. Access it by pressing:

  • macOS: Cmd+Shift+D
  • Windows/Linux: Ctrl+Shift+D

CLI Parameters

Handy supports command-line flags for controlling a running instance and customizing startup behavior. These work on all platforms (macOS, Windows, Linux).

Remote control flags (sent to an already-running instance via the single-instance plugin):

handy --toggle-transcription    # Toggle recording on/off
handy --toggle-post-process     # Toggle recording with post-processing on/off
handy --cancel                  # Cancel the current operation

Startup flags:

handy --start-hidden            # Start without showing the main window
handy --no-tray                 # Start without the system tray icon
handy --debug                   # Enable debug mode with verbose logging
handy --help                    # Show all available flags

Flags can be combined for autostart scenarios:

handy --start-hidden --no-tray

macOS tip: When Handy is installed as an app bundle, invoke the binary directly:

/Applications/Handy.app/Contents/MacOS/Handy --toggle-transcription

Known Issues & Current Limitations

This project is actively being developed and has some known issues. We believe in transparency about the current state:

Major Issues (Help Wanted)

Whisper Model Crashes:

  • Whisper models crash on certain system configurations (Windows and Linux)
  • Does not affect all systems - issue is configuration-dependent
    • If you experience crashes and are a developer, please help to fix and provide debug logs!

Wayland Support (Linux):

  • Limited support for Wayland display server
  • Requires wtype or dotool for text input to work correctly (see Linux Notes below for installation)

Linux Notes

Text Input Tools:

For reliable text input on Linux, install the appropriate tool for your display server:

Display Server Recommended Tool Install Command
X11 xdotool sudo apt install xdotool
Wayland wtype sudo apt install wtype
Both dotool sudo apt install dotool (requires input group)
  • X11: Install xdotool for both direct typing and clipboard paste shortcuts
  • Wayland: Install wtype (preferred) or dotool for text input to work correctly
  • dotool setup: Requires adding your user to the input group: sudo usermod -aG input $USER (then log out and back in)

Without these tools, Handy falls back to enigo which may have limited compatibility, especially on Wayland.

Other Notes:

  • Runtime library dependency (libgtk-layer-shell.so.0):

    • Handy links gtk-layer-shell on Linux. If startup fails with error while loading shared libraries: libgtk-layer-shell.so.0, install the runtime package for your distro:

      Distro Package to install Example command
      Ubuntu/Debian libgtk-layer-shell0 sudo apt install libgtk-layer-shell0
      Fedora/RHEL gtk-layer-shell sudo dnf install gtk-layer-shell
      Arch Linux gtk-layer-shell sudo pacman -S gtk-layer-shell
    • For building from source on Ubuntu/Debian, you may also need libgtk-layer-shell-dev.

  • The recording overlay is disabled by default on Linux (Overlay Position: None) because certain compositors treat it as the active window. When the overlay is visible it can steal focus, which prevents Handy from pasting back into the application that triggered transcription. If you enable the overlay anyway, be aware that clipboard-based pasting might fail or end up in the wrong window.

  • If you are having trouble with the app, running with the environment variable WEBKIT_DISABLE_DMABUF_RENDERER=1 may help

  • If Handy fails to start reliably on Linux, see Troubleshooting → Linux Startup Crashes or Instability.

  • Global keyboard shortcuts (Wayland): On Wayland, system-level shortcuts must be configured through your desktop environment or window manager. Use the CLI flags as the command for your custom shortcut.

    GNOME:

    1. Open Settings > Keyboard > Keyboard Shortcuts > Custom Shortcuts
    2. Click the + button to add a new shortcut
    3. Set the Name to Toggle Handy Transcription
    4. Set the Command to handy --toggle-transcription
    5. Click Set Shortcut and press your desired key combination (e.g., Super+O)

    KDE Plasma:

    1. Open System Settings > Shortcuts > Custom Shortcuts
    2. Click Edit > New > Global Shortcut > Command/URL
    3. Name it Toggle Handy Transcription
    4. In the Trigger tab, set your desired key combination
    5. In the Action tab, set the command to handy --toggle-transcription

    Sway / i3:

    Add to your config file (~/.config/sway/config or ~/.config/i3/config):

    bindsym $mod+o exec handy --toggle-transcription

    Hyprland:

    Add to your config file (~/.config/hypr/hyprland.conf):

    bind = $mainMod, O, exec, handy --toggle-transcription
  • You can also manage global shortcuts outside of Handy via Unix signals, which lets Wayland window managers or other hotkey daemons keep ownership of keybindings:

    Signal Action Example
    SIGUSR2 Toggle transcription pkill -USR2 -n handy
    SIGUSR1 Toggle transcription with post-processing pkill -USR1 -n handy

    Example Sway config:

    bindsym $mod+o exec pkill -USR2 -n handy
    bindsym $mod+p exec pkill -USR1 -n handy

    pkill here simply delivers the signal—it does not terminate the process.

Overlay & Pasting Issues (Linux):

  • The recording overlay window can interfere with pasting transcribed text into target applications on Linux (X11)
  • Solution: Open Settings > Advanced and set "Overlay Position" to "None" to disable the overlay
  • Enable "Audio Feedback" (also in Advanced) if you still want audible confirmation of recording state
  • Users who upgrade from older versions or import settings from other platforms may need to manually apply this change

Platform Support

  • macOS (both Intel and Apple Silicon)
  • x64 Windows
  • x64 Linux

System Requirements/Recommendations

The following are recommendations for running Handy on your own machine. If you don't meet the system requirements, the performance of the application may be degraded. We are working on improving the performance across all kinds of computers and hardware.

For Whisper Models:

  • macOS: M series Mac, Intel Mac
  • Windows: Intel, AMD, or NVIDIA GPU
  • Linux: Intel, AMD, or NVIDIA GPU
    • Ubuntu 22.04, 24.04

For Parakeet V3 Model:

  • CPU-only operation - runs on a wide variety of hardware
  • Minimum: Intel Skylake (6th gen) or equivalent AMD processors
  • Performance: ~5x real-time speed on mid-range hardware (tested on i5)
  • Automatic language detection - no manual language selection required

Roadmap & Active Development

We're actively working on several features and improvements. Contributions and feedback are welcome!

In Progress

Debug Logging:

  • Adding debug logging to a file to help diagnose issues

macOS Keyboard Improvements:

  • Support for Globe key as transcription trigger
  • A rewrite of global shortcut handling for MacOS, and potentially other OS's too.

Opt-in Analytics:

  • Collect anonymous usage data to help improve Handy
  • Privacy-first approach with clear opt-in

Settings Refactoring:

  • Cleanup and refactor settings system which is becoming bloated and messy
  • Implement better abstractions for settings management

Tauri Commands Cleanup:

  • Abstract and organize Tauri command patterns
  • Investigate tauri-specta for improved type safety and organization

Verify Release Signatures

Handy release artifacts are signed with Tauri's updater signature format. The public key is stored in src-tauri/tauri.conf.json under plugins.updater.pubkey.

To verify a release manually, set ARTIFACT to the filename you downloaded, save the pubkey value from src-tauri/tauri.conf.json to handy.pub.b64, then decode the public key and matching .sig file from base64 and verify the artifact with minisign:

# Replace with the file you downloaded
ARTIFACT="Handy_0.8.1_amd64.AppImage"

python3 - "$ARTIFACT" <<'PY'
import base64, pathlib, sys

artifact = sys.argv[1]

pub = pathlib.Path("handy.pub.b64").read_text().strip()
pathlib.Path("handy.pub").write_bytes(base64.b64decode(pub))

sig = pathlib.Path(f"{artifact}.sig").read_text().strip()
pathlib.Path(f"{artifact}.minisig").write_bytes(base64.b64decode(sig))
PY

minisign -Vm "$ARTIFACT" \
  -p handy.pub \
  -x "$ARTIFACT.minisig"

On success, minisign prints:

Signature and comment signature verified

Do not use gpg for these .sig files.

Troubleshooting

Manual Model Installation (For Proxy Users or Network Restrictions)

If you're behind a proxy, firewall, or in a restricted network environment where Handy cannot download models automatically, you can manually download and install them. The URLs are publicly accessible from any browser.

Step 1: Find Your App Data Directory

  1. Open Handy settings
  2. Navigate to the About section
  3. Copy the "App Data Directory" path shown there, or use the shortcuts:
    • macOS: Cmd+Shift+D to open debug menu
    • Windows/Linux: Ctrl+Shift+D to open debug menu

The typical paths are:

  • macOS: ~/Library/Application Support/com.pais.handy/
  • Windows: C:\Users\{username}\AppData\Roaming\com.pais.handy\
  • Linux: ~/.config/com.pais.handy/

Step 2: Create Models Directory

Inside your app data directory, create a models folder if it doesn't already exist:

# macOS/Linux
mkdir -p ~/Library/Application\ Support/com.pais.handy/models

# Windows (PowerShell)
New-Item -ItemType Directory -Force -Path "$env:APPDATA\com.pais.handy\models"

Step 3: Download Model Files

Download the models you want from below

Whisper Models (single .bin files):

  • Small (487 MB): https://blob.handy.computer/ggml-small.bin
  • Medium (492 MB): https://blob.handy.computer/whisper-medium-q4_1.bin
  • Turbo (1600 MB): https://blob.handy.computer/ggml-large-v3-turbo.bin
  • Large (1100 MB): https://blob.handy.computer/ggml-large-v3-q5_0.bin

Parakeet Models (compressed archives):

  • V2 (473 MB): https://blob.handy.computer/parakeet-v2-int8.tar.gz
  • V3 (478 MB): https://blob.handy.computer/parakeet-v3-int8.tar.gz

Step 4: Install Models

For Whisper Models (.bin files):

Simply place the .bin file directly into the models directory:

{app_data_dir}/models/
├── ggml-small.bin
├── whisper-medium-q4_1.bin
├── ggml-large-v3-turbo.bin
└── ggml-large-v3-q5_0.bin

For Parakeet Models (.tar.gz archives):

  1. Extract the .tar.gz file
  2. Place the extracted directory into the models folder
  3. The directory must be named exactly as follows:
    • Parakeet V2: parakeet-tdt-0.6b-v2-int8
    • Parakeet V3: parakeet-tdt-0.6b-v3-int8

Final structure should look like:

{app_data_dir}/models/
├── parakeet-tdt-0.6b-v2-int8/     (directory with model files inside)
│   ├── (model files)
│   └── (config files)
└── parakeet-tdt-0.6b-v3-int8/     (directory with model files inside)
    ├── (model files)
    └── (config files)

Important Notes:

  • For Parakeet models, the extracted directory name must match exactly as shown above
  • Do not rename the .bin files for Whisper models—use the exact filenames from the download URLs
  • After placing the files, restart Handy to detect the new models

Step 5: Verify Installation

  1. Restart Handy
  2. Open Settings → Models
  3. Your manually installed models should now appear as "Downloaded"
  4. Select the model you want to use and test transcription

Custom Whisper Models

Handy can auto-discover custom Whisper GGML models placed in the models directory. This is useful for users who want to use fine-tuned or community models not included in the default model list.

How to use:

  1. Obtain a Whisper model in GGML .bin format (e.g., from Hugging Face)
  2. Place the .bin file in your models directory (see paths above)
  3. Restart Handy to discover the new model
  4. The model will appear in the "Custom Models" section of the Models settings page

Important:

  • Community models are user-provided and may not receive troubleshooting assistance
  • The model must be a valid Whisper GGML format (.bin file)
  • Model name is derived from the filename (e.g., my-custom-model.bin → "My Custom Model")

Linux Startup Crashes or Instability

If Handy fails to start reliably on Linux — for example, it crashes shortly after launch, never shows its window, or reports a Wayland protocol error — try the steps below in order.

1. Install (or reinstall) gtk-layer-shell

Handy uses gtk-layer-shell for its recording overlay and links against it at runtime. A missing or broken installation is the most common cause of startup failures and can manifest as a crash or a hang well before any window is shown. Make sure the runtime package is installed for your distro:

Distro Package to install Example command
Ubuntu/Debian libgtk-layer-shell0 sudo apt install libgtk-layer-shell0
Fedora/RHEL gtk-layer-shell sudo dnf install gtk-layer-shell
Arch Linux gtk-layer-shell sudo pacman -S gtk-layer-shell

If it is already installed and you still see startup problems, try reinstalling it (e.g. sudo pacman -S gtk-layer-shell again) in case the library files were corrupted by a partial upgrade.

2. Disable the GTK layer shell overlay (HANDY_NO_GTK_LAYER_SHELL)

If installing the library does not help, you can skip gtk-layer-shell initialization entirely as a workaround. On some compositors (notably KDE Plasma under Wayland) it has been reported to interact poorly with the recording overlay. With this variable set, the overlay falls back to a regular always-on-top window:

HANDY_NO_GTK_LAYER_SHELL=1 handy

3. Disable WebKit DMA-BUF renderer (WEBKIT_DISABLE_DMABUF_RENDERER)

On some GPU/driver combinations the WebKitGTK DMA-BUF renderer can cause the window to fail to render or to crash. Try:

WEBKIT_DISABLE_DMABUF_RENDERER=1 handy

Making a workaround permanent

Once you've found a flag that helps, export it from your shell profile (~/.bashrc, ~/.zshenv, …) or from the desktop autostart entry that launches Handy. If you launch Handy from a .desktop file, you can prefix the Exec= line, e.g.:

Exec=env HANDY_NO_GTK_LAYER_SHELL=1 handy

If a workaround helps you, please open an issue describing your distro, desktop environment, and session type — that information helps us narrow down the underlying bug.

How to Contribute

  1. Check existing issues at github.com/cjpais/Handy/issues
  2. Fork the repository and create a feature branch
  3. Test thoroughly on your target platform
  4. Submit a pull request with clear description of changes
  5. Join the discussion - reach out at contact@handy.computer

The goal is to create both a useful tool and a foundation for others to build upon—a well-patterned, simple codebase that serves the community.

Sponsors

We're grateful for the support of our sponsors who help make Handy possible:

Wordcab        Epicenter        Bolt AI

Related Projects

  • Handy CLI - The original Python command-line version
  • handy.computer - Project website with demos and documentation

License

MIT License - see LICENSE file for details.

Handy is open-source software, but the Handy name, logo, icon, and brand assets are not open-source. Unofficial forks, rewrites, and redistributions must use their own branding and must not imply endorsement or affiliation.

Acknowledgments

  • Whisper by OpenAI for the speech recognition model
  • ggml and transcribe.cpp for amazing cross-platform speech-to-text inference/acceleration
  • Silero for great lightweight VAD
  • Tauri team for the excellent Rust-based app framework
  • Community contributors helping make Handy better
View on GitHub

Recent activity

commits and pull requests

Releases and announcements

62 total
  1. v0.9.4v0.9.4Jul 21, 2026165K downloads

    lots of minor bug fixes ## What's Changed * chore(i18n): update and correct Spanish translation by @Jo-Con-El in https://github.com/cjpais/Handy/pull/1697 * feat: add Hindi (hi) translation by @Punit-Dethe in https://github.com/cjpais/Handy/pull/1701 * drop 'direct' paste method from the ui for macOS by @cjpais in https://github.com/cjpais/Handy/pull/1708 * Add missing translations by @MikaKrul in https://github.com/cjpais/Handy/pull/1709 * install app-private libs to /usr/lib/Handy by @cjpais in https://github.com/cjpais/Handy/pull/1727 * fix windows not shutting down cleanly because of handy by @cjpais in https://github.com/cjpais/Handy/pull/1732 * guard vulkan so only available to true x86 host, not emulated by @cjpais in https://github.com/cjpais/Handy/pull/1731 ## New Contributors * @Jo-Con-El made their first contribution in https://github.com/cjpais/Handy/pull/1697 * @Punit-Dethe made their first contribution in https://github.com/cjpais/Handy/pull/1701 **Full Changelog**: https://github.com/cjpais/Handy/compare/v0.9.3...v0.9.4

  2. v0.9.3v0.9.3Jul 15, 2026129.3K downloads

    Bug Fixes ## What's Changed * fix(models): handle Hugging Face linked size headers by @JavaGT in https://github.com/cjpais/Handy/pull/1678 * bump tauri version and Mac dock fixes by @cjpais in https://github.com/cjpais/Handy/pull/1675 * Declutter model cards (only show quantization label on modelcard in debug mode) by @MikaKrul in https://github.com/cjpais/Handy/pull/1685 * fix: prevent history audio players from playing simultaneously by @j1gc in https://github.com/cjpais/Handy/pull/1665 * fix(models): don't reload the already-active model when its card is clicked by @kud in https://github.com/cjpais/Handy/pull/1662 ## New Contributors * @JavaGT made their first contribution in https://github.com/cjpais/Handy/pull/1678 * @j1gc made their first contribution in https://github.com/cjpais/Handy/pull/1665 **Full Changelog**: https://github.com/cjpais/Handy/compare/v0.9.2...v0.9.3

  3. v0.9.2v0.9.2Jul 12, 202673.4K downloads

    Fix mainly for better GPU detection and selection ## What's Changed * Update descriptions for Moonshine models by @MikaKrul in https://github.com/cjpais/Handy/pull/1648 * Add cancel download functionality to Onboarding component by @MikaKrul in https://github.com/cjpais/Handy/pull/1653 * transcribe 0.1.3 by @cjpais in https://github.com/cjpais/Handy/pull/1664 **Full Changelog**: https://github.com/cjpais/Handy/compare/v0.9.1...v0.9.2

  4. v0.9.1v0.9.1Jul 10, 202671.5K downloads

    Many bug fixes! So many people have contributed. So thank you all for making wonderful contributions to the project. ## What's Changed * ship vsredist directly with the app by @cjpais in https://github.com/cjpais/Handy/pull/1577 * faster mic initialization by @cjpais in https://github.com/cjpais/Handy/pull/1582 * fix cyrillic (unicode) path problems by @cjpais in https://github.com/cjpais/Handy/pull/1187 * bump to transcribe-cpp-0.1.1 by @cjpais in https://github.com/cjpais/Handy/pull/1589 * Add Dutch (Nederlands) translation by @MikaKrul in https://github.com/cjpais/Handy/pull/1590 * Update Japanese translations by @niw in https://github.com/cjpais/Handy/pull/1593 * Improve Dutch (nl) translation accuracy and consistency by @MikaKrul in https://github.com/cjpais/Handy/pull/1594 * move to auto timestamps for all models by @cjpais in https://github.com/cjpais/Handy/pull/1602 * fix: gate whisper run extension on model arch, not Feature::InitialPrompt by @btoaldas in https://github.com/cjpais/Handy/pull/1603 * fix: typo in GigaAM v3 description. by @sergey-v9 in https://github.com/cjpais/Handy/pull/1613 * Update Italian translations by @albanobattistella in https://githu

  5. v0.9.0v0.9.0Jul 1, 2026199.7K downloads

    This is a big release! We now have streaming model support! This is due to [transcribe.cpp](https://github.com/handy-computer/transcribe.cpp/) being integrated into the repo. There will be bugs, so please report them and we will do our best to fix them ASAP <img width="800" height="250" alt="overlay" src="https://github.com/user-attachments/assets/669b4ce5-ffb2-491e-9854-df3fa6449279" /> A *ton* of new models are supported now too. ## What's Changed * refactor(nix): remove phases duplicated from cargo-tauri.hook by @xilec in https://github.com/cjpais/Handy/pull/1335 * docs(agents): make GitHub workflow rules actionable for AI assistants by @xilec in https://github.com/cjpais/Handy/pull/1393 * refactor(nix): drop redundant LD_LIBRARY_PATH wrapper prefix by @xilec in https://github.com/cjpais/Handy/pull/1392 * docs: add overlay/pasting issue workaround for Linux to Known Issues by @manato-tajiri in https://github.com/cjpais/Handy/pull/1426 * docs: complete Portuguese translation for portable updates by @andrefrd in https://github.com/cjpais/Handy/pull/1422 * docs: add Intel Mac (x86_64) build instructions by @teremo4ek in https://github.com/cjpais/Handy/pull/1471 * f

Code frequency

additions and deletions
+14.9K-14.9KWeek of 2025-08-03: +1,455 linesWeek of 2025-08-03: -1,010 linesWeek of 2025-08-10: +483 linesWeek of 2025-08-10: -353 linesWeek of 2025-08-17: +589 linesWeek of 2025-08-17: -283 linesWeek of 2025-08-24: +0 linesWeek of 2025-08-24: -0 linesWeek of 2025-08-31: +2,774 linesWeek of 2025-08-31: -599 linesWeek of 2025-09-07: +861 linesWeek of 2025-09-07: -394 linesWeek of 2025-09-14: +284 linesWeek of 2025-09-14: -15 linesWeek of 2025-09-21: +0 linesWeek of 2025-09-21: -0 linesWeek of 2025-09-28: +5 linesWeek of 2025-09-28: -46 linesWeek of 2025-10-05: +628 linesWeek of 2025-10-05: -198 linesWeek of 2025-10-12: +1,440 linesWeek of 2025-10-12: -370 linesWeek of 2025-10-19: +3 linesWeek of 2025-10-19: -3 linesWeek of 2025-10-26: +2,312 linesWeek of 2025-10-26: -2,848 linesWeek of 2025-11-02: +3,103 linesWeek of 2025-11-02: -951 linesWeek of 2025-11-09: +597 linesWeek of 2025-11-09: -393 linesWeek of 2025-11-16: +2,105 linesWeek of 2025-11-16: -526 linesWeek of 2025-11-23: +2,060 linesWeek of 2025-11-23: -797 linesWeek of 2025-11-30: +90 linesWeek of 2025-11-30: -8 linesWeek of 2025-12-07: +5,403 linesWeek of 2025-12-07: -1,184 linesWeek of 2025-12-14: +1,334 linesWeek of 2025-12-14: -130 linesWeek of 2025-12-21: +670 linesWeek of 2025-12-21: -258 linesWeek of 2025-12-28: +288 linesWeek of 2025-12-28: -33 linesWeek of 2026-01-04: +1,798 linesWeek of 2026-01-04: -353 linesWeek of 2026-01-11: +2,143 linesWeek of 2026-01-11: -651 linesWeek of 2026-01-18: +3,348 linesWeek of 2026-01-18: -1,432 linesWeek of 2026-01-25: +79 linesWeek of 2026-01-25: -0 linesWeek of 2026-02-01: +4,738 linesWeek of 2026-02-01: -1,274 linesWeek of 2026-02-08: +2,664 linesWeek of 2026-02-08: -544 linesWeek of 2026-02-15: +1,596 linesWeek of 2026-02-15: -386 linesWeek of 2026-02-22: +162 linesWeek of 2026-02-22: -67 linesWeek of 2026-03-01: +2,789 linesWeek of 2026-03-01: -1,224 linesWeek of 2026-03-08: +3,021 linesWeek of 2026-03-08: -670 linesWeek of 2026-03-15: +3,217 linesWeek of 2026-03-15: -888 linesWeek of 2026-03-22: +3,242 linesWeek of 2026-03-22: -579 linesWeek of 2026-03-29: +225 linesWeek of 2026-03-29: -81 linesWeek of 2026-04-05: +365 linesWeek of 2026-04-05: -231 linesWeek of 2026-04-12: +28 linesWeek of 2026-04-12: -22 linesWeek of 2026-04-19: +469 linesWeek of 2026-04-19: -0 linesWeek of 2026-04-26: +44 linesWeek of 2026-04-26: -44 linesWeek of 2026-05-03: +0 linesWeek of 2026-05-03: -0 linesWeek of 2026-05-10: +9 linesWeek of 2026-05-10: -13 linesWeek of 2026-05-17: +11 linesWeek of 2026-05-17: -3 linesWeek of 2026-05-24: +0 linesWeek of 2026-05-24: -0 linesWeek of 2026-05-31: +15 linesWeek of 2026-05-31: -0 linesWeek of 2026-06-07: +33 linesWeek of 2026-06-07: -16 linesWeek of 2026-06-14: +6 linesWeek of 2026-06-14: -5 linesWeek of 2026-06-21: +1,017 linesWeek of 2026-06-21: -16 linesWeek of 2026-06-28: +14,939 linesWeek of 2026-06-28: -3,647 linesWeek of 2026-07-05: +2,702 linesWeek of 2026-07-05: -449 linesWeek of 2026-07-12: +1,314 linesWeek of 2026-07-12: -373 linesWeek of 2026-07-19: +2,055 linesWeek of 2026-07-19: -434 linesWeek of 2026-07-26: +2,514 linesWeek of 2026-07-26: -2,180 linesAug 3, 2025Jul 26, 2026
+81K lines added, -26K removed over the last year.

Commits per week

last 52 weeks
300Week of 2025-08-03: 16 commitsWeek of 2025-08-10: 14 commitsWeek of 2025-08-17: 22 commitsWeek of 2025-08-24: 0 commitsWeek of 2025-08-31: 10 commitsWeek of 2025-09-07: 6 commitsWeek of 2025-09-14: 3 commitsWeek of 2025-09-21: 0 commitsWeek of 2025-09-28: 2 commitsWeek of 2025-10-05: 16 commitsWeek of 2025-10-12: 10 commitsWeek of 2025-10-19: 1 commitsWeek of 2025-10-26: 8 commitsWeek of 2025-11-02: 13 commitsWeek of 2025-11-09: 2 commitsWeek of 2025-11-16: 15 commitsWeek of 2025-11-23: 14 commitsWeek of 2025-11-30: 3 commitsWeek of 2025-12-07: 16 commitsWeek of 2025-12-14: 10 commitsWeek of 2025-12-21: 4 commitsWeek of 2025-12-28: 3 commitsWeek of 2026-01-04: 15 commitsWeek of 2026-01-11: 7 commitsWeek of 2026-01-18: 9 commitsWeek of 2026-01-25: 1 commitsWeek of 2026-02-01: 21 commitsWeek of 2026-02-08: 29 commitsWeek of 2026-02-15: 19 commitsWeek of 2026-02-22: 9 commitsWeek of 2026-03-01: 15 commitsWeek of 2026-03-08: 20 commitsWeek of 2026-03-15: 26 commitsWeek of 2026-03-22: 23 commitsWeek of 2026-03-29: 10 commitsWeek of 2026-04-05: 9 commitsWeek of 2026-04-12: 3 commitsWeek of 2026-04-19: 2 commitsWeek of 2026-04-26: 3 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 2 commitsWeek of 2026-05-17: 2 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 1 commitsWeek of 2026-06-07: 2 commitsWeek of 2026-06-14: 1 commitsWeek of 2026-06-21: 5 commitsWeek of 2026-06-28: 10 commitsWeek of 2026-07-05: 30 commitsWeek of 2026-07-12: 12 commitsWeek of 2026-07-19: 19 commitsWeek of 2026-07-26: 3 commitsAug 3, 2025Jul 26, 2026
496 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 0 commitsSun 1:00 — 1 commitsSun 2:00 — 2 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 1 commitsSun 6:00 — 0 commitsSun 7:00 — 2 commitsSun 8:00 — 2 commitsSun 9:00 — 1 commitsSun 10:00 — 0 commitsSun 11:00 — 4 commitsSun 12:00 — 3 commitsSun 13:00 — 4 commitsSun 14:00 — 2 commitsSun 15:00 — 1 commitsSun 16:00 — 4 commitsSun 17:00 — 0 commitsSun 18:00 — 2 commitsSun 19:00 — 3 commitsSun 20:00 — 8 commitsSun 21:00 — 2 commitsSun 22:00 — 3 commitsSun 23:00 — 2 commitsMon 0:00 — 0 commitsMon 1:00 — 1 commitsMon 2:00 — 0 commitsMon 3:00 — 2 commitsMon 4:00 — 2 commitsMon 5:00 — 2 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 14 commitsMon 9:00 — 14 commitsMon 10:00 — 8 commitsMon 11:00 — 7 commitsMon 12:00 — 15 commitsMon 13:00 — 3 commitsMon 14:00 — 11 commitsMon 15:00 — 19 commitsMon 16:00 — 6 commitsMon 17:00 — 4 commitsMon 18:00 — 4 commitsMon 19:00 — 2 commitsMon 20:00 — 5 commitsMon 21:00 — 1 commitsMon 22:00 — 2 commitsMon 23:00 — 0 commitsTue 0:00 — 3 commitsTue 1:00 — 1 commitsTue 2:00 — 1 commitsTue 3:00 — 2 commitsTue 4:00 — 1 commitsTue 5:00 — 0 commitsTue 6:00 — 4 commitsTue 7:00 — 2 commitsTue 8:00 — 4 commitsTue 9:00 — 2 commitsTue 10:00 — 3 commitsTue 11:00 — 7 commitsTue 12:00 — 12 commitsTue 13:00 — 8 commitsTue 14:00 — 6 commitsTue 15:00 — 7 commitsTue 16:00 — 5 commitsTue 17:00 — 6 commitsTue 18:00 — 8 commitsTue 19:00 — 6 commitsTue 20:00 — 2 commitsTue 21:00 — 5 commitsTue 22:00 — 1 commitsTue 23:00 — 2 commitsWed 0:00 — 3 commitsWed 1:00 — 1 commitsWed 2:00 — 4 commitsWed 3:00 — 2 commitsWed 4:00 — 2 commitsWed 5:00 — 1 commitsWed 6:00 — 0 commitsWed 7:00 — 4 commitsWed 8:00 — 3 commitsWed 9:00 — 3 commitsWed 10:00 — 2 commitsWed 11:00 — 8 commitsWed 12:00 — 7 commitsWed 13:00 — 9 commitsWed 14:00 — 7 commitsWed 15:00 — 2 commitsWed 16:00 — 8 commitsWed 17:00 — 15 commitsWed 18:00 — 13 commitsWed 19:00 — 9 commitsWed 20:00 — 9 commitsWed 21:00 — 8 commitsWed 22:00 — 2 commitsWed 23:00 — 1 commitsThu 0:00 — 3 commitsThu 1:00 — 1 commitsThu 2:00 — 6 commitsThu 3:00 — 4 commitsThu 4:00 — 2 commitsThu 5:00 — 0 commitsThu 6:00 — 1 commitsThu 7:00 — 3 commitsThu 8:00 — 7 commitsThu 9:00 — 5 commitsThu 10:00 — 6 commitsThu 11:00 — 7 commitsThu 12:00 — 4 commitsThu 13:00 — 8 commitsThu 14:00 — 7 commitsThu 15:00 — 8 commitsThu 16:00 — 4 commitsThu 17:00 — 13 commitsThu 18:00 — 6 commitsThu 19:00 — 4 commitsThu 20:00 — 6 commitsThu 21:00 — 7 commitsThu 22:00 — 0 commitsThu 23:00 — 0 commitsFri 0:00 — 3 commitsFri 1:00 — 6 commitsFri 2:00 — 1 commitsFri 3:00 — 0 commitsFri 4:00 — 3 commitsFri 5:00 — 1 commitsFri 6:00 — 1 commitsFri 7:00 — 2 commitsFri 8:00 — 0 commitsFri 9:00 — 1 commitsFri 10:00 — 4 commitsFri 11:00 — 8 commitsFri 12:00 — 15 commitsFri 13:00 — 3 commitsFri 14:00 — 7 commitsFri 15:00 — 4 commitsFri 16:00 — 12 commitsFri 17:00 — 12 commitsFri 18:00 — 9 commitsFri 19:00 — 5 commitsFri 20:00 — 9 commitsFri 21:00 — 8 commitsFri 22:00 — 4 commitsFri 23:00 — 1 commitsSat 0:00 — 2 commitsSat 1:00 — 7 commitsSat 2:00 — 2 commitsSat 3:00 — 2 commitsSat 4:00 — 1 commitsSat 5:00 — 1 commitsSat 6:00 — 2 commitsSat 7:00 — 4 commitsSat 8:00 — 7 commitsSat 9:00 — 5 commitsSat 10:00 — 6 commitsSat 11:00 — 7 commitsSat 12:00 — 6 commitsSat 13:00 — 1 commitsSat 14:00 — 2 commitsSat 15:00 — 1 commitsSat 16:00 — 3 commitsSat 17:00 — 1 commitsSat 18:00 — 4 commitsSat 19:00 — 8 commitsSat 20:00 — 2 commitsSat 21:00 — 2 commitsSat 22:00 — 2 commitsSat 23:00 — 1 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits322 (57%)
Community commits240 (43%)

562 commits in total over the last year.

DateListRankStars gained
Jan 15, 2026daily#14+186
  • ultraworkers/claw-code

    An agent-managed museum exhibit, built in Rust with Gajae-Code / LazyCodex — developed and maintained with no human intervention.

    195K stars · Rust

  • ultraworkers/claw-code

    An agent-managed museum exhibit, built in Rust with Gajae-Code / LazyCodex — developed and maintained with no human intervention.

    194.9K stars · Rust

  • ultraworkers/claw-code

    An agent-managed museum exhibit, built in Rust with Gajae-Code / LazyCodex — developed and maintained with no human intervention.

    194.9K stars · Rust

  • farion1231/cc-switch

    A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

    125.4K stars · Rust

  • denoland/deno

    A modern runtime for JavaScript and TypeScript.

    108.2K stars · Rust

  • openai/codex

    Lightweight coding agent that runs in your terminal

    104.6K stars · Rust