See every Arma 3 keybinding in one searchable HTML page. Vanilla, old-style mods, and CBA addons โ all together, grouped exactly the way the in-game dialog shows them.
- ๐ Filter by category, action name, or keybind
- ๐ Build a cheatsheet by pinning the rows you care about
- โ Find and resolve keybind collisions
A single self-contained HTML file. The page has two top-level collapsable sections โ Configure Base and Configure Addons โ each with sub-categories (Common, Weapons, View, Commandโฆ) preserving the in-game order.
๐ Filter by category, action name, or keybind.
๐ Build your cheatsheet by pinning the rows you actually use.
โ Find and resolve keybind collisions (hover or click the โ marker)
Requires Python 3.10+ and Arma 3.
๐ก No Python? Grab the standalone Windows binary from the latest release โ drop it anywhere and run
a3_keymaker.exeinstead ofa3_keymakerin the steps below. Each release lists a SHA-256 hash and VirusTotal scan link for verification.Unsigned binary โ Windows may warn on first run. Click More info โ Run anyway.
- Open a terminal in the project directory
- Setup once (Python users):
pip install -e .โ skip if using the.exe - Execute Keymaker: run
a3_keymakerโ copies the Arma 3 script to your clipboard - In Arma 3: pause the game, paste the script into Debug Console, click LOCAL EXEC. The script waits for the
Controlsdialog to open. - Open the
Controlsdialog: The script walks through the categories extracting keybindings. Then clickConfigure Addonsand let the script walk through the addons.
๐ก When the script finishes, the keybinding dump will be on your clipboard.
- Save the dump to a text file (e.g.
dump.txt) - Execute Keymaker with the dump file:
a3_keymaker dump.txtโ writes the final HTML file.
Full step-by-step below. โฌ
cd a3_keymaker
pip install -e .Installs the a3_keymaker CLI on your PATH. You only do this once.
Play โ Play Singleplayer (or just press Enter). You'll spawn into the game.
Press Esc โ you should see the Debug Console in the pause menu.
In a terminal (no arguments):
a3_keymakerYou'll see "Keybind extraction script copied to clipboard. Paste it into Arma 3's Debug Console (LOCAL EXEC)."
โ Important: the script runs silently in the background. You won't see any output yet. This is expected โ it's waiting for you to open the Controls dialog.
The SHOW dropdown will visibly start cycling through every category. Don't touch anything.
The ADDON dropdown will cycle through every mod.
For example, C:\tmp\dump.txt.
a3_keymaker C:\tmp\dump.txtWrites YYYY_MM_DD-Arma3_Keymaker.html (today's date) in the current directory. Open it in any browser. โ
๐ก Clipboard not cooperating? Open
extract_all.sqfin any text editor, select all, and copy directly.
a3_keymaker C:\tmp\dump.txt -o C:\path\to\keymap.html --json C:\path\to\keymap.json| Flag | Default | Purpose |
|---|---|---|
-o, --output |
YYYY_MM_DD-Arma3_Keymaker.html |
Output HTML path |
--json |
(none) | Also emit a parallel JSON dump (handy for tooling, diffs, automation) |
- Substring match against category, action label, action ID, and key text in one shot.
- Multiple words are AND'd:
ctrl mmatches rows with both "ctrl" and "m" anywhere. - Sections and categories with matching rows auto-expand while filtering. Manual open/closed state is preserved when the filter clears.
- Esc clears any active filter. Press again to collapse everything. Spam Esc to fully reset.
- Pin any row or category โ pin checkboxes appear on hover. Pins persist across refreshes (stored in your browser).
- Show Pinned (N) toggle โ show only your pinned rows.
- Hide Unbound (N) toggle โ hide rows with no key assigned.
- Unpin all wipes everything in one click.
- Pinning a category pins every visible row in it โ combine with the filter to bulk-pin a subset.
- A โ marker appears next to any key bound by more than one action.
- Hover for the list of all parties involved.
- Click any โ to isolate the page to that conflict group โ the clicked marker becomes an amber chip. Click again (or press Esc) to exit.
- Inside collision view, only the keys actually shared with the clicked row are highlighted red โ so context-disambiguated overlaps (W = walk forward / accelerate vehicle) don't visually scream at you.
- Sticky stack โ the controls bar, section summary,
=== Mods ===separator, and current category summary all stick to the top while you scroll. You always know where you are. - Collapse all / Expand all buttons in the action bar.
- Hover any action label โ tooltip shows the full path (
Configure Base > Category > Action) so you can navigate straight to it in-game. - Open/closed layout survives refreshes (also saved in your browser).
The extractor combines five data sources to maximize coverage:
| Source | Covers |
|---|---|
UI walk of CONTROLS dialog |
Every label in every category, in dropdown order |
actionKeysNames over the BIS wiki's 446 engine action IDs |
Every vanilla action's current binding |
CfgDefaultKeysPresets >> * >> Mappings (all 8 sibling presets, deduped) |
Old-style mod IDs that have a default key |
CfgUserActions walk |
Old-style mod IDs without default keys |
UI walk of CONFIGURE ADDONS |
Every CBA-registered mod's bindings, label + key inline |
For a typical heavily-modded install: ~1000 actions across ~50 categories.
a3_keymaker/
โโโ pyproject.toml
โโโ README.md # this file
โโโ ARCHITECTURE.md # design rationale, component-level details
โโโ src/
โ โโโ a3_keymaker/
โ โโโ __init__.py
โ โโโ cli.py # CLI entry point
โ โโโ model.py # Action, Report dataclasses
โ โโโ parser.py # SQF dump โ ParsedDump (handles "" escaping + clipboard mojibake)
โ โโโ merger.py # ParsedDump + wiki JSON โ list[Action]
โ โโโ render.py # list[Action] โ self-contained HTML
โ โโโ data/ # vanilla_actions.json (446 wiki entries) + keymaker_banner.png
โ โโโ scripts/ # extract_all.sqf (in-game extractor)
โโโ tests/
โโโ test_pipeline.py # 18 tests, runs against a captured dump fixture
โโโ fixtures/sample_dump.txt # real dump used by the test suite
pip install -e .[dev]
pytest -vThe fixture tests/fixtures/sample_dump.txt is a real captured dump from a heavily-modded install, so the tests exercise every code path against realistic data.
See ARCHITECTURE.md for design rationale and component-level details (parser, merger, renderer internals; SQF extractor phases; sticky-stack rendering).






