Skip to content

Latest commit

 

History

258 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RABBIT — REAPER Accessibility Bootstrap & Bundle Installation Tool

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 from UserPlugins. 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 .pkg on 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 snapshots release, installs app2clap.clap into 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.

Language packs

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.ReaperLangPack you get REAPER Accesible español, and as es_MX.ReaperLangPack you 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=pma on 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 its fr_CA translation: that one is all but complete, while OSARA's fr_FR translation 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 your reapack.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 of reaper.ini is 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.

Download

Pick the file that matches your machine. These links always point at the latest release — bookmark or share them freely:

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.

macOS first launch

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.

Use it

Launch the downloaded executable. The wizard walks you through:

  1. Pick a REAPER target — RABBIT detects existing standard installs automatically; pick "portable" if you want a self-contained REAPER folder.
  2. RABBIT checks for the latest versions of REAPER and the accessibility packages.
  3. 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.
  4. 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.

Switching the language

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.

Command-line usage

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:

See what you have

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

Plan an install or update

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.

Install and update

# 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.

Maintain

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

Update RABBIT itself

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.

If antivirus software blocks an install (Windows)

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.

Reports and logs

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.

Made with the help of AI

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.

Development

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 tagged v* 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 the MACOS_* signing secrets are configured, falling back to ad-hoc signing + the Open Me First.command helper 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.

About

A standalone executable to install / update REAPER, OSARA, SWS, ReaPack, ReaKontrol and more in one go

Resources

Stars

19 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages