# Parchment: A Web-Based Interactive Fiction Player with a Single-File Build

> Parchment is a TypeScript web app that plays Interactive Fiction in the browser, supporting multiple formats and offering a single-file build for offline use. It is a practical choice for authors and archivists, though its Linux-only build process and submodule dependencies demand careful setup.

**curiousdannii/parchment** — The Interactive Fiction web app

- Repository: https://github.com/curiousdannii/parchment
- Website: https://iplayif.com
- Stars: 491 · Forks: 73
- Language: TypeScript
- License: MIT
- Published: 2026-08-23 · Updated: 2026-08-23 · Language: en
- Canonical page: https://hysenlabs.com/projects/curiousdannii-parchment

## What Parchment Solves and Who It Serves

Parchment addresses a specific problem: playing Interactive Fiction (IF) stories directly in a web browser without requiring the user to install a native interpreter. It is designed for authors and players who want to share stories as web pages, and it is the default player bundled with Inform 7, a popular authoring system. The project serves two audiences: authors who want to publish their stories online, and players who want a convenient way to play a wide range of IF formats. The README states that Parchment supports Adrift 4, Glulx, Hugo, TADS 2/3, and Z-Code, making it a multi-format player rather than a single-interpreter utility. This breadth is its core value proposition, as few web players cover so many formats in one package.

## How It Works: Interpreters and the Glk Layer

Parchment is not a single interpreter but a wrapper around several upstream projects, each compiled to JavaScript or WebAssembly. The README lists these as Git submodules, including Glulxe for Glulx, Bocfel for Z-Code, Hugo, Scare for Adrift, and TADS. These interpreters communicate with the browser through a common API called Glk, a standard for IF user interfaces. Parchment uses AsyncGlk, a JavaScript implementation of Glk, to handle input and output. The 2025.1.14 release notes mention a new Emglken, which likely integrates these interpreters more tightly. The data flow is straightforward: the player loads a storyfile, the appropriate interpreter runs it, and Glk calls render text and receive commands. The browser acts as the display and input device, and the entire system runs client-side, meaning no server is required beyond serving static files. This architecture is what allows Parchment to be packaged as a single file, as all interpreters and the UI are bundled together.

## Getting It Running: Commands and Config

The build process is explicit and assumes a Linux environment. The README warns that Parchment is only designed for building in Linux and may not work elsewhere. You need Git and Node version >= 16. The first step is cloning with submodules: git clone --recurse-submodules https://github.com/curiousdannii/parchment.git. Then you run npm install and npm run build. After that, you cannot open index.html directly from the filesystem as a file:/// URL; you must serve it over HTTP. The README suggests npm start, which launches a simple web server at http://localhost:8080. This server also watches the src folder and automatically rebuilds the web code on changes, which is a nice development convenience. For authors using Inform 7, there is a specific command: npm run inform7, which produces dist/inform/parchment-for-inform7.zip. That zip can be unzipped into the Templates subfolder of an Inform 7 project to update the bundled Parchment. These commands are the entire setup; there are no config keys to tweak, which keeps things simple but also inflexible.

## Limitations and Failure Modes

The most obvious limitation is the Linux-only build. If you are on Windows or macOS, the README says it may not work, and there is no alternative path provided. This is a real barrier for many developers, as the project is written in TypeScript and could theoretically be cross-platform, but the maintainers have chosen to restrict it. Another limitation is the requirement to clone with submodules. If you forget the --recurse-submodules flag or your Git configuration skips submodules, the build will fail because the interpreter sources are not included. The README does not describe a fallback for this case. Additionally, the single-file build is available for download from the releases page, but the README does not explain how to customize it beyond using the site generator. The site generator at https://iplayif.com/api/sitegen is a separate service, and if it goes down, you cannot produce a single-file build locally without reverse-engineering the build process. Finally, running from a file:/// URL fails, which means you cannot just double-click index.html to test; you must always run a server, which is a minor annoyance for local testing.

## The Single-File Build and Offline Use

A distinctive feature is the single-file build, which the README promotes as suitable for downloading and using offline. This is a significant advantage for archivists and users in low-connectivity environments. The site generator allows you to create a single-file version that supports all the formats Parchment handles, so you can bundle a story and the player into one HTML file. That file can be distributed via email, USB, or a static host, and it runs entirely in the browser. This approach contrasts with the Inform 7 integration, which produces a zip file for templates. The single-file build is a practical solution for authors who cannot recompile their storyfile or who want to distribute a story without relying on a server. However, the README does not detail how to embed a specific story into the single file; it only says the site generator supports it. This lack of documentation is a gap, though the site generator itself likely provides a form for uploading a story.

## Maintenance, Licensing, and Upgrade Cost

