Model or dataset
xifan2333/fcitx5-vinput avatar
xifan2333/fcitx5-vinput

fcitx5-vinput: Voice Input for Fcitx5 with Local and Cloud ASR

Voice input for Fcitx5 — local and cloud ASR, LLM rewriting, cross-distro packages

429 stars45 forksC++GPL-3.0

At a glance

What is it?
A C++ Fcitx5 addon that turns a key press into dictated text, using either offline sherpa-onnx models or cloud providers, with optional LLM rewriting. It ships for Arch, Fedora, Ubuntu, Nix and Flatpak, and the split between full and lite packages is the decision that matters most.
Who is it for?
Adopt fcitx5-vinput if you already run Fcitx5 on Linux and want dictation that can stay entirely on the machine through sherpa-onnx models, or that can fall back to cloud providers when accuracy matters more than privacy. Skip it if you use IBus, or if you want a system that works without downloading a model or configuring a provider at all.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 3 days ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The gap fcitx5-vinput fills on a Linux desktop

Linux input methods are built for keyboards. Fcitx5 handles candidate selection, key remapping and per-application state well, but it has no notion of speech as an input source. If you want to dictate into a text field, the usual workaround is to run a separate transcription tool, copy the result, and paste it. That breaks the flow the input method exists to preserve, and it does not work at all in applications where pasting is awkward or blocked.

fcitx5-vinput is an addon that inserts itself into that pipeline. The README describes it as voice input for Fcitx5 with local and cloud ASR, LLM rewriting and cross-distro packages. The audience is narrow and specific: Linux users who already run Fcitx5, are willing to install a systemd user service, and either have a GPU or CPU capable of running an ONNX speech model locally or an API key for a cloud provider. It is not a general-purpose dictation app and it does not try to replace one.

Trigger keys, the daemon, and where the audio goes

The architecture splits into three pieces visible in the repository layout and README. A systemd user unit, vinput-daemon.service, runs the recognition work outside the Fcitx5 process. The Fcitx5 addon captures the trigger key and hands audio to the daemon. A separate CLI, vinput, and a GUI, vinput-gui, configure models, providers and scenes.

The default bindings are documented in a table. Alt_R taps to start and stop recording, or holds for push-to-talk. Control_R is the command key: select text, hold it, speak an instruction, and the instruction is applied to the selection. Shift_R opens a unified command palette with subcommands /model, /asr, /scene and /proc. All of these can be remapped in Fcitx5 configuration, which matters because Alt_R and Control_R are heavily used by window managers and terminal emulators.

ASR is switchable at runtime from that palette with /asr. The README lists offline sherpa-onnx models and cloud providers including Doubao, Aliyun Bailian, ElevenLabs and OpenAI-compatible endpoints. LLM post-processing is organized as scenes and covers error correction, formatting and translation. The command mode is the most interesting design choice here: instead of treating speech purely as text entry, it treats a spoken instruction as an operation on existing text, which is closer to how editors handle refactoring than to how dictation tools usually behave.

Installing fcitx5-vinput on Arch, Fedora or Ubuntu

Packaging is the project's strongest practical feature. Arch users on the archlinuxcn repository install the repo-built package directly:

bash
sudo pacman -S fcitx5-vinput

AUR users have two binary options, and the distinction runs through every packaging channel. The full package carries the local sherpa-onnx runtime; the lite package is cloud-only with no ONNX runtime at all.

bash
yay -S fcitx5-vinput-bin
yay -S fcitx5-vinput-lite-bin

Fedora uses COPR, and the same full/lite split applies:

bash
sudo dnf copr enable xifan/fcitx5-vinput-bin
sudo dnf install fcitx5-vinput
sudo dnf install fcitx5-vinput-lite

Ubuntu 24.04 has a PPA, and the README also documents manual .deb installation from GitHub Releases for other Debian derivatives. Nix users get a flake with both packages cached on Cachix, and Flatpak is available through a remote the project hosts. The Flatpak path needs extra permissions before it will work, and the README is explicit about them:

bash
flatpak override --user --filesystem=xdg-run/pipewire-0 org.fcitx.Fcitx5
flatpak override --user --filesystem=xdg-config/systemd:create org.fcitx.Fcitx5
flatpak override --user --filesystem=xdg-cache org.fcitx.Fcitx5
flatpak kill org.fcitx.Fcitx5

Those overrides exist because the addon needs PipeWire for audio capture, systemd configuration to register the daemon, and a cache directory for models. After any installation path, the quick start is two commands and one GUI step. The README gives them as:

bash
systemctl --user enable --now vinput-daemon.service
fcitx5 -r

Then open Vinput GUI, go to Resources, then Models, and download and activate a model. Only after that does Alt_R do anything. Building from source is also documented, with cmake, fcitx5, pipewire, libcurl, nlohmann-json, CLI11 and Qt6 as dependencies, and a VINPUT_ENABLE_LOCAL_ASR=OFF preset flag that produces the lite variant.

Where fcitx5-vinput stops being the right tool

The lite and full split is not just a packaging convenience. Choosing lite means every utterance leaves the machine and goes to whichever provider you configured. The README does not describe a local fallback chain, so a network outage or an expired API key is a hard stop for recognition rather than a degradation. If you want dictation that works on a plane, you need the full package and a downloaded model, and you need to have activated that model before you lose connectivity.

There is a second constraint in the model step. The README's quick start requires downloading and activating a model through the GUI before the trigger key produces text. That is a deliberate choice, since bundling speech models would inflate every package, but it means the install is not finished when the package manager returns. A user who installs, restarts Fcitx5, and presses Alt_R will get nothing and may reasonably conclude the addon is broken.

The addon is also Fcitx5-specific by construction. It is an Fcitx5 addon, packaged as org.fcitx.Fcitx5.Addon.Vinput in the Flatpak refs. Users on IBus or on desktop environments that do not run Fcitx5 are outside its scope entirely. And the command mode's hold Control_R interaction will collide with applications that use Control_R for their own purposes, which is a configuration problem rather than a bug, but it is one the user has to solve.

How this differs from a standalone transcription tool

The obvious alternative is running a general speech-to-text utility, such as a Whisper-based command-line tool, and pasting the result into the target application. The difference is architectural, not a matter of quality. A standalone transcriber has no idea which window is focused, cannot apply an instruction to a selection, and cannot insert text through the input method. It produces a string, and the user moves that string.

fcitx5-vinput lives inside the input method, so the text arrives at the cursor the way typed text does. The command mode makes the contrast sharper: selecting text and holding Control_R to speak an edit instruction is something a clipboard-based workflow cannot express without scripting. The cost of that integration is the dependency on Fcitx5 and on a running daemon. A standalone tool works in any application, including ones that do not use Fcitx5 at all, and works on any desktop. If your environment is mixed or you switch between X11 and Wayland sessions with different input method setups, the standalone route is more portable.

The choice between local and cloud ASR is a separate axis. sherpa-onnx models keep audio on the machine and cost nothing per request, while the cloud providers listed in the README trade that for whatever accuracy and latency their services offer. The /asr palette command exists precisely so this is a runtime decision rather than an install-time one.

Licence, packaging and what upgrading costs

fcitx5-vinput is GPL-3.0. If you redistribute it or ship a modified version, the usual copyleft obligations apply, and the repository includes a THIRD_PARTY_NOTICES.md file that is the place to look for bundled components. This is a description of the licence identifier, not legal advice; anyone embedding the addon in a product should read the licence text and the notices file rather than rely on a summary.

The maintenance signal is strong by the numbers available: the last push was on 2026-09-15, two days before this writing, and the release list shows v2.3.23, v2.3.24 and v2.3.25 all tagged on 2026-09-06. Three releases in one day suggests either rapid bug fixing or a release automation pipeline; the repository has a cliff.toml and a release workflow, which points toward the latter. Either way, the project is not archived and the commit history is current.

Upgrade cost depends on which package you chose. Repo, COPR, PPA, Nix and Flatpak installations are managed by their respective package managers, so upgrading is a normal package operation. The manual .deb, .rpm, .pkg.tar.zst and tar.gz downloads from GitHub Releases are not, and users on those paths have to re-download and reinstall by hand. The lite packages avoid the largest recurring cost, since they never pull ONNX runtime or model files through an upgrade.

Editorial conclusion

Adopt fcitx5-vinput if you already run Fcitx5 on Linux and want dictation that can stay entirely on the machine through sherpa-onnx models, or that can fall back to cloud providers when accuracy matters more than privacy. Skip it if you use IBus, or if you want a system that works without downloading a model or configuring a provider at all. Before committing, verify three things: that your distribution is covered by the packaging list, that the model you intend to use is available to download and activate in the GUI, and whether you need the full package with the sherpa-onnx runtime or the lite package that depends on cloud ASR. The daemon service and the Fcitx5 restart are the two steps people miss first.

Frequently asked questions

Does fcitx5-vinput work without an internet connection?

Only with the full package and a downloaded local model. The README lists offline sherpa-onnx models alongside cloud providers, and the lite package is described as cloud-only with zero local ONNX runtime, so it cannot recognize speech offline.

Which key starts recording in fcitx5-vinput by default?

Alt_R. Tapping it toggles recording on and off, and holding it acts as push-to-talk. The README notes that all keys can be customized in Fcitx5 configuration.

What is the difference between fcitx5-vinput and fcitx5-vinput-lite?

The full package includes the local sherpa-onnx ASR runtime, while the lite package is cloud-only and has no local ONNX runtime. The same split appears across the Arch, Fedora, Ubuntu, Nix and Flatpak packages.

Official sources

  1. License: GPL-3.0
  2. Project website
  3. README
  4. Releases
  5. xifan2333/fcitx5-vinput on GitHub
Community notes

Community notes