ExplorInk
GitHub

Working prototype · active development · open source

A paper map that
knows where you are.

ExplorInk is an open-source map for e-ink readers: on foot in a city, on a trail, on a bike, on a motorbike, out of a car window, anywhere you go looking. A map you read by daylight: reflective panel, no backlight to wash out, no battery gone by lunch. The freedom of a paper map, plus a dot that knows where you are. Drop a Camp pin and when it goes off the screen you get an arrow at the edge pointing at it, with 23 km under it.

It does not give directions. No routing, no voice, no rerouting: miss a turn and you notice it the way you would on paper, by looking. What it replaces is the phone as your screen. The phone stays in your pocket, sending its GPS fix over Bluetooth, and stops being the thing you look at.

The map has no edge. No region packs to pick and manage. Switch auto-sync on and moving onto a square nobody has built is the request: the reader asks the phone, the public tile server builds it in about twenty seconds, and it draws about a minute later while you keep moving. New ground needs the phone to have signal at that moment. Everything already on the card stays readable with no signal at all, and the reader’s sync screen fills in the squares it noticed were missing while you were out, at home, over a real connection. Both, not one or the other.

It runs today, on real hardware: firmware on an ESP32-C3 reader, the app on the phone in your pocket. Every screen on this page came off a real panel, except the one tagged preview, which says so.

  • 4.3″e-ink, 480×800, 220 PPI
  • 18 to 27 hfrom two rides, map open, phone linked
  • 0bytes needed for ground you already have

Built on CrossPoint Reader. Map data © OpenStreetMap contributors.

The X4 panel drawing a town: outlined buildings, hatched forest, roads of different widths
real panel buildings, forest and water, 960 ms

01 · why e-ink

A phone is a bad map when you need it open all day.

The screen washes out in direct sun. It cooks in a mount. The battery you also need for photographs and a phone call is the one running the screen. A motorbike makes every one of those worse and adds vibration, gloves and rain, which is why this started there, and a phone strapped to a bar bag on a long walk fails the same way. E-ink has the opposite properties, and one hard cost you have to design around.

What a day in a mount does to a phoneThe detail
Heat. Apple’s own spec says an iPhone is made for 0 to 35 °C ambient a dark mount in full sun sits above that, and the phone throttles to protect itself (Apple’s note)
Vibration. Apple says it plainly about its own hardware engine vibration can permanently damage the camera’s stabilisation, and the repair is a few hundred euro (Apple’s second note)
Gloves. Capacitive glass does not answer through winter gloves you stop, or you take a hand off the bars
Water. The mount is fine until the charging port is not an adventure riding school names water in the USB charging port as the first thing to die
Battery. The phone is also your camera, wallet and emergency call screen-on navigation is what empties it

Readable in daylight

Reflective panel, no backlight to wash out: it reads by the light already falling on it, the way paper does. Glance, done.

All day, and then some

The panel needs no power to hold a picture: current goes into changing it. The electronics still cost something, so two rides with the map open and a phone linked averaged 24.0 and 35.6 mA, which is 18 to 27 hours on this cell. Tens of hours, not a phone-screen afternoon.

Slow, and grey

A clean refresh takes 1,684 ms, a fast one 500 ms, both measured on the panel. Four grey levels cost an extra waveform pass. That rules out a moving map.

So: a still picture

Position, route, surroundings: redrawn rarely, readable at a glance at speed. No rerouting, no voice, no traffic. The route is planned before you leave.

Free, and yours to install today

Firmware for the reader, the app for your phone. Both open source, both a real download, no account.

Download and install

Side by side with a phone, a Beeline and a Garmin, our own gaps included: how it compares. Rain, a dropped link, no phone at all: the FAQ answers those.

The panel numbers, and what they force on the renderer, are on drawing a map on e-ink; the hardware they were measured on is on the hardware page.

who it is for

Made for exploring, honest about each use.

One device, many ways to travel. What they share is the reason for carrying it: you are exploring, not following a line. The status of each use is different, so here it is without the sales gloss.

A city, on foot

The use this is built for now. You walk, you turn on what you see, and the reader says which quarter you are in and where the hotel is. Town, village and quarter names draw on the panel today. Street names and the practical places, a toilet or a drinking fountain, are built in the map data but have never run on a device, so they are a plan and not a feature.

Hiking, and the terrain half is new

Tens of hours on a charge and light in a pocket suit walking well. Contour lines with height numbers, rock faces, path difficulty and waymarked routes are built and in the map data as of this week. They have not been looked at on a panel yet, so how well terrain reads in the hand is still an open question rather than a claim.

Travelling by car, bus or overland

A second screen that does not steal the phone: the map stays open for hours while the phone keeps its charge for the camera and the calls. Abroad it draws from the card with no roaming, and the country you are crossing gets built as you reach it, whenever the phone has signal. Nobody has run it a whole day at road speed yet, so how often it wants to redraw from a car is untested.

