@sveltia/cms 0.104.2 → 0.105.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,10 +1,8 @@
1
1
  # Sveltia CMS: Netlify/Decap CMS successor
2
2
 
3
- Sveltia CMS is a Git-based lightweight headless CMS under active development as a modern, powerful, quick replacement for Netlify CMS and Decap CMS. In some simple cases, migration is as easy as a single line of code change, although we are still working on improving compatibility.
3
+ Sveltia CMS is a Git-based lightweight headless CMS under active development as a modern, powerful drop-in replacement for Netlify CMS and Decap CMS. While some features are still missing, we’ve already solved over 250 issues reported in the predecessor’s repository, from critical bugs to top feature requests.
4
4
 
5
- The free, open source alternative to Netlify/Decap CMS is now in public beta, turbocharged with great UX, performance, i18n support and so many more enhancements.
6
-
7
- Welcome to the only Netlify CMS successor you can trust!
5
+ Built from scratch, Sveltia CMS offers an excellent UX, DX, performance and i18n support, as well as numerous other enhancements to ensure smooth day-to-day workflows. This free, open source alternative to Netlify/Decap CMS is now in public beta, with version 1.0 expected in late 2025.
8
6
 
9
7
  ![Git-based headless CMS made right](https://raw.githubusercontent.com/sveltia/sveltia-cms/main/docs/screenshot-1.webp?20250405)<br>
10
8
 
@@ -47,11 +45,11 @@ Welcome to the only Netlify CMS successor you can trust!
47
45
  - [Current limitations](#current-limitations)
48
46
  - [Features not to be implemented](#features-not-to-be-implemented)
49
47
  - [Other breaking changes](#other-breaking-changes)
50
- - [Compatibility with Static CMS](#compatibility-with-static-cms)
51
48
  - [Framework support](#framework-support)
52
49
  - [Backend support](#backend-support)
53
50
  - [Browser support](#browser-support)
54
51
  - [Deprecations](#deprecations)
52
+ - [Compatibility with Static CMS](#compatibility-with-static-cms)
55
53
  - [Getting Started](#getting-started)
56
54
  - [Installation \& setup](#installation--setup)
57
55
  - [Migration](#migration)
@@ -82,6 +80,7 @@ Welcome to the only Netlify CMS successor you can trust!
82
80
  - [Configuring multiple media libraries](#configuring-multiple-media-libraries)
83
81
  - [Optimizing images for upload](#optimizing-images-for-upload)
84
82
  - [Disabling stock assets](#disabling-stock-assets)
83
+ - [Using entry tags for categorization](#using-entry-tags-for-categorization)
85
84
  - [Editing site deployment configuration files](#editing-site-deployment-configuration-files)
86
85
  - [Editing data files with a top-level list](#editing-data-files-with-a-top-level-list)
87
86
  - [Changing the input type of a DateTime field](#changing-the-input-type-of-a-datetime-field)
@@ -102,6 +101,7 @@ Welcome to the only Netlify CMS successor you can trust!
102
101
  - [Trivia](#trivia)
103
102
  - [Related Links](#related-links)
104
103
  - [As seen on](#as-seen-on)
104
+ - [Privacy](#privacy)
105
105
  - [Disclaimer](#disclaimer)
106
106
 
107
107
  ## Motivation
@@ -120,7 +120,7 @@ Due to its unfortunate abandonment in early 2022, Netlify CMS spawned 3 successo
120
120
  - **Sveltia CMS**: not a fork but a **complete rewrite**, started in November 2022, first appeared on GitHub in March 2023
121
121
  - [Decap CMS](https://github.com/decaporg/decap-cms): a rebranded version, [announced in February 2023](https://www.netlify.com/blog/netlify-cms-to-become-decap-cms/) as the official successor with a Netlify agency partner taking ownership — mostly stagnant, no significant improvements made since then
122
122
 
123
- Sveltia CMS is the only project that doesn’t inherit the complexity, technical debt, and numerous bugs of Netlify CMS, which was launched in 2015. Our product is better by design: We have rebuilt the app from the ground up using a [modern framework](https://svelte.dev/) while closely monitoring and analyzing the predecessor’s issue tracker. We don’t use any of their code. This “total reboot” allows us to make [hundreds of improvements](#differentiators) without getting stuck in an old system.
123
+ Sveltia CMS is the only project that doesn’t inherit the complexity, technical debt, and numerous bugs of Netlify CMS, which was launched in 2015. Our product is better by design: We have rebuilt the app from the ground up using a [modern framework](https://svelte.dev/) while closely monitoring and analyzing the predecessor’s issue tracker. We don’t reuse any part of their code. This “total reboot” allows us to make [hundreds of improvements](#differentiators) without getting stuck in an old system.
124
124
 
125
125
  While Sveltia CMS was created to replace legacy Netlify CMS instances, it can also be used as an alternative to other Netlify CMS successors. With its [solid i18n support](#better-i18n-support), we’re hoping our product will eventually be an appearing option for anyone looking for a free headless CMS.
126
126
 
@@ -165,7 +165,7 @@ Note: This lengthy section compares Sveltia CMS with both Netlify CMS and Decap
165
165
 
166
166
  ### Better UX
167
167
 
168
- - Created and actively maintained by an [experienced UX engineer](https://github.com/kyoshino) who loves code, design, marketing and problem solving. You can expect constant improvements to the user experience (UX) and developer experience (DX) across the platform.
168
+ - Created and actively maintained by an [experienced UX engineer](https://github.com/kyoshino) who loves code, design, marketing, localization and everything in between. You can expect constant improvements to the user experience (UX) and developer experience (DX) across the platform.
169
169
  - The maintainer tries to respond to bug reports as quickly as possible. While there are no guarantees, the typical turnaround time for a bug fix is less than 24 hours.
170
170
  - Frequent releases deliver new features and enhancements to users faster. Many of our minor [releases](https://github.com/sveltia/sveltia-cms/releases) address one or more Netlify/Decap CMS issues, giving you even more reasons to switch from the legacy predecessor.
171
171
  - Offers a modern, intuitive user interface that utilizes the full viewport,[^178] inspired in part by the Netlify CMS v3 prototype.[^1][^211][^212][^213][^214]
@@ -173,7 +173,6 @@ Note: This lengthy section compares Sveltia CMS with both Netlify CMS and Decap
173
173
  - Users can easily manage content on-the-go with mobile and tablet support.[^18][^215]
174
174
  - For a smoother experience, we even go beyond responsive design with optimized navigation, floating action buttons, smooth [view transitions](https://developer.chrome.com/docs/web-platform/view-transitions), larger buttons, and other tweaks. We’ll continue to fully optimize the app for small screens and touch devices.
175
175
  - If you’re already signed in on your desktop, open the Account menu in the top right corner of the CMS, click Sign In with Mobile, and scan the QR code for passwordless sign-in. Your settings will be automatically copied.
176
- - Sveltia CMS loads all entries at startup. We don’t support backends that cannot retrieve multiple entries at once. This deliberate design choice improves performance and UX by enabling instant full-text searches, fast and powerful relation fields, and linking between assets and entries.
177
176
  - Made with [Svelte](https://svelte.dev/), not React, means we can spend more time on UX rather than tedious state management. It also allows us to avoid common fatal React application crashes.[^113][^129] Best of all, Svelte offers great performance.
178
177
  - Other crashes in Netlify/Decap CMS are also irrelevant to us, making Sveltia CMS much more stable.[^112][^203][^204][^260]
179
178
  - We build [our own UI component library](https://github.com/sveltia/sveltia-ui), including custom dialogs, to ensure optimal usability without compromising accessibility.[^277][^196][^205][^206][^207][^208][^209][^210]
@@ -232,6 +231,7 @@ Note: This lengthy section compares Sveltia CMS with both Netlify CMS and Decap
232
231
  - Sveltia CMS has a [secure context](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts) requirement that forces the site content, including the CMS configuration file, to be served over HTTPS.
233
232
  - GitHub commits are automatically GPG-signed and [marked as verified](https://docs.github.com/en/authentication/managing-commit-signature-verification/about-commit-signature-verification).[^144]
234
233
  - Our [local repository workflow](#working-with-a-local-git-repository) doesn’t require a proxy server, reducing an attack surface.[^158][^282]
234
+ - As of Sveltia CMS v0.105.0, the `sanitize_preview` option for the [Markdown](https://decapcms.org/docs/widgets/#markdown) widget is set to `true` by default to prevent XSS attacks via entry previews. We recommend keeping this option enabled unless you fully trust all users of your CMS.
235
235
 
236
236
  ### Better installation
237
237
 
@@ -247,9 +247,8 @@ Note: This lengthy section compares Sveltia CMS with both Netlify CMS and Decap
247
247
  - We provide clear [compatibility information](#compatibility) to help you avoid unsupported options and configurations that might cause errors. By contrast, the Netlify/Decap CMS documentation does not mention the deprecation of camel case options, the removal of the Date widget and the replacement of Moment.js.
248
248
  - Sveltia CMS supports a [JSON configuration file](#providing-a-json-configuration-file) that can be generated for bulk or complex collections.[^60]
249
249
  - Also supports [multiple configuration files](#providing-multiple-configuration-files) to allow developers to modularize the configuration.[^197]
250
- - We provide an [up-to-date JSON schema](#enabling-autocomplete-and-validation-for-the-configuration-file) for YAML/JSON configuration files, which enables autocomplete and validation in VS Code and other editors.[^253]
250
+ - We provide an [up-to-date JSON schema](#enabling-autocomplete-and-validation-for-the-configuration-file) for YAML/JSON configuration files, which enables autocomplete and validation in VS Code and other editors.[^253] If you use [deprecated options](#deprecations) in a supported code editor, you should receive a warning.
251
251
  - Improved TypeScript support: We keep our type definitions for `CMS.init()` and other methods complete, accurate, up-to-date and annotated.[^190][^191][^192][^193][^227] This makes it easier to provide a site config object when [manually initializing](https://decapcms.org/docs/manual-initialization/) the CMS.
252
- - [Deprecated options](#deprecations) are clearly marked as such in both the JSON schema and the TypeScript type definitions. If you use these options in a supported code editor, you should receive a warning.
253
252
 
254
253
  ### Better backend support
255
254
 
@@ -422,7 +421,7 @@ Sveltia CMS has been built with a multilingual architecture from the very beginn
422
421
 
423
422
  ### Better widgets
424
423
 
425
- Sveltia CMS supports all the [built-in widgets](https://decapcms.org/docs/widgets/) available in Netlify/Decap CMS. We have improved these widgets significantly while adding some new ones. A few remaining [limitations](#current-limitations) will be addressed before the 1.0 release.
424
+ Sveltia CMS supports all the [built-in widgets](https://decapcms.org/docs/widgets/) available in Netlify/Decap CMS. We have improved these widgets significantly while adding some new ones.
426
425
 
427
426
  - Boolean
428
427
  - A required Boolean field with no default value is saved as `false` by default, without raising a confusing validation error.[^45]
@@ -473,7 +472,7 @@ Sveltia CMS supports all the [built-in widgets](https://decapcms.org/docs/widget
473
472
  - A combination of bold and italic doesn’t create a confusing 3-asterisk markup.[^160] In our editor, bold is 2 asterisks and italic is an underscore.
474
473
  - The built-in `image` component can be inserted with a single click.
475
474
  - The built-in `image` component allows users to add, edit or remove a link on an image.[^171] To disable this feature, add `linked_images: false` to the Markdown field options.
476
- - It’s possible to paste/drop local/remote images into the rich text editor to insert them as expected. Note: Pasting multiple images is [not supported in Firefox](https://bugzilla.mozilla.org/show_bug.cgi?id=864052). In Netlify/Decap CMS, pasting an image may cause the application to crash.
475
+ - It’s possible to paste/drop local/remote images into the rich text editor to insert them as expected. Note: Pasting multiple images is [not supported in Firefox](https://bugzilla.mozilla.org/show_bug.cgi?id=864052). In Netlify/Decap CMS, pasting an image may cause the application to crash.[^284]
477
476
  - The built-in `code-block` component is implemented just like a blockquote. You can simply convert a normal paragraph into a code block instead of adding a component.
478
477
  - Code in a code block in the editor can be copied as expected.[^165]
479
478
  - Language-annotated code block doesn’t trigger unsaved changes.[^189]
@@ -617,7 +616,7 @@ These Netlify/Decap CMS features are not yet implemented in Sveltia CMS. We are
617
616
 
618
617
  [Localization](https://github.com/sveltia/sveltia-cms/blob/main/src/lib/locales/README.md), [documentation](https://github.com/sveltia/sveltia-cms/issues/485) and [demo site](https://github.com/sveltia/sveltia-cms/issues/1) will all be prepared once the 1.0 Release Candidate is ready.
619
618
 
620
- Due to the complexity, we have decided to defer the following features to the 2.0 release due early 2026. Netlify/Decap CMS has dozens of open issues with these collaboration and beta features — we want to implement them the right way.
619
+ Due to the complexity, we have decided to defer the following features to the 2.0 release due early/mid 2026. Netlify/Decap CMS has dozens of open issues with these collaboration and beta features — we want to implement them the right way.
621
620
 
622
621
  - [Editorial workflow](https://decapcms.org/docs/editorial-workflows/)
623
622
  - [Open authoring](https://decapcms.org/docs/open-authoring/)
@@ -631,7 +630,7 @@ The following Netlify/Decap CMS features will not be implemented, primarily due
631
630
  - **Azure and Bitbucket backends**: For performance reasons. We’ll support these platforms if their APIs improve to allow the CMS to fetch multiple entries at once.
632
631
  - **Git Gateway backend**: Also for performance reasons. [Git Gateway](https://github.com/netlify/git-gateway) has not been actively maintained since Netlify CMS was abandoned, and it’s known to be slow and prone to rate limit violations. We plan to develop a GraphQL-based high-performance alternative [in the future](#roadmap).
633
632
  - **Netlify Identity Widget**: It’s not useful without Git Gateway, and the Netlify Identity service itself is now [deprecated](https://www.netlify.com/changelog/deprecation-netlify-identity/). We plan to develop an alternative solution with role support [in the future](#roadmap), most likely using [Cloudflare Workers](https://workers.cloudflare.com/) and [Auth.js](https://authjs.dev/).
634
- - [Gatsby plugin](https://github.com/decaporg/gatsby-plugin-decap-cms): In light of Gatsby’s [decline](https://2024.stateofjs.com/en-US/libraries/meta-frameworks/) and [apparent ending](https://github.com/gatsbyjs/gatsby/discussions/39062), we won’t be investing time in developing a plugin for it. You can still create `index.html` yourself. Note: We don’t support Netlify Identity Widget; the favicon can be specified with the `logo_url` option.
633
+ - [Gatsby plugin](https://github.com/decaporg/gatsby-plugin-decap-cms): In light of Gatsby’s [decline](https://2024.stateofjs.com/en-US/libraries/meta-frameworks/) and [uncertainty](https://github.com/gatsbyjs/gatsby/discussions/39062), we won’t be investing time in developing a plugin for it. You can still create `index.html` yourself. Note: We don’t support Netlify Identity Widget; the favicon can be specified with the `logo_url` option.
635
634
  - The deprecated client-side implicit grant for the GitLab backend: It has already been [removed from GitLab 15.0](https://gitlab.com/gitlab-org/gitlab/-/issues/344609). Use the client-side PKCE authorization instead.
636
635
  - The deprecated Netlify Large Media service: Consider other storage providers.
637
636
  - Deprecated camel case configuration options: Use snake case instead, according to the current Decap CMS document.
@@ -658,34 +657,13 @@ The following Netlify/Decap CMS features will not be implemented, primarily due
658
657
  There are some differences in behaviour between Sveltia CMS and Netlify/Decap CMS that may affect your existing configuration or content.
659
658
 
660
659
  - [Decap CMS 3.1.1](https://github.com/decaporg/decap-cms/releases/tag/decap-cms%403.1.1) replaced Moment.js with Day.js for date handling, and [Sveltia CMS 0.104.0](https://github.com/sveltia/sveltia-cms/releases/tag/v0.104.0) followed suit. Since [Day.js tokens](https://day.js.org/docs/en/display/format) are not 100% compatible with [Moment.js tokens](https://momentjs.com/docs/#/displaying/format/), this could be a breaking change in certain cases. Check your `format`, `date_format` and `time_format` options for DateTime fields, as well as any date formatting in [summary string transformations](https://decapcms.org/docs/summary-strings/).
661
- - In some cases, the [data output](#better-data-output) of Sveltia CMS may differ from that of Netlify/Decap CMS. Notably, Sveltia CMS does not omit empty optional fields by default. If you have data validation in your site generator, this could cause issues.
660
+ - By default, Sveltia CMS does not slugify uploaded filenames, as mentioned in the [asset management](#better-asset-management) section. If your site generator expects hyphenated filenames, you can enable the `slugify_filename` [default media library option](#configuring-multiple-media-libraries).
661
+ - In some cases, the [data output](#better-data-output) of Sveltia CMS may differ from that of Netlify/Decap CMS. Notably, Sveltia CMS does not omit empty optional fields by default. If you have data validation in your site generator, this could cause issues. Use the `omit_empty_optional_fields` [output option](#controlling-data-output) if needed.
662
662
  - Sveltia CMS requires a [secure context](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts), meaning it only works with HTTPS, `localhost` or `127.0.0.1` URLs. If you’re running your own remote server and serving content over HTTP, the CMS will not work. We recommend obtaining a TLS certificate from [Let’s Encrypt](https://letsencrypt.org/).
663
+ - As of Sveltia CMS v0.105.0, the `sanitize_preview` option for the [Markdown](https://decapcms.org/docs/widgets/#markdown) widget is set to `true` by default to prevent XSS attacks via entry previews. We recommend keeping this option enabled unless you fully trust all users of your CMS.
663
664
 
664
665
  [Let us know](https://github.com/sveltia/sveltia-cms/issues/new?type=bug) if you have encounter any compatibility issues that are not listed here.
665
666
 
666
- ### Compatibility with Static CMS
667
-
668
- Sveltia CMS provides partial compatibility with [Static CMS](https://github.com/StaticJsCMS/static-cms), a now-defunct fork of Netlify CMS. Since Static CMS was archived some time ago, we don’t plan to implement additional compatibility beyond what’s listed below. However, we may still adopt some of their features that we find useful.
669
-
670
- Static CMS made [some breaking changes](https://staticjscms.netlify.app/docs/decap-migration-guide) while Sveltia CMS mostly follows Netlify/Decap CMS, so you should review your configuration carefully.
671
-
672
- - Configuration options
673
- - Sveltia CMS supports the [`sortable_fields`](#specifying-default-sort-field-and-direction), `view_filters` and `view_groups` options with the new `default` option. We still support the legacy Netlify/Decap CMS format as well, so you can use [either format](https://staticjscms.netlify.app/docs/decap-migration-guide#sortable-fields) for these options.
674
- - Directory navigation in the Asset Library is partially supported in Sveltia CMS. If you define [collection-specific `media_folder`s](#using-a-custom-media-folder-for-a-collection), these folders will be displayed in the Asset Library and Select File/Image dialog. Display of subfolders within a configured folder will be implemented before GA. We don’t plan to support the `folder_support` and `display_in_navigation` options for `media_library`; subfolders will be displayed with no configuration. ([#301](https://github.com/sveltia/sveltia-cms/issues/301))
675
- - The `logo_link` global option will not be supported. Use `display_url` or `site_url` instead.
676
- - The `yaml` global option will not be supported, as Sveltia CMS doesn’t expose the underlying `yaml` library options for forward compatibility reasons. However, we do have some [data output options](#controlling-data-output), including YAML indentation and quotes.
677
- - I18n support
678
- - The `enforce_required_non_default` i18n option will not be supported. Sveitia CMS enforces required fields in all locales by default. However, the `initial_locales` i18n option allows users to [disable non-default locales](#disabling-non-default-locale-content) if needed. Developers can also specify a subset of locales with the `required` field option, e.g. `required: [en]`.
679
- - Widgets
680
- - The date/time format options for the DateTime widget are **not compatible** since Static CMS [switched to date-fns](https://staticjscms.netlify.app/docs/decap-migration-guide#dates) while Decap CMS and Sveltia CMS have replaced Moment.js with Day.js. Update your formats accordingly.
681
- - The [KeyValue widget](#new-widgets) is implemented in Sveltia CMS with the same options.
682
- - The [UUID widget](#new-widgets) is also implemented, but with different options.
683
- - The `prefix` and `suffix` options for the Boolean, Number and String widgets are implemented as `before_input` and `after_input` in Sveltia CMS, respectively. Our `prefix` and `suffix` options for the String widget are literally a prefix and suffix to the value.
684
- - The `multiple` option for the File and Image widgets will be implemented in Sveltia CMS before GA. ([#10](https://github.com/sveltia/sveltia-cms/issues/10))
685
- - The [breaking change to the List widget](https://staticjscms.netlify.app/docs/decap-migration-guide#list-widget) doesn’t apply to Sveltia CMS. You must use the `field` (singular) option to produce a single subfield with [no `name` output](#understanding-exceptions-in-data-output).
686
- - Customization
687
- - `CMS.registerIcon()` will not be supported, as Sveltia CMS includes the Material Symbols font for [custom collection icons](#using-a-custom-icon-for-a-collection) that doesn’t require manual registration.
688
-
689
667
  ### Framework support
690
668
 
691
669
  While Sveltia CMS is built with Svelte, the application is **framework-agnostic**. It’s a small, compiled, vanilla JavaScript bundle that manages content in a Git repository directly via an API. It doesn’t interact with the framework that builds your site.
@@ -718,6 +696,29 @@ These options are deprecated and will be removed in Sveltia CMS v1.0:
718
696
  - The `yaml_quote` collection option. `yaml_quote: true` is equivalent to `quote: double` in the [new YAML format options](#controlling-data-output).
719
697
  - The `read_only` UUID widget option. Use the `readonly` common field option instead, which defaults to `true` for the UUID widget.
720
698
 
699
+ ### Compatibility with Static CMS
700
+
701
+ Sveltia CMS provides partial compatibility with [Static CMS](https://github.com/StaticJsCMS/static-cms), a now-defunct fork of Netlify CMS. Since Static CMS was archived some time ago, we don’t plan to implement additional compatibility beyond what’s listed below. However, we may still adopt some of their features that we find useful.
702
+
703
+ Static CMS made [some breaking changes](https://staticjscms.netlify.app/docs/decap-migration-guide) while Sveltia CMS mostly follows Netlify/Decap CMS, so you should review your configuration carefully.
704
+
705
+ - Configuration options
706
+ - Sveltia CMS supports the [`sortable_fields`](#specifying-default-sort-field-and-direction), `view_filters` and `view_groups` options with the new `default` option. We still support the legacy Netlify/Decap CMS format as well, so you can use [either format](https://staticjscms.netlify.app/docs/decap-migration-guide#sortable-fields) for these options.
707
+ - Directory navigation in the Asset Library is partially supported in Sveltia CMS. If you define [collection-specific `media_folder`s](#using-a-custom-media-folder-for-a-collection), these folders will be displayed in the Asset Library and Select File/Image dialog. Display of subfolders within a configured folder will be implemented in v2.0. We don’t plan to support the `folder_support` and `display_in_navigation` options for `media_library`; subfolders will be displayed with no configuration. ([#301](https://github.com/sveltia/sveltia-cms/issues/301))
708
+ - The `logo_link` global option will not be supported. Use `display_url` or `site_url` instead.
709
+ - The `yaml` global option will not be supported, as Sveltia CMS doesn’t expose the underlying `yaml` library options for forward compatibility reasons. However, we do have some [data output options](#controlling-data-output), including YAML indentation and quotes.
710
+ - I18n support
711
+ - The `enforce_required_non_default` i18n option will not be supported. Sveitia CMS enforces required fields in all locales by default. However, the `initial_locales` i18n option allows users to [disable non-default locales](#disabling-non-default-locale-content) if needed. Developers can also specify a subset of locales with the `required` field option, e.g. `required: [en]`.
712
+ - Widgets
713
+ - The date/time format options for the DateTime widget are **not compatible** since Static CMS [switched to date-fns](https://staticjscms.netlify.app/docs/decap-migration-guide#dates) while Decap CMS and Sveltia CMS have replaced Moment.js with Day.js. Update your formats accordingly.
714
+ - The [KeyValue widget](#new-widgets) is implemented in Sveltia CMS with the same options.
715
+ - The [UUID widget](#new-widgets) is also implemented, but with different options.
716
+ - The `prefix` and `suffix` options for the Boolean, Number and String widgets are implemented as `before_input` and `after_input` in Sveltia CMS, respectively. Our `prefix` and `suffix` options for the String widget are literally a prefix and suffix to the value.
717
+ - The `multiple` option for the File and Image widgets will be implemented in Sveltia CMS before GA. ([#10](https://github.com/sveltia/sveltia-cms/issues/10))
718
+ - The [breaking change to the List widget](https://staticjscms.netlify.app/docs/decap-migration-guide#list-widget) doesn’t apply to Sveltia CMS. You must use the `field` (singular) option to produce a single subfield with [no `name` output](#understanding-exceptions-in-data-output).
719
+ - Customization
720
+ - `CMS.registerIcon()` will not be supported, as Sveltia CMS includes the Material Symbols font for [custom collection icons](#using-a-custom-icon-for-a-collection) that doesn’t require manual registration.
721
+
721
722
  ## Getting Started
722
723
 
723
724
  ### Installation & setup
@@ -741,7 +742,7 @@ Unfortunately, **we are unable to provide free installation and setup support**
741
742
 
742
743
  ### Migration
743
744
 
744
- Have a look at the [compatibility info](#compatibility) above first. If you’re already using Netlify/Decap CMS with the GitHub, GitLab or Gitea/Forgejo backend and don’t have any unsupported features like custom widgets or nested collections, migrating to Sveltia CMS is super easy — it works as a drop-in replacement.
745
+ Have a look at the [compatibility info](#compatibility) above first. If you’re already using Netlify/Decap CMS with the GitHub, GitLab or Gitea/Forgejo backend and don’t have any unsupported features like editorial workflow or nested collections, migrating to Sveltia CMS is super easy — it works as a drop-in replacement.
745
746
 
746
747
  Open `/admin/index.html` locally with an editor like VS Code and replace the CMS `<script>` tag with the new one:
747
748
 
@@ -807,7 +808,7 @@ You can also generate a personal access token (PAT) on GitHub or GitLab, and use
807
808
 
808
809
  Sveltia CMS provides a full [JSON schema](https://json-schema.org/) for the configuration file, so you can get autocomplete and validation in your favourite code editor while editing the site configuration. The schema is generated from the source and always up to date with the latest CMS version.
809
810
 
810
- If you use VS Code, you can enable it for the YAML configuration file by installing the [YAML extension](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml) and adding the following line to the top of `config.yml`:
811
+ If you use VS Code, you can enable it for the YAML configuration file by installing the [YAML extension](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml) and adding the following comment to the top of `config.yml`:
811
812
 
812
813
  ```yaml
813
814
  # yaml-language-server: $schema=https://unpkg.com/@sveltia/cms/schema/sveltia-cms.json
@@ -826,6 +827,9 @@ Alternatively, you can add the following to your project’s [VS Code settings f
826
827
  "yaml.schemas": {
827
828
  "https://unpkg.com/@sveltia/cms/schema/sveltia-cms.json": ["/static/admin/config.yml"]
828
829
  },
830
+ ```
831
+
832
+ ```jsonc
829
833
  // For JSON config file
830
834
  "json.schemas": [
831
835
  {
@@ -837,7 +841,7 @@ Alternatively, you can add the following to your project’s [VS Code settings f
837
841
 
838
842
  The configuration file location varies by framework and project structure, so adjust the path accordingly. For example, if you use Astro, the file is typically located in the `/public/admin/` directory.
839
843
 
840
- If you use another code editor, check its documentation for how to enable JSON schema support for YAML or JSON files. The schema URL is `https://unpkg.com/@sveltia/cms/schema/sveltia-cms.json`.
844
+ If you use another code editor, check its documentation for how to enable JSON schema support for YAML or JSON files.
841
845
 
842
846
  ### Providing a JSON configuration file
843
847
 
@@ -1127,7 +1131,15 @@ The configuration for a [file collection](https://decapcms.org/docs/collection-f
1127
1131
 
1128
1132
  ### Translating entry fields with one click
1129
1133
 
1130
- Sveltia CMS comes with a handy translation API integration so that you can translate any text field from another locale without leaving the Content Editor. Currently, Google’s Cloud Translation, Anthropic’s Claude Haiku 3.5 and OpenAI’s GPT-3.5 Turbo are supported. To enable the quick translation feature:
1134
+ Sveltia CMS comes with a handy translation API integration so that you can translate any text field from another locale without leaving the Content Editor. Currently, the following services are supported:
1135
+
1136
+ - Google’s [Cloud Translation](https://cloud.google.com/translate)
1137
+ - Anthropic’s [Claude Haiku 3.5](https://www.anthropic.com/claude/haiku)
1138
+ - OpenAI’s [GPT-4o mini](https://platform.openai.com/docs/models/gpt-4o-mini)
1139
+
1140
+ Google’s API is very fast and offers a free tier. Other LLMs may produce more natural translations, but they are slower and require a paid plan. Choose the one that best fits your needs.
1141
+
1142
+ To enable the quick translation feature:
1131
1143
 
1132
1144
  1. Update your configuration file to enable the [i18n support](https://decapcms.org/docs/i18n/) with multiple locales.
1133
1145
  1. Create a new API key for the translation service of your choice:
@@ -1148,13 +1160,20 @@ Sveltia CMS comes with a handy translation API integration so that you can trans
1148
1160
  1. Select a translation service from the dropdown menu and paste your API key when prompted.
1149
1161
  1. The field(s) will be automatically translated.
1150
1162
 
1151
- You can also provide your API keys in the Settings dialog or change the default translation service.
1163
+ Note that the Translation button on the pane header only translates empty fields, while in-field Translation buttons override any filled text.
1164
+
1165
+ You can also provide your API keys in the Settings dialog or change the default translation service. API keys are stored in the browser’s local storage, so you don’t need to enter them every time.
1152
1166
 
1153
- If you don’t want some text to be translated, use the HTML [`translate`](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/translate) attribute or [`notranslate`](https://developers.google.com/search/blog/2008/10/helping-you-break-language-barrier) class, e.g. `<div translate="no">...</div>` or `<span class="notranslate">...</span>`. For Anthropic and OpenAI, you can also use the `notranslate` comment to exclude specific parts of Markdown content from translation, e.g. `<!-- notranslate -->...<!-- /notranslate -->`.
1167
+ If you don’t want some text to be translated, use the HTML [`translate`](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/translate) attribute or [`notranslate`](https://developers.google.com/search/blog/2008/10/helping-you-break-language-barrier) class. For Anthropic and OpenAI, you can also use the `notranslate` comment to exclude specific parts of Markdown content from translation:
1154
1168
 
1155
- Note that the Translation button on the pane header only translates empty fields, while in-field Translation buttons override any filled text.
1169
+ ```html
1170
+ <div translate="no">...</div>
1171
+ <span class="notranslate">...</span>
1172
+ <!-- notranslate -->...<!-- /notranslate -->
1173
+ {/* notranslate */}...{/* /notranslate */}
1174
+ ```
1156
1175
 
1157
- Earlier versions of Sveltia CMS included DeepL integration, but it has been disabled [due to an API limitation](https://github.com/sveltia/sveltia-cms/issues/437). More translation services will be added in the future.
1176
+ Earlier versions of Sveltia CMS included DeepL integration, but we had to disable it [due to an API limitation](https://github.com/sveltia/sveltia-cms/issues/437). More translation services will be added in the future.
1158
1177
 
1159
1178
  ### Localizing entry slugs
1160
1179
 
@@ -1319,6 +1338,89 @@ media_libraries:
1319
1338
  providers: []
1320
1339
  ```
1321
1340
 
1341
+ ### Using entry tags for categorization
1342
+
1343
+ If you write blog posts, for example, you may want to categorize them with taxonomies, often called tags, categories, labels or keywords. With Sveltia CMS, there are several ways to implement this feature, depending on your needs.
1344
+
1345
+ If you don’t have a predefined list of tags, you can use a simple [List](https://decapcms.org/docs/widgets/#list) field. This configuration will produce a newline-separated text field where users can enter tags freely:
1346
+
1347
+ ```yaml
1348
+ collections:
1349
+ - name: posts
1350
+ label: Blog Posts
1351
+ label_singular: Blog Post
1352
+ folder: content/posts
1353
+ create: true
1354
+ fields:
1355
+ - name: title
1356
+ label: Title
1357
+ - name: tags
1358
+ label: Tags
1359
+ widget: list
1360
+ - name: body
1361
+ label: Body
1362
+ widget: markdown
1363
+ ```
1364
+
1365
+ If you have a small number of predefined tags, you can use a [Select](https://decapcms.org/docs/widgets/#select) field. This configuration will produce a dropdown list where users can select one or more tags:
1366
+
1367
+ ```yaml
1368
+ fields:
1369
+ - name: tags
1370
+ label: Tags
1371
+ widget: select
1372
+ multiple: true
1373
+ options:
1374
+ - { label: Travel, value: travel }
1375
+ - { label: Food, value: food }
1376
+ - { label: Technology, value: technology }
1377
+ - { label: Lifestyle, value: lifestyle }
1378
+ ```
1379
+
1380
+ If you want more flexibility, you can create a separate collection for tags and reference it using a [Relation](https://decapcms.org/docs/widgets/#relation) field from your blog post collection. This approach allows you to:
1381
+
1382
+ - Add many tags without bloating the configuration file
1383
+ - Manage tags in one place within the CMS
1384
+ - Reuse tags across multiple collections
1385
+ - Add a description, image and other details to each tag (if you have tag index pages)
1386
+ - Localize tags with [i18n support](https://decapcms.org/docs/i18n/) enabled
1387
+
1388
+ This configuration will also produce a dropdown list where users can select one or more tags:
1389
+
1390
+ ```yaml
1391
+ fields:
1392
+ - name: tags
1393
+ label: Tags
1394
+ widget: relation
1395
+ multiple: true
1396
+ collection: tags
1397
+ search_fields: [title]
1398
+ display_fields: [title]
1399
+ value_field: '{{slug}}'
1400
+ ```
1401
+
1402
+ And here is an example of the corresponding tag collection:
1403
+
1404
+ ```yaml
1405
+ collections:
1406
+ - name: tags
1407
+ label: Tags
1408
+ label_singular: Tag
1409
+ folder: content/tags
1410
+ create: true
1411
+ fields:
1412
+ - name: title
1413
+ label: Title
1414
+ - name: description
1415
+ label: Description
1416
+ widget: text
1417
+ required: false
1418
+ - name: image
1419
+ label: Image
1420
+ widget: image
1421
+ required: false
1422
+ ```
1423
+
1322
1424
  ### Editing site deployment configuration files
1323
1425
 
1324
1426
  Sveltia CMS allows users to edit files without extensions. Examples include `_headers` and `_redirects`, which are used by some static site hosting providers, such as [Netlify](https://docs.netlify.com/routing/redirects/), [GitLab Pages](https://docs.gitlab.com/user/project/pages/redirects/) and [Cloudflare Pages](https://developers.cloudflare.com/pages/configuration/redirects/). Since the `body` field is [saved without the field name](#understanding-exceptions-in-data-output) when using the default `yaml-frontmatter` format, you can use the following configuration to edit these files in the Content Editor:
@@ -1724,7 +1826,9 @@ See [Contributing to Sveltia CMS](https://github.com/sveltia/sveltia-cms/blob/ma
1724
1826
 
1725
1827
  ## Roadmap
1726
1828
 
1727
- We have a lot of ideas and plans for Sveltia CMS. Here are some highlights. This includes 150+ more issues of Netlify/Decap CMS that we plan to solve, in addition to the 250+ issues we’ve already solved. In total, we aim to solve 400+ issues, as mentioned in the [Project Status](#project-status) section.
1829
+ As mentioned in the [Project Status](#project-status) section, we aim to solve 400+ [Netlify/Decap CMS issues](https://github.com/decaporg/decap-cms/issues) in total over the course of this project. We also have lots of ideas to make Sveltia CMS a great product.
1830
+
1831
+ We cannot promise any specific features or release dates, but here is a rough roadmap for the next few years.
1728
1832
 
1729
1833
  ### v1.0
1730
1834
 
@@ -1745,10 +1849,11 @@ Due late 2025
1745
1849
 
1746
1850
  ### v2.0
1747
1851
 
1748
- Due early 2026
1852
+ Due early/mid 2026
1749
1853
 
1750
1854
  - Implementing [a few deferred Netlify/Decap CMS features](#current-limitations), including editorial workflow and nested collections, while addressing a number of bugs in their implementations
1751
- - Tackling even more Netlify/Decap CMS issues to bring the total number of issues solved to 300+:
1855
+ - They will probably first be included as beta features in v1.x releases
1856
+ - Tackling even more Netlify/Decap CMS issues to bring the total number of issues solved to 300:
1752
1857
  - [Manual entry sorting](https://github.com/sveltia/sveltia-cms/issues/214)[^125]
1753
1858
  - [Directory navigation in the Asset Library](https://github.com/sveltia/sveltia-cms/issues/420)[^240]
1754
1859
 
@@ -1777,6 +1882,7 @@ Due early 2026
1777
1882
  - [Reverse reference lists](https://github.com/sveltia/sveltia-cms/discussions/416)
1778
1883
  - [Asset collections](https://github.com/sveltia/sveltia-cms/issues/301)[^271]
1779
1884
  - [Automatic asset file renaming with templates](https://github.com/sveltia/sveltia-cms/issues/422)[^241]
1885
+ - PKCE for GitHub[^285] — It’s [not yet supported](https://github.com/orgs/community/discussions/15752) by GitHub
1780
1886
  - and many more (100+ issues and discussions)
1781
1887
  - Enhancements to Sveltia CMS Additions (some may be included in v3.0):
1782
1888
  - Post locking[^166] (like [WordPress](https://codex.wordpress.org/Post_Locking))
@@ -1806,10 +1912,11 @@ Due early 2026
1806
1912
  - Framework-specific integrations, including a WYSIWYG editor. We will focus on framework-agnostic core features that are essential for succeeding Netlify/Decap CMS and modernizing the platform.
1807
1913
  - Enterprise features. We want to keep Sveltia CMS simple and easy to use for small teams and individual developers.
1808
1914
  - Monetization. We may offer an affordable cloud version in the future since self-hosting the CMS can be a hassle. However, we will not charge for the CMS itself. We want to keep it free and open source forever.
1915
+ - Creating the longest README file in the world. 😉
1809
1916
 
1810
1917
  ## Trivia
1811
1918
 
1812
- - The [original version of Netlify CMS](https://github.com/netlify/netlify-cms-legacy) was built with Ember before being rewritten in React. There was also an [attempt](https://github.com/decaporg/decap-cms/issues/328) to replace React with Preact. Now we have completely rewritten it in Svelte 4 and then Svelte 5. So this is effectively the third/fourth time the application has gone through a framework migration. One more thing: We may migrate to [Ripple](https://www.ripplejs.com/) in the future if it looks promising.
1919
+ - The [original version of Netlify CMS](https://github.com/netlify/netlify-cms-legacy) was built with Ember before being rewritten in React. There was also an [attempt](https://github.com/decaporg/decap-cms/issues/328) to replace React with Preact. Now we have completely rebuilt it in Svelte 4 and then in Svelte 5. So this is effectively the third/fourth time the application has gone through a framework migration. One more thing: We may migrate to [Ripple](https://www.ripplejs.com/) in the future if it looks promising.
1813
1920
  - Our [local repository workflow](#working-with-a-local-git-repository) shares implementation with the Test backend, as both utilize the [File System API](https://developer.mozilla.org/en-US/docs/Web/API/File_System_API), allowing us to reduce maintenance costs. The seamless local workflow is critical not only for improved DX, but also for our rapid application development.
1814
1921
 
1815
1922
  ## Related Links
@@ -1823,6 +1930,16 @@ Due early 2026
1823
1930
  - [Hugo – Front-end interfaces](https://gohugo.io/tools/front-ends/)
1824
1931
  - [Made with Svelte](https://madewithsvelte.com/sveltia-cms)
1825
1932
 
1933
+ ## Privacy
1934
+
1935
+ Sveltia CMS is not a service but a client-side application that runs in your web browser. You don’t need an account to use the app, but you do need to authenticate with your Git hosting provider to read and write remote data. All content is stored in your Git repository. No data is sent to any server operated by us.
1936
+
1937
+ GitHub (and GitLab, depending on your configuration) requires server-side authentication. If you choose the GitHub backend, you will need to use an OAuth application hosted by yourself or a third party, such as Netlify or Cloudflare, to retrieve an access token from GitHub. Alternatively, you can provide an access token directly on the CMS’s sign-in page. Other Git backends support client-side authentication. In any case, your token is stored in your browser’s local storage, and API requests are made directly between your browser and the Git hosting provider.
1938
+
1939
+ The CMS also integrates with various third-party services, including stock photo providers and translation services. These are “bring your own API key” features that are entirely optional. You provide your own API keys for these services, which are stored in your browser’s local storage, and API requests are then made directly between your browser and the relevant service providers.
1940
+
1941
+ As we don’t collect any analytics data either, we don’t have a privacy policy. For third-party services, please refer to their respective privacy policies.
1942
+
1826
1943
  ## Disclaimer
1827
1944
 
1828
1945
  This software is provided “as is” without any express or implied warranty. We are not obligated to provide any support for the application. This product is not affiliated with or endorsed by Netlify, Decap CMS or any other integrated services. All product names, logos, and brands are the property of their respective owners.
@@ -1969,7 +2086,7 @@ This software is provided “as is” without any express or implied warranty. W
1969
2086
 
1970
2087
  [^72]: Netlify/Decap CMS [#7047](https://github.com/decaporg/decap-cms/issues/7047)
1971
2088
 
1972
- [^73]: Netlify/Decap CMS [#6993](https://github.com/decaporg/decap-cms/issues/6993), [#7123](https://github.com/decaporg/decap-cms/issues/7123), [#7127](https://github.com/decaporg/decap-cms/issues/7127), [#7128](https://github.com/decaporg/decap-cms/issues/7128), [#7237](https://github.com/decaporg/decap-cms/issues/7237), [#7251](https://github.com/decaporg/decap-cms/issues/7251), [#7361](https://github.com/decaporg/decap-cms/issues/7361), [#7391](https://github.com/decaporg/decap-cms/issues/7391), [#7393](https://github.com/decaporg/decap-cms/issues/7393), [#7470](https://github.com/decaporg/decap-cms/issues/7470), [#7475](https://github.com/decaporg/decap-cms/issues/7475), [#7480](https://github.com/decaporg/decap-cms/issues/7480), [#7503](https://github.com/decaporg/decap-cms/issues/7503), [#7504](https://github.com/decaporg/decap-cms/issues/7504), [#7524](https://github.com/decaporg/decap-cms/issues/7524), [#7531](https://github.com/decaporg/decap-cms/issues/7531), [#7535](https://github.com/decaporg/decap-cms/issues/7535), [#7553](https://github.com/decaporg/decap-cms/issues/7553), [#7561](https://github.com/decaporg/decap-cms/issues/7561), [#7584](https://github.com/decaporg/decap-cms/issues/7584)
2089
+ [^73]: Netlify/Decap CMS [#6993](https://github.com/decaporg/decap-cms/issues/6993), [#7123](https://github.com/decaporg/decap-cms/issues/7123), [#7127](https://github.com/decaporg/decap-cms/issues/7127), [#7128](https://github.com/decaporg/decap-cms/issues/7128), [#7237](https://github.com/decaporg/decap-cms/issues/7237), [#7251](https://github.com/decaporg/decap-cms/issues/7251), [#7361](https://github.com/decaporg/decap-cms/issues/7361), [#7391](https://github.com/decaporg/decap-cms/issues/7391), [#7393](https://github.com/decaporg/decap-cms/issues/7393), [#7470](https://github.com/decaporg/decap-cms/issues/7470), [#7475](https://github.com/decaporg/decap-cms/issues/7475), [#7480](https://github.com/decaporg/decap-cms/issues/7480), [#7503](https://github.com/decaporg/decap-cms/issues/7503), [#7504](https://github.com/decaporg/decap-cms/issues/7504), [#7524](https://github.com/decaporg/decap-cms/issues/7524), [#7531](https://github.com/decaporg/decap-cms/issues/7531), [#7535](https://github.com/decaporg/decap-cms/issues/7535), [#7553](https://github.com/decaporg/decap-cms/issues/7553), [#7561](https://github.com/decaporg/decap-cms/issues/7561), [#7584](https://github.com/decaporg/decap-cms/issues/7584), [#7591](https://github.com/decaporg/decap-cms/issues/7591)
1973
2090
 
1974
2091
  [^74]: Netlify/Decap CMS [#4209](https://github.com/decaporg/decap-cms/issues/4209)
1975
2092
 
@@ -2049,7 +2166,7 @@ This software is provided “as is” without any express or implied warranty. W
2049
2166
 
2050
2167
  [^112]: Netlify/Decap CMS [#5815](https://github.com/decaporg/decap-cms/issues/5815), [#6522](https://github.com/decaporg/decap-cms/issues/6522), [#6532](https://github.com/decaporg/decap-cms/issues/6532), [#6588](https://github.com/decaporg/decap-cms/issues/6588), [#6617](https://github.com/decaporg/decap-cms/issues/6617), [#6640](https://github.com/decaporg/decap-cms/issues/6640), [#6663](https://github.com/decaporg/decap-cms/issues/6663), [#6695](https://github.com/decaporg/decap-cms/issues/6695), [#6697](https://github.com/decaporg/decap-cms/issues/6697), [#6764](https://github.com/decaporg/decap-cms/issues/6764), [#6765](https://github.com/decaporg/decap-cms/issues/6765), [#6835](https://github.com/decaporg/decap-cms/issues/6835), [#6983](https://github.com/decaporg/decap-cms/issues/6983), [#7205](https://github.com/decaporg/decap-cms/issues/7205), [#7450](https://github.com/decaporg/decap-cms/issues/7450), [#7453](https://github.com/decaporg/decap-cms/issues/7453), [#7572](https://github.com/decaporg/decap-cms/issues/7572)
2051
2168
 
2052
- [^113]: Netlify/Decap CMS [#5656](https://github.com/decaporg/decap-cms/issues/5656), [#5837](https://github.com/decaporg/decap-cms/issues/5837), [#5972](https://github.com/decaporg/decap-cms/issues/5972), [#6476](https://github.com/decaporg/decap-cms/issues/6476), [#6516](https://github.com/decaporg/decap-cms/issues/6516), [#6930](https://github.com/decaporg/decap-cms/issues/6930), [#7080](https://github.com/decaporg/decap-cms/issues/7080), [#7105](https://github.com/decaporg/decap-cms/issues/7105), [#7106](https://github.com/decaporg/decap-cms/issues/7106), [#7119](https://github.com/decaporg/decap-cms/issues/7119), [#7176](https://github.com/decaporg/decap-cms/issues/7176), [#7194](https://github.com/decaporg/decap-cms/issues/7194), [#7244](https://github.com/decaporg/decap-cms/issues/7244), [#7278](https://github.com/decaporg/decap-cms/issues/7278), [#7301](https://github.com/decaporg/decap-cms/issues/7301), [#7342](https://github.com/decaporg/decap-cms/issues/7342), [#7348](https://github.com/decaporg/decap-cms/issues/7348), [#7354](https://github.com/decaporg/decap-cms/issues/7354), [#7376](https://github.com/decaporg/decap-cms/issues/7376), [#7408](https://github.com/decaporg/decap-cms/issues/7408), [#7412](https://github.com/decaporg/decap-cms/issues/7412), [#7413](https://github.com/decaporg/decap-cms/issues/7413), [#7422](https://github.com/decaporg/decap-cms/issues/7422), [#7427](https://github.com/decaporg/decap-cms/issues/7427), [#7434](https://github.com/decaporg/decap-cms/issues/7434), [#7438](https://github.com/decaporg/decap-cms/issues/7438), [#7454](https://github.com/decaporg/decap-cms/issues/7454), [#7464](https://github.com/decaporg/decap-cms/issues/7464), [#7471](https://github.com/decaporg/decap-cms/issues/7471), [#7485](https://github.com/decaporg/decap-cms/issues/7485), [#7499](https://github.com/decaporg/decap-cms/issues/7499), [#7515](https://github.com/decaporg/decap-cms/issues/7515), [#7564](https://github.com/decaporg/decap-cms/issues/7564), [#7571](https://github.com/decaporg/decap-cms/issues/7571), [#7574](https://github.com/decaporg/decap-cms/issues/7574), [#7580](https://github.com/decaporg/decap-cms/issues/7580), [#7583](https://github.com/decaporg/decap-cms/issues/7583), [#7589](https://github.com/decaporg/decap-cms/issues/7589) — These `removeChild` crashes are common in React apps, likely caused by a [browser extension](https://github.com/facebook/react/issues/17256) or [Google Translate](https://github.com/facebook/react/issues/11538).
2169
+ [^113]: Netlify/Decap CMS [#5656](https://github.com/decaporg/decap-cms/issues/5656), [#5837](https://github.com/decaporg/decap-cms/issues/5837), [#5972](https://github.com/decaporg/decap-cms/issues/5972), [#6476](https://github.com/decaporg/decap-cms/issues/6476), [#6516](https://github.com/decaporg/decap-cms/issues/6516), [#6930](https://github.com/decaporg/decap-cms/issues/6930), [#7080](https://github.com/decaporg/decap-cms/issues/7080), [#7105](https://github.com/decaporg/decap-cms/issues/7105), [#7106](https://github.com/decaporg/decap-cms/issues/7106), [#7119](https://github.com/decaporg/decap-cms/issues/7119), [#7176](https://github.com/decaporg/decap-cms/issues/7176), [#7194](https://github.com/decaporg/decap-cms/issues/7194), [#7244](https://github.com/decaporg/decap-cms/issues/7244), [#7278](https://github.com/decaporg/decap-cms/issues/7278), [#7301](https://github.com/decaporg/decap-cms/issues/7301), [#7342](https://github.com/decaporg/decap-cms/issues/7342), [#7348](https://github.com/decaporg/decap-cms/issues/7348), [#7354](https://github.com/decaporg/decap-cms/issues/7354), [#7376](https://github.com/decaporg/decap-cms/issues/7376), [#7408](https://github.com/decaporg/decap-cms/issues/7408), [#7412](https://github.com/decaporg/decap-cms/issues/7412), [#7413](https://github.com/decaporg/decap-cms/issues/7413), [#7422](https://github.com/decaporg/decap-cms/issues/7422), [#7427](https://github.com/decaporg/decap-cms/issues/7427), [#7434](https://github.com/decaporg/decap-cms/issues/7434), [#7438](https://github.com/decaporg/decap-cms/issues/7438), [#7454](https://github.com/decaporg/decap-cms/issues/7454), [#7464](https://github.com/decaporg/decap-cms/issues/7464), [#7471](https://github.com/decaporg/decap-cms/issues/7471), [#7485](https://github.com/decaporg/decap-cms/issues/7485), [#7499](https://github.com/decaporg/decap-cms/issues/7499), [#7515](https://github.com/decaporg/decap-cms/issues/7515), [#7564](https://github.com/decaporg/decap-cms/issues/7564), [#7571](https://github.com/decaporg/decap-cms/issues/7571), [#7574](https://github.com/decaporg/decap-cms/issues/7574), [#7580](https://github.com/decaporg/decap-cms/issues/7580), [#7583](https://github.com/decaporg/decap-cms/issues/7583), [#7589](https://github.com/decaporg/decap-cms/issues/7589), [#7593](https://github.com/decaporg/decap-cms/issues/7593), [#7595](https://github.com/decaporg/decap-cms/issues/7595) — These `removeChild` crashes are common in React apps, likely caused by a [browser extension](https://github.com/facebook/react/issues/17256) or [Google Translate](https://github.com/facebook/react/issues/11538).
2053
2170
 
2054
2171
  [^114]: Netlify/Decap CMS [#5029](https://github.com/decaporg/decap-cms/issues/5029), [#5048](https://github.com/decaporg/decap-cms/issues/5048)
2055
2172
 
@@ -2390,3 +2507,7 @@ This software is provided “as is” without any express or implied warranty. W
2390
2507
  [^282]: Netlify/Decap CMS [#7579](https://github.com/decaporg/decap-cms/pull/7579)
2391
2508
 
2392
2509
  [^283]: Netlify/Decap CMS [#713](https://github.com/decaporg/decap-cms/issues/713)
2510
+
2511
+ [^284]: Netlify/Decap CMS [#7585](https://github.com/decaporg/decap-cms/issues/7585)
2512
+
2513
+ [^285]: Netlify/Decap CMS [#6597](https://github.com/decaporg/decap-cms/issues/6597)