DatoCMS changelog for new features and general improvements

New CLI

## [New Contentful importer](https://www.datocms.com/product-updates/new-contentful-importer.md)

[date: 2022-09-21T09:01:15.153+02:00]

Closely following the release of the [new CLI](https://www.datocms.com/blog/introducing-the-new-cli.md), we also released a new Contentful importer. You can install it as a CLI plugin, it provides faster import times and covers a number of new edge cases that the previous importer could not handle.

For all the information, take a look at [the new documentation](https://www.datocms.com/docs/import-and-export/import-space-from-contentful.md).

New Content Management API

## [Immutable IDs during environment fork and site duplication](https://www.datocms.com/product-updates/immutable-ids-during-environment-fork-and-site-duplication.md)

[date: 2022-09-20T17:32:49.903+02:00]

Until now, when forking an environment (or duplicating a project from the dashboard), resources under the newly created environment were assigned new IDs. This included models, fields, fieldsets, records, blocks, menu items, plugins, filters and media assets.

Starting from today, **every resource will keep their original ID on the forked environment (or duplicated project).** For instance, given a model "Blog Post" with ID `"12345"` in the primary environment, once the environment is forked, a new model "Blog Post" with the **same ID** `"12345"` will be present in the new sandbox environment.

We are so excited about this new feature, as **it greatly enhances the developer experience**. It makes the adoption of an environment-based workflow even easier, as the cloned environment is indistinguishable from the original one. [Migrations](https://www.datocms.com/docs/scripting-migrations/scripting-migrations-with-the-datocms-cli.md) are simpler to write, as **you can safely rely on the IDs to pick resources**, and the same applies to any third-party application that communicates with your DatoCMS project.

This change will also allow us to start working on another very requested feature by community: [auto-generation of migration scripts by diffing two different environments](https://community.datocms.com/t/allow-diffing-of-two-environments-to-capture-as-a-migration-script/2370)!

⚠️ PS. Since now IDs are immutable cross-environment, take extra precaution at [selecting the right environment](https://www.datocms.com/docs/content-management-api/setting-the-environment.md) when you're ie. deleting any resource via our Content Management API! The same ID is present on multiple environments, so your API call will work even if you're not targeting the environment you had in mind!

New UI Improvement

## [Configurable heading levels on Structured Text fields](https://www.datocms.com/product-updates/heading-levels-are-on-configurable-on-structured-text-fields.md)

[date: 2022-09-16T11:29:36.151+02:00]

In the Presentation tab of Structured Text fields, it is now possible to enable only specific heading levels:

(Video content)

This will have the effect of hiding the relative slash commands on the editor (in this case, the Heading 1 option is not present):

(Video content)

For greater convenience, markdown shortcuts for heading levels that are not available will fall back to the nearest available level — that is, if Heading 1 is not available, pressing `#` will insert a Heading 2 — and `tab` and `shift+tab` keyboard shortcuts, which have the effect of decreasing/increasing the heading level, will skip the levels that are not available:

(Video content)

Images API

## [Transformation parameters are now available for SVG format](https://www.datocms.com/product-updates/transformation-parameters-are-now-available-for-svg-format.md)

[date: 2022-09-15T15:00:01.049+02:00]

We are happy to announce that it is now possible to use all the transformation parameters made available by Imgix on SVG files as well!

It is important to note that as soon as a transformation parameter is added to the URL of an SVG file, Imgix will proceed to rasterize the SVG, and the transformations will be applied to the rasterized version of the image.

By default an SVG file with any transformation parameter will be converted in PNG format, but you can request a different output format with the [`fm` parameter](https://docs.imgix.com/apis/video/format/fm).

Plugins

## [Plugin SDK exposes blocks usage information](https://www.datocms.com/product-updates/plugin-sdk-exposes-blocks-usage-information.md)

[date: 2022-09-15T08:45:41.631+02:00]

A small addition to our [Plugin SDK](https://www.datocms.com/docs/plugin-sdk/introduction.md): it is now possible to retrieve the number of blocks currently used inside a record via the `ctx.blocksAnalysis` property.

The information is exposed in every hook related to records editing, namely [Field extensions](https://www.datocms.com/docs/plugin-sdk/field-extensions.md), [Sidebar panels](https://www.datocms.com/docs/plugin-sdk/sidebar-panels.md), and [Form outlets](https://www.datocms.com/docs/plugin-sdk/form-outlets.md):

```tsx
import React from 'react';import ReactDOM from 'react-dom';import { connect, RenderItemFormOutletCtx } from 'datocms-plugin-sdk';connect({  itemFormOutlets(model, ctx) {    return [{ id: 'myOutlet' }];  },  renderItemFormOutlet(outletId, ctx) {    const {      blocksAnalysis: {        usage: {          /** Total number of blocks present in form state */          total,          /** Total number of blocks present in non-localized fields */          nonLocalized,          /** Total number of blocks present in localized fields, per locale */          perLocale,        },        /** Maximum number of blocks per item */        maximumPerItem,      },    } = ctx;    // render the outlet here  },});
```

UI Improvement

## [Menu items can now point to a specific shared filter](https://www.datocms.com/product-updates/menu-items-can-now-force-a-specific-filter.md)

[date: 2022-09-14T10:00:03.395+02:00]

In the content navigation bar, it is now possible to associate menu items to specific shared filters, so that the user clicking on the item will see a predefined set of filters, table columns and ordering:

(Video content)

UI Improvement

## [Record filters now save also columns and ordering information](https://www.datocms.com/product-updates/record-filters-now-save-also-columns-and-ordering-information.md)

[date: 2022-09-13T12:12:26.160+02:00]

We have extended the capabilities of our record filters, which now behave like fully fledged views!

A filter can now store also a preference of ordering, and the table columns most suitable to consume that specific filtering:

(Video content)

Content Management API

## [Site search now supports fuzzy search](https://www.datocms.com/product-updates/site-search-now-supports-fuzzy-search.md)

[date: 2022-09-06T11:33:40.251+02:00]

We just introduced a new parameter that can be added to the `filter` parameter of site search to enable a fuzzy search. When the parameter `fuzzy` filter is present, our search engine will find strings that *approximately* match the query provided.

Here is an example of how to use the feature:

```javascript
const searchResults = await client.searchResults.list({  page: {    offset: 200,    limit: 20  },  filter: {    fuzzy: true,    query: 'florance',    build_trigger_id: '44',    locale: 'en'  }});searchResults.forEach((searchResult) => {  console.log(searchResult);});
```

In this example, strings like *florence* will be matched, even if the query is *flor****a****nce*.

Please refer to the [site search page](https://www.datocms.com/docs/content-management-api/resources/search-result/instances.md) in the Content Management API documentation for a complete example.

Content Delivery API

## [Slightly new behaviour for sortable and tree models](https://www.datocms.com/product-updates/slightly-new-behaviour-for-sortable-and-tree-models.md)

[date: 2022-07-20T09:56:15.509+02:00]

We subtly changed the way of working for sortable and tree models. Your content may be affected only if the draft/published system is enabled for some of your models.

Up until now, when a model was using the draft/published system, the user was forced to republish the records after updating the record position or rearranging the tree.

As of today, the changes to records' position of a model sortable (i.e. its position in the list) or tree (i.e. its position in the tree) are immediately reflected on the GraphQL published endpoints: you don't need anymore to publish the record again.

This change only applies to models with draft/published system enabled.

Integrations

## [Mux integration is getting cheaper!](https://www.datocms.com/product-updates/mux-integration-is-getting-cheaper.md)

[date: 2022-07-18T15:57:09.782+02:00]

Our integration with Mux is getting used more and more, so **we can finally offer a better price for the streaming and encoding addons**.

Here's the changes that we have already applied:

-   extra video encoding now comes at €9/mo every 180 mins of extra uploaded footage, instead of €19 for 300 mins
-   all the plans get at least 30 minutes of included video encoding
    
-   extra video streaming now comes at €19/mo every 300 hrs of extra video streaming time, instead of €29 for 250hrs
    

All **the new addon prices are automatically applied on the existing plans, no need to do anything**. Also the new price is going to be applied to all the extras made in July.

The pricing changes apply only on the per-account pricing plans. If you are still on a legacy plan and if you want to get the new pricing get in touch over at support@datocms.com so that we can help you migrating.