New
Docs with room for the whole team
Docs become the place a team builds its work together. Pages nest in a tree you can drag, comments hold on to the words they're about, sharing works by person, team or project until a date you choose, and versions can be named and brought back. Everything already written elsewhere comes in from Notion, Confluence, Google Docs, Word or Markdown. Around the docs, chat lets people find the channels they're not in yet, booking pages keep their bookings, the app fits a tablet, and every screen shares one calmer, more consistent design.
- Pages in a tree. Nest pages inside pages and drag them where they belong; before a move, you see how the page's access will change. A docs home lists your recent, own, shared, workspace, starred and archived docs, and search reads what's inside them.
- One design on every screen. Buttons, rows, tabs and fields show hover, press, selection and focus the same way everywhere, a checked box takes the accent as switches do, and nothing stays lit under a finger on a touch screen. Channels and docs wear their own colours, and the sidebar and the command palette tint each row in the colour of the place it opens. Dates and times have one field: type a date or pick a quick day, with a sheet on a phone. Dragging works one way on every surface, and controls side by side are spaced for a finger.
- Comments on the exact words. A thread holds on to the passage or block it's about, with replies, resolve and reopen.
- Sharing that fits how teams work. Levels from view to full access, for people or a whole team, for good or until a date. Anyone can ask for access, and the owner or someone with full access answers; a doc can be handed to a new owner or locked.
- History you can name. Versions are kept as people edit and before every change made from outside the editor. Name or pin one to keep it, compare it, and restore it as one change.
- Bring it all in, take it all out. Import Markdown, HTML, text, Word, or a zip exported from Notion, Confluence or Google Takeout; export a doc as Markdown, HTML, PDF or Word. Admins can export every doc they can open, plus private docs their owners let in.
- Ask AI inside a doc. The Ask AI bar edits, rewrites, summarises and answers questions about the page, and its rewrites arrive as suggestions you accept or decline piece by piece. Readers can ask it too, a doc's action items become tasks, and every edit an agent makes is marked in the margin and can be undone exactly.
- Links that stay alive. Mentions of docs, tasks and people stay current, a to-do turns into a task that ticks both ways, links to other sites show a preview, and a page lists the pages that link to it.
- Docs for your scripts. The API lists, reads, creates and appends to docs, with docs:read and docs:write tokens.
- Chat that shows what you're not in yet. Discover lists every public channel you can join, with search; an archived channel can be restored with its history, and stays findable by its members while it's archived. A message sent again after a dropped connection is posted once.
- Booking pages keep their bookings. Deleting a page keeps every booking made through it, with the guests' links to change or cancel; guests' emails are written in their own time zone, and the owner hears of each booking in the inbox as well.
- A tablet layout. Touch screens between phone and laptop size get a shell of their own, and below 1,100 pixels wide the right panel opens over the page instead of beside it.
Before you update: Twelve database migrations: 205 to 213, 340, 343 and 344, and 214 as well for an install coming from an older release than the one before this. They add the tables for edit suggestions, places, imports and exports, threads, versions, follows and notices, access requests and end dates, bookings that outlive their page, the AI activity index, to-dos linked to tasks and export consents, and a record of the mentions docs already hold, so the update tells nobody again of a mention made before it. The server refuses to start until they're applied, and make update applies them first. Re-run the install command you installed with, then make update; it takes a backup first and checks the result. Installs and updates from earlier releases printed your LiveKit API secret in a warning on the terminal: if you haven't run make rotate-livekit-key since, and that output was saved or shared, run it after updating (calls in progress end). Update the web app with the server, as make update does. Until it's rebuilt, an older web app can't open docs ("Something broke on this page"). Anyone with OneCamp open in a browser should reload it once the update is done. If you host the web app yourself, deploy this release's web app at the same time. The update rebuilds the collaboration service, which now takes the server's writes into open docs on an internal port, 1235: keep it private, as the compose file does. The first start does some work once, in the background: the graph database gains its new fields and rebuilds three indexes, and every doc's search entry is rewritten. Channels archived before the update stay out of search until they're restored. Each existing doc's first open after the update rewrites it: its old toggles and colours are converted, every block gets an id, a colour outside the palette is dropped, and the doc is saved in full, so its doc.updated webhooks fire. Versions older than a day are thinned to the new keeping rules: every version for a day, one an hour for a week, then one a day for the retention period, within 64 MB a doc. Deleted docs now go to a trash and are removed for good after 30 days (DOC_TRASH_RETENTION_DAYS); docs deleted before the update stay as they were. Calendars and their events are left as they are: this update doesn't move or convert them. make update backs up the whole workspace first, under data/backups, and that backup is the way back. Going back to an earlier release isn't supported: sharing by team, project and full access, end dates and locks would stop applying. To undo the update instead, make backup-list shows the backup it took, and make restore FROM=<that backup> CONFIRM=restore puts the workspace back as it was before (it replaces everything in it). For scripts and integrations: GET /v1/docs, GET /v1/docs/{id}, POST /v1/docs and POST /v1/docs/{id}/append are new, with the docs:read and docs:write scopes. POST /doc/createDoc without doc_private makes a private doc, and its failures answer 403, 404, 409, 422 or 503 instead of 400. POST /doc/deleteDoc moves the doc and its subpages to the trash for anyone who may edit it, and answers batch_id and count. POST /doc/updateDoc writes through the live doc and answers 503 while the collaboration service is down; changing a doc's privacy needs full access. POST /doc/updateDocPermissions refuses the whole change (400) for an unknown person or team, a malformed id, or more than 200 grants. A refusal to open a doc answers 403 with code: "no_access" and whether access can be asked for; admin-only routes answer code: "admin_required". Deleting a booking page answers 200 with the number of bookings still to come, instead of 409. COLLAB_INTERNAL_URL is no longer read; COLLAB_LIVE_URL, DOC_IMPORT_MAX_BYTES, IMPORT_PAGE_WORKERS, DOC_TRASH_RETENTION_DAYS and DOC_SNAPSHOT_MAX_MB are optional.
Fixes
- Pictures in a doc shared by guest link didn't load; they do now.
- Scrolling back through a channel could stop at the first page, because the newest page always said there was nothing older; fixed.
- The sidebar went blank when one of its counts couldn't be read; it now shows everything it could read.
- A channel's creator couldn't leave it; they can now, once someone else is one of its admins.
- Someone taken off a calendar event wasn't told; they now are, without the event's title.
- Channels, messages and threads answered a missing or forbidden item as a bad request; they now say it isn't there (404), isn't yours (403), or couldn't be read right now (503).
- Some Markdown took the server seconds, even minutes, to read: a long paragraph of certain marks or brackets, arriving through an import, the API or a message. Its cost is now worked out before it is read; a doc that would cost too much is refused, and a message shows as plain text.
- The update itself would have told everyone each existing doc mentions, by push and by email, as if they had just been mentioned, the first time that doc was saved. Mentions made before the update now tell nobody again.
- A zip with a huge list of files cost the server hundreds of megabytes before its file limit was checked; the list is counted first now. Changing the sharing of a page with more than 5,000 pages under it changed only the first 5,000; it now changes every page under it, or is refused whole.
- When one of two projects linking the same repository unlinked it, the other stopped hearing from GitHub; the repository's webhook now stays while another project uses it.