Two octaves, playable with touch, mouse or keyboard.
Live demo: piano.felipefialho.com
- 24 keys with sampled notes, starting at C4.
- Play with touch, mouse or your computer keyboard. Keys stay down while held.
- Installable PWA that works offline, with all samples precached.
- Light and dark themes that follow your system preference.
| Octave | White keys | Black keys |
|---|---|---|
| Lower | Z X C V B N M |
S D G H J |
| Upper | Q W E R T Y U |
2 3 5 6 7 |
Vite, TypeScript, plain CSS, Howler.js and Vitest. Fonts (Bodoni Moda and Instrument Sans) are self-hosted.
Requires Node.js 22.12+ and pnpm.
pnpm install
pnpm devpnpm dev: start the dev server with hot reloadpnpm build: type-check and create adistfolder to deploypnpm preview: serve the production build locallypnpm test: run the unit testspnpm typecheck: run the TypeScript compiler without emittingpnpm lint: lint TypeScript and CSSpnpm lint:fix: fix lint errors automaticallypnpm generate-pwa-assets: regenerate the PWA icons frompublic/images/piano.png
src/piano/ key handling and note playback (with tests)
src/styles/ plain CSS, split by concern
public/medias/ one MP3 sample per note
public/images/ PWA icons and social image
logo/ logo files
See SECURITY.md to report a vulnerability.
MIT License © Felipe Fialho
If you enjoyed it, you can sponsor my work on GitHub.
