Added
- An agent can put images into your documentation. Writing a documentation page over MCP covered the words but not a single screenshot: every image had to be uploaded by hand in the editor and its address carried back. Five new tools close that —
upload_doc_imagefor content images, andupload_branding_asset,delete_branding_asset,upload_custom_fontanddelete_custom_fontfor a portal's logo, favicon, social image, backgrounds and typefaces. The limits are the editor's own (5 MB per image, 2 MB per font, WOFF2) and the conversion to WebP still happens on our side. The file travels base64-encoded in the call rather than as a path, because the MCP server runs in the Routebase cloud and not on the machine your agent works from. The address that comes back is root-relative and belongs in the page exactly as given — an absolute blob address stops loading once a portal moves to your own domain. - Documentation images can be listed and removed.
list_doc_imagesnames every content image of a documentation with its address, size, dimensions and whether a page still points at it;delete_doc_imageremoves one. An image a page or snippet still uses is refused rather than deleted, and that check covers every version of the documentation, not just the newest — a published older version keeps the images its pages were written with. Both are available over REST as well. - Guides in a repository carry their images.
sync-guidestransfers Markdown and images together: write a repo-relative reference such as, and the sync finds the file, uploads it and rewrites the reference to its portal address. The same image keeps the same address — its name is derived from its content — so repeated runs neither duplicate anything in portal storage nor mark untouched pages as changed. A local manifest skips files that have not changed,--dry-runshows the planned uploads without writing, and--force-imagestransfers everything again. Addresses already pointing at the portal are left untouched, so nothing needs migrating. - A rebase conflict shows what actually differs. Bringing a branch up to the current main state meant choosing between Take main and Keep branch for each conflict without seeing either side. Every conflict card now carries a table of the differing fields with the value on main and on the branch side by side; lists such as parameters and responses appear line by line as a +/− diff, so a parameter added on the branch is immediately visible. Above the table stands who last touched which side and when, and under the two buttons the consequence in one sentence. From the second conflict on the cards start collapsed. The choice stays deliberately per entity — merging field by field is not offered.
Improved
- Saving in the settings works the same way on every page. Save and Discard sit together at the bottom right of a card, they appear with your first edit rather than sitting greyed out, and they leave again once the change is stored — a card you have not touched shows no buttons at all. The labels are the same everywhere (Save changes, or Create … when something is being added), success is reported once and inline instead of as a toast, and a switch that saves immediately shows a small Saving… / Saved at the control rather than filling the screen with notifications. Where an entry is invalid — score weights that do not add up to 100 %, for instance — the button stays visible and greyed out, because there the grey button is the explanation.
- Unsaved work is harder to lose. A dialog no longer closes when you click beside it, and around 85 forms across the product — from New endpoint through monitors and webhooks to the organization settings — ask Discard changes? on Escape, the close button or Cancel while something is filled in. Leaving a settings page with unsaved edits, by the navigation or the back button, asks the same question. A successful save closes without asking, an untouched form closes as before, and the command palette still closes on a click beside it.
- Five consequential actions ask first. Deactivating AI Assist, Reset to Defaults in the API Designer (which also resets every keyboard shortcut — the dialog now says so), switching an SSO connection on or off, and rotating a SCIM token each carry a confirmation. Enable All / Disable All for the built-in matching rules now covers every rule of the chosen filter rather than the twenty on screen, and names the count.
- A modified schema in a merge request shows its changes. Opening a schema marked Modified in the Changes tab used to reveal an empty area: the branch comparison knew that the definition differed, not in what. It now uses the same comparison as the version diff — added, removed and changed properties line by line with type and required marker, changed enum values likewise. With an intended side effect: because the breaking-change rules read exactly this data, a branch diff now also recognises a field becoming required or an enum value disappearing, so the breaking counter of a merge request and the approval on breaking changes policy apply to schema changes too.
- Notes in sequence diagrams stay inside their box. A note spanning two participants takes its width from the distance between them, so a longer text used to run past the box on both sides. Routebase now measures the finished diagram and, where a note overflows, redraws it once with more room until the text fits. This holds across all three places a diagram appears — the app preview, the portal preview and the published portal — and diagrams that never overflowed are drawn exactly as before.
- Portal addresses are stated consistently. The canonical link,
og:url,sitemap.xml,llms.txtandllms-full.txtall name a page by the same address the portal serves it under. Search engines see one page instead of two spellings of it, and an agent followingllms.txtis spared the detour. This takes effect with the next portal publish, which rebuilds the portal once in full. - The governance dashboard is organised in tabs, and the duplicate quality-score card is gone.