Change log

Notable changes to Obelism Content: new features, changed behaviour and important fixes, newest first.

20 min read

Notable changes to Obelism Content, newest first. Changes to the SDK packages (@obelism/content, @obelism/content-react) have their own release notes in the SDK repository, one changelog per package.

2026-10-31

  • Every list drags into order. A list field that holds several items — assets, references, Shopify products or collections — and a select field's options move by a row's grip, or with Space and the arrow keys. Blocks and a content model's fields already did. See fields.
  • Every section of the entry editor folds. The chevron on Search and sharing never closed its fields; now every group on the entry page folds, and a check's Fix opens the section it points into.
  • Export and import, side by side. Settings → Export and import is two cards now: Export (the JSON an import reads back, and plain SQL for other tools) and Import, which lists what it reads (one Obelism JSON export, not SQL or a zip) and offers Download a template: this environment's content model with one example entry. See export and import.
  • A Space name can't run as SQL. The SQL export writes the Space's name into a comment at the top of each file; a name with a newline ended that comment, so the rest of the name ran as SQL when someone loaded the files. Newlines are collapsed now, and the README and header are tested against a loaded database.

2026-10-30

  • Export and import moved to Settings. Admins and developers find the environment's JSON and SQL downloads and importing a file under Settings → Export and import, instead of on Promote.
  • Your content as plain SQL. Settings → Export and import → Download … as SQL gives a zip with a schema, one file of INSERTs per table (the content model, entries, paths and redirects), an import.sql that loads them in order and a README. It is for taking your content to another tool, not a backup Obelism imports back; asset files stay in Media. The agent API's GET …/export/sql answers the same files as { name, content }. See taking your content elsewhere.
  • Signed uploads keep an image's dimensions. A file PUT to POST …/uploads/assets now records its width and height from the image header, so from-upload makes a complete asset. Files uploaded before this fill theirs in the first time they are served. See Assets.
  • Image URLs ask quality 80. Delivery URLs name q=80 instead of q=100: re-encoding at 100 could make a resized copy several times the original's bytes. The edge cache is unchanged; X-Cache says whether it answered. See Images.
  • Content type saves merge. On the agent API and MCP, saving an existing type keeps the fields the call leaves out and changes the ones it sends; removeFields removes explicitly. Fields can also change type (text, textarea, number, boolean, datetime, select to json, json to text, text↔textarea) with their values converted, and localization can switch on those and json. See the content model.
  • A reference cycle larger than 100 publishes across calls. A stalled bulk publish finds the whole cycle from the entries the call names and takes it live in one transaction, up to 500 entries. See publishing several entries at once.
  • A false image is refused. Inline, multipart and signed uploads refuse a file claiming a browser-renderable image type whose bytes prove nothing image-like, and multipart's filename field now names the asset over the part's name.
  • A wrong host says where to go. A Content agent path called on www.obelism.studio answers problem JSON with the content.obelism.studio address, and the errors page explains Cloudflare's plain-text 403 for Python's default User-Agent. See Errors.

2026-10-29

  • Blocks shared across pages. A block type can now have entries, shared blocks, placed in a page's blocks list as { "_type": "_shared", "entry": "entry_…" }. Delivery expands one inline with _sharedFrom, publishing it updates every live page it shows (or leaves the pages you untick on what they show now), and Detach turns a use back into a local block. Pages held on an older version catch up on their next publish. A block publish sends block.published. See shared blocks, publishing and delivery.

