DatoCMS changelog for new features and general improvements

Content Management API

## [Records creation just became up to 10x faster](https://www.datocms.com/product-updates/records-creation-just-became-up-to-10x-faster.md)

[date: 2018-08-24T19:30:00.000+02:00]

We're happy to announce that we just shipped some massive performance optimizations in DatoCMS.

If you had projects with lots of languages/modular content blocks, common operations like create/update or publish records could become pretty slow (up to 20 seconds on some edge cases).

We heavily optimized our DB queries, reducing the global execution time by an order of magnitude. Even on extreme scenarios, creating/updating a record should now take not more than 2 seconds.

Happy weekend everyone!

New

## [Update media in place](https://www.datocms.com/product-updates/update-media-in-place.md)

[date: 2018-08-17T18:30:00.000+02:00]

If you need to update/revise some image or media, up until now you needed to upload a new file, hunt down any references to the old media and point them to the new media, then delete the old media. Extremely inefficient and time consuming.

Now you can simply update existing media, retaining all metadata, URL and of course record references:

(Image content)

New

## [Region-specific language codes](https://www.datocms.com/product-updates/region-specific-language-codes.md)

[date: 2018-08-09T17:00:00.000+02:00]

We just added the ability to specify ISO region-specific language codes to your projects (ie. `en-US`, `zh-CN`).

As always, you can change your project supported languages from *Settings \> Global project settings*:

(Image content)

New

## [Customizable toolbar for HTML and Markdown editors](https://www.datocms.com/product-updates/customizable-toolbar-for-html-and-markdown-editors.md)

[date: 2018-08-07T12:30:00.000+02:00]

We just shipped the ability to customize the toolbar buttons on multi-paragraph HTML and Markdown fields from the Presentation tab:

(Image content)

New

## [Multiple deployment environments](https://www.datocms.com/product-updates/multiple-deployment-environments.md)

[date: 2018-08-02T15:00:00.000+02:00]

In the beginning, a DatoCMS project could only have a deployment environment, the production one. Then, we introduced staging environment. Starting from today, you can setup as many environments as you want and trigger a build of your content on an unlimited number of external services.

This is a great addition for your editorial team, as it can now publish their content on a number of different platforms and let DatoCMS be the unique point where it manages data to be sent everywhere: websites, apps, wearables, you name it.

New API Clients

## [Webhooks now available!](https://www.datocms.com/product-updates/webhooks-now-avalable.md)

[date: 2018-08-02T14:30:00.000+02:00]

You can now be notified when one of these actions occur inside a DatoCMS project:

-   Create/update/delete/publish/unpublish a record
-   Create/update/delete a model
    
-   Create/update/delete an upload (that is, a file or an image in your Media area)
    

You can also set some filters, so for example you can be notified just when when a record of a specific model (ie. Article) is updated.

Just to give some examples, webhook enable you to:

-   Integrate/sync DatoCMS data with third-party systems (Snipcart, Shopify, Algolia, etc.);
-   Get Slack/email notifications;
    
-   Automatically post an update on Facebook/Twitter;
-   Produce an automatic deploy on your staging environment;
    

If you don't want to write any integration code, you can use Zapier Webhooks to connect a DatoCMS event with hundreads of different external services, creating any kind of complex automation workflow.

You can read all the details regarding this feature in our [documentation page](https://www.datocms.com/docs/general-concepts/webhooks.md).

New

## [Optional translations now available!](https://www.datocms.com/product-updates/optional-translations-now-available.md)

[date: 2018-06-29T00:00:00.000+02:00]

You can now configure a certain model so that you are not forced to insert content for every language your administrative area supports, but just for the primary one, and then manually add additional locales on a per-record basis.

This allows use cases such as multi-language blogs, where some articles can be written only in English, other only in Italian and others in both languages.

You can enable optional translations in your Model settings:

(Image content)

This will be the result for the editor:

(Image content)

API Clients

## [Released v0.5.4 of JS client](https://www.datocms.com/product-updates/released-v0-5-4-of-js-client.md)

[date: 2018-06-28T00:00:00.000+02:00]

We just rolled version 0.5.4 of our JS client!

The big change is that the methods the client makes available are generated at runtime based on the [JSON Schema of our CMA](https://www.datocms.com/docs/content-management-api.md). This means any new API endpoint — or changes to existing ones — will instantly be reflected to the client, without the need to upgrade to the latest client version.

We also added a new `deserializeResponse` option to every call, that you can use if you want to retrieve the exact payload the DatoCMS returns:

```javascript
import { SiteClient } from 'datocms-client';const client = new SiteClient("YOUR-API-KEY")// `deserializeResponse` is true by default:const accessToken = client.accessTokens.create({  name: "New token",  role: "34"})// {//   id: "312",//   hardcodedType: null,//   name: "New token",//   token: "XXXX",//   role: "34"// }// if `deserializeResponse` is false, this will be the resultconst accessToken = client.accessTokens.create(  {    name: "New token",    role: "34"  },  {    deserializeResponse: false  })// {//   data: {//     type: "access_token",//     id: "312",//     attributes: {//       name: "New token",//       token: "XXXX",//       hardcoded_type: nil//     },//     relationships: {//       role: {//         data: {//           type: "role",//           id: "34"//         }//       }//     }//   }// }
```

In our doc pages we also added some examples for the super-handy `allPages` option which was already present since v0.3.29:

```javascript
// if you want to fetch all the pages with just one call:client.items.all({ "filter[type]" => "44" }, { allPages: true })
```

API Clients

## [Released gatsby-source-datocms v1.1.9](https://www.datocms.com/product-updates/released-gatsby-source-datocms-v1-1-9.md)

[date: 2018-06-19T00:00:00.000+02:00]

We just added support for [the new Gatsby v2 `fixed` and `fluid` responsive image queries](https://next.gatsbyjs.org/docs/migrating-from-v1-to-v2/#rename-responsive-image-queries).

Old names (`sizes` and `resolutions`) are deprecated but still work.

Docs, Guides and Demos

## [Custom assets domain documentation page](https://www.datocms.com/product-updates/custom-assets-domain-documentation-page.md)

[date: 2018-06-18T00:00:00.000+02:00]

(Updated Dec 2024)

By default, DatoCMS uses the shared domain www.datocms-assets.com to serve your project's asset files (such as images and PDFs). On Enterprise plans, you can choose to use your own cloud storage and domain name instead.

To get started, please follow the instructions in one of these plugins, and then reach out to support@datocms.com to complete the setup:

### DatoCMS External Asset Storage & Custom Domain Options

On an Enterprise plan, you can host your DatoCMS assets (files) on third-party cloud providers with your own domain name. The following providers are supported:

-   [AWS S3 for DatoCMS assets](https://www.datocms.com/marketplace/enterprise/aws-s3.md)
-   [Azure Blob Storage for DatoCMS assets](https://www.datocms.com/marketplace/enterprise/azure-blob-storage.md)
    
-   [Google Cloud Storage for DatoCMS assets](https://www.datocms.com/marketplace/enterprise/google-cloud-storage.md)
-   [Cloudflare R2 Storage for DatoCMS assets](https://www.datocms.com/marketplace/enterprise/cloudflare-r2.md)