Docs
One HTML file in. One URL out.
$ install
# macOS
brew install to1page/tap/to1page
# macOS and Linux
curl -fsSL https://to1page.com/install.sh | sh$ publish
to1page login
cat report.html | to1page
to1page publish report.html --title "Q3 revenue"
# machine-readable, for scripts and agents
to1page publish report.html --jsonFlags on publish:
$ api
Bearer tokens only — the API never reads a cookie. Create one in the dashboard.
curl -X POST https://api.to1page.com/v1/pages \
-H "Authorization: Bearer $TO1PAGE_TOKEN" \
-H "Content-Type: text/html" \
--data-binary @report.htmlGET /v1/pages lists, PATCH /v1/pages/:slug updates metadata, DELETE /v1/pages/:slug removes. JSON bodies work too — send {"html": "..."}.
$ collections
Share several pages under one link. The collection opens as a gallery of live previews; viewers open any page full-screen and step through the rest with the arrow keys.
to1page collection create --title "Q3 research pack" k3f9qa7x2m p2m8vd4c1a
to1page collection add <collection> <slug> # append
to1page collection order <collection> <slug…> # set the exact order
to1page collection listOr build one in the dashboard. The link stays the same as pages come and go, and a page that expires or is deleted drops out of the gallery on its own. Removing a page from a collection never deletes the page.
API: POST /v1/collections with {"title", "pages": [slugs]}, then PATCH /v1/collections/:slug with add, remove, or pages to replace the list.
$ agents
to1page skill install
# into this repo instead of your home directory
to1page skill install --projectThe skill teaches your agent the sandbox constraints, the curated library set, and how the pages should look, then publishes with the CLI. It is plain instructions, so it works the same whether the model behind your agent is hosted or running locally on Ollama, LM Studio, llama.cpp or vLLM.
It writes to the directories agent runtimes read:
~/.agents/skills/to1page-publish # the cross-runtime standard
~/.claude/skills/to1page-publish # read by most runtimes tooCline, Goose, OpenCode, Crush, Zed, Cursor, Windsurf and Claude Code all read one or both. A runtime-specific directory is added only when that runtime is already on the machine; --all writes every one regardless. Restart the agent afterwards so it rescans.
Chat frontends that cannot run a shell — Open WebUI, LM Studio, Jan, AnythingLLM — cannot use a skill. Point those at the MCP server instead: to1page mcp, over stdio.
$ writing a page
One self-contained file. Inline your CSS and JS; embed small images as data: URIs. 1 MB on free, 5 MB on pro and team.
Pages run in an opaque origin, so localStorage and sessionStorage throw. Wrap any storage access in try/catch. Scripts, forms, and popups all work normally.
Link the house stylesheet and plain semantic HTML looks designed:
<link rel="stylesheet" href="https://artifacts.to1page.com/_lib/to1page.css@1/to1page.css">Full library manifest — charts, diagrams, math, and syntax highlighting, all pinned and self-hosted.