← All work

Alpha Android tablets · Kotlin 2026

DuoStave

An offline sheet-music reader that links two Android tablets into one open book: the left page on one, the right page on the other, turning together with a tap or a pedal. Free and open source.

Role
Side project · product, engineering and design
Stack
  • Kotlin
  • Jetpack Compose
  • Bluetooth Low Energy
  • MusicXML
  • Cloudflare Workers
Score library on the tablet
A score open in the reader, with pencil and highlighter marks
Concert mode with a setlist
2
tablets act as one open book, turning together over Bluetooth
0
servers, accounts or signal needed on stage
AGPL-3.0
open source: app, cloud Worker and web client

One tablet shows one page, and a musician turns pages far more often than they would like. DuoStave puts two tablets side by side as one open book: the left tablet shows the left page, the right tablet the right page, and they turn together.

Put the same score on both, tap Host on the left one and type a 4-digit code on the right one. From then on pages turn together, pencil marks appear on both screens as you draw, the page-turn pedal works and the screen never sleeps.

What it does

  • One open book. Two paired tablets, two full pages, one turn.
  • Offline link. Page turns, annotations and concert control travel over Bluetooth Low Energy. It works in a rehearsal hall with no wifi and no signal.
  • MusicXML, PDF and images. The same MusicXML file paginates the same way on both tablets, so the pages always match.
  • Live annotations. Pencil, highlighter, eraser and undo, mirrored on both screens.
  • Setlists and concert mode. The pedal walks through pieces and pages.
  • Score tools. Transposition, playback through a built-in synthesizer and paper score capture with the camera.

Built for the stage

A concert is the worst moment for software to fail, so most of the engineering goes into recovery:

  • Page turns are absolute and idempotent: if both tablets briefly disagree, the next message puts them back on the same page.
  • Annotations merge last writer wins on a hybrid logical clock, so marks drawn on either side during a dropout never get lost.
  • Book state persists for crash recovery, and every reconnect runs a resync handshake. If something drops, you are playing again in seconds.

Privacy

No accounts, no analytics, no crash reporting, no telemetry. Library sync and cloud backup are optional and off until you turn them on.

Open source

DuoStave is free software under the GNU AGPL v3. The Android app, the cloud Worker for sync and backup, and the web client are all in the repository, and the README explains how to build it from a clean clone and how to self-host the cloud parts.

Where it is now

It’s in alpha, in closed testing on Google Play and tested mostly on TCL NXTPAPER tablets. If you play from tablets, join the beta and tell me what breaks.

Drafted with AI, edited by hand. I publish it when it sounds like me.

Tell me what you're building.

I read every email myself and reply within a few days. Products, collaborations, Android or on-device AI work, or just a coffee in Valencia.