Two people, one document
The app joins the same live session the web client joins. Type in either one and it appears in the other as you go, with everyone's caret visible and named. Nobody's work lands on top of anybody else's.
- Both edits survive
- Two people typing in the same sentence each keep what they typed. The document is a conflict-free replicated type, not a file that gets saved over, so there is no last write to win.
- Named carets
- Everyone else's cursor is drawn where they are, in their colour, with their name on it — the same colour the web client gives them, so the two views agree on who is who.
- Edits in a tunnel
- Keep typing with no signal. What you wrote merges with whatever changed in the meantime when the connection comes back, rather than replacing it.
- Never a requirement
- A workspace with no collaboration service, or a page you may only read, leaves the editor working exactly as it did. The status line says which of the two you are in.
This meant writing a Yjs client in Kotlin, since taking part in the session is the only way to edit a document without discarding what anyone else did while you were typing. It is checked against the real JavaScript implementation in both directions, including ten concurrent-editing scenarios it has to converge on and a check that every document it writes is valid under Outline's own editor schema.
It renders the whole document
Outline's markdown is a superset of CommonMark, and a client that only speaks the standard silently drops the parts people actually use. This speaks all of it.
- Text
- bold, italic, underline, strikethrough, highlight, inline code
- Blocks
- headings with a table of contents, quotes, dividers, page breaks, code highlighted for 18 languages
- Notices
- info, success, warning and tip callouts
- Lists
- bullets, numbers, and checkboxes you can tick from the reader
- Tables
- columns sized to their content, scrolling sideways when they need to
- Maths
- inline and display TeX, mapped onto Unicode
- References
- mentions, footnotes, links between documents, backlinks
- Media
- images at the author's aspect ratio, file attachments, embed cards


Ticking a checkbox in the reader rewrites the markdown and saves it, so a runbook can be worked through without ever entering an editing mode.
Signing in to a wiki that could be anywhere
Outline is self-hostable, so there is no single address to sign into and no client ID that would work everywhere. Type your wiki's address and the app works out how that particular server will let it in.
-
It registers itself
If the server supports dynamic client registration, the app registers a public client on the spot and opens your browser. Nothing to set up.
-
Or it asks for a client ID
If the server will not self-register, the app shows the redirect URI to paste into Outline's application settings, with a button to copy it.
slop.outline://oauth/callback -
Or it takes an API token
If the server has no usable OAuth at all, a personal API token gets you in.
Whichever applies, the workspace's own name and logo appear before you are asked for anything, so a mistyped hostname is caught before it matters. Passwords go into your browser, never into the app. Tokens are sealed with a key that never leaves the Android keystore.
Write it the way you read it
Editing happens in place. A heading is a heading while you type it, a table is a grid of cells, a callout is a tinted panel with a caret in it. Everything the reader shows can be written: all six inline marks, the three list kinds with nesting, quotes, callouts, code with a language, tables with alignment, images, files, links, mentions, maths, footnotes.
The highlighter has all six of Outline's pens, and one tap uses the one already shown, so marking a page up in a single colour does not mean a trip through a menu each time. The colour is a real attribute of the document rather than something markdown can carry, which is why it only survives a save through the live session.
Markdown is what reaches Outline, never what you are asked to type. A visual editor over a markdown store can rewrite documents behind your back, so the writer is held to two tested properties: opening and saving without typing changes nothing, and writing twice is byte-identical. The source is one tap away for anything the editor cannot express.

Built for the 2am read
Everything you have opened stays readable with no network. An edit that cannot reach the server is kept on the device, marked as such in the reader, and sent when the connection comes back. Search falls back to the titles it has cached, and says that is what it did.
The sidebar carries the whole wiki rather than flattening it into tabs: search, home, starred, drafts, templates, every collection as an expandable tree, then archive, trash and settings. Rows sit a rung below stock Material 3, because seeing more of the hierarchy at once is the point.
What someone renames, moves or deletes on the web turns up here without being asked for, and you can move things from the phone too — drag a document into another collection, reorder the sidebar, and the position it lands in is the one Outline agrees with. Outline pushes those changes over a channel that only accepts a browser session cookie, so that is offered rather than assumed: paste a session token in settings and changes arrive as they happen, or leave it and the activity feed keeps everything current on its own.
Signed into three workspaces, each keeps its own cache, its own credentials and its own accent colour, so it is never ambiguous which one you are looking at.

Install
Sideload only. Obtainium watches the
releases and installs each new one. Scan the code with Obtainium already installed, or add
it by hand: source GitLab, URL
git.is.horse/slop/outline-for-android.
Requires Android 8.0 or newer. The APK is also on the releases page.