Parchment is actively maintained, with releases dated 2026.8.23, 2026.8.1, and 2025.1.14. The release notes for 2025.1.14 highlight a major change: the new Emglken. This indicates ongoing development, but it also means upgrade costs are not trivial. Upgrading Parchment in an Inform 7 project requires downloading a new zip and unzipping it into the Templates folder, as per the README. For custom builds, you must pull the latest submodules, which can introduce breaking changes if upstream interpreters change behavior. The license is MIT, but the project incorporates components under other licenses: Bocfel, Glulxe, and Scare are listed with MIT or GPL-2.0, and TADS is GPL-2.0. This mix means that if you distribute a build, you must comply with the GPL for those parts, which could affect your own licensing. The README does not offer guidance on this, so you should review each upstream license before redistributing. The maintenance cost is moderate: you need to track submodule updates and test across formats, but the release cadence suggests the maintainers handle most of the heavy lifting.

## Alternatives and How They Differ

The main alternative to Parchment is Gargoyle, a desktop IF interpreter that supports the same formats. Gargoyle is a native application, not a web player, so it runs on Windows, macOS, and Linux without a browser. The difference is fundamental: Parchment runs in the browser and can be embedded in a web page, while Gargoyle is a standalone executable. For web distribution, Parchment is the only viable option among the two, but for offline desktop play, Gargoyle is more robust because it does not depend on a browser's JavaScript performance. Another alternative is the Inform 7 built-in player, which is actually a bundled version of Parchment, so it is not truly separate. There is also the Quixe interpreter, which is specific to Glulx and lacks multi-format support. Quixe is a JavaScript interpreter that can be embedded in a web page, but it only handles Glulx, so it is a narrower tool. If you need only Glulx, Quixe might be simpler to integrate because it does not require submodules or a complex build. However, Parchment's multi-format support is its clear advantage.

## Who Should Adopt It and What to Verify First

Parchment is a good fit for Interactive Fiction authors who want a web-based player with broad format support. It is especially suitable for Inform 7 users, as it is the default player and updates are straightforward via the zip. It is also a strong choice for archivists who need a single-file player for offline preservation. However, it is the wrong tool for developers who need a cross-platform build process or who want a lightweight player for a single format. Before adopting it, verify that you have a Linux environment or a way to build on Linux, as the README explicitly says it may not work elsewhere. Also, confirm that you can clone with submodules, as the build depends on them. If you plan to distribute a custom build, check the licenses of the bundled interpreters, particularly the GPL-2.0 components, to understand your obligations. Finally, test the single-file build with your target story format before committing, as the README does not guarantee compatibility for all edge cases. Parchment is a capable player, but its build constraints and licensing mix require due diligence.

## Conclusion

Adopt Parchment if you are an Interactive Fiction author who wants a ready-made web player for your story, especially if you use Inform 7 or need a single-file offline player. Do not adopt it if you require a non-Linux build environment or expect a plug-and-play setup without Git submodules. Before committing, verify your Node version (>= 16) and ensure you can clone with --recurse-submodules, as the build fails without the upstream interpreter sources. Also check the license implications of bundling GPL-2.0 components like TADS and Scare, which may affect distribution. Parchment is a solid, well-maintained player, but its build is not for the faint-hearted.

## FAQ

### What story formats can Parchment play in a browser?

Adrift 4, Glulx, Hugo, TADS 2 and 3, and Z-Code. Parchment handles all five by incorporating the existing interpreters for those formats as upstream projects rather than implementing them itself.

### How do I get Parchment for an Inform 7 story?

Inform 7 includes Parchment, so compiled stories already have a player. To update the bundled copy, download the build from the releases page and unzip it into the Templates subfolder of your project's Materials folder. The same zip is produced locally by the npm run inform7 script.

### Can I use Parchment offline without a server?

Yes. A single file build of Parchment is published on the releases page for downloading and using offline, and the Parchment Site Generator produces the same kind of single file for your own story in any supported format.

### Is Parchment fully MIT licensed?

Parchment itself is MIT licensed, but it incorporates eleven upstream projects. Two of them, the Scare Adrift interpreter and the TADS runner, are GPL-2.0, while Hugo is BSD-2-Clause and the Iosevka typeface is under the SIL Open Font Licence.

### How do I build Parchment from source?

Clone the repository with its submodules, run npm install and npm run build, then use npm start to serve it at http://localhost:8080, because opening index.html as a file URL will not work. The build is documented as Linux only and requires Git and Node 16 or newer.

### What is Emglken in the Parchment project?

Emglken is the current Glulx interpreter, included as a Git submodule and also listed as an npm dependency at version 0.7.1. A script links the local submodule copy for contributors working on the interpreter, and the 2025.1.14 release was the first to use it.

## Sources

- [Official documentation](https://iplayif.com)
- [Official README](https://github.com/curiousdannii/parchment#readme)
- [Project repository](https://github.com/curiousdannii/parchment)
- [Release notes](https://github.com/curiousdannii/parchment/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/curiousdannii-parchment