2026-10-28

  • Shopify Oxygen. A guide for a React Router site on Shopify's host: the delivery token in the storefront's variables (Oxygen issues no OIDC token, so a connected deployment can't cover it), the public environment the canvas needs, the headers the editor needs, and caching with a TTL where Oxygen can't purge by tag. See Shopify Oxygen.
  • React Router, end to end. The React Router quick start now covers editing on the site (/cms/login) and the CSP both the canvas and the prompt bar need, not just the canvas. See editing on your site.
  • Files up to 50 MB. Uploads from Content, the agent API and replacing a file in Media take files up to 50 MB (videos stay at 100 MB). Over 25 MB, the upload warns that the file adds to your storage quota. See Assets.
  • One toolbar over the content list. The views are All, Changed, Drafts and the ones you save, no longer one per content type: content types are in a Type filter that takes several at once, statuses and Created by me in Filter. Show as adds By content type, every entry under a heading per type. Save as view appears when a filter matches none of your views. Old links with one type keep working; several are a type each. See the content list.
  • Plugins. Your Organization's own web pages in Content, in a sandboxed frame: as the input of a field (a brand colour, a map pin, a PIM product) or as a dashboard page. An admin registers one from its manifest under Plugins, a developer turns it on per environment under Settings → Preview and site and picks it as a field's Input. A plugin gets only what its manifest's permissions say, sets the field's value as an unsaved change, and can get a five-minute token for its backend. See Plugins.

2026-10-27

  • Fields shown only sometimes. A field can have Show only when another, earlier field is on, has an option or text, or has a value, so one block type covers a hero with and without a call to action. Hidden fields keep their values, are delivered as null, and are only required while shown. In model files and the APIs it is when. See fields shown only sometimes.
  • Preview images for blocks. A block type can show a picture of itself where editors add a block: upload a screenshot under Preview image in its settings, or give an https:// URL. In model files and the APIs it is previewImage, a URL or a media asset id. See preview images.

2026-10-25

  • Image URLs without w or q work. /assets no longer refuses an image URL that leaves them out: it serves the image at its own width (up to 3840 pixels) and quality 80, still optimized. AVIF uploads load again: they are served as they are, since Cloudflare can't transform them. See Images.
  • Store changes reach your site. With a Shopify store connected, webhooks can select product.updated, product.deleted, collection.updated and collection.deleted: a product's price, stock, images or title changing, a collection changing, or either being deleted. Each names the item, a product's collections, the published pages that show them with their paths, and cache tags, so your site revalidates exactly those pages and its feeds. See Webhooks.
  • Shoppable images. Files in Media can be tagged with the products of the space's Shopify store, each on its point in the picture. Turn on Show its products for one use of a file (in For this use, or 🛍 on a file in rich text, or products: true in the value), and delivery adds the file's products to that asset: products: [{ id, handle, position }]. Draw hotspots or list the products next to the image; prices and stock come from the Storefront API. See Assets.
  • Product and collection pages take their title from Shopify. The productPage and collectionPage types Settings offer have no Title field anymore, so a new page no longer needs one filled in before it can be published: read the product's or collection's title from the Storefront API, as its price and images. A page's name, which delivery's links show as its title, starts as the item's title. Types added before keep their Title field; delete it in the content model to do the same.
  • Drafts only for the space you name. The delivery API answers 401 when a token's space or environment differs from the request's Obelism-Space or Obelism-Environment, for every kind of token. Pass space and environment to the ContentClient you read cms_token with, so a cms_token made for someone else's space can't put its drafts on your site. See the visual editor.

2026-10-24

  • JSON body limits. The dashboard, agent, management and site APIs refuse a JSON body over its limit with 413: 1 MB, 4 MB for entry content or a model file, 32 MB for an import file. See Errors.

2026-10-23

  • Transfer a space to another organization you're an admin of, from Settings. Everything in it moves along, in Content, Improve and numbers, and its tokens, webhooks and Shopify store stay connected. See Spaces.

2026-10-22

2026-10-21

  • The canvas. Every page of an environment side by side on one board, your site in each frame: a column per page type, panned and zoomed, at desktop or mobile width. Click a page to edit it with its form or by prompt, keep unsaved changes on several pages at once, and Save all. It replaces the visual editor: Open in the canvas on an entry's page opens it with that page selected, and links to the visual editor go there. With a Shopify store, a Products column holds the product pages and any product of the store at your site's product route, where Add a product page gives it one. Frames are as tall as their pages with @obelism/content 0.20 or later. See Canvas.
  • Variants side by side. On the canvas, a page with an A/B test or flag block shows its options next to each other, a frame per option, following your edits. See Canvas.
  • Change the whole site by prompt. On the canvas, with no page selected, Change the site plans a request across the pages on the board and runs it as a prompt on each page it is about, unsaved until Save all. See Canvas.
  • Collection pages. With a Shopify store, collections get pages like products do: a page type with a unique Collection field (Settings offer collectionPage) holds the page of one collection, in a collections folder, started from the collection under New entry. Settings → Preview URL sets where your site shows a collection (/collections/{handle} by default), the canvas has a Collections column, and the prompt bar on your site offers Add a collection page on a collection the site marks with editableCollection (@obelism/content 0.20). The agent API's settings take collectionPath. See Shopify.
  • A calmer media page. Media shows files as tiles, cropped around their focal point; drop files on it to upload. Clicking one opens its details: the focal point on a large preview with how common crops keep it, its title and alt text in every language, tags, and replacing, privacy and deleting. The same details open from a picked file in the entry form, the visual editor and the site's prompt bar form.

2026-10-20

  • Links to products. With a Shopify store connected, a link field that allows Shopify products can go to a product of the store, picked like a Shopify field's, without making a page for it. Delivery answers type: "product" with the product's id and handle, and its product page when it has one. A page type with a unique Product field is a product page type: one published page per product, for what the store doesn't hold. Settings offer a ready productPage type, a new product page starts from a product (its handle is the slug), and delivery filters Shopify fields by id (fields.product=gid://shopify/Product/42). On the site, the prompt bar offers Add a product page on a product the site marks with editableProduct, and opens product pages at the site's product route (@obelism/content 0.18). Product pages go in a products folder, and Settings → Preview URL sets where the site shows a product (/products/{handle} by default), where the visual editor opens product pages. See Shopify.

2026-10-19

  • Shopify. Connect a space's Shopify store (Settings → Shopify, or the Obelism app in Shopify) and pick its collections and products in a new shopify field type, with a picker that searches the store, in the editor, the visual editor and the site's prompt bar. Settings offer a ready product grid block, and Copy as .env adds the store and a Storefront token; the SDK's fetchShopifyCollection and fetchShopifyProducts read live prices and stock. See Shopify.
  • Link fields. A new link field type for buttons, cards and menus: to a page of the space, picked like a reference and following it when it moves, or to any address, each with an optional query and anchor. Delivery answers it with the page's id, title, slug and path (null while the page isn't published). The website starter's button uses one. See links.
  • Settings. Space settings is called Settings now, at /settings (old links still work), as in Improve, and the organization, space and environment are picked with the same switcher in every Obelism product.
  • Every organization has a space. A new organization starts with a space called Default, in English, so there is somewhere to start; rename it or change its locales under Settings. An organization's last space can't be deleted. Spaces are becoming shared by every Obelism product, so Improve's tests and the numbers will belong to one too.

