Download it, check it, run it. No administrator. Nothing to install first.

1 Two ways to get it. Same result.

d47-setup-….exe it puts itself away d47.zip you unpack it yourself ONE FOLDER that you can pick up and move wherever you like Not into Program Files — somewhere you own, so it never needs to ask for permission.

2 Check it is really ours.

WHAT YOU GOT Get-FileHash A FINGERPRINT compare THE PUBLISHED ONE SAME — run it DIFFERENT — do not Builds are unsigned, so Windows will warn you. This is how you check instead of trusting.

3 What ends up in the folder.

d47.exe runtimes\ data\ settings.json secrets.json models\ logs\ keep these two together apart, it starts — but cannot hear you everything it writes your settings, your keys, your logs move the folder and all of it moves Never your Windows profile. Everything is here, beside the program.

4 Updating itself.

IT TELLS YOU a banner appears YOU PRESS IT nothing moves before this IT CHECKS the fingerprint again IT SWAPS and restarts If any step fails, it puts everything back. You never end up with half an update.

The details

Download the installer — d47-setup-0.78.1.exe, or whatever version is current — from the latest release and run it. The version is in the filename on purpose, so a folder with several of them in it still tells you which is which. There is no runtime prerequisite, and it never asks for administrator rights.

It installs for your account only, into %LOCALAPPDATA%\Programs\d47, and appears in Add/Remove Programs like anything else. Running a newer installer upgrades the existing install in place rather than leaving two copies behind.

The portable zip

d47.zip is published beside the installer for anyone who would rather not install: unpack it into a folder you own — not Program Files, which D47 could not write to without elevation it never asks for — and run d47.exe.

Either way the layout is the same: one executable, plus the speech-recognition native libraries in a runtimes folder beside it. The executable is a self-contained publish, with the .NET runtime and every managed dependency inside it; the natives sit beside it as plain files because that is where their loader looks. Keep them together — d47.exe without its runtimes folder starts fine but cannot transcribe a word.

What you can rely on, installed or portable:

  • No .NET runtime needs to be installed first.
  • No elevation, ever.
  • Everything D47 writes lives in a data folder beside the executable. Move the whole folder, and the program, your settings and your secrets all move together.

Uninstalling

Uninstall from Add/Remove Programs. It removes the program and asks — once — whether to delete your data folder as well. Answering no keeps your settings, your saved keys and any speech models you downloaded, so a later install picks up where you left off. The default is to keep them.

Verifying the download

Code signing is pending. Directive 47 has applied to the SignPath Foundation, which grants free code signing certificates to open-source projects, with the signing itself run by SignPath.io. Once that is granted and wired into the release pipeline, releases will be signed and Windows will show a publisher name instead of an unknown one. It is not granted yet, so everything below describes how things stand today.

Builds are unsigned, so Windows SmartScreen will likely warn — on the installer as readily as on the executable. Rather than ask you to trust that, every release publishes a SHA-256 beside each download. Compare whichever you took:

Get-FileHash .\d47-setup-0.78.1.exe -Algorithm SHA256

Match the result against the .sha256 file published beside it in the same release — or d47.zip.sha256 if you took the zip. If it differs, do not run or unpack the file.

Where things are written

Everything is under data, beside the executable:

d47.exe
runtimes\
  win-x64\             speech-recognition natives — shipped with the build, not downloaded
data\
  settings.json        plain JSON, hand-editable, unknown keys named at startup and kept
  secrets.json         API keys, DPAPI-encrypted for your Windows account only
  models\              speech models — only if you chose one and agreed to the download
  logs\
    d47-20260812.log     human-readable

Finding it again

The installer adds a Start Menu entry, so this section is mostly for the portable zip.

Either way D47 is just the folder it lives in — the exe, its runtimes libraries, and everything it writes in data/ beside them. Copy that folder and the whole thing, program and state, comes with it; move only d47.exe and it leaves its ears behind.

The cost of that is a program you can only reach by remembering where you left it, so the first run offers to add a Start Menu entry — unless the installer already made one, in which case it stays quiet. It is one shortcut, for your account only, needs no elevation, and you can delete it like any other. Decline it and you will not be asked again; Settings → About → Add to Start Menu is there if you change your mind.

The shortcut points at the file rather than at a copy of it, so an in-place update leaves it pointing at the new build — the same reason a pinned taskbar icon keeps working.

Only one D47 runs at a time. Starting a second one raises the copy you already have instead, whichever version that is: two copies would mean two journal readers, two microphones and two writers over one data/ folder.

Update checks

On startup, D47 asks GitHub’s public releases API for the latest tag and compares it against its own version. If a newer build exists, a banner offers Update now.

Update now downloads that release’s d47.zip, checks it against the d47.zip.sha256 published beside it, and puts each file it contains where the running one is — the executable and the runtimes libraries both — renaming what it replaces to .old rather than overwriting it, then starts the new build. The .old files are deleted the next time D47 starts, and a failure part-way puts everything back; you never end up with half an update. If any step fails — no build attached, the download did not finish, the checksum did not match, the archive was not a d47 build, or the folder D47 lives in needs elevation to write — it says which, and opens the release page so you can do it by hand.

Builds older than v0.5.14 predate the zip and cannot install it; their update banner opens the release page instead, and moving up is the three download-unpack-run steps at the top of this page once more.

Nothing is downloaded unless you press the button, and D47 will only fetch a URL that is an asset on a release of this repository.

Offline or GitHub unreachable is treated as “no update” — startup never waits on the check and never fails because of it.

Downloads and stored keys

Out of the box D47 makes two kinds of outbound request of its own:

  • The update check described above. Switch it off in Settings and D47 makes no network call of its own. Pressing Update now on the banner adds one more: downloading that release from GitHub, which happens only when you press it.
  • A speech model download, once. D47 ships with the Base English model selected and fetches it from huggingface.co on first run, about 142 MB; choosing a different one fetches that instead. Once it is on disk, transcription runs on this machine. Set the speech model to none if you would rather it fetched nothing.

secrets.json is encrypted with Windows DPAPI scoped to your user account. Copying it to another machine or another account leaves it undecryptable, and D47 treats an unreadable secret as that capability being switched off rather than as an error.