![]() |
![]() |
![]() |
|---|
A Bruce app for hackers, tinkerers and lock nerds.
Decode and randomly generate key bitting patterns for a bunch of lock brands.
Visualize the cuts, tweak the pins and save/load your keys.
This app is designed for Bruce Interpreter compatible devices with screen 170x320. Devices of other sizes will render the key incorrectly.
A ✔️ indicates a key outline verified against a real key. Unmarked outlines are still selectable, but they are unverified and may be less accurate.
| Brand | Key Outlines | Comments |
|---|---|---|
| ASSA | ✔️ 5 pins ✔️ 6 pins ✔️ 7 pins |
|
| Abloy Classic | ✔️ 7 disks ✔️ 9 disks ✔️ 11 disks |
|
| Abloy High Profile | ✔️ 7 disks ✔️ 9 disks ✔️ 11 disks |
|
| American | ✔️ 5 pins ✔️ 6 pins |
|
| Arrow | ⬜ 6 pins/A ⬜ 7 pins/A |
Shares DSD with Best (A2 small-format interchangeable core) |
| Best | ⬜ 6 pins/A2 ✔️ 7 pins/A2 |
|
| Buick | ⬜ 10 cuts/B102 | Shares DSD with Chevy B102 |
| Chevy | ⬜ 10 cuts/B102 | |
| Chrysler | ⬜ 8 cuts/Y159 | Shares DSD with Dodge Y159 |
| Corbin Russwin | ✔️ 5 pins/RU45 ✔️ 6 pins/CX6A |
|
| Dodge | ⬜ 8 cuts/Y159 | |
| Eagle | ⬜ 6 pins/A ⬜ 7 pins/A |
Shares DSD with Best (A2 small-format interchangeable core) |
| Falcon | ⬜ 6 pins/A ⬜ 7 pins/A |
Shares DSD with Best (A2 small-format interchangeable core) |
| Ford | ⬜ 8 cuts/H75 | |
| GMC | ⬜ 10 cuts/B102 | Shares DSD with Chevy B102 |
| GMS | ⬜ 6 pins/A ⬜ 7 pins/A |
Shares DSD with Best (A2 small-format interchangeable core) |
| Jeep | ⬜ 8 cuts/Y159 | Shares DSD with Dodge Y159 |
| Kawasaki | ⬜ 6 cuts/KA14 | |
| KSP | ⬜ 6 pins/A ⬜ 7 pins/A |
Shares DSD with Best (A2 small-format interchangeable core) |
| Kwikset | ✔️ 5 pins | |
| Lincoln | ⬜ 8 cuts/H75 | Shares DSD with Ford H75 |
| Lockwood | ⬜ 5 pins/LW4 ⬜ 6 pins/LW5 |
|
| Master | ✔️ 4 pins ✔️ 5 pins ⬜ 6 pins |
|
| Medeco Biaxial | ✔️ 6 pins | |
| Mercury | ⬜ 8 cuts/H75 | Shares DSD with Ford H75 |
| National | ⬜ 5 pins/D8775 | |
| Oldsmobile | ⬜ 10 cuts/B102 | Shares DSD with Chevy B102 |
| Plymouth | ⬜ 8 cuts/Y159 | Shares DSD with Dodge Y159 |
| Pontiac | ⬜ 10 cuts/B102 | Shares DSD with Chevy B102 |
| RV | ⬜ 5 cuts | |
| Sargent | ⬜ 5 pins/LA ⬜ 6 pins/LA |
|
| Schlage | ✔️ 5 pins/SC1 ✔️ 6 pins/SC4 |
|
| Subaru | ⬜ 9 cuts/DSD435 | |
| Suzuki | ⬜ 7 cuts/SUZ18 | |
| Titan | ✔️ 5 pins | Similar to Yale |
| Weiser | ⬜ 5 pins/WR5 ⬜ 6 pins/WR3 |
|
| Weslock | ⬜ 5 pins | |
| Yale | ✔️ 5 pins/Y1 ⬜ 6 pins/Y2 |
|
| Yale Small | ✔️ 4 pins ✔️ 5 pins |
|
| Yamaha | ⬜ 7 cuts/YM63 |
- Open Bruce App Store via JS Interpreter → Tools → App Store
- if App Store is not present, go to Config → Install App Store
- Navigate to Tools
- Download and install Key Decoding
- Drop
KeyDecoding.jsonto your Bruce device - Fire up the Bruce Interpreter
- Have fun
- SEL (Select): Move to next pin, or to Save/Load (in Decode mode)
- NEXT: Increase pin depth / Save (when "Save" is highlighted) / Load (when "Load" is highlighted)
- PREV: Decrease pin depth
- ESC: Back to main menu
- Pick a Brand: Choose your target lock or load a saved key
- Pin Count: Select how many pins (brand-dependent)
- Mode:
- Random: Get a random bitting (good for challenge keys)
- Decode: Set each pin yourself (for real-world decoding)
- Tweak Pins: Use NEXT/PREV to set each pin's depth
- Save: SEL to "Save", then NEXT to write your key JSON
- Load: SEL to "Load", then NEXT to pick a saved key
Keys are saved as JSON in /keys/:
{
"type": "Titan",
"outline": "5 pins",
"pins": [ 3, 5, 2, 7, 4 ]
}KeyExample: {
displayName: "Key Example", // display name shown in menu
isDiskDetainer: false, // whether the key is a disk detainer type (default false)
bladeHeight: 45, // blade height for disk detainer keys (default 45)
outlines: ["5 pins", "6 pins"], // number of pins
pinSpacing: 31, // distance between pins (default 31)
maxKeyCut: 9, // number of cuts (default 9)
flatSpotWidth: 5, // width of flat spot of the cut (default 5)
cutDepthOffset: 5, // depth offset of each cut (default 5)
zeroCutOffset: 0, // depth offset of zero cut (default 0)
edgeOffsetX: 0, // x offset of the bottom-right diagonal (default 0)
edgeOffsetY: 0, // y offset of the bottom line (default 0)
pinsStartAtZero: false, // whether pin numbers start at 0 or 1 (default false)
pinNumbersOffset: 0 // x offset for pin numbers with underline (default 0)
}- Bruce Interpreter
- Deviant Ollam: Key-and-Pin-Decoding
- Flipper Zero: KeyCopier
- LILYGO T-Embed CC1101
- Mow: ASSA Key Specifications
- Tyler J. Thomas: Key Bitting Specifications Edition 1, 2025
- Greg Bryant: Sidewinder Key Bitting
- Digital key icons created by Fliqqer - Flaticon
- @Phred_Phlintstoner for testing the Bruce PCB V2 by Smoochiees
- @argtime for Add delay to KeyDecoding.js loop
- @ellygaytor for DSD aliasing, icons and help menu
For educational, CTF and red team use only.
Don't break the law. Don't be a jerk.
Accuracy of non-verified options may be poor.








