{"id":49540187,"url":"https://github.com/y0sif/whisrs","last_synced_at":"2026-05-02T15:01:22.768Z","repository":{"id":345309914,"uuid":"1182037077","full_name":"y0sif/whisrs","owner":"y0sif","description":"Linux-first voice-to-text dictation tool for Wayland, X11, Hyprland \u0026 Sway, written in Rust","archived":false,"fork":false,"pushed_at":"2026-04-27T19:07:22.000Z","size":325,"stargazers_count":17,"open_issues_count":3,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-27T20:28:34.519Z","etag":null,"topics":["cli","dictation","linux","rust","speech-to-text","transcription","voice-to-text","whisper"],"latest_commit_sha":null,"homepage":"https://y0sif.github.io/whisrs/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/y0sif.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-15T00:30:29.000Z","updated_at":"2026-04-27T19:07:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/y0sif/whisrs","commit_stats":null,"previous_names":["y0sif/whisrs"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/y0sif/whisrs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y0sif%2Fwhisrs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y0sif%2Fwhisrs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y0sif%2Fwhisrs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y0sif%2Fwhisrs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/y0sif","download_url":"https://codeload.github.com/y0sif/whisrs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y0sif%2Fwhisrs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32538268,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T12:25:33.646Z","status":"ssl_error","status_checked_at":"2026-05-02T12:24:51.733Z","response_time":132,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","dictation","linux","rust","speech-to-text","transcription","voice-to-text","whisper"],"created_at":"2026-05-02T15:01:00.220Z","updated_at":"2026-05-02T15:01:22.756Z","avatar_url":"https://github.com/y0sif.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"```\n            _     _\n __      __| |__ (_)___  _ __ ___\n \\ \\ /\\ / /| '_ \\| / __|| '__/ __|\n  \\ V  V / | | | | \\__ \\| |  \\__ \\\n   \\_/\\_/  |_| |_|_|___/|_|  |___/\n\n  speak. type. done.\n```\n\n# whisrs\n\n[![Crates.io](https://img.shields.io/crates/v/whisrs)](https://crates.io/crates/whisrs)\n[![docs.rs](https://img.shields.io/docsrs/whisrs)](https://docs.rs/whisrs)\n\n**whisrs is a Linux voice-to-text dictation tool written in Rust that transcribes speech via 6 backends — Groq, Deepgram REST, Deepgram Streaming, OpenAI REST, OpenAI Realtime, and local whisper.cpp — and types it into the focused window. It is the open-source Wispr Flow alternative for Linux.**\n\nPress a hotkey, speak, and your words appear at the cursor in any focused app on Wayland, X11, Hyprland, Sway, GNOME, or KDE. Audio is captured via cpal across PipeWire, PulseAudio, and ALSA. Fully offline local transcription runs in under 500 MB of RAM with `base.en`. Fast, private, open source.\n\n---\n\n## How does whisrs differ from Wispr Flow and Superwhisper?\n\nWispr Flow and Superwhisper are closed-source dictation apps that don't run on Linux. whisrs is open source (MIT), Linux-native, and ships as a single async Rust process with native keyboard layout support (uinput + XKB), window tracking across Hyprland, Sway, X11, GNOME, and KDE, and 6 swappable transcription backends — both cloud (Groq, Deepgram, OpenAI) and fully offline (whisper.cpp). [xhisper](https://github.com/imaginalnika/xhisper) proved the concept on Linux; whisrs rebuilds it from scratch in Rust with broader compositor support and a daemon/CLI architecture you can bind to any hotkey.\n\n---\n\n## Installation\n\n### Quick install (any distro)\n\n```bash\ncurl -sSL https://y0sif.github.io/whisrs/install.sh | bash\n```\n\nOr clone and run locally:\n\n```bash\ngit clone https://github.com/y0sif/whisrs \u0026\u0026 cd whisrs \u0026\u0026 ./install.sh\n```\n\nThe install script handles everything: detects your distro, installs system dependencies, builds the project, and runs interactive setup.\n\nAfter install, **press your hotkey** to start recording, **press again** to stop. Text appears at your cursor.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eOther install methods (pre-built binary, AUR, Cargo, Nix, manual)\u003c/b\u003e\u003c/summary\u003e\n\n### Pre-built binary (Linux x86_64)\n\nEach tagged release publishes a tarball on [GitHub Releases](https://github.com/y0sif/whisrs/releases/latest) with both `whisrs` and `whisrsd` plus the contrib files (udev rule, systemd unit, man pages).\n\n```bash\n# Full build (cloud + local whisper.cpp)\ncurl -sSL -o whisrs.tar.gz https://github.com/y0sif/whisrs/releases/latest/download/whisrs-linux-x86_64.tar.gz\n\n# Or the minimal build (cloud backends only — smaller, no whisper.cpp)\ncurl -sSL -o whisrs.tar.gz https://github.com/y0sif/whisrs/releases/latest/download/whisrs-linux-x86_64-minimal.tar.gz\n\ntar xzf whisrs.tar.gz\nsudo install -m755 whisrs whisrsd /usr/local/bin/\nsudo install -m644 contrib/99-whisrs.rules /etc/udev/rules.d/\nsudo udevadm control --reload-rules \u0026\u0026 sudo udevadm trigger\nsudo usermod -aG input $USER   # log out / back in for the group change\nwhisrs setup\n```\n\n| Variant | Includes local whisper.cpp | Tarball |\n|---|---|---|\n| `whisrs-linux-x86_64.tar.gz` | yes | full build |\n| `whisrs-linux-x86_64-minimal.tar.gz` | no (cloud backends only) | minimal build |\n\n### Arch Linux (AUR)\n\n```bash\nyay -S whisrs-git\n```\n\nAfter install, run `whisrs setup` to configure your backend, API keys, permissions, and keybindings.\n\n### Cargo\n\n```bash\ncargo install whisrs\n```\n\nRequires system dependencies: `alsa-lib`, `libxkbcommon`, `clang`, `cmake`.\n\nAfter install, run `whisrs setup`.\n\n### Nix\n\n```bash\nnix profile install github:y0sif/whisrs\n```\n\nOr add to your flake inputs:\n```nix\ninputs.whisrs.url = \"github:y0sif/whisrs\";\n```\n\n### Manual install\n\n#### 1. Dependencies\n\n```bash\n# Arch Linux\nsudo pacman -S base-devel alsa-lib libxkbcommon clang cmake\n\n# Debian/Ubuntu\nsudo apt install build-essential libasound2-dev libxkbcommon-dev libclang-dev cmake\n\n# Fedora\nsudo dnf install gcc-c++ alsa-lib-devel libxkbcommon-devel clang-devel cmake\n```\n\n#### 2. Build\n\n```bash\ngit clone https://github.com/y0sif/whisrs\ncd whisrs\ncargo install --path .\n```\n\n#### 3. Setup\n\n```bash\nwhisrs setup\n```\n\nThe interactive setup will walk you through backend selection, API keys / model download, microphone test, uinput permissions, systemd service, and keybindings.\n\n#### 4. Bind a hotkey\n\nExample for Hyprland (`~/.config/hypr/hyprland.conf`):\n```\nbind = $mainMod, W, exec, whisrs toggle\n```\n\nExample for Sway (`~/.config/sway/config`):\n```\nbindsym $mod+w exec whisrs toggle\n```\n\n\u003c/details\u003e\n\n---\n\n## What transcription backends does whisrs support?\n\n| Backend | Type | Streaming | Cost | Best for |\n|---|---|---|---|---|\n| **Groq** | Cloud | Batch | Free tier available | Getting started, budget use |\n| **Deepgram Streaming** | Cloud (WebSocket) | True streaming | $200 free credit | Streaming with free credits |\n| **Deepgram REST** | Cloud | Batch | $200 free credit | Simple, 60+ languages |\n| **OpenAI Realtime** | Cloud (WebSocket) | True streaming | Paid | Best UX, text as you speak |\n| **OpenAI REST** | Cloud | Batch | Paid | Simple fallback |\n| **Local whisper.cpp** | Local (CPU/GPU) | Sliding window | Free | Privacy, offline use |\n\nGroq is the default. For fully offline use, run `whisrs setup` and select **Local \u003e whisper.cpp** — `base.en` (142 MB, ~388 MB RAM) is recommended; `tiny.en` (75 MB) for low-end hardware, `small.en` (466 MB) for higher accuracy.\n\n---\n\n## Configuration\n\nConfig file: `~/.config/whisrs/config.toml` — `whisrs setup` writes a working file. A minimal example:\n\n```toml\n[general]\nbackend = \"groq\"   # groq | deepgram-streaming | deepgram | openai-realtime | openai | local-whisper\nlanguage = \"en\"    # ISO 639-1 or \"auto\"\noverlay = false    # bottom-screen recording overlay\n\n[groq]\napi_key = \"gsk_...\"\n```\n\nEnv-var overrides: `WHISRS_GROQ_API_KEY`, `WHISRS_DEEPGRAM_API_KEY`, `WHISRS_OPENAI_API_KEY`.\n\nFor the full reference (overlay, `[input]`, `[llm]`, `[hotkeys]`, GNOME extension setup), see [docs/configuration.md](docs/configuration.md).\n\n---\n\n## CLI Commands\n\n```\nwhisrs setup     # Interactive onboarding\nwhisrs toggle    # Start/stop recording\nwhisrs cancel    # Cancel recording, discard audio\nwhisrs status    # Query daemon state\nwhisrs command   # Command mode: select text + speak instruction → LLM rewrite\nwhisrs log       # Show recent transcription history\nwhisrs log -n 5  # Show last 5 entries\nwhisrs log --clear  # Clear all history\n```\n\n---\n\n\u003ca id=\"supported-environments\"\u003e\u003c/a\u003e\n\n## Does whisrs work on Wayland, GNOME, KDE, Hyprland, and Sway?\n\nYes. whisrs runs natively on both Wayland and X11 across Hyprland, Sway, i3, GNOME Wayland, KDE Wayland, and any X11 window manager — with daily-driver coverage on Hyprland and community-confirmed reports on GNOME Wayland and Xorg. Audio capture works on PipeWire, PulseAudio, and ALSA via cpal.\n\n| Component | Support |\n|---|---|\n| **Hyprland** | Tested by maintainer and community (Arch Linux) |\n| **Sway / i3** | Implemented; additional reports welcome |\n| **X11 (any WM)** | Tested by community on Ubuntu 24.04 (Xorg) |\n| **GNOME Wayland** | Tested by community on Ubuntu 24.04 and Arch (mutter); overlay via the bundled [GNOME Shell extension](contrib/gnome-shell-extension/README.md) |\n| **KDE Wayland** | Implemented via D-Bus; reports welcome |\n| **Audio** | PipeWire, PulseAudio, ALSA (auto-detected via cpal) |\n| **Distros** | Confirmed on Arch Linux and Ubuntu 24.04; any Linux with the system dependencies above |\n\n\u003e **Note:** whisrs is daily-driven on Hyprland (Arch Linux), with community confirmation on GNOME Wayland (Ubuntu 24.04 + Arch) and Xorg (Ubuntu 24.04). Sway, i3, and KDE reports are still wanted — if you use whisrs there, please open an issue with what works and what doesn't.\n\n---\n\n## Project Status\n\nwhisrs is functional and usable for daily dictation. Streaming transcription, command mode, multi-language support, system tray, OSD overlay, layout-aware injection (incl. AltGr + dead keys), and packaging for AUR / Nix / crates.io all ship today. Local Vosk and Parakeet backends are next.\n\nPer-release details: [docs/version-roadmap.md](docs/version-roadmap.md).\n\n---\n\n## Troubleshooting\n\nSee [docs/troubleshooting.md](docs/troubleshooting.md).\n\n---\n\n## Contributing\n\nThe biggest way to help right now:\n\n1. **Test on your compositor** — Sway, i3, KDE, GNOME. Report what works and what doesn't.\n2. **Test on your distro** — Ubuntu, Fedora, NixOS, etc. Build issues, missing deps, etc.\n3. **Bug reports** — if text goes to the wrong window, characters get dropped, or audio doesn't capture, open an issue.\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and project structure.\n\n---\n\n## How whisrs Compares to Wispr Flow and Other Dictation Tools\n\nwhisrs is the open source alternative to closed-source dictation apps like **Wispr Flow** and **Superwhisper**, neither of which ships a Linux client. The closest open-source equivalents include [nerd-dictation](https://github.com/ideasman42/nerd-dictation), [Speech Note](https://github.com/mkiol/dsnote), and the cross-platform [Handy](https://github.com/cjpais/Handy). Head-to-head against the Linux-native options:\n\n| Feature | whisrs | [nerd-dictation](https://github.com/ideasman42/nerd-dictation) | [Speech Note](https://github.com/mkiol/dsnote) | [Wispr Flow](https://wisprflow.ai/) |\n|---|---|---|---|---|\n| **Platform** | Linux | Linux | Linux | macOS, Windows (no Linux) |\n| **Wayland support** | Yes (native) | Partial (xdotool) | Yes (GUI app) | N/A |\n| **Offline transcription** | Yes (whisper.cpp) | Yes (Vosk) | Yes (multiple) | No |\n| **Cloud transcription** | Groq, Deepgram (REST + streaming), OpenAI, OpenAI Realtime | No | No | Proprietary |\n| **True streaming** | Yes (OpenAI Realtime) | No | No | Yes |\n| **Keyboard injection** | uinput + XKB (layout-aware) | xdotool | Clipboard paste | Native |\n| **Window tracking** | Hyprland, Sway, X11, GNOME, KDE | No | No | Native |\n| **Architecture** | Daemon + CLI (bind to any hotkey) | Script | GUI app | GUI app |\n| **Language** | Rust | Python | C++/Qt | Closed source |\n| **Setup** | Interactive (`whisrs setup`) | Manual config | GUI | Installer |\n\nFor the full comparison, see [docs/comparison.md](docs/comparison.md).\n\n## [FAQ](docs/faq.md)\n\n---\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fy0sif%2Fwhisrs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fy0sif%2Fwhisrs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fy0sif%2Fwhisrs/lists"}