New
Projects with roles, tables with undo, events that repeat
Everyone in a project now has a role, and its members add and change its tasks without waiting for an admin. Tables keep every change, so you can undo it, see a row's history and bring back what was deleted, and every row can carry comments and a page of its own. The calendar keeps all its events in one store and gains repeating events, and an all-day event now sits on the same date for everyone. In chat, a group is a fixed set of people: adding someone opens the group of everyone together, and you choose how much of the earlier conversation to share. Calls get a dock for reactions, people and chat, phones get rebuilt sheets, and every page loads lighter.
- Roles in every project. Everyone in a project is an admin, a member, a commenter or a viewer, and the app offers each person only what their role allows, from the task panel and board to the Files tab. Each project chooses who changes its tasks (members, members on their own tasks, admins only, or the workspace's default), and a workspace admin can make themselves a team's admin after one question, written to the audit log. How project roles work.
- Tables remember every change. Undo and redo cover each person's last 100 changes in a table (⌘Z and ⌘⇧Z on a Mac, Ctrl+Z and Ctrl+Y elsewhere). A row's record shows who changed what, and deleted rows, columns and whole tables wait in a trash with Restore. A paste or a bulk delete is one change, and the notices that said "This can't be undone" now offer Undo.
- Events that repeat. A new event can repeat weekly, monthly, yearly, every weekday or on your own pattern, worded the way you'd say it ("Monthly on the second Tuesday"). Changing, dragging or deleting one occurrence asks whether you mean this event, this and the following ones, or all of them, and a series keeps its local time across clock changes. A repeating event isn't copied to Google Calendar yet.
- Groups are fixed sets of people. Earlier messages stay with the people who were in them: adding someone to a DM or a group opens the group of everyone together (or the one that already exists for exactly those people), and the old conversation stays as it was, with a line saying where it continues. When you add people you choose what to bring along (nothing, the last day, the last week or everything) and see exactly how many messages that is. Groups can be named, hidden until someone writes, or made into a private channel.
- Guests answer, and anyone can be invited. A guest answers yes, no or maybe, with a note, for the whole event or a single occurrence, and anyone can be invited by email address and answer from their own page. The organiser can be emailed when guests answer, a declined meeting no longer counts as busy in Find a time, booking pages or statuses, invitations carry repeating events in their own time zone, Guests can be optional, an organiser can let guests invite others or change the event, and one event form now serves the dialog, the panel and phones. Every change to an event is in the audit log.
- Reminders for events. Everyone sets their own reminders for an event or a whole series, up to five. With none set, the organiser and everyone who said yes or maybe are reminded 10 minutes before, or at 09:00 the day before an all-day event, on their devices and open apps, with snooze. A reminder of an event you said yes to reaches you through a pause, quiet hours or focus time, and nobody is reminded of what they declined.
- Conversations about a row. Comment on a row or one of its cells, reply, resolve, react and @mention as in a doc; a dot in the grid shows where people are talking. A row can also have its own page, written in the doc editor beside its fields and live for everyone who has it open.
- Columns that know what they hold. A column can have a description, a default for new rows and a Required setting. A primary field names every row in every view, every row has a number in its table, and a cell takes only what its kind can hold, with a message naming the field and its options.
- The calendar's one store. Events and their guests are saved together, so the calendar, focus time, time off and guest lists always agree, and through the calendar's API a change someone else made in the meantime is refused rather than overwritten. The week opens on what comes next, and Join appears only for a call's link, first on the card and in the panel.
- A call dock. React with six emoji that float up the stage with who sent them, see who's in the call (a host can remove someone), and, on a computer, open the call's conversation beside it in split view.
- Boards, timelines and workload in colour. Status columns wear their colour, table boards' lanes wear their option's colour, timeline bars are filled with their project's colour with faces and diamond milestones, and each workload week shows whether there's room. A task linked to GitHub gets a Development card with its branch, pull request, checks and issue.
- Phones, rebuilt. Every sheet scrolls in one place with its title and buttons pinned, sheets rise and settle at one pace, and the emoji picker, status, time and filter sheets fit the screen. The status picker opens as a sheet with Set status in a pinned footer, and its custom date and time open as a sheet too; on a laptop, the picker's actions stay in view while its list scrolls. An iPhone no longer zooms into small fields.
- One splash from the first paint into the app, with no white flash in dark mode. Channels and direct messages now sit above Docs in the sidebar, cards are raised with no border, and Escape closes one thing at a time across more of the app.
- Lighter pages. Signed-in pages no longer carry every language, the notification SDK or the invite form up front, celebration effects load once the page is idle, and a table's page is lighter too. Task lists and My Tasks load 500 tasks at a time, with Show more.
- OneCamp AI follows the same rules. Its task tools respect each project's roles, an agent you ask in the app can create a project wherever you could yourself, and an AI column's fills stay off everyone's undo. On a phone, the OneCamp AI sheet scrolls a long answer in one place.
Before you update: Eleven database migrations, which make update applies after taking a backup. Re-run the install command you installed with, then make update. Update the web app with the server, as make update does, and if you host the web app yourself, deploy this release's web app at the same time. Going back to the earlier release isn't supported: restore the backup make update took. Members can now change tasks. Until now only a project's admins changed its tasks. From this release, people in a project have a role (admin, member, commenter or viewer), and its members add and change its tasks. To keep the old rule, set Who can change tasks to Admins only, for every project under Settings → Permissions → Projects, or for one project from its ⋯ menu. Admins of projects made before the update see a one-time notice that links to the setting. The calendar moves its events once, about 1 min per 50,000; meanwhile it reads as before and saving asks to try again in a minute. To stay on the old stores for now, set CALENDAR_STORE=graph in .env before updating. The first start also adds new graph fields and indexes for chat and tables, which took under a second on our demo. Search can take a minute to come back after updating. Over the API and MCP, a token acts as a member. A script that used an admin's token to read private tables, query private sources, post in an announcement channel or create projects where only team admins may will now get 403 from /v1, or a refusal over MCP. Do that work in the app, or give the token's owner access as a member. GET /v1/me still reports the account's is_admin. That describes the account, not what the token may do. A project admin's token acts at most as a member too: it can't change tasks in admins-only projects, and it makes projects only where the team's members may. Tables now send one table.rows.changed event for each change to a table's rows, naming every row it touched and what happened to it (made, changed, deleted, brought back) and, row by row, the fields it changed. A bulk change (a paste, a bulk delete or duplicate, an undo, rows restored from the trash) sends that one event in place of one table.row.created or table.row.updated a row. An agent or workflow bound to table.row.created or table.row.updated still hears single-row edits, but not bulk ones: bind it to table.rows.changed to hear every change. App authors: requests to your app are now signed with the signing secret shown in Admin › Apps. If you worked around the old signatures, check them with that secret. For scripts and integrations: a value a column can't hold is now refused, naming the field and its options; task routes answer 404 for a task you can't read, its history included; every list has a maximum page size (5,000 for most lists, 200 for a doc's viewers); and adding someone through the old group-add route opens the new group with no history shared.
Fixes
- Deleting a doc from its More menu could reload the page and lose the Undo notice; Delete now keeps you in the app, and Undo takes you back to the doc.
- A channel or DM added while your connection was down stayed silent until a reload; new messages now show.
- A workspace admin outside a project's member list couldn't comment, react, read its activity or open it; now they can.
- Project names had to be unique across the whole workspace, so an import could fail on another team's project name; they now need only be unique within a team.
- Archiving and restoring a project, team or task in quick succession could leave it out of search.
- Table names and descriptions were counted in bytes, so a Hindi name was refused at 41 letters of 120; they count characters now.
- A card on a table's board showed fewer fields than it had.
- Taking back or changing an emoji on a channel thread's reply failed; it works again.
- A group of four or more people couldn't be left; anyone can now leave a group that keeps at least three people.
- A project's viewers saw a comment box the server refused; they now see that they can view but not comment.
Show 16 more fixesHide the 16
- On a call's own page, the dock's Chat button opened nothing; it opens the conversation beside the call.
- Requests to an app were signed with the stored form of its signing secret, so checks against the secret shown in Admin › Apps failed; they're signed with that secret now.
- Emails to people outside the workspace, such as a booking's guest, said they had subscribed to notifications; they now say why the email came.
- The week view's all-day "+N" did nothing once the lane was open; it opens the day's list.
- A doc link in an event's notes showed as "Join call", and an ended event read "starts ended"; Join is now only for call links and goes when the event ends.
- An all-day task chip kept a stand-in colour until something else redrew it.
- A call's participant count counted a presenter twice.
- On the projects-wide timeline, project names didn't have enough contrast.
- On a phone, the status sheet scrolled in two directions and Set status sat under the screen's edge; the emoji picker opened mostly empty; the sort and filter sheets left a third of their height blank; and the share and move sheet scrolled in two places.
- On a phone, the Pages sheet's + and ⋯ were too small for a finger.
- A rename or a search inside a dialog closed the whole dialog on the first Escape, and an input method's Escape closed dialogs along with what was typed.
- A doc whose view record failed showed a stray "Not found" notice.
- When the workspace's feature list couldn't be read, calls, the AI spark and other features silently disappeared until a reload; they're now kept and asked for again.
- In dark mode, the chosen time in a time list was a light slab.
- In a narrow window, Escape in the doc AI panel didn't stop the run.
- Some chat actions didn't apply a conversation's access rule; they do now, and people added to a group see its earlier messages only if the person adding them shares them.