Javelin

From Plover Wiki

Javelin is an embedded steno engine that is installed as a keyboard firmware. Javelin translates steno strokes to text in exactly the same way that Plover does. However, as Javelin's steno engine is embedded in the keyboard firmware itself, no extra software (such as Plover) is required on the host device.

Demo of Javelin's embedded steno engine on an Android phone.

All translations are contained within the keyboard itself ("plug-and-play stenography"). Javelin outputs the translations as if they were coming from a regular keyboard. Therefore, Javelin is compatible with any device that accepts regular USB keyboard input.

Javelin is written in C++, and authored and maintained by community member Tharelia. The recommended method of downloading and customizing Javelin is through their personal website.

Popular use cases include:

  • Typing on smartphones (which cannot run Plover)
  • Typing on work computers (where the installation of Plover may not be an option)
  • Moving between multiple devices with the same dictionary

Compatibility

Javelin is compatible with several commercially available hobbyist writers. For a complete list, visit the firmware builder and check the hardware dropdown.

As of May 2025, the following writers are supported:

Typing on a device equipped with Javelin works on any modern device that accepts USB keyboard input. This includes smartphones, Chromebooks, tablets, etc.

For iPhones with a lightning connector, a camera kit is required.

Installation Instructions

To use Javelin on your hobbyist steno writer, you will need to update the firmware. This involves downloading a Javelin firmware file, and copying it to your device.

The following video by community member Aerick goes through this process at 1:06:

format=frameless
format=frameless

You will need a computer running a desktop OS (e.g. Linux, macOS, Windows) to update your steno writer's firmware. You cannot update firmware using an Android or iOS device.



1. Select your steno writer

Firmware files can be downloaded from the Javelin firmware builder. Before proceeding, make sure the correct device is selected.

Make sure you have selected the right device before proceeding.

2. Download a firmware file

2a. New users

For new users, download either the Default Plover or Default Lapwing files depending on which theory you want to use.

Download either Default Plover or Default Lapwing.

2b. Advanced users

If you wish to customize your Javelin configuration, select the options you want, and download either incremental or standalone depending on your needs.

3. Copying the file to your device

The instructions to update your device differ depending on the board you are using; make sure you have selected the right board as outlined in step 1. You can find instructions to update your file's firmware at the bottom of the page. In general, most boards require you to hold down a button while plugging it in, and copying the firmware file you downloaded (in step 2) to the new drive.

Web Tools

Since Javelin is not a computer application, many of the same features that Plover offers are accessible through the web tools on the Javelin website.

This includes GUI tools for Add Translation, Lookup, Paper Tape, Suggestions, and more. The key layout can also be modified through this tool.

Web tools connect to Javelin-equipped writers with WebHID, which is currently supported on Chrome, Edge, and Opera only.

Troubleshooting web tools connection on Linux

If you see Error connecting while trying to connect to your device with the web tools, you need to add a udev rule. Create a file at /etc/udev/rules.d/99-keyboard-javelin.rules with the following content:

SUBSYSTEM=="hidraw", ATTRS{idVendor}=="9000", ATTRS{idProduct}=="400d", MODE="0666"

After creating the file, reload the rule with the following commands:

sudo udevadm control --reload-rules
sudo udevadm trigger
format=frameless
format=frameless

If this does not work, try replacing 9000 with feed.



Features

This section covers some noteworthy features of Javelin. If you wish to view all of the available settings and features, have a look through the Javelin firmware builder. You may have to select Show expert options to find the option you are looking for.

Embedded steno engine

Dictionary management

Several programmatic dictionaries are implemented in Javelin, and arbitrary JSON dictionaries can be added.

Adding your own arbitrary JSON dictionaries is fully supported. Using the web tools or custom defined outlines, it is possible to temporarily disable dictionaries.

Compared to Plover, however, it is not possible to add your own programmatic dictionaries (such as Python dictionaries) using the firmware builder. Some popular Python dictionaries have been implemented in Javelin, such as Emily's symbols and Jeff's phrasing. That is to say, they have been rewritten in C++ and added to the firmware builder as options. Currently, there is no officially documented way to write a programmatic dictionary for Javelin (although it is possible).

Non-WSI layouts

By default, Javelin uses Extended Stenotype layout; Javelin supports non-WSI layouts by specifying a System file in the firmware builder. Expert options must be enabled to see this, and example system files are linked from the firmware builder page.

It is currently not possible to have more than one system on a device at a time.

Unicode characters

Javelin supports several methods to write Unicode characters, which are all dependent on the host device. Using the settings in the web tools, the Unicode mode can be set to allow writing such characters on Linux, macOS, and Windows. Using the firmware builder, the default Unicode mode can be specified.

All the methods that Javelin supports to write Unicode characters.

Key map customization

Like with Plover, the key map can be set in Javelin to allow for tweaks such as top `S` number key, or changing the placement of the thumb keys on various boards.

Javelin supports setting an arbitrary key map.

Adding translations

Using the web tools or a defined outline, it is possible to add translations to a user dictionary just like in Plover.

On-the-fly translations can be added with Javelin. In this case, <code>POEUT</code> is a free outline, and "potato" is being fingerspelled for the translation.

First-up and chord repeat

Using the firmware builder, it is trivial to add first-up chord send or chord repeat functionality to your board.

Javelin makes it very easy to add first-up/chord repeat compared to other keyboard firmwares.

Compatibility with existing steno protocols

Instead of outputting regular text, Javelin is also capable of outputting steno protocols such as Gemini PR or Plover HID. The Default Plover and Default Lapwing firmware files already have such layers configured. This is useful if you plan to still use Plover.

Public GitHub Repositories

In select situations, one may desire to build firmware without the use of the lim.au website.

The public Javelin GitHub repository and its readme can be accessed here.

The Raspberry Pi Pico bindings can be found in this repository.