Archive
Some pages are no longer true but still worth keeping. Deleting them breaks every link, leaving them misleads readers — archiving is the third answer.
- Retire without deleting: an archived document keeps its content and every link to it keeps resolving — it just leaves the sidebar tree, search, and assistant listings
- Read-only, on purpose: content, name, alias, and fields freeze until you restore it, so nobody edits a page that was retired for a reason
- Comments stay open: you can still record why a page was retired, right on the page
- Point at the replacement: name a successor and the archived page links forward to it, while the live page shows what it supersedes
- Whole branches at once: archiving takes the nested documents with it, and the dialog tells you how many will move before you confirm
- Restore deliberately: bringing back a parent leaves its children in the archive — each was retired for its own reason
- Never expires: the archive is not the trash and nothing is swept out of it
- From the CLI too:
meldoc archiveandmeldoc unarchive, plus a project setting that makes a file removed from your repo archive the page instead of deleting it
Renames That Don't Break Links
Renaming a document used to be quiet damage: links kept working for a while, then broke one at a time, months later.
- Old names keep resolving: the previous alias becomes a redirect, so links, bookmarks, and synced files survive the rename — everywhere, including public pages and the CLI
- Two badges, one decision: the connections panel marks a link as old name when a redirect still covers it, or will break when nothing resolves that name any more
- A cleanup queue: the new Stale aliases tab collects every retired name links still use, ordered by how recently each was used — so the redirects people actually depend on rise to the top
- Project renames too: renaming a project retires its old alias the same way, and the workspace-scoped view catches the links it reaches in other projects
- Rewrite links in one pass:
meldoc migratemoves repository files off a retired name and updates every[[link]]to it at once - Safe by refusal: deleting a document by a name that now points elsewhere is refused instead of guessed
Teams
- Grant a project to a group: create a team, add members, and give the team a role on a project — everyone in it gets that access
- One access list: teams and individual collaborators sit together on the project, each with the same roles
- Highest right wins: a person holds the best of their personal grant and every team grant that reaches them — teams only ever raise access
- See where access came from: View effective access names everyone who can reach a project and whether their role came from a team, a personal grant, or their workspace role
- Clear boundaries: project admins manage their own project's team access, while editing a team's roster stays with workspace admins — a roster change reaches every project that team touches
AI Assistants
- Create projects and manage access: assistants can now create a project and add existing workspace members as contributors
- Permissions match the app exactly: MCP and CLI resolve project permissions through the same rules as the web app, so an assistant can never do more than you can
- Filtering folded into listing: document filters now live on
docs_listinstead of a separate tool, with per-project permissions reported alongside each project - Archive-aware: assistants archive and restore through
docs_update, and every listing hides archived pages unless asked - Stale-alias audit:
docs_auditgained a check for links still using retired names — the only one that can run across a whole workspace
Search
- Exact names find their document: typing a document's alias now goes straight to it, even when those words never appear in the text — and former aliases work too
- Include archived: archived pages stay out of results until you ask for them
- Public search matches the public tree: a hidden page no longer surfaced in search while being absent from navigation
Plans & Limits
- Duplicate Radar on Pro: duplicate detection is now available from the Pro plan up
- Teams on paid plans: teams are available from the Team plan up; the tab shows what you'd get on Free
- Webhook limits follow your plan instead of one fixed number
Audit Log
- New events: alias renames, archiving and restoring, and team access changes are now recorded
- Longer memory on Enterprise: "unlimited" retention now has a definition — history is kept for years rather than trimmed to a plan window
Duplicate Radar
- Templates stop clustering: near-empty documents are left out of duplicate detection, so a folder of scaffolds no longer reports itself as a pile of duplicates
Webhooks
- Deletes report the whole branch:
docs.changednow lists every descendant of a deleted document, not just the one you deleted - New events:
doc.archivedanddoc.unarchived - Faster delivery: the dispatcher wakes the worker instead of polling
Security & Reliability
- Invitations expire: an invite is valid for seven days, matching the link in the email, and each address has one live invite per workspace
- Hardened sign-in: login codes and device codes are stored hashed, a replayed refresh token is told apart from a two-tab race, and an OAuth login no longer adopts an account on an unverified email
- Trash is read-only: a document in the trash refuses edits instead of accepting changes nobody can see
- Publishing fixed: the first public project of a workspace can now enter the public showcase — it never could before
- Restored documents are searchable again: restoring from the trash re-indexes the document