StoryLark is an open-source engine for building your own branded, installable story-reading app.
One codebase → many branded reading apps. Ships as a single Cloudflare Worker over D1 & R2.
Everything a modern story-reading PWA needs — reading, narration, offline, and sync — driven entirely by your brand's config.
Clean, typographically careful chapter reading with a literary serif and thoughtful spacing.
Pre-generated neural TTS narration with word-synced read-along highlighting, and a Web Speech fallback.
Download chapters — text and audio — for airplane mode. It's a real installable PWA.
Sign in and continue on any device — reading progress and downloads follow the reader.
Readers get notified the moment a new chapter publishes — payload-less web push.
A per-brand brand.json + theme.css token contract drives the entire look. One engine, many faces.
StoryLark separates how it looks from how it's arranged — so most people change a few tokens, and power users can rebuild the experience.
Retune the visual identity: colors, fonts, logo, icons, and imagery through a documented CSS token contract with full light + dark support.
theme.cssMost users only want this. Browse ready-made themes in the gallery →
Rearrange the front-end structure and UX — navigation, layout, and how the library, reader, and player compose — on the presentation layer.
layout and nounsFor power users who want to rearrange, not just re-skin. See presentation templates in the gallery →
Bring your own stories. The pipeline turns plain markdown into a fully narrated, offline-ready library.
Add a brand under brands/<id>/ — identity, origins, and TTS config in brand.json, visual tokens in theme.css.
Run your markdown through the publish pipeline: chapter JSON + neural-TTS audio + word timings, uploaded to R2.
Provision D1 + R2, point Wrangler at your brand, and ship the Worker to your own domain on Cloudflare.
markdown → chapter JSON + TTS audio + word timings → R2 → your app
The whole app runs as a single Cloudflare Worker with a Hono API, backed by D1 and R2 — sized to fit a generous free tier.
Clone it, brand it, publish your stories, and ship it to your own domain.