{write} guide

{write} (formerly uPub) is a distraction-free Markdown writing app with two things most writing apps don't have: built-in git-style version history and EPUB export — and it runs fully offline. Nothing ever leaves your device: no server, no account, no sync, no telemetry.

The editor

You write plain Markdown. The text you see is the file — syntax markers stay visible but are dimmed, headings are emphasised, and list items get a proper hanging indent: when a bullet wraps onto a second line, the wrapped text lines up under the item's text, not under the bullet.

The caret line's paragraph can be isolated with Focus mode (in the ⋯ menu): everything except the paragraph you are writing is dimmed.

Swipe to indent — on a touch screen, flick a list or quote line sideways, the way Notes does it: swipe right to indent, left to outdent. The line snaps between indent stops as you drag, and the change lands when you let go. Keep dragging for more than one level (a long swipe walks several; one undo reverts the whole swipe). If you've selected several lines, swiping any of them moves the block together. The swipe is a quick flick — start moving right away; a slow press-and-drag is left to iOS for selecting text, and dragging the cursor or a selection handle never indents. /indent and /outdent in the / menu do the same thing.

While you write on a phone, the title bar slides away so its space goes to your text; dismissing the keyboard (the ✓ on iOS's keyboard bar) brings it back, along with its menu. The title bar also slides away in step with your scrolling — scrolling down tucks it away at the rate you scroll, and scrolling up (or returning to the top) slides it back the same way.

The / menu

There is no toolbar. Type / to open the insertion menu — at the start of a line, or anywhere after a space. Keep typing to filter (/h2, /task, /div …), then tap an entry, or use ↑/↓ and Return on a hardware keyboard. Esc, deleting the /, or moving the caret away closes it. The /word you typed is removed when the action runs, so it never lands in your text.

At the start of a line the menu offers block inserts — Heading 1–3, Text, bullet / numbered / task lists, quote, code block, divider, table. After a space mid-sentence it offers inline actions — bold, italic, strikethrough, code, link, indent, outdent — plus undo and redo. A / inside a word (and/or), a URL, or a code block never opens the menu.

On a hardware keyboard: ⌘B bold, ⌘I italic, ⌘K link, ⌘Z / ⇧⌘Z undo/redo, Tab / ⇧Tab indent/outdent in lists, ⌘/ (Ctrl+/ on Windows and Linux) comments out the selected lines — they are wrapped in an HTML comment, <!-- … -->, which no reader or export shows; press it again to bring them back (inside the front matter it toggles a YAML # instead). On iOS, undo is also the system three-finger swipe (or shake).

Pressing Return inside a list continues it (numbered lists renumber, task lists add a fresh [ ]). Pressing Return on an empty list item exits the list. ⇧Return inserts a plain line break without continuing the list.

Markdown reference

{write} supports the CommonMark + GFM constructs that map cleanly onto an EPUB. This is the complete list — everything here survives the round trip into an e-book:

Headings

# Chapter title        (h1 — starts a new EPUB chapter)
## Section             (h2 — listed in the EPUB table of contents)
### Subsection         (h3 … ###### h6)

Emphasis

**bold**   __bold__
*italic*   _italic_
***bold italic***
~~strikethrough~~
`inline code`

Lists

- bullet item
* also a bullet
+ also a bullet
1. numbered item
2) also numbered
- [ ] open task
- [x] done task

Indent two spaces to nest. Wrapped lines hang-indent under the item text in the editor and export as proper nested lists.

Block elements

> blockquote
> > nested quote

```js
a code block, fenced with three backticks (or three tildes)
```

---            (horizontal rule / scene break)

Links & images

[link text](https://example.com)
![alt text](https://example.com/image.png)

Images referenced by URL stay URLs in the EPUB — most readers won't load them offline. Images pasted as data: URIs are extracted into real image files inside the EPUB and work everywhere.

Tables (GFM)

| Name  | Value |
|-------|------:|
| alpha |     1 |

Tables render in the preview and export into the EPUB as real tables.

Document metadata (front matter)

An optional block at the very top of the document sets the book's metadata. It must start on line 1:

---
title: My Novel
author: Jane Doe
language: en
description: A short description for the book record.
identifier: urn:isbn:9780000000000
---

All keys are optional. title falls back to the document title in the top bar; language defaults to en; identifier defaults to a generated UUID. description becomes the EPUB's description field.

EPUB export

⋯ menu → Export → EPUB. The export is built entirely on your device and handed to the browser/share sheet as a .epub file (on iOS, use "Save to Files" or share it straight to Apple Books).

How the document maps to the book:

You can also export the raw Markdown (.md) at any time — your text is never locked in.

Comments

Comments live on the text, the way a word processor does them. Select some words, then long-press the selection (right-click on a desktop) and choose Comment. A card opens under the selection; write and tap Comment. The commented text keeps a soft highlight; tap it to read the thread, reply, or Resolve it (resolving removes the highlight and keeps the thread under ⋯ menu → Comments…, which also lists every open comment — tap one to jump to it). Comments follow the text as you edit; a comment whose text you delete resolves itself. On a hardware keyboard, ⌃⌥M / ⌘⌥M comments on the selection.

Comments are saved with the document (and in its data file), so they travel with it into any other unifile app.

Documents, saves and your device

The ‹ button at the top left opens your documents — every piece you have written in {write}, newest first, each one exactly as you left it. Tap one to open it, + New to start another, ⋯ on a row to rename, duplicate or delete it. You never have to save before switching: the text you are typing is remembered as you type.

The list has a search bar: it searches document names and their text, and shows the matching lines under each document — tap a line to open the document right there.

Two things keep your writing safe, all on your device — nothing is ever sent anywhere:

Open from device brings a .uni file back into the documents list on any device: the name and version come from the file name, and the history starts from there. (Older .unifile.json files still open, history included.)

The dot next to the title (and on the Save menu item) means the device doesn't have your latest changes yet. The documents list shows each document's last saved file.

Set your author name for saves in ⋯ menu → Settings.

Where your text lives

iOS install

Open the {write} page in Safari → Share → Add to Home Screen. The app then launches full-screen, works completely offline, and keeps your documents on the device. The share sheet is used for all exports, so you can save straight to Files, Books, or any app.

Updates

The installed app keeps itself current: every time it opens (or returns to the foreground) it looks for a new build, and when one is found the app saves your document and refreshes itself once onto the new version — no cache-clearing, no reinstalling. A tappable notice also appears when a newer version is published. The running version and build time are shown in ⋯ menu → About, with a manual "Check for updates" button.

Privacy

There is no server. The only network request the app ever makes is a version check against unifile.app/version.json to offer updates. Your text never leaves the device unless you export or share it.