2026-10-18

  • AI translation for the whole space. Settings → AI translation: turn it on or off, choose the languages, give the model instructions, and translate automatically when the default language is saved. Translate many entries at once from the content list, in the background, saved as drafts; agents translate and queue through the API. See translating.
  • Ask the docs. ⌘K in the docs searches them and answers questions from them with AI, as Improve's docs do. Plus a React Router guide, and breadcrumbs in search results.
  • Comments and presence. Comment on an entry or one of its fields, reply and resolve threads, in the entry editor's sidebar; the toolbar shows who else has the entry open, and warns when they have unsaved changes. See comments and presence.
  • Delivery usage and rate limits. Settings → Usage shows the delivery API requests per environment this month and per day, cache hits included; each token can make 1,000 requests per 10 seconds. See rate limits and usage.
  • Content types need a description. Every content type says what it is for, in a sentence: editors see it, and prompts use it to pick the block type for a new section. The model can't change until types without one are given one. See the content model.
  • Publishing some languages. Publish only the languages that are ready; the others keep what was published, or fall back. See publishing.
  • Translating entries. The language switch shows how far each locale is translated, and Translate from … fills in a locale's missing texts by machine translation, to check and save. See locales.
  • Private files. A file can be made private: it is then only served with a signed URL that delivery hands out and that lasts a day, and its links can be revoked. See assets.
  • Tags and replacing files. Tag files under Media and filter the library by tag; replace an asset's file while keeping its id, so content using it shows the new file. See assets.
  • More validations. Text fields take a format (URL, email, hex color or slug) and textareas a pattern; text and number fields can be unique among published entries; multiple assets and references take min and max; and most fields a defaultValue for new entries and blocks. See the content model.
  • Access per product. Admins can keep a member out of Content or Improve on www (Organization → Product access); for that product they are then no member. See roles.

