Filtering audit logs in the past meant creating queries with PartiQL, which is... not fun. No autocomplete, no syntax hinting, no inline validation, nada. Minor mistakes made queries fail, and that's not something you want when filtering out critical logs. I mean if you're filtering audit logs you're probably not having the best day to begin with, so why make it worse 😅
To make it a little more "fun", we've added a new GUI for building a filtered query, which should look very familiar to you.
No more guessing whatever a min_ulid() is, whether to single or double-quote, or what the correct query path for the record model is... (hint: it was request['payload']['data']['relationships']['item_type']['data']['id']... 😬?)
Now, just pick a date range and click to choose your filters, and we take care of the rest.
ℹ️ Audit Logs are only available on our Enterprise plans. If you want to add it to your project, get in touch!
It can get pretty tiring to scroll through all your record types when looking for something specific, so we've rolled out a new sidebar filter to make things easier.
Click on the search bar, start typing, and see a filtered list of models to create/edit content for.
Starting from the 25 Aug, 2026, the custom palette under Configuration > Appearance won't be available as an option for new projects — it will only be possible to use monochromatic palettes. Pick a hue, and the rest of the palette (backgrounds, text, accents) is generated for you automatically, tuned for readability.
If your project was created before that date, nothing changes for you: custom palettes remain available, whether you're already using one or not.
Why we're making this change
Since early on, DatoCMS wanted to offer a way to customise the theme of a project's admin area, to give you as much creative freedom as possible over how your admin area looked. Over time, though, we heard from editors — the people actually spending their day inside these interfaces — that some custom palettes were tiring to read comfortably. After some research, we found that colour is harder to get right than it looks: contrast ratios, how a background reads against small text, how a palette holds up across every screen in the product.
That's the main reason we introduced the monochromatic system in 2024: it solves that problem by design. Every colour in the palette — text, backgrounds, accents — is engineered to meet WCAG AA contrast standards, so whatever hue you pick, the result stays comfortable to read. We've now decided to make it the standard for every project, keeping that quality bar guaranteed while still leaving room to personalize it.
The DatoCMS Marketplace now shows you which plugins are "officially" developed by us with a little icon next to each one.
While this definitely makes it easier to find, official plugins are also our responsibility to maintain and keep up to date: so if something breaks or works unexpectedly, just give us a ping.
They're all categorized as a section within the Marketplace on the website and in the CMS.
And you can easily tell it is an official plugin with the little icon.
Until now, using Visual Editing meant clicking something in your preview and jumping straight to the record that renders it. It only lived in the iframe inside the plugin's Visual tab.
Now you can turn it on in the sidebar preview in the Content tab as well 👀
Click an element in the preview and you land right on /editor/item_types/<id>/items/<id> within the exact field behind it without hunting through the tree.
A few things worth knowing:
It's a per-user toggle, off by default: each editor flips it on for themselves, so it won't change anyone else's setup.
When the toggle is on, the sidebar loads the draft-mode preview URL (that's what visual editing needs to hook into).
If the selected preview link's frontend doesn't support visual editing, the toggle stays visible but disabled, with a tooltip explaining why.
Under the hood it's the same Content Link machinery that already powers the Visual tab, just wired into the sidebar frame, so refer to the docs to set up Visual Editing.
Sometimes all you get from a terminal output is a Record ID and nothing else. Made it kinda hard to find that record in the UI if you wanted to check for something. The filter by ID wasn't the best way, especially if you didn't know the item type.
So we've rolled out the ability to search by ID ✨
Open the UI, click the 🔍, enter the Record ID, and it'll surface right in the UI.
You can now disable Content Link (visual editing) encoding on a per-field basis, right from the field settings. Fields whose exact value matters — slugs, external IDs, keys, anything compared verbatim — can opt out, so the Content Delivery API never wraps their value in invisible visual-editing metadata.
A quick refresher on how Content Link works
Visual editing lets editors click directly on any element of your live site and jump straight to the field that controls it. It works through steganography: when you request draft content with Content Link enabled, the Content Delivery API embeds invisible Unicode characters into your text fields, encoding which record and field produced each string. Your <ContentLink /> component reads that metadata and paints the clickable overlays. Visually, nothing changes, but that invisible metadata is exactly what you don't want on certain fields.
The problem
Because the encoded value carries extra (invisible) characters, it's no longer byte-for-byte identical to what you typed. That's harmless for prose, but it breaks anything that treats a field as a literal:
A slug field with the value about no longer ==="about", so routing and equality checks fail.
IDs, keys, and tokens used in comparisons, switch statements, CSS selectors, or data- attributes silently misbehave.
Until now, the fix meant calling stripStega() on the values that needed it. That still works, but it's easy to forget and easy to miss one.
What's new
Open any string, multiple-paragraph text, or structured text field's settings, and you'll find a new toggle:
Leave it on for the fields your editors want to click into. Turn it off for the fields that need to stay verbatim, and the CDA will exclude that field from Content Link encoding entirely and the value ships clean, no stripStega() required.
The toggle is enabled by default, so nothing changes for your existing projects unless you opt a field out.
Under the hood
A new content_link_enabled attribute is exposed on the field, defaulting to true.
The opt-out is available on the field types that participate in Content Link encoding today: string, text, and structured_text.
When disabled, the exclusion happens server-side in the Content Delivery API, so it applies no matter which client or framework SDK you use.