StoryLark
◆ Open source · Preview v1.0.0

Read it. Hear it.
Carry it with you.

StoryLark is an open-source engine for building your own branded, installable app for reading and listening to standalone stories, complete books, or both.

One codebase → many branded reading apps. The recommended installer deploys to Cloudflare; Azure is supported too.

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 — progress, bookmarks, and preferences sync. Offline downloads stay on the device that downloaded them.

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. Browse ready-made themes in the gallery →

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. See presentation templates in the gallery →

How it works

From markdown to a narrated, installable app

Bring standalone stories, multi-chapter books, or a mixed library. The pipeline turns plain markdown into a narrated, offline-ready app.

1

Brand it

Add a brand under brands/<id>/ — identity in brand.json, visual tokens in theme.css. Origins and TTS config live in a separate per-install deployment.json, so a theme never carries someone else's server addresses.

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 default deployment is one Cloudflare Worker with a Hono API, backed by D1 and R2 and designed for the free tiers. An Azure deployment path is also included.

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

Build your own reading app

Create a publisher site with npm, brand it, publish stories or books, and ship it to your own domain. Clone the engine only when you plan to develop or fork StoryLark itself.