Reference
Everything Kagoj does.
One box for eight kinds of file, one short link each, and access control that does not need an email round trip. The numbers below are the real limits, not rounded ones.
One box, eight formats
The reason Kagoj exists. A note, a contract and a screenshot are the same job, so they go in the same box.
- Markdown
GitHub-flavoured, rendered to a real page.
Tables, task lists, strikethrough and autolinks all work. The output is sanitised at write time and stored, so reading a page never runs a sanitiser and never trusts what is in the database.
- Rich text
A formatting toolbar, for when you would rather not write Markdown.
Bold, italic, strikethrough, inline code, three heading levels, both kinds of list, quotes, code blocks and links. It emits ordinary HTML, which goes through exactly the same sanitiser as a pasted HTML file.
Link addresses are checked as you type them, against the same protocols the sanitiser allows, so you find out immediately rather than discovering a stripped link after publishing.
- HTML
Upload a whole .html file and it keeps its own styling.
Scripts, event handlers, forms and frames are removed. The author's stylesheet survives, because an HTML document without its CSS is not the document you uploaded.
It is then served from a separate usercontent path inside a sandboxed frame with a locked content security policy, so even a sanitiser bug cannot reach your session.
- Code
Syntax highlighting with automatic language detection.
Drop a .c, .py, .ts, .json or any other source file and the language is inferred from the extension; you can also set it by hand. Highlighting is done at write time with class names only, so it survives the same sanitiser as everything else.
Renders in the page, including inside the installed app.
PDFs are drawn to a canvas rather than handed to the browser's plugin, because that plugin does not exist in an installed web app or on most phones. That is the difference between a document and a message saying your browser cannot display it.
- Images
Screenshots and photographs, up to 50 MB.
PNG, JPEG, GIF, WebP, AVIF, BMP, TIFF, ICO, HEIC and SVG.
SVG is an image that can contain script, so it renders inside an image tag where scripting is off, downloads are forced as an attachment, and it is never offered as an open-in-new-tab link.
- Video
Plays in the page, up to 100 MB.
MP4, WebM, Ogg, QuickTime and M4V, which is what a browser can play without a plugin.
It loads metadata only until you press play, so opening a link to see what it is does not pull down a hundred megabytes, and nothing ever autoplays.
- Plain text
Exactly as typed, escaped, never interpreted.
Angle brackets stay angle brackets. Useful for logs, config and anything you want quoted rather than rendered.
Shelf, projects and teams
Filing that does something, rather than filing for its own sake.
- Your shelf
Everything you own, newest first, with full-text search over the text inside.
Search is a real Postgres full-text query. It understands quoted phrases, OR and -exclusion, ranks a title match above a body match, and matches word stems rather than raw substrings. It is scoped twice: the query narrows to rows you could plausibly reach, then every row that comes back is re-checked against the same access rules the rest of the app uses.
Select several documents at once to file them under a project or send them to the trash together, and each one carries a quiet count of how many times it has been opened.
- Trash
Deleting is recoverable for thirty days.
Deleting a document moves it to the trash rather than destroying it. It keeps its storage there, so restoring is lossless, and after thirty days the same sweep that clears anonymous content purges it for good. You can also delete it outright from the trash if you would rather not wait.
- Fork
Copy any text document you can read into one of your own.
The copy is yours, on its own link, ready to edit. Useful for templates, and for building on someone else's public page without touching theirs. Text kinds only, since a file's bytes are not duplicated.
- Projects
A bundle of documents that shares its access.
Set a project to team-visible and everything filed in it follows, so you set the rule once instead of per document. Documents can be moved between projects from the shelf.
- Teams
Anyone can make one and invite anyone.
There is no domain claim and no administrator to petition. Members are owners, editors or readers, and a team carries its own storage allowance.
- Version history
Every save keeps what was there before, and you can put it back.
Open a text, Markdown, rich text, code or HTML document you can edit, and the history sits under the editor. Each entry is the document as it was before that save.
Restoring is itself recorded as a save, so restoring the wrong version is not a one-way door.
A PDF, image or video is replaced rather than versioned: upload a new file from its page and the same short link points at it, with the old file removed once the new one lands.
For AI agents
Delegated access that is narrower than your own, because an agent acting on your behalf should not be able to do everything you can.
- Scoped keys
Four scopes, granted one at a time.
READ, WRITE, SHARE and DELETE. SHARE is deliberately not implied by WRITE: changing who can see a document is the dangerous action, so an agent that can write cannot publish to the open web unless you said so separately. DELETE moves a document to the trash, so even an agent's mistake is recoverable for thirty days.
- A real REST surface
List, read, create, edit, re-share and delete over HTTP.
Each scope maps to something the key can actually do: READ fetches a document and its body, WRITE creates and edits text, SHARE changes visibility, DELETE trashes. A single bearer token, no SDK and no OAuth dance.
- The same authority as the UI
No second, weaker code path.
The API answers to exactly the same access rules as the pages do. A key cannot reach anything you could not reach yourself.
- An audit log
Every agent action is attributable to a key.
What it did, to what, and which key it used. You can read it and you can revoke the key.
The practical bits
The things that decide whether a tool survives contact with a Tuesday.
- No account needed
Paste something and get a link, immediately.
Anonymous documents delete themselves after 24 hours. If you decide you want to keep one, signing in claims it: the same link, now yours, with no expiry.
- Install it
It works as an app on a phone or desktop.
Installed, it gets a tab bar instead of a menu and holds exactly one viewport, so the bar never scrolls away. There is an offline page rather than a browser error.
- Day and night
Both themes, following your system by default.
The document sheet itself changes with the theme, so reading at night does not mean staring into a bright rectangle in a dark app.
- Command palette
⌘K to jump anywhere, or search your shelf.
One shortcut, from any page, to reach your shelf, a project, the trash or your settings, or to run the same shelf search without leaving what you are doing.
- Embed
Drop a public page into another site with an iframe.
Public documents come with a copy-ready embed snippet that renders the page with no Kagoj chrome around it. Only public documents can be embedded, and the embed runs with scripts switched off.
- Your data is yours
Export everything, or delete the account entirely.
Download your account and every document you own as one JSON file. Deleting your account purges every document you own, including their files, and asks you to type your email first so a stray click cannot do it. Teams you created are left standing for their other members.
Limits
| Retention | Size | |
|---|---|---|
| Anonymous | 24 hours, then deleted | 25 MB per file |
| Signed in | Kept until you delete it | 1 GB total, 100 MB per file |
| Team | Kept until you delete it | 3 GB shared |
| Trash | 30 days, then purged | keeps its original size |
| Pasted text | Stored in the database | 512 KB |
| Images | Stored as files | 50 MB |
| Video | Stored as files | 100 MB |