Motorcycle adventure and trail riding

Where the project started, and the mount is solved: dash or bar cradle, gloves on the buttons, ride and hike and cycle road filters, a route framed whole before you set off, pins for camp and fuel. Tested on a real bike.

Bikepacking and gravel

Same needs, a different mount. An ordinary phone bar cradle holds it, which is what the motorcycle shots use, but nothing has been ridden far enough on gravel to say what shakes loose. Everything on the screen already suits a long day at 20 km/h.

02 · the screen

Real framebuffers, not mockups.

The ones tagged device came off the panel over USB: send a coordinate and the device draws what is around it from tiles on its SD card. The one tagged preview is the same renderer running on a laptop against the same tiles, which is how styling gets tuned without reflashing. We keep the two labelled apart on purpose.

Honest caveat: the device renderer follows most of the style spec now: road widths and casings, buildings, forest, built-up, filled water with waves, and railways as a blocked line all draw on the panel, and the route draws with them, and so do place names. Junction dots exist in the spec, not yet on the glass, and neither do the edge markers for a village just off the screen. The laptop preview is the other way round for the route: it renders everything here except the route line, so that one is judged on the device only.

How the names get on the glass without blanking out the map: place labels on a one-bit panel. Why the map stands still while the marker moves: the track-up map.

03 · how it is built

Four parts. All four exist.

  1. 01

    Map builder laptop

    Fetches an area from OpenStreetMap, projects and clips it, routes along real roads, and writes binary .tib tiles at three levels of detail. A browser tuning tool renders a pixel-exact 480×800 preview, so the styling gets judged as e-ink instead of as a pretty vector map. How the tiles are built.

  2. 02

    Tile server tiles.explorink.com

    The built maps are on a public server, so nobody has to run the map builder to go riding: the phone downloads the squares the reader is missing, one plain file per square, and reads a small index to tell an empty square from one nobody has built, and a square that has gone out of date from a current one.

    It also builds what it does not have. A square that comes back missing is written to the server’s own log, and a builder on the host takes the ten most-asked-for squares of the last day and builds them from OpenStreetMap straight into what it serves, about twenty seconds for a 13 by 13 km area. Nothing already published is ever rewritten, and the day is capped, so an unattended builder cannot run away with the disk.

  3. 03

    Firmware ExplorInk, on the reader

    A fork of CrossPoint Reader, MIT licensed and public. Map screen, BLE position receiver, tiles off the SD card, zoom and marker height on the physical buttons, ride / hike / cycle filter, pins, and a command console over USB serial and BLE. The e-reader stack comes out; maps go in. Source on GitHub.

  4. 04

    Phone app Android · iOS planned

    Sends the phone's GPS fix to the device over BLE every few seconds and records every fix and packet for replay. One window, no settings screen, foreground service: it keeps sending with the phone locked in a bag. It touches GPS only while the reader is actually connected, and shuts itself down a few minutes after the reader goes away. The reader opening its map starts it again. It is also the reader’s way to the tile server. What the phone app does, and where iOS stands, how the BLE bridge works, or the app source.

OpenStreetMap map builder laptop, or the server itself tile server tiles.explorink.com phone over BLE SD card .tib tiles e-ink panel phone GPS over BLE

The whole chain, part by part: what each piece hands the next one, and why it is split this way.

what it costs

You will never pay to read a map.

Outdoor mapping is a subscription business. Offline maps, the one feature that matters when there is no signal, usually sit behind the paid tier, and the bill runs from about $40 to $100 a year, per app, forever. Abroad without downloaded maps you pay again in roaming.

The software is free and open

Firmware and phone app, MIT licensed, source public. No account, no login, no trial.

The maps are OpenStreetMap

No licence to buy, no region to unlock. A square on your card is yours, offline, forever.

If we ever charge, we will tell you what for

Building and hosting tiles on our servers costs money every month. A paid tier, if it comes, covers that: priority builds and hosted access. Never the firmware, never the app, never a map already on your card.

04 · status

What works today.

A working prototype, in active development. Formats, the render spec and the BLE protocol still change without notice, so do not build on them yet. The short list of what is on the device now:

  • Firmware: map screen drawing OSM tiles off the SD card, on real hardwareworks
  • Firmware: BLE position receiver; the phone app sends the fix and records the rideworks
  • The marker follows the fix; the map only redraws when it has toworks
  • Seven zoom rungs, 1 to 45 m/px, on the physical buttonsworks
  • Track-up or north-up map, with the north indicator turning with itworks
  • Town and village names on the map, outlined in white, kept off the routeworks
  • Routes: build one from waypoints, a GPX file or a recorded ride, and see all of it at onceworks
  • Public tile server, live: maps served square by square, so nobody has to build oneworks
  • Missing squares fetched mid-ride: the device asks, the phone brings them over BLEworks
  • The tile server builds what riders ask for, unattended, in about twenty seconds an areaworks
  • Pins (park here, camp here) saved at your position and still there after a rebootworks
  • Phone app: read, save and delete the reader's pins from a coordinate, a geo: link or a shared map linkworks
  • Open the map and the phone starts sending on its own, app closed, nothing tappedworks
  • Downloads: firmware images and the Android APK, with an install guideworks
  • Tile server: builds the new version-4 tile format; every device in the field keeps reading version 3works
  • Contour lines, height numbers and rock faces on the hike map, built and not yet seen on a panelon the bench
  • Route following and off-route warning on the deviceplanned
  • Renderer: junction dots and off-screen place markersplanned
  • A packaged release: one-click installer and a signed appplanned