2026-10-17

  • Roles per space. Admins can give a member a role in some spaces only (Settings → Members): they then see just those spaces, with that role in each. See roles.
  • Removing a locale. A saved locale (not the default) can be removed under Settings, deleting its values, asset text, slugs, paths and redirects in every environment after you confirm with its code. See locales.
  • Models locked to code. An environment's content model can be marked as managed in code (Settings → Content model, or model apply --lock): read-only in the dashboard, the agent API and MCP, changed only by applying the model file. See the model in Git.
  • Review before publishing. An environment's publishing can be reviewed: only admins publish there, and editors and developers ask for review, which an admin approves or sends back. See publishing.
  • Activity. An audit log per space: who published, moved, deleted or restored what, changed the model, promoted or imported content, and changed tokens, webhooks or settings, and whether they used the dashboard, an agent, a token or a schedule. See Activity.
  • Export and import. Download an environment's content and model as one file, and import it like a promotion: as a backup, or to move content between environments. See environments.
  • Content tokens. Management tokens get scopes: model (as before) and content, which writes content through the agent API without a person's session, for migrations and imports. See the management API.
  • Bulk actions. Tick entries in the Content list to publish, unpublish, move or delete them together, or use POST …/entries/bulk. See publishing.
  • Starter models. A new space can start with a blog, marketing site or docs model. See the content model.
  • Focal points. Click an image under Media to set where crops keep it. The delivery API answers focalPoint on assets, and focus=x,y on a file URL crops around it. See images.
  • Promotion cleans up. The plan lists entries only the target has; tick them to move them to the target's trash in the same promotion.
  • Deleted organizations' spaces, content and files are removed 30 days after the deletion.
  • URLs per locale. Pages and folders have a slug per locale (Move in the sidebar), falling back along the locale chain. The delivery API looks /pages?path=…&locale=nl up in that locale and answers paths on every entry; redirects and webhooks are per locale too. With {locale} in the preview URL, the visual editor opens each language's own page. See Locales.
  • Scheduled publishing. An entry can publish and/or unpublish at a set time: Schedule… under Status in its sidebar, or the agent API. A scheduled run acts like the person who scheduled it pressing the button, with the same checks, webhooks and history; a refused run shows why in the sidebar. See Publishing and scheduling.
  • Filter and order entries. The delivery API's entry list filters on a content type's fields (fields.<apiId>, with ne, in, gt, gte, lt, lte and exists) and orders by date, name, path or a field. That also finds settings, navigation and other single entries without hard-coding their ids. See the delivery API and the SDK's getFirstEntry.
  • Templates for new content types. A new page type starts with a title, a body and SEO fields, a data type with a title, a block type with a heading and an anchor. The agent API and MCP add the same fields unless you send your own.
  • Duplicate an entry from its sidebar or the agent API: a draft next to it, named " (copy)".
  • Rename and delete spaces in Settings. Deleting a space (admins only) removes its content and files.
  • Asset and entry pickers and the media page search and page through the server, so large spaces stay fast. Each entry keeps its newest 100 versions.
  • Drafts need a token. The visual editor gives the site a short-lived, read-only token (cms_token, 8 hours) to read drafts with; ?cms_preview=1 on its own no longer shows anything. Tokens that see drafts are refused from a browser on any origin but the environment's preview URL. See the visual editor.
  • Asset changes reach sites. Changing an asset's alt text or title updates every environment whose content uses it and sends the new asset.updated webhook.
  • Publishing checks references. Published content only points at published entries: publishing refuses a reference or embed to a draft.
  • Limits. Files over 25 MB are refused (413). The agent API and MCP (300 calls a minute) and prompts (20 a minute) are limited per person and answer 429 with Retry-After.
  • These docs, at content.obelism.studio/docs, with search and /llms.txt.

2026-10-16

  • The bridge script has the prompt box. https://content.obelism.studio/bridge.js is now the SDK's bridge, so sites without a bundler get prompt editing too.
  • Agents set up a site. The getProjectSetup MCP tool tells an agent how to start a site's repository with npx @obelism/content init, which writes the model file and an example per content type. See Agents.
  • A/B tests and feature flags as a block. Every blocks field takes the built-in improve block: a list of blocks per option of an improve test or flag. See A/B tests and feature flags.
  • Entries are edited in a form. One input per field, blocks as cards that nest and move, asset and entry pickers, a language switch for translated fields, and Save draft / Publish in a sticky bar (Cmd/Ctrl+S saves). The content model editor groups types as pages, data and blocks.
  • New pages by prompt. On your own site, the prompt box can also write a new page from a path and a description, stored as a draft.
  • Organizations have a plan per product; an admin can turn Content off for an Organization on www. The delivery API keeps serving.
  • Fixed: signing in from a dashboard link no longer ends on a 404.

2026-10-15

  • One sign-in for every Obelism product, on www.obelism.studio. Organizations, members and invites are managed there too.
  • Edit on your own site. Editors sign in from the site itself and edit with drafts and prompts, outside the visual editor. See Editing on your site.
  • Edit by prompt in the visual editor: describe a change and it shows on the page, unsaved, with undo. See Prompt editing.
  • API tokens, webhooks and space settings can be managed from the agent API and MCP.

2026-10-14

  • A getting-started guide and a dashboard prompt for setting up your agent.
  • Fixed: asset fields that allow image/* accept images.

2026-10-13

  • Images resized on the fly with width, height, fit, format and quality parameters. See Images.
  • Promote content between environments, with a plan of what will change first. See Environments.
  • The content model in Git: management tokens, the management API and the content model pull | plan | apply CLI. See The model in Git.
  • Version history and rollback for entries.
  • Rich text edited with a toolbar in the visual editor.
  • Webhooks, signed and retried for about 11 hours. See Webhooks.
  • The entries list pages, searches and filters.
  • Admins can rename the Organization.
  • Validation messages are written for people.
  • Uploaded files are served so they can't run as pages.
  • Model changes and usage checks stay fast on large spaces.

2026-10-12

  • The first version: content models per space and environment (pages, data and blocks), the entry editor, media, the delivery API with API tokens, the visual editor, the agent API and an MCP server. Rich text is stored as JSON and accepts Markdown.

On this page

Marks in the margin

  • Note
  • Watch out
  • Updated

Scribes marked doubtful lines in the margin. That practice is called obelism.

Stuck on a step?