ABKO CJ87 keyboard software
sharkfin identifies and reads the ABKO CJ87. Free and open source. Use it in a Chromium browser with nothing to install, or download the desktop app for Windows, macOS or Linux. Either way it runs entirely on your own machine: no account, and the browser version makes no network requests once the page has loaded.
What sharkfin does with the CJ87
- Command set not on file. sharkfin asks the board which one it speaks when it is plugged in, and writes once you allow it. A board that cannot say stays read-only.
- Setup. The app's Setup page allows changes and checks them one by one: keys, lighting, profiles, one remap. Your answers keep the board working on your computer, and the report they produce, sent from the Contribute tab, is how it gets an entry for everyone. See Setup.
The picture sharkfin has for the CJ87 knows the board's shape but not yet which internal slot each key lives in, so the first connection includes a check: the drawing is matched against the keymap your own board reports, you confirm it once, and from then on you remap on the picture. Until then the app shows a plain grid. The check exists because two boards can share one picture and still disagree about which slot a key lives in, and a wrong guess would send a remap to the wrong key. sharkfin trusts your keyboard over its own files.
CJ87 at a glance
| Brand | ABKO |
| Model | CJ87 |
| USB ID | 3151:4015 |
| Device ID | 3227 |
| Protocol family | unknown |
| Settings writable | after the board answers, once you allow it |
| Drawn layout | after a one-time check |
| Onboard profiles | 2 |
A protocol family of “unknown” means the command set is not on file for this revision. sharkfin asks the board when it is plugged in and writes once you allow it; a board that cannot say stays read-only.
Connecting
Plug the CJ87 in with a USB cable. Over a 2.4 GHz receiver sharkfin reads whatever the receiver relays: some carry the settings channel, some carry nothing, and the same model ships with both, so plug the receiver in and the app says which yours is. Writes need the cable. Bluetooth has no settings channel. Settings are stored on the keyboard itself, so everything you change keeps working wirelessly once you unplug. sharkfin never flashes firmware. On Linux, the AppImage and the browser build need a one-line udev rule before they can open the keyboard; the .deb and .rpm install it. And if you are hunting for a polling-rate or report-rate setting: there is none in sharkfin, because this hardware does not expose one.
If the CJ87 stops responding
It happens: the firmware stops answering and the app says the board needs a replug. Typing keeps working the whole time. In order:
- Close sharkfin, or the browser tab. While either is open it keeps trying to reach the board.
- Unplug the cable, wait ten seconds, plug it back in. The board needs to lose power, not just reconnect.
- Fn + Home turns the lighting back on if the backlight looks dead.
- Fn + Esc, held for about three seconds, resets the board's settings.
None of this touches firmware; nothing here can leave the CJ87 unusable.