@morinted morinted released this Mar 5, 2016

With this new "weekly" build of Plover, we hope to start a trend of rapid releases. We'll try to push a new weekly every time there's a new feature, so you might see weekly builds on a daily or biweekly basis, depending on how much actual development gets done. One thing is for sure, though, we won't wait another 2 years (!!!) before getting improvements into your hands.

This is a "pre-release", not quite a version 3.0.0 just yet, we want to have the brave among you try it out and let us know if anything broke in a major way.

Special Thanks

This release has been a huge team effort, and I'd like to thank many people and give some credit, where due. Firstly, thanks to @balshetzer for bringing Plover to its current state, and leaving a wonderful project with consistent style to take over. It's been a joy following in your footsteps. Thanks also to @mighele for work on many features, including the dictionary editor, the retrospective commands, and the lookup window. Another huge thanks is due for @balthamos, who created the suggestions window in this release. @rbrewer123 also submitted some useful pull requests to improve the Stentura machine. @jeremy-w revived the translation transparency issue and got us set up with awesome contributing guidelines to help curious developers get started.

And in the last few months, since October, I've been hard at work with @benoit-pierre, who has been wonderful to work with. Benoit has done so much work on Plover, attacking core problems and making sweeping internal changes. He kept making pull requests and pushing for a release, he helped set up continuous integration, performed many code reviews, refactored the development environment on all systems, changed the core of Plover's steno engine, and made countless bug fixes. I can't summarize just how much he has done, you'll just have to review the commit history to see all the incredible work.

Finally, I'd like to thank @stenoknight. Without her, we wouldn't be all be stenoing together on the Discord chat, I wouldn't be stenoing my code, life would be very different. I've been overjoyed to be put in the position as lead dev for Plover, even though I'm not a Python expert like some of our other developers. I've really enjoyed getting things organized and I'm immensely proud of where the Open Steno community has managed to get Plover for this release; it's amazing to use and I hope that everyone enjoys all the new stuff! Speaking of new stuff, here's the changelog:


  • New icon
    Plover icon 128x128 2x
  • Full Unicode support on Windows, OS X, and Linux. Now you can use a non-Latin alphabet, including extended symbols such as emoji 💥
  • New lookup window to look up strokes for a word. Use {PLOVER:LOOKUP}
    Lookup window
  • Configure whether space is outputted at the beginning or end of the current stroke (default/current is " add", new option outputs "add ")
  • New option to configure whether Plover's first stroke after being turned on is capitalized and has a space.
  • New option to change the number of undos that Plover remembers. The default is 100 up from 10.
  • New Dictionary Editor that lets you view and edit strokes in your dictionaries. You can filter by stroke or definition, and add, edit, and delete entries in your JSON and RTF dictionaries.
    Dictionary editor
  • New Suggestions window, a training tool that watches what you are writing, and gives other strokes that have the same output. It's great for discovering briefs, suffixes, prefixes, and alternative strokes.
    Suggestions Window
  • "Add Translation" Transparency option to make your dictionary updates more subtle in case you have clients who get distracted by it.
  • New commands:
    • Repeat last stroke: repeats the last stroke exactly, useful for things like arrow keys to avoid having to do a complex stroke multiple times: {*+}
    • Uppercase next word, turns "word" into "WORD": {<}
  • New retrospective commands:
    • Retrospective capitalize

      Capitalize last word: {*-|}

    • Retrospective uppercase

      Uppercase last word: {*<}

    • Retrospective lowercase last word

      Lower the first letter of the last word: {*>}

    • Retrospective toggle asterisk

      Change whether the last stroke did or didn't have an asterisk: {*}.

    • Retrospective insert space

      "Split" the last two strokes, turning KAT/LOG, "catalogue", into "cat log": {*?}

    • Retrospective delete space

      Remove a space between the last two words, turning "break off" into "breakoff": {*!}

    • Retrospective currency formatting

      Using a stroke of the form {*($c)}, where you can replace "$" with your own currency symbol, Plover will adjust your last stroke, if it's a number, optionally with two decimal places, (e.g. 123412.34) into currency format (in this case, $123,412.34)

  • Delete words on empty buffer. When Plover runs out of asterisk-undos, it will start to try to delete a word at a time instead of doing nothing.
  • Add remapping of the keyboard's layout through the configuration dialog, so that users can change which keys are suppressed and which suppressed keys correspond to steno keys. For example, you can suppress the spacebar, or set "Tab" to act as S-.

Keyboard config

- **Notifications!** Information and errors are now displayed in your system's notifications system. - **New error log**. `strokes.log` now shows strokes and translation output, `plover.log` shows errors and logged information. - **Better portable mode**. Configuration file (`plover.cfg`) and dictionaries can be stored relatively, so Plover should work portably. - **Carry capitalization across characters** with a new command: `~|`. Useful for quotations, like an opening quote: `{~|\"^}` - **Radio buttons instead of red/green P for output enabled/disabled**. Tweak main user interface window to be a little more accessible for users who may have difficult distinguishing between red and green.

Plover main interface

- **Add multiple dictionaries at once**. You can now add multiple dictionaries at once instead of one at a time in the "Add Dictionary" file selector. - **Add output modes** (manage case and space character)

Introduce a new breed of meta command, "MODE". Now Plover has persistent "modes" that affect the output of the text. The core of the functionality comes from controlling just:

  • The text case
  • The space character

For the text case, users can use "CAPS", "TITLE", "LOWER". This lets the text come out IN ALL CAPS, In Title Case, and, in all lowercase.

For the space character, using "SET_STRING", users can effectively replace Plover's built in "space" character with any of their choosing. For example, youcouldsetthecharacter to nothing, or-to-the-dash, or-ow-to-ow-any-ow-arbitrary-ow-string.

Then, to disable the functionality, users can use "MODE:RESET_SPACE" to reset to the default space, "MODE:RESET_CASE" to reset to the default case, and "MODE:RESET" to clear the space character and the case.

Finally, Plover ships with some special mode names to help out programmers: "SNAKE" and "CAMEL". Snake just sets the space character to underscores,_like_this_if_you_will, and Camel sets the next character to lowercase (using "{>}"), sets the case to Title case, and sets the space character to none, thus resulting inThisOutputStyle.

Example dictionary for most of the strokes (reset space and case aren't useful to me personally):

 "KA*PS": "{MODE:CAPS}",
 "T-LT": "{MODE:TITLE}",
 "HR*R": "{MODE:LOWER}",
 "R-FT": "{MODE:RESET}",


  • Split default dictionary into 3 default dictionaries. New Plover users (or users without any dictionaries configured) will find 3 dictionaries set up in their dictionary list by default: main.json, commands.json, and user.json. "Main" contains all the words, numbers, prefixes, and suffixes from the default dictionary, whereas "commands" is just the commands, such as copy, paste, add dictionary translation, toggle Plover, et cetera. The "user" dictionary is a blank dictionary that new strokes will automatically be added to, alleviating one of the struggles of starting out learning steno and not realizing that it's important to separate your own strokes from the default strokes.
  • Add more time increments (1:05 through to 1:55) to the default dictionary, using the K- and -BG strokes.
  • Add symbols to the dictionary to match Learn Plover!
  • Roughly 20,000 entries added to the main dictionary, mainly from Mirabai's and Ted's personal dictionaries. Includes some fixes, lots of new words, and steno-specific terminology.
  • New strokes using the carry capitalize meta: update quotation strokes to better handle words starting with apostrophes, like 'cause or 'em. The default quotation mark and parentheses strokes (KW-GS, KR-GS; PREPB and PR*EPB) also should no longer force lowercase, making them better for use in your text.


  • The Linux keyboard is now suppressed while Plover is outputting (instead of sending backspace events to suppress key presses).
  • Plover windows should no longer get stuck off screen on start up, an issue that Windows users were prone to.
  • Reduce Stentura CPU usage.
  • Reduce Tréal CPU usage on Linux and Mac.
  • Mac OS X build is now 64-bit, and has retina display support.
  • Mac OS X now sends key codes instead of just strings, meaning that it has better compatibility with international layouts and legacy applications.
  • Windows now has support for all the special keys, including using the Windows key ({#Super_L() grave space})
  • "NKRO Keyboard" has been renamed to "Keyboard".
  • Command-C now copies in Mac dialogs, instead of closing them.

Development / Internal

  • Replace hard-coded key layout with customizable list.
  • Plover can be launched in development now with python2
  • Add for guidelines on submitting issues and pull requests for the repository.
  • Core stenography logic has been rewritten and reorganized, in order to make remapping of the physical layouts easier, as well as have all the stenography logic much more modularized, in preparation for multilingual configurations.
  • Continuous Integration has been set up to build on Windows, Mac, and Linux with AppVeyor and Travis CI.
  • Windows development environment setup is fully automated with a setup and build script.

Download & Install


Download and run the .exe below.


Download the .dmg file, drag Plover to your Applications folder, then go to System Preferences > Security & Privacy > Privacy > Accessibility > "+" Button > Select Applications/Plover. Now, run Plover.


You can pip install the wheel file. You can chmod +x the egg if you have all dependencies installed. Ubuntu users may need to use a backport to get the latest version of wxPython:

sudo apt-add-repository -y ppa:adamwolf/kicad-trusty-backports
sudo apt-get update
sudo apt-get install python-wxgtk3.0