SEED.html

Questions

Why does this app exist?

I wrote it for myself to use experimenting with scripted content in EPUB. The EPUB 3 format is mature and well supported, but the tooling for authoring EPUB treats it as a destination format - equivalent to a PDF or other proprietary book formats - at the end of a lowest common denominator content pipeline.

The currently available EPUB Reading Systems (like Apple’s Books app, and Cantook by Aldiko) support rich, web-like content because they’re based on web browsers. I want to explore the possibilities of EPUB interactivity but none of the existing software I’ve seen supports the kind of development experience I desire.

This app does that and meets my needs in its present form.

Supported Browsers

The SEED.html app should run as designed on recent Safari, Chrome, Edge and Firefox browsers. Other Chromium-based browsers should also work.

The app will work in these browsers on iOS, macOS, Linux, Windows and Android.

The app is available at stewarthaines.com/epub and can also be downloaded as a self-contained SEED.html file, then run from the local filesystem, whether on a computer or a mobile device.

Where are my files?

The SEED.html app runs in your web browser, and uses browser-managed local storage to store your files. Nothing is sent to a server.

The way the files are stored means you are not able to locate them on your local file system - they’re only available through the browser app.

The ‘Package EPUB’ button creates a file and downloads it to wherever your browser normally downloads files. Everything is stored in the EPUB, so this is where your files are ultimately.

My workflow treats the .epub file as the resource I need to back up. I don’t tend to rely on the Projects view for storing work. Make sure your .epub files are backed up.

Technical answer: They’re in either the browser’s Origin Private File System or in an IndexedDB store, depending on the browser and whether the app was loaded over http: or from a file: url.

EPUB Validation

It’s important that the packaged epub file passes validation. The SEED.html app can’t guarantee that the content will be valid when packaged.

Even a small typo in a css file can cause validation to fail, though the EPUB might still be readable when side-loaded or imported to a device.

I use the pagina EPUB-Checker for validation.

EPUB Reading apps

In 2025 I’ve found good support for EPUB 3 with interactive content in these applications:

I expect that there are others I don’t know about yet.

What about AI?

The SEED.html app was developed in July and August of 2025 with extensive use of Anthropic’s Claude Code product, mostly using the Sonnet 3.7 and 4 models.

Claude Code is an LLM-powered coding assistant with command-line interface capabilities. The agent wrote 100% of the code and tests for this project in a javascript framework called Svelte 5, which I had no prior experience with.

There’s no active AI in the app - it’s just an HTML file that runs locally in your browser. I have no plans to make AI or llm agents part of the app.

What about Accessibility?

The app is usable without a mouse (via keyboard navigation) and should support screen reader software.

I’m sure it could be better.

If you have something constructive to tell me please get in touch on mastodon.

Markdown or Textile?

The main reason for me using Markdown formatting is its great support in other writing tools. If you have existing workflows or preferences I’d suggest sticking with one of the Markdown libraries from the sample EPUBs.

I use the Obsidian app heavily and am very comfortable with Markdown in this environment.

For EPUB authoring I lean towards Textile in my projects because of:

  • The smaller size of the javascript library
  • The ease of adding attributes (like id and class and data-src)
  • A more explicit relation between the source formatting convention and the ultimate xhtml representation.

I started out assuming Markdown was the only choice, but I’m coming around to using Textile in this environment.
The other formats that there are samples for are interesting (Asciidoc, LaTeX )and I hope someone finds good uses for them in EPUBs.

Can I get support? Where do I report bugs?

I’m not offering support at this time. I developed the app for my own use and hope it is of interest to at least a few other people in its current form.

If you find a show-stopper of a bug and really want to tell me about it please get in touch on mastodon.

What about other languages?

I’m very interested in making the app useful to writers in non-English languages, particularly right-to-left writing systems and other non-latin based scripts.

I have a weblate project on codeberg for managing localisations.

If this is something you’d like to help me work through to extend the utility of the app to new users please get in touch on mastodon.

What about DRM?

People smarter than I am have worked on this and only managed to create easily breakable protections for digital books.

I have zero time for thinking about restricting access to digital media created with this software.

Use this app to make stuff for your friends and family so you don’t need to worry about locking it down.

What is the project stack?

Written in Typescript using Svelte 5 with a vite 6.3 dev environment on node v20.18.

Builds to a single SEED.html file using vite-plugin-singlefile to inline scripts, styles and other assets.

It uses browser APIs:

  • Compression Stream and Decompression Stream for packing/unpacking .epub files
  • OPFS and IndexedDB for storing file data
  • blob urls for making assets available for local preview

This architecture makes it convenient to embed into a web page, like you can see on stewarthaines.com/epub which is hosted on github pages, and served via the Cloudflare cache.

What was the development process?

All application code and tests for this version of the app were produced using Anthropic’s Claude Code product, mostly with the Sonnet 3.7 and 4 models.

I previously wrote a version using claude with a VueJS stack (v0.3.0 here while it lasts that included markdown-it), and before that wrote a VueJS version “manually” (check out v0.2.0 here) that used Remark from the Unified ecosystem.

The ideas have been well worked over in this process but I expect this is not the ultimate form of a scriptable browser-based EPUB authoring environment.

Who made this?

My name is Stewart Haines. I live in Naarm/Melbourne, Australia.

I’m on Mastodon to support this project as @[email protected] (SEED.html)