Skip to content
Open Digital Typewriter
C Objective-C Other
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
img Add prototype picture to readme. Oct 16, 2018
scripts Set appropriate permissions for keylogger file. Mar 29, 2018
systemd Change project's name. Mar 27, 2018
LICENSE Update license to GPL-3. Mar 27, 2018
Makefile Primitive 4.2" support. Mar 30, 2018 Update Oct 30, 2018
arg.h Removed X11 dependancy from st. Jan 30, 2018
config.def.h Init. Jan 30, 2018
config.h Refactor makefile. Mar 20, 2018
font16.c Implement string display. Feb 1, 2018
font8.c Implement string display. Feb 1, 2018
fonts.h Implement string display. Feb 1, 2018
gooddisplay42_pinout.h Primitive 4.2" support. Mar 30, 2018
gooddisplay75_pinout.h Primitive 4.2" support. Mar 30, 2018
main.c Primitive 4.2" support. Mar 30, 2018
screen.c Primitive 4.2" support. Mar 30, 2018
screen.h Primitive 4.2" support. Mar 30, 2018
shell.nix Change project's name. Mar 27, 2018
st.c Primitive 4.2" support. Mar 30, 2018
st.h Preparing code-base for 4.2" screen. Mar 30, 2018

Ultimate Writer

Picture of the Ultimate Writer Prototype

Ultimate writer is an attempt to create the perfect digital writing device; it may also be a clickbaity name, who knows.

It was built upon the following principles:

  • Easily readable e-ink screen. You can read it effortlessly even in sunlight.
  • Long lasting battery life. You can have a 3 days writing retreat (~20 hours) without recharging it.
  • Easily serviceable design. Your typewriter is 40 years old and works just fine. You don't want to change your writing device every 5 years. You want to be able to easily change the computer parts easily; and who knows, use something else than a raspberry pi.
  • Standard OS. You want to use your favorite console-based text editor. You also want a shell access to tweak your setup without reprogramming the device.
  • Nice full-size mechanical keyboard.

My ultimate writing device is probably not your ultimate writing device. However, I think we can share a common codebase.

This repo is hosting this codebase.

Part List

  • A Raspberry Pi. Tested on 3B but should work as well on previous iterations (~40€)
  • A Raspberry Pi compatible E-Ink screen. We mainly targeted waveshare/good display 7.5" and 4.2" screens so far. (~40€) /!\ We did not manage to implement partial refresh on the 7.5" screen so far. The refresh rate on this screen is REALLY slow.
  • A 61 keys Mechanical Keyboard. (Chinese bootlegs are ~70€)
  • A generic 3.7V 2500mah phone battery. (~10€)
  • Battery charger/regulator. We use the Adafruit powerboost 500c. If you live in the EU, you should probably buy it from a local reseller to avoid import taxes. Pimoroni is quite nice (unpaid endorsement, plz Pimoroni, send free stuff!). You can probably find some cheaper Chinese bootlegs. (~15€)
  • Materials to make the case. (Can't really say a price here, depends a lot of the kind of wood you'll use).
  • Intense procrastination. (free)

Depending on where you buy those part and how much time you spend sourcing them, the final price tag will range between 100 and 200€ (half the price of a freewrite.

Build and Install

First, install raspbian on your raspberrypi.

Then, install the necessary dependencies:

  1. Download and install bcm2835.
  2. Enable SPI on your raspberry pi.
  3. Build and Install logkeys.

Then, open a terminal on the raspberry pi and build ultimate writer:

sudo apt-get install build-essential git
git clone $GITHUB_URL && cd ultimate-writer 
sudo make install

Note: The current master branch could be broken, please, use the latest release tag.

If, for some reason, you want to uninstall this software:

sudo make uninstall

You can then start the ultimate writer service. This service will display a root shell on the e-ink screen:

sudo systemctl start writerpi

If you want the service to automatically start on boot:

sudo systemctl enable writerpi


Open an issue on this GitHub repo.


Contributions are more than welcome.

If you build one of these, it'll make me very happy to see your finished work, send me an e-mail :).

If enough people build this kind of device, we'll create a website listing the various case designs.

In order to contribute:

  1. Open a GitHub issue.
  2. Fork the project.
  3. Send a PR to this repo's master branch.


This project is not fully done yet, we would like to implement:

  • UTF-8 support.
  • 7.5" screen partial refresh.
  • Get rid of Logkeys by parsing directly /dev/input events and applying the appropriate keymap.
  • Run the terminal emulator in an unprivileged environment.
  • Get a more reproducible case design (custom keyboard, integrated board design?).
  • Build and sell a small batch of these?

Special Thanks

  • Suckless team: we use a hacked version of ST for terminal emulation. (Note: the Suckless team do not endorse nor is related to this project, we just like their work)
  • Freewrite: one of the major inspirations for this project. Almost perfect, too bad it is that closed and expensive.
You can’t perform that action at this time.