A free, open-source piano trainer that runs in your browser.
Learn a piece with falling notes or sheet music, play it on a MIDI keyboard or an acoustic piano, and get instant feedback. Practise in wait mode, play along at your own tempo, loop the hard bars and track your progress. No account, no tracking, no payment. Ever.
User guide · FAQ · Documentation · Discussions · Contributing · Roadmap
Status (October 2026): working app, not yet released. Practice in wait, listen and play-along modes with a MIDI keyboard (Chrome, Edge, Firefox), the microphone or the on-screen keys; falling notes and score views; a catalogue of 81 reviewed public-domain pieces; your own MusicXML, MuseScore, ABC and MIDI files; English and German. Before a public release: the microphone test on real pianos a legal review and the deployment. There is no hosted version to try yet; you can run it yourself in a few minutes. See PLAN.md.
- Three ways to practise. Wait stops at each chord until you play it, Listen plays the piece to you, Play along scores your timing as the piece moves on.
- Falling notes, sheet music, or both. Fingering numbers, a hand-coloured overview of the whole piece, and a keyboard that lights up what to press.
- Practise the hard bits. Left or right hand alone, loop any range of bars, slow the tempo down, transpose, turn on a metronome.
- Play what you have. A MIDI keyboard, an acoustic piano through the microphone, or the on-screen and computer keys.
- Sight-reading drills. Endless, generated flash-card practice for reading notes on the staff.
- The Player. Your whole library and the catalogue played like a self-playing grand piano, on your keyboard's own sound when one is connected, with the sustain pedal and phrasing, a queue and a music-stand view.
- 81 public-domain pieces, from folk tunes to Bach and Beethoven, sorted into a five-level path. Every piece has a recorded source and a reviewer.
- Bring your own music. Import MusicXML, MuseScore, ABC or MIDI files, or even a recording of a piano. Your library never leaves your device.
- Works offline. Once loaded it keeps working without a connection, and you can install it as an app.
- Private by design. No account, no analytics, no cookies, no third-party requests.
- Accessible. High contrast, large print, reduced motion, left-handed layout, keyboard-only use.
- English and German.
OpenTiles is built for a computer with a MIDI keyboard or a piano in the room.
| Browser | Status |
|---|---|
| Chrome, Edge (desktop) | Supported, including MIDI keyboards |
| Firefox (desktop) | Supported, including MIDI keyboards |
| Safari (macOS, iPadOS) | Not supported. It has no Web MIDI and the app does not work in it. |
Phones and tablets are not a target. An experimental iPad app, which reaches MIDI keyboards over
USB and Bluetooth, is in the repository (apps/ios-shell). It is not in
the App Store: you sign it with your own Apple ID and install it yourself
(Installing the iPad app). First tried with a keyboard on 2026-10-22.
Commercial piano apps lock their whole learning experience behind subscriptions — including the public-domain classics that make up much of their catalogue. OpenTiles makes the practice tool itself free: interactive feedback, wait mode, looping, tempo control and progress tracking. The music is either public domain or your own.
| Principle | In practice |
|---|---|
| Free forever | No paywall, ads or premium tier on any learning feature |
| Bring your own music | Your library is private; the platform never shares or distributes your files |
| Public-domain-only catalogue | Every catalogue piece is verified public domain or CC0, with provenance recorded |
| Runs in the browser | A web app: nothing to install, and it keeps working offline once loaded |
| Local-first and private | Works offline; files stay on your device; optional sync is end-to-end encrypted |
| Open by default | AGPL-3.0 code, open formats (MusicXML, MIDI), CC0 catalogue metadata |
- Inputs: a MIDI keyboard (where the browser supports Web MIDI), the microphone for acoustic pianos, or the on-screen keyboard.
- Score-informed listening: the app always knows which notes come next, so the microphone only has to answer "are these notes sounding now?". That is what makes acoustic pianos work in a browser. The detector is written in Rust and runs as WebAssembly inside an AudioWorklet.
- Your files, on your device: MusicXML (
.musicxml,.xml,.mxl), MuseScore, ABC and MIDI (.mid) files are converted in the browser and stored in your browser's private storage. Nothing is uploaded.
Read more in docs/architecture.md and the full project specification.
You need Node.js ≥ 22.12, pnpm 10 and
Rust (stable, with the wasm32-unknown-unknown target, which
rust-toolchain.toml installs for you).
git clone https://github.com/KunalGehlot/OpenTiles.git
cd OpenTiles
pnpm install
pnpm build:engine # compiles the note detector to WebAssembly
pnpm dev # http://localhost:5173Run the checks:
pnpm check # format, lint, typecheck, unit tests
cargo test --workspace # engine tests, including the synthetic accuracy harness
python3 tools/pipeline/validate_catalogue.pyNew to the code? The development guide has the repository map, the rules every change keeps, and how to run the end-to-end tests.
| Path | Contents |
|---|---|
apps/web |
The web app (React + Vite, PWA) |
apps/ios-shell |
Experimental iPad app (Capacitor + CoreMIDI), self-signed |
apps/sync-api |
Optional server for end-to-end encrypted backup and sync |
packages/engine |
Rust note-detection engine → WebAssembly, with its AudioWorklet |
packages/song-model |
The Song model and MusicXML / MIDI parsers |
packages/practice |
Practice engine: wait mode, play-along scoring |
packages/importers |
Lazy-loaded heavy converters (MuseScore, recordings) |
catalogue/ |
Public-domain scores and their provenance records |
tools/pipeline |
Catalogue validation and build scripts |
docs/ |
Guides, specification and decision records |
- Questions, ideas, or something you made with it? Start a discussion.
- Found a bug? Open an issue — there are forms for bugs, feature requests, microphone problems, translations and catalogue pieces.
- Want to help? Code, catalogue reviews, recordings for the detector test set and translations are all welcome. Start with CONTRIBUTING.md and look for good first issues.
- Security problem? Report it privately; see SECURITY.md.
All participants follow the Code of Conduct.
The code is AGPL-3.0-or-later. The catalogue's metadata and the pipeline scripts are CC0; every catalogue score is public domain or CC0 with its provenance recorded. OpenTiles was written with an LLM under the maintainer's direction; CREDITS.md says how, and credits Sightread, the free piano app that came first.