That is the short list. The full status list is on the development page, item by item, next to the dated log of when each one landed. Everything marked works is on a reader you flash yourself today.

05 · development log

Recent work, newest first.

  1. A new map format on the tile server, and nothing changes for you

    Tiles went from version 3 to version 4, and the server that builds them for everyone now writes the new one on an empty shelf: no area was carried across. Version 4 exists so the next format change is not needed at all, which is what lets terrain and street names arrive later without every card reading stale. Every published firmware reads version 3, and version 3 is still served untouched.

    Why the order of that rollout matters

  2. Contour lines, height numbers and rock faces

    The hike map got its terrain: contours from NASA elevation data, 20 m apart up close with every fifth one heavier and carrying its height as a number that follows the line with the digits pointing uphill, plus rock faces drawn with combs on the side you would fall down. Path difficulty and waymarked routes are in the tiles now too. Drawn by the real renderer on a laptop, not yet seen on a panel.

    What a hardware pass still has to settle

  3. You can install it yourself now

    Three firmware images and the Android APK are published files, with the flashing commands, a back up your reader first step and the device table next to them. The firmware image is the exact binary that was confirmed working on an X4, not a rebuild of it. Still a maker’s install: a USB cable and one command line tool, about half an hour.

    The install page, with what is still untested

The full dated log: every entry, newest first, next to the status list. The repo carries one topic document per hardware finding: how the panel actually behaves, and why the obvious approach fails.

06 · the hardware

A reader off the shelf, not a dev board

A pocket e-ink reader, bought off the shelf. Not a dev board, not Android, no ADB: an ESP32-C3 with a display driver and physical buttons. Everything ExplorInk does has to fit in that. One binary covers the Xteink X4 and X3. It probes which panel it woke up on.

Panel
4.3″ e-ink, 480×800, 220 PPI, no touch
Grey
4 levels; 500 ms fast refresh, 1,684 ms clean, measured; map fills use 2×2 dither
SoC
ESP32-C3, WiFi + Bluetooth 5 LE
Heap
247 KB total; 58.5 KB free with the map and BLE up, measured
Storage
16 MB internal flash, maps on a separate SD card
Input
Physical buttons only, usable with gloves
Mount
Magnetic back: any MagSafe phone mount, bars, stem or dash

What hardware ExplorInk runs on, and everything we measured on the Xteink X4.

Xteink X4 in a bar mount on a motorcycle handlebar, chrome headlight and speedometer beside it, the panel showing a city map with the place name and clock along the top, a home pin at 5.4 km and a 500 m scale bar
A motorcycle bar, an overcast morning, no backlight and no sun shade. That is the whole point of e-ink.
Xteink X4 held on a magnetic car dashboard mount next to the car's own navigation screen, showing a real schematic map with a position marker, zoom controls and Exit/Select/Up/Down button labels
Real test drive, real panel: coordinates, ride time, tiles read and draw time in the debug line up top.

07 · early access

Installs today from a download. Get the one-click build when it lands.

You can put ExplorInk on a reader right now, and there is nothing to build: three firmware images and the Android APK are published files, the maps come off the public tile server with nothing to set up, and the install page has the commands next to the downloads. It takes a USB cable, one command line tool and about half an hour. What does not exist yet is a one-click installer and a signed app in a store. That is what comes next. Leave an address and you hear from me once, when there is something to put on a device without a command line.

Do you already own an Xteink X4 or X4 Pro?

One address, held by Comsultia, s.r.o. and used only to tell you when ExplorInk installs without a toolchain. No list, no sharing, no newsletter.

08 · get in touch

Built at Comsultia, in the open.

ExplorInk is developed by Comsultia, s.r.o., a software company in Slovakia. It started because I ride, and I wanted a display that survives a sunny day on a handlebar. The firmware and the phone app are public and MIT licensed, and every hardware finding is written down in the firmware repo. If you are doing something similar on e-ink reader hardware, or you want to try it, or you just want to tell me the map style is wrong, write to us.

Email

roman.fordinal@comsultia.com

Company

comsultia.com

Comsultia, s.r.o., the company behind ExplorInk.

Code

github.com/rfordinal/explorink

Firmware, docs and every hardware finding. MIT licensed. The phone app is at explorink-android.