HoldToType

about

Who makes it, and what it is made of

Nothing here is a black box. This is the complete list of what ships in the archive, what each piece does, when it runs, and under which licence — including every model the catalogue offers.

Who makes it

I do: Vitalii Yemets, one developer. There is no company, no team and no investors: one person writes it, answers the issues and ships the releases, all in the open on GitHub.

I wrote HoldToType for my own Windows computer: I wanted to dictate without a subscription and without my voice going anywhere. Then my colleagues started using it, and now it is available to everyone. It is free and it will stay free.

If something is wrong, write to me: an issue on GitHub or holdtotype@outlook.com.

The engines

Each is a separate executable next to the app. The program starts one when it is needed, talks to it over a loopback port, and stops it after ten idle minutes.

partwhat it does herewhen it runslicence
whisper.cpp

whisper-server.exe — runs the Whisper family of models and their translate-to-English mode.

While a Whisper model serves the language you are dictating in.

MIT

sherpa-onnx

sherpa-server.exe and sherpa-online-server.exe — everything that is not Whisper, in one pass or streaming as you speak.

While a sherpa model serves the language, or a streaming model is chosen.

Apache 2.0

llama.cpp

llama-server.exe — the editor model that runs your prompts after recognition.

Only while post-processing is switched on.

MIT

ggml

The tensor maths inside whisper.cpp and llama.cpp. Not a separate file; compiled into both.

With the engine that uses it.

MIT

ONNX Runtime

Runs the models inside sherpa-onnx. Compiled into the sherpa executables.

With sherpa.

MIT

The libraries

The app is written in Go. These are the only outside libraries it uses.

partwhat it does herelicence
go-webview2

Draws the settings window, which is an HTML page rendered by the WebView2 component already present in Windows.

MIT

go-winloader

Loads the WebView2 libraries. Used by go-webview2.

MIT

malgo / miniaudio

Captures the microphone: the audio callback that fills the buffer while you hold the keys.

Unlicense

gorilla/websocket

The websocket link to the streaming recogniser, which sends text back while you are still speaking.

BSD-2

golang.org/x/sys

The Windows API calls: the keyboard hook, the tray icon, the overlay window, job objects for the child processes.

BSD-3

IBM Plex

The one typeface every design is set in, carried inside the executable so it reads the same on any machine.

OFL 1.1

WebView2 Runtime

Part of Windows, not shipped by us. It is what actually paints the settings page.

Microsoft

The models

Models are downloaded on request, from the repositories below, and every file is compared against a published SHA-256 before it is used. None of them is bundled with the program.

modelwhat it is forlicence
Whisper Base, Small, Medium, Turbo

The default choice for every language, and the models that carry translation: into English through their own translate task, into other languages by being told the speech is already in the target one. Quantised builds are marked q5.

MIT

GigaAM v3

A single-language model that punctuates by itself. On an 11-second phrase it took 0.47 s against Whisper Medium's 11.6 s, and 277 MB of memory against 814 MB.

MIT

GigaAM v2

The previous generation of the same model: the same speed, without the punctuation.

MIT

Parakeet TDT 0.6B v3

25 European languages in one narrow model, punctuates by itself.

CC-BY-4.0

Nemotron 3.5 Streaming

Types as you speak: partial text on the plate, 40 languages, punctuation included.

OpenMDW-1.1

Canary 180M Flash

English, German, Spanish and French, and it translates between them without Whisper.

CC-BY-4.0

Qwen3 ASR

About 30 languages, the heaviest and the most accurate in the catalogue.

Apache 2.0

Moonshine

Small and quick, for one language at a time on modest hardware.

MIT

Any GGUF editor model

Post-processing runs whatever GGUF model you point it at, searched and downloaded from Hugging Face inside the program.

per model

Ports

The engines are ordinary HTTP and websocket servers bound to 127.0.0.1. They are not reachable from the network, and the program refuses to start one on a port another process already holds.

portengineprotocolruns while
8910

whisper-server

HTTP

a Whisper model serves the language

8911

llama-server

HTTP, session key

post-processing is on

8912

sherpa-server

HTTP

a sherpa model serves the language

8913

sherpa-online-server

websocket

a streaming model is chosen

The build is reproducible. Everything is compiled in Docker from pinned sources: the engine versions are fixed in the Dockerfile, the sherpa release is verified by its SHA-256, and the result is the two files on the releases page. The whole recipe is in the repository.

Licences

HoldToType itself is published under the MIT licence: use it, read it, change it, ship your own. Every engine and library above carries its own permissive licence, listed next to it.

One thing is on you. The editing models you find yourself through the Hugging Face search carry whatever licence their author chose, and some of them do limit commercial use.

Contact

holdtotype@outlook.com for anything. Issues on GitHub for problems and requests, where other people can see and add to them. The program is also listed on AlternativeTo.

Open the repository