StoryLark
◆ Open source · Preview 0.x

Read it. Hear it.
Carry it with you.

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.

The StoryLark mark — a lark ascending toward a rising sun
What it does

A complete reading app, out of the box

Everything a modern story-reading PWA needs — reading, narration, offline, and sync — driven entirely by your brand's config.

Read mode

Clean, typographically careful chapter reading with a literary serif and thoughtful spacing.

Listen mode

Pre-generated neural TTS narration with word-synced read-along highlighting, and a Web Speech fallback.

Offline

Download chapters — text and audio — for airplane mode. It's a real installable PWA.

Cross-device sync

Sign in and continue on any device — reading progress and downloads follow the reader.

Push updates

Readers get notified the moment a new chapter publishes — payload-less web push.

Themeable

A per-brand brand.json + theme.css token contract drives the entire look. One engine, many faces.

Two ways to make it yours

Re-skin it, or restructure it

StoryLark separates how it looks from how it's arranged — so most people change a few tokens, and power users can rebuild the experience.

Theme · branding

Build your own theme

Retune the visual identity: colors, fonts, logo, icons, and imagery through a documented CSS token contract with full light + dark support.

  • Copy the base brand, edit theme.css
  • Every token mirrored for dark mode
  • Swap the logo, icons, and manifest

Most users only want this.

Template · structure

Build your own presentation

Rearrange the front-end structure and UX — navigation, layout, and how the library, reader, and player compose — on the presentation layer.

  • Configure layout and nouns
  • Flat list vs. series / hierarchy
  • Reader & player composition

For power users who want to rearrange, not just re-skin.

How it works

From markdown to a narrated, installable app

Bring your own stories. The pipeline turns plain markdown into a fully narrated, offline-ready library.

1

Brand it

Add a brand under brands/<id>/ — identity, origins, and TTS config in brand.json, visual tokens in theme.css.

2

Publish content

Run your markdown through the publish pipeline: chapter JSON + neural-TTS audio + word timings, uploaded to R2.

3

Deploy

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
Built on the edge

One Worker. No servers to babysit.

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.

Cloudflare Workers D1 database R2 object storage Hono API Vite + Preact PWA Neural TTS narration

Build your own reading app

Clone it, brand it, publish your stories, and ship it to your own domain.