RABBIT sets up a fully accessible REAPER on Windows and macOS in a few clicks. Instead of hunting through download pages, copying files into the right folders, and fighting installers that fight your screen reader, you launch one small program and it does the work.
RABBIT installs and keeps up to date:
- REAPER — the DAW itself
- OSARA — the screen-reader extension that makes REAPER usable with NVDA, JAWS, Narrator, and VoiceOver
- SWS — the popular SWS Extension
- ReaPack — REAPER's package manager
- ReaKontrol — Native Instruments Komplete Kontrol support
- JAWS-for-REAPER scripts (Windows only, when JAWS is detected)
- FFmpeg (Windows only, opt-in) — the shared FFmpeg runtime
(
avformat,avcodec, …) that REAPER's video decoder loads fromUserPlugins. Pulled from Gyan.dev on x64 and tordona/ffmpeg-win-arm64 on ARM64. Pinned to the latest stable FFmpeg major REAPER's video decoder is known to support (currently 8.x). Unticked by default so it doesn't surprise users who don't need video. - Surge XT (opt-in, standard REAPER installations only) — the
free open-source hybrid synthesizer from the
Surge Synth Team. RABBIT
runs the vendor installer (Inno Setup on Windows,
productbuild-wrapped
.pkgon macOS) under elevation so the VST3, CLAP, AU (macOS only) and standalone formats land system-wide for REAPER and other DAWs to pick up. Tracks the rolling nightly channel rather than the official 1.3.4 release (which is from August 2024 and the project effectively ships through nightlies). Hidden on portable REAPER targets because Surge XT's factory data lives at fixed system paths outside any portable REAPER folder. - app2clap (Windows only, opt-in, standard REAPER installations only) —
app2clap, a CLAP plugin by Jamie Teh
(jcsteh, of OSARA/NVDA fame) that captures audio from other applications
and brings it into REAPER — or any CLAP host — as a plug-in you insert on
a track. RABBIT tracks the
rolling
snapshotsrelease, installsapp2clap.clapinto the per-user CLAP folder (%LOCALAPPDATA%\Programs\Common\CLAP) with no elevation required, and keeps it up to date. Disabled on portable REAPER targets because the CLAP folder lives outside any portable REAPER folder.
Surge XT and app2clap are grouped under Additional software in the wizard — extras that aren't tied to REAPER itself. Both are disabled on portable REAPER targets, since they install to fixed per-user/system locations rather than into the portable REAPER folder.
RABBIT can also translate REAPER itself (not just its own wizard), by
installing a community language pack into <resource>/LangPack/. Three are
available today, and all of them translate the SWS extension as well:
- Spanish — maintained by Javier Robledo for the Spanish REAPER
community and published on
reaperespa.com. REAPER and SWS are the
same translation either way, but OSARA has two Spanish translations,
chosen by the pack's file name: installed as
es_ES.ReaperLangPackyou get REAPER Accesible español, and ases_MX.ReaperLangPackyou get Team PMA's. Pick one from the Spanish OSARA translation dropdown on the packages page (enabled once the Spanish pack is selected), or pass--package-variant langpack-es=pmaon the command line. Switching reinstalls under the new name and removes the old file. - German — maintained by MrData and published in the
REAPER Stash, installed as
de_DE.ReaperLangPack. - French — maintained by Lee Julien and Pierre-Marie Curt for
ReaperAccessible, the French
screen-reader community, and published in their
ReaPack repository.
Installed as
fr_CA.ReaperLangPack, which is what makes OSARA load itsfr_CAtranslation: that one is all but complete, while OSARA'sfr_FRtranslation still leaves about a third of its messages in English. The pack itself is the same standard French under either name — only OSARA's own strings differ, and a few of them are Canadian (muté, soloté).
The pack matching the language RABBIT is running in is suggested and ticked for you; packs for other languages are listed but unticked. Nothing is offered in English, since REAPER is already English.
If you don't want it, untick it and RABBIT remembers: the pack stays listed
and tickable, but it won't be ticked for you again on this REAPER install.
That covers updates too — if you installed a pack, later stopped using it,
and turn down its next update, RABBIT takes that as a no and stops offering
it. Tick it again at any point and RABBIT forgets the refusal. What is not
a refusal is a pack that is simply installed and up to date: it sits
unticked because there is nothing to do, and RABBIT reads that as silence
rather than a decision. The choice is stored per install (in
RABBIT/install-state.json), so you can say no on one REAPER and yes on
another.
You can install as many language packs as you like — REAPER keeps them all
in LangPack/ — and switch between them later from REAPER's own
preferences. Only one is active at a time, so if you install several,
pick which one REAPER starts in from the REAPER language after
installation dropdown on the packages page (or --reaper-language <package> on the command line). Installing a pack never removes another
one; the only file RABBIT replaces is the one it installed for that same
pack, e.g. when you switch Spanish translations.
The Spanish and German packs are published without version numbers, so
RABBIT identifies them by what the server reports about the file (its ETag
or last-modified date and size, falling back to the file's contents): it
notices when a translator publishes a new file and offers it as an update,
without RABBIT needing a new release. The French pack does carry a version
(7.75.1 at the time of writing), read from its ReaPack index. Your choice
of Spanish translation is remembered, so an update keeps the variant you
picked instead of reverting to the default.
Beyond installing packages, RABBIT can also apply small post-install configuration tweaks:
- Add the REAPER Accessibility ReaPack repository to ReaPack
(
https://github.com/Timtam/reapack/raw/master/index.xml). When ReaPack is part of your install plan or already on disk, this step is ticked by default; if the repository is already configured in yourreapack.ini, the step shows as already applied and is skipped. Idempotent and safe to re-run. - Set REAPER's language to one of the language packs you're
installing, by writing it into
reaper.ini. A single step covers every language — which one it activates comes from the dropdown above. The step is tied to the packs you tick: with none ticked it is greyed out, because the dropdown it reads from is empty and there would be nothing to activate. Tick a language pack and the step ticks itself, ready to be unticked if you want the files installed without changing the language REAPER is in; untick the last pack and the step clears itself again. A pack merely sitting on disk from an earlier run doesn't count — a run that installs nothing language-related leaves your current language alone. (On the command line the step is still reachable directly with--config-step set-reaper-language, which activates an already-installed pack.) Only the one setting is touched; the rest ofreaper.iniis preserved byte for byte, including its original text encoding.
Built with screen reader users in mind: keyboard-first wizard, native controls, NVDA/JAWS/Narrator/VoiceOver tested, English, German, Spanish, French
- Italian UI out of the box. No console window, no installer, no settings file — one executable you can run from any folder and delete when you're done.
Pick the file that matches your machine. These links always point at the latest release — bookmark or share them freely:
- Windows (Intel/AMD 64-bit): rabbit-windows-x86_64.exe
- Windows (ARM 64-bit): rabbit-windows-aarch64.exe
- macOS (universal — Apple Silicon + Intel) — recommended: rabbit-macos-universal.app.zip
- macOS bare binary (CLI use): rabbit-macos-universal
To pin a specific version (or download SHA-256 sums for verification),
browse the GitHub Releases
page — every release also
publishes versioned filenames (rabbit-<version>-windows-x86_64.exe,
etc.) alongside per-asset .sha256 files.
On Windows, place the downloaded executable wherever you like (Desktop,
Downloads, a USB stick) and double-click it. You can rename it to RABBIT.exe
if you prefer — RABBIT still updates itself in place under whatever filename you
chose.
RABBIT for macOS is signed with an Apple Developer ID and notarized by Apple.
Unzip rabbit-<version>-macos-universal.app.zip and double-click Rabbit.app
— it launches normally on first run, with no quarantine workaround needed.
Self-updates keep working under the same bundle identity.
The bare rabbit-<version>-macos-universal download is a plain Mach-O CLI
executable (no .app wrapper). After downloading, run chmod +x and invoke
it from Terminal.
Launch the downloaded executable. The wizard walks you through:
- Pick a REAPER target — RABBIT detects existing standard installs automatically; pick "portable" if you want a self-contained REAPER folder.
- RABBIT checks for the latest versions of REAPER and the accessibility packages.
- Pick the packages you want installed or updated, plus any configuration steps (e.g. adding the REAPER Accessibility ReaPack repository). Sensible defaults are already checked.
- Review and install. RABBIT downloads, verifies, and installs everything without further prompts.
When it finishes, you can launch REAPER straight from the wizard or open the saved report.
Use the language picker at the bottom of the window. Currently bundled languages: English (United States), Deutsch (Deutschland), español (España), Français (France) and Italiano (Italia). RABBIT auto-picks your OS language on first launch when a translation is available — regional variants fall back to the bundled one, so a Mexican Spanish (es-MX) system gets the Spanish UI.
The same RABBIT.exe / RABBIT executable also exposes a CLI when invoked with
arguments. Run RABBIT --help for the full list. The most useful commands grouped
by what they do:
RABBIT detect # list detected REAPER installs
RABBIT detect --portable C:\REAPER # also probe a portable folder
RABBIT components --resource-path "%APPDATA%\REAPER"
RABBIT latest # show latest upstream versions
RABBIT plan --resource-path "%APPDATA%\REAPER"
RABBIT plan --resource-path "%APPDATA%\REAPER" --online
RABBIT preflight --resource-path "%APPDATA%\REAPER"
plan prints what RABBIT would do for the given REAPER target. Add
--online to compare detected versions against the live upstream feeds.
# One-shot setup of a portable REAPER + accessibility packages:
RABBIT setup --resource-path C:\REAPER --portable --apply
# Update or install one specific package:
RABBIT install-extension --package osara --resource-path "%APPDATA%\REAPER" --apply
# Install/update everything that needs it for an existing REAPER:
RABBIT apply-packages --resource-path "%APPDATA%\REAPER" --apply
# ReaPack shows a donation notice on first run, so installing it
# unattended means acknowledging that notice up front:
RABBIT setup --resource-path "%APPDATA%\REAPER" --package reapack \
--accept-reapack-donation-notice --apply
The CLI is dry-run by default; pass --apply to actually make changes.
--save-report writes a JSON report next to the resource path so you have a
record of what was installed, and --json prints the result as JSON for
scripting. A few other flags are worth knowing: --allow-reaper-running
proceeds even though REAPER is open (files it holds open may fail to be
replaced), --preserve-osara-keymap keeps your current OSARA key map
instead of taking OSARA's current default, and --stage-unsupported
downloads the packages RABBIT can't install automatically and leaves them
in the cache for you to run yourself instead of skipping them. Every flag
is documented in RABBIT <command> --help.
setup also accepts --config-step <id> (repeatable) and
--skip-config-step <id> for the post-install configuration tweaks.
With no flags, the recommended steps whose dependencies are satisfied
(and that aren't already applied) run automatically; pass an explicit
list to opt in to a specific subset, or --skip-config-step to opt
out of one. Set REAPER's language is the exception: it only runs by
default when the run actually asks for a language pack, so a machine that
merely has one on disk does not get its interface language changed. Ask
for it with --config-step set-reaper-language to switch to a pack you
installed earlier. Step ids today are
reapack-add-reaper-accessibility-remote,
reapack-add-reaper-accessible-fr-remote,
reapack-add-reaper-accessible-en-remote, and
set-reaper-language (one step for every language; it depends on at
least one language pack being installed or in the plan).
Language packs install like any other package, e.g.:
RABBIT install-extension --package langpack-de --resource-path "%APPDATA%\REAPER" --apply
RABBIT setup --resource-path "%APPDATA%\REAPER" --package langpack-es \
--package langpack-de --reaper-language langpack-de --apply
# Pick Team PMA's Spanish translation (es_MX) over the default es_ES:
RABBIT setup --resource-path "%APPDATA%\REAPER" --package langpack-es \
--package-variant langpack-es=pma --reaper-language langpack-es --apply
--reaper-language only accepts a language pack, and lists the ones it
knows if you mistype it. Unlike the wizard, the CLI never records a package
you left out as "don't offer this again" — --package is a scope for this
run, not a standing preference.
RABBIT backups --resource-path "%APPDATA%\REAPER" # list rollback sets
RABBIT restore-backup --resource-path "%APPDATA%\REAPER" \
--backup-id unix-1234567890 --apply # roll back one set
RABBIT self-update check # see if a new RABBIT is out
RABBIT self-update apply --restart # update + relaunch
The GUI does this automatically on startup; the CLI commands are there for unattended environments and CI.
An install can fail with "Windows security software blocked …". Microsoft Defender sometimes flags a legitimately code-signed third-party installer it hasn't seen widely yet — OSARA's development snapshots, rebuilt on every change, are the usual case — and quarantines it mid-install. This is a false positive: the installer is signed by its publisher, and RABBIT downloads every package over HTTPS from the publisher's own release page and verifies it against the publisher's checksum before touching it.
To finish the installation, do one of the following:
- Open Windows Security → Virus & threat protection → Protection history, find the blocked item, choose Allow, then run RABBIT again.
- Add RABBIT's download folder to Virus & threat protection → Manage settings → Exclusions.
- Install that one package by hand from the publisher's own page, then re-run RABBIT for the rest.
RABBIT will never turn your virus protection off, and you should not need to: disabling real-time protection exposes the whole machine, and any installer that switches it off is indistinguishable from malware. If a RABBIT release itself is flagged, please report it — and consider submitting the file to Microsoft as a false positive at https://www.microsoft.com/en-us/wdsi/filesubmission.
Every installation produces a JSON report under <resource>/RABBIT/logs/.
Backups go to <resource>/RABBIT/backups/<timestamp>/. The download cache lives
in %LOCALAPPDATA%\RABBIT\cache (Windows) or ~/Library/Caches/RABBIT (macOS) and
can be deleted safely at any time.
RABBIT was built with the help of AI coding assistants. Much of the code, tests, and documentation in this repository was written collaboratively with large language models, then reviewed and maintained by its human author. We mention this openly so users and contributors know what went into the project.
See DESIGN.md for the full architecture and design rules. To
build from source you need a recent stable Rust toolchain. The wxDragon GUI
feature on Windows additionally needs the Visual Studio C++ build tools, an
LLVM libclang.dll discoverable through LIBCLANG_PATH, and Ninja on
PATH.
cargo fmt
cargo test --workspace
.\scripts\build-wxdragon-test.ps1 # Windows GUI smoke build
CI lives under .github/workflows/:
ci.yml— formatting, tests, and release-mode artifacts on every push.macos-smoke.yml— daily live-upstream smoke against real REAPER + OSARA- SWS + ReaKontrol downloads.
release.yml— builds taggedv*releases (Windows.exe, macOS bare binary, macOS.app.zip), publishes the GitHub Release with checksums and the self-update manifest. macOS bundles are Developer ID signed and notarized when theMACOS_*signing secrets are configured, falling back to ad-hoc signing + theOpen Me First.commandhelper otherwise.macos-signing-smoke.yml— manual (workflow_dispatch) smoke test of the macOS signing + notarization + stapling path. Builds the universal bundle, signs/notarizes/staples it, verifies the result on the runner, and uploads the signed bundle without publishing. Run it to validate signing before tagging a release.
Issues, pull requests, and translation contributions welcome — RABBIT is for the REAPER accessibility community first.