@sveltia/cms 0.60.0 → 0.60.1
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 +32 -23
- package/dist/sveltia-cms.js +2 -2
- package/dist/sveltia-cms.js.map +1 -1
- package/dist/sveltia-cms.mjs +2 -2
- package/dist/sveltia-cms.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -27,6 +27,7 @@ The free, open source alternative to Netlify/Decap CMS is now in public beta, tu
|
|
|
27
27
|
- [Better accessibility](#better-accessibility)
|
|
28
28
|
- [Better security](#better-security)
|
|
29
29
|
- [Better installation](#better-installation)
|
|
30
|
+
- [Better configuration](#better-configuration)
|
|
30
31
|
- [Better backend support](#better-backend-support)
|
|
31
32
|
- [Better i18n support](#better-i18n-support)
|
|
32
33
|
- [Better collections](#better-collections)
|
|
@@ -92,7 +93,7 @@ We loved the concept of Netlify CMS — turning a Git repository into a database
|
|
|
92
93
|
Due to its unfortunate abandonment in early 2022, Netlify CMS spawned 3 successors:
|
|
93
94
|
|
|
94
95
|
- [Static CMS](https://github.com/StaticJsCMS/static-cms): a community fork, initial commit made in September 2022 — discontinued in September 2024 after doing a great job
|
|
95
|
-
- **Sveltia CMS**: not a fork but a total reboot
|
|
96
|
+
- **Sveltia CMS**: not a fork but a **complete rewrite** or “total reboot”, started in November 2022, first appeared on GitHub in March 2023
|
|
96
97
|
- [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 inactive
|
|
97
98
|
|
|
98
99
|
Sveltia CMS is the only project that doesn’t inherit the complexity, technical debt and numerous bugs of Netlify CMS, which was launched back in 2015. We are confident that our decision to rebuild the application from scratch was the right and inevitable one, as proven by the [hundreds of improvements](#differentiators) we have already made.
|
|
@@ -120,6 +121,7 @@ While we fix reported bugs as quickly as possible, usually within 24 hours, our
|
|
|
120
121
|
- So far, 175+ of them, or 340+ including duplicates, have been effectively solved in Sveltia CMS
|
|
121
122
|
- Target: 200 by GA; 300, or 500 including duplicates, in the future (yes, you read that right)
|
|
122
123
|
- Issues include everything from feature requests to bug reports and [issues closed as stale](https://github.com/decaporg/decap-cms/issues?q=is%3Aissue+%22Closing+as+stale%22) or without a real solution, as well as [discussions](https://github.com/decaporg/decap-cms/discussions)
|
|
124
|
+
- Most of the bugs, including annoying crashes, are already solved
|
|
123
125
|
- Many of their [top-voted features](https://github.com/decaporg/decap-cms/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc) are on our table or already implemented in Sveltia CMS
|
|
124
126
|
- Solving [our own issues](https://github.com/sveltia/sveltia-cms/issues)
|
|
125
127
|
- Implementing our own enhancement ideas for every part of the product
|
|
@@ -130,16 +132,17 @@ While we fix reported bugs as quickly as possible, usually within 24 hours, our
|
|
|
130
132
|
|
|
131
133
|
## Differentiators
|
|
132
134
|
|
|
133
|
-
We hope Netlify/Decap CMS users will be pleased and surprised by the
|
|
135
|
+
We hope Netlify/Decap CMS users will be pleased and surprised by the numerous improvements we have made, from the small to the large. Here’s what makes Sveltia CMS different. Look how serious we are!
|
|
134
136
|
|
|
135
137
|
### Better UX
|
|
136
138
|
|
|
137
|
-
- Created and maintained by an [experienced UX engineer](https://github.com/kyoshino) who loves code, design and marketing. You can expect constant improvements to the user experience (UX) and developer experience (DX) across the platform.
|
|
139
|
+
- Created and actively maintained by an [experienced UX engineer](https://github.com/kyoshino) who loves code, design and marketing. You can expect constant improvements to the user experience (UX) and developer experience (DX) across the platform.
|
|
138
140
|
- The maintainer tries to be as responsive as possible. While there are no guarantees, the typical turnaround time for a bug fix is less than 24 hours.
|
|
141
|
+
- Rapid release delivers new features and enhancements to users more quickly.
|
|
139
142
|
- Offers a modern, intuitive user interface that utilizes the full viewport,[^178] inspired in part by the Netlify CMS v3 prototype.[^1]
|
|
140
|
-
-
|
|
143
|
+
- Provides immersive dark mode.[^2] The UI theme follows the user’s system preference by default and can be changed in the application settings.
|
|
141
144
|
- Comes with touch device support, such as larger buttons for easier tapping. While the UI is not yet optimized for small screens, it should work well with large tablets like iPad Pro or Pixel Tablet. Mobile support and other optimizations such as swipe navigation are planned after the 1.0 release.
|
|
142
|
-
- 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 React application crashes.[^113][^129] Best of all, Svelte offers great performance.
|
|
145
|
+
- 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.
|
|
143
146
|
- We build [our own UI library](https://github.com/sveltia/sveltia-ui) to ensure optimal usability without compromising accessibility.
|
|
144
147
|
- The in-app Help menu provides all links to useful resources, including release notes, feedback and support.
|
|
145
148
|
- Users can personalize the application with various settings, including appearance and language. Developer Mode can also be enabled.
|
|
@@ -187,7 +190,7 @@ We hope Netlify/Decap CMS users will be pleased and surprised by the hundreds of
|
|
|
187
190
|
|
|
188
191
|
### Better security
|
|
189
192
|
|
|
190
|
-
- Avoids vulnerabilities in dependencies through constant updates, [`pnpm audit`](https://pnpm.io/cli/audit), and frequent releases, unlike Netlify/Decap CMS where a number of high severity vulnerabilities
|
|
193
|
+
- Avoids vulnerabilities in dependencies through constant updates, [`pnpm audit`](https://pnpm.io/cli/audit), and frequent releases, unlike Netlify/Decap CMS where a number of high severity vulnerabilities remain unpatched for a long time.[^33]
|
|
191
194
|
- Our [local repository workflow](#working-with-a-local-git-repository) doesn’t require a proxy server, reducing an attack surface.[^158]
|
|
192
195
|
- We have enabled [npm package provenance](https://github.blog/security/supply-chain-security/introducing-npm-package-provenance/).
|
|
193
196
|
- We have documented how to [set up a Content Security Policy](#setting-up-content-security-policy) for the CMS to prevent any unexpected errors or otherwise insecure configuration.[^108]
|
|
@@ -201,6 +204,9 @@ We hope Netlify/Decap CMS users will be pleased and surprised by the hundreds of
|
|
|
201
204
|
- Sveltia CMS is built with [Svelte](https://svelte.dev/), and we only publish compiled vanilla JavaScript bundles, so there are no React compatibility issues that might prevent developers from upgrading a project for many months.[^177] We haven’t actually integrated React for custom widgets and other features yet, but anyway, no dependencies will be installed when you [install the app with npm](#installing-with-npm).
|
|
202
205
|
- Sveltia CMS also won’t cause peer dependency conflicts due to legacy third-party React UI libraries.[^175] We build the app using [our own Svelte UI library](https://github.com/sveltia/sveltia-ui) to reduce reliance on third-party dependencies.
|
|
203
206
|
- The [robots `meta` tag](https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag) is automatically added to HTML to prevent the admin page from being indexed by search engines.[^174] Developers are still encouraged to manually add `<meta name="robots" content="noindex">` to `index.html`, as not all crawlers support dynamically added tags. However, our solution should at least work with Google in case you forget to do so.
|
|
207
|
+
|
|
208
|
+
### Better configuration
|
|
209
|
+
|
|
204
210
|
- Some servers and frameworks are known to remove the trailing slash from the CMS URL (`/admin`) depending on the configuration. In such cases, the config file is loaded from a root-relative URL (`/admin/config.yml`) instead of a regular relative URL (`./config.yml` = `/config.yml`) that results in a 404 Not Found error.[^107]
|
|
205
211
|
- Supports a [JSON configuration file](#providing-a-json-configuration-file) that can be generated for bulk or complex collections.[^60]
|
|
206
212
|
|
|
@@ -219,7 +225,7 @@ We hope Netlify/Decap CMS users will be pleased and surprised by the hundreds of
|
|
|
219
225
|
|
|
220
226
|
### Better i18n support
|
|
221
227
|
|
|
222
|
-
Sveltia CMS has been built with a multilingual architecture from the very beginning. You can expect
|
|
228
|
+
Sveltia CMS has been built with a multilingual architecture from the very beginning. You can expect unparalleled internationalization (i18n) support, as it’s required by clients of maintainer [@kyoshino](https://github.com/kyoshino), who himself was a long-time Japanese localizer for [Mozilla](https://www.mozilla.org/) and currently lives in the [most diverse city in the world](https://en.wikipedia.org/wiki/Toronto) where 150+ languages are spoken.
|
|
223
229
|
|
|
224
230
|
- Configuration
|
|
225
231
|
- The [i18n limitations](https://decapcms.org/docs/i18n/#limitations) in Netlify/Decap CMS do not apply to Sveltia CMS:
|
|
@@ -234,7 +240,7 @@ Sveltia CMS has been built with a multilingual architecture from the very beginn
|
|
|
234
240
|
- When the `clean_accents` option is enabled for [entry slugs](https://decapcms.org/docs/configuration-options/#slug-type), certain characters, such as German umlauts, will be [transliterated](https://en.wikipedia.org/wiki/Transliteration).[^99]
|
|
235
241
|
- It’s possible to embed the locale code in an entry by using `widget: hidden` along with `default: '{{locale}}'`.[^101]
|
|
236
242
|
- User interface
|
|
237
|
-
- Eliminates UI confusion: The Preview
|
|
243
|
+
- Eliminates UI confusion: The Preview Pane can be displayed without toggling i18n in the Content Editor. Both panes are scrollable. There is no condition where both panes are edited in the same language at the same time.
|
|
238
244
|
- Users can easily switch between locales while editing by clicking a button instead of a dropdown list when there are less than 5 locales.
|
|
239
245
|
- Language labels appear in human-readable display names instead of ISO 639 language codes because it’s not easy for everyone to recognize `DE` as German, `NL` as Dutch, `ZH` as Chinese, and so on.
|
|
240
246
|
- Content editing
|
|
@@ -280,13 +286,13 @@ Sveltia CMS has been built with a multilingual architecture from the very beginn
|
|
|
280
286
|
- Entry slugs
|
|
281
287
|
- It’s possible to [use a random UUID for an entry slug](#using-a-random-id-for-an-entry-slug).
|
|
282
288
|
- Slug generation is fail-safe: If a slug cannot be determined from entry content, part of a random UUID is used instead of throwing an error or filling in with arbitrary string field values.[^133]
|
|
289
|
+
- Users can edit entry slugs via the 3-dot menu in the Content Editor.[^184]
|
|
283
290
|
- If a collection only has the Markdown `body` field, an entry slug will be generated from a header in the `body`, if exists. This supports a typical VitePress setup.
|
|
284
291
|
- Entry slug template tags support [transformations](https://decapcms.org/docs/summary-strings/) just like summary string template tags.[^29]
|
|
285
292
|
- Single quotes (apostrophes) in a slug will be replaced with `sanitize_replacement` (default: hyphen) rather than being removed.[^52]
|
|
286
293
|
- The maximum number of characters for an entry slug can be set with the new `slug_length` collection option to avoid deployment errors with Netlify or other platforms.[^25]
|
|
287
294
|
- Setting the collection `path` doesn’t affect the entry slugs stored with the Relation widget.[^137]
|
|
288
295
|
- Entry slugs are [localizable](#localizing-entry-slugs).[^80]
|
|
289
|
-
- Users can edit entry slugs via the 3-dot menu in the Content Editor.[^184]
|
|
290
296
|
- Entry listing
|
|
291
297
|
- [Default sort field and direction](#specifying-default-entry-sort-field-and-direction) can be specified.[^172]
|
|
292
298
|
- Sorting entries by a DateTime field works as expected.[^110]
|
|
@@ -319,11 +325,12 @@ Sveltia CMS has been built with a multilingual architecture from the very beginn
|
|
|
319
325
|
|
|
320
326
|
### Better content preview
|
|
321
327
|
|
|
322
|
-
- The Preview
|
|
323
|
-
- For better performance, the Preview
|
|
324
|
-
- The Preview
|
|
325
|
-
- When you click on a field in the Preview
|
|
326
|
-
- The Preview
|
|
328
|
+
- The Preview Pane comes with a minimal default style.[^168] It looks nice without a custom preview style or template.
|
|
329
|
+
- For better performance, the Preview Pane doesn’t use an `<iframe>`.[^179]
|
|
330
|
+
- The Preview Pane displays all fields, including each label, making it easier to see which fields are populated.
|
|
331
|
+
- When you click on a field in the Preview Pane, the corresponding field in the Edit Pane is highlighted.[^41] It will be automatically expanded if collapsed.
|
|
332
|
+
- The Preview Pane doesn’t cause a scrolling issue.[^136]
|
|
333
|
+
- The Preview Pane doesn’t completely crash with a Minified React error.[^186]
|
|
327
334
|
- Provides better scroll synchronization between the panes when editing or previewing an entry.[^92]
|
|
328
335
|
- Developers can hide the preview of a specific field using a new field option: `preview: false`.[^126]
|
|
329
336
|
- [See below](#better-widgets) for widget-specific enhancements, including support for variable types[^42] and YouTube videos.
|
|
@@ -382,7 +389,7 @@ Sveltia CMS has been built with a multilingual architecture from the very beginn
|
|
|
382
389
|
- The built-in `image` component allows users to add, edit or remove a link on an image.[^171]
|
|
383
390
|
- 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.
|
|
384
391
|
- Code in a code block in the editor can be copied as expected.[^165]
|
|
385
|
-
- Line breaks are rendered as line breaks in the Preview
|
|
392
|
+
- Line breaks are rendered as line breaks in the Preview Pane according to GitHub Flavored Markdown (GFM).
|
|
386
393
|
- Number
|
|
387
394
|
- If the `value_type` option is `int` (default) or `float`, the `required` option is `false`, and the value is not entered, the field will be saved as `null` instead of an empty string.[^157] If `value_type` is anything else, the data type will remain a string.
|
|
388
395
|
- Object
|
|
@@ -393,14 +400,14 @@ Sveltia CMS has been built with a multilingual architecture from the very beginn
|
|
|
393
400
|
- Field options are displayed with no additional API requests.[^14] The confusing `options_length` option, which defaults to 20, is therefore ignored.[^76]
|
|
394
401
|
- `slug` can be used for `value_field` to show all available options instead of just one in some situations.[^91]
|
|
395
402
|
- Template strings with a wildcard like `{{cities.*.name}}` can also be used for `value_field`.[^94]
|
|
396
|
-
- `display_fields` is displayed in the Preview
|
|
403
|
+
- `display_fields` is displayed in the Preview Pane instead of `value_field`.
|
|
397
404
|
- The redundant `search_fields` option is not required in Sveltia CMS, as it defaults to `display_fields` (and `value_field`).
|
|
398
405
|
- A new item created in a referenced collection is immediately available in the options.[^138]
|
|
399
406
|
- Select
|
|
400
407
|
- It’s possible to select an option with value `0`.[^56]
|
|
401
|
-
- `label` is displayed in the Preview
|
|
408
|
+
- `label` is displayed in the Preview Pane instead of `value`.
|
|
402
409
|
- String
|
|
403
|
-
- When a YouTube video URL is entered in a String field, it appears as an embedded video in the Preview
|
|
410
|
+
- When a YouTube video URL is entered in a String field, it appears as an embedded video in the Preview Pane. Check your site’s [CSP](#setting-up-content-security-policy) if the preview doesn’t work.
|
|
404
411
|
- When a regular URL is entered in a String field, it appears as a link that can be opened in a new browser tab.
|
|
405
412
|
- Supports the `type` option that accepts `url` or `email` as a value, which will validate the value as a URL or email.
|
|
406
413
|
- Supports the `prefix` and `suffix` string options, which automatically prepend and/or append the developer-defined value to the user-input value, if it’s not empty.
|
|
@@ -414,7 +421,7 @@ Sveltia CMS has been built with a multilingual architecture from the very beginn
|
|
|
414
421
|
- A URL can also be entered in the dialog.
|
|
415
422
|
- Integration with Pexels, Pixabay and Unsplash makes it easy to select and insert a free stock photo.[^8] More stock photo providers will be added in the future.
|
|
416
423
|
- Users can also simply drag and drop a file onto a File/Image field to attach it without having to open the Select File dialog.
|
|
417
|
-
- Large images automatically fit in the Preview
|
|
424
|
+
- Large images automatically fit in the Preview Pane instead of being displayed at their original size, which can easily exceed the width of the pane.
|
|
418
425
|
- If the `public_folder` contains `{{slug}}` and you’ve edited a slug field (e.g. `title`) of a new entry after uploading an asset, the updated slug will be used in the saved asset path.[^140] Other dynamic template tags such as `{{filename}}` will also be populated as expected.[^141]
|
|
419
426
|
- List and Object
|
|
420
427
|
- The `summary` is displayed correctly when it refers to a Relation field[^36] or a simple List field.
|
|
@@ -486,7 +493,7 @@ However, 100% feature parity is not planned, and some features are still missing
|
|
|
486
493
|
### Features not to be implemented
|
|
487
494
|
|
|
488
495
|
- **The Bitbucket, Gitea/Forgejo and Git Gateway backends will not be supported** 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. We may also support the other platforms if their APIs improve to allow the CMS to fetch multiple entries at once.
|
|
489
|
-
- **Netlify Identity Widget will not be supported**, as it’s not useful without Git Gateway. The [widget](https://github.com/netlify/netlify-identity-widget) has been unmaintained for years, and Netlify
|
|
496
|
+
- **Netlify Identity Widget will not be supported**, as it’s not useful without Git Gateway. The [widget](https://github.com/netlify/netlify-identity-widget) has been unmaintained for years, and Netlify Identity itself is now deprecated according to Netlify customers (see [this](https://github.com/sveltia/sveltia-cms/discussions/284) and [this](https://github.com/decaporg/decap-cms/discussions/7419)). We plan to develop an alternative solution with role support in the future, most likely using [Cloudflare Workers](https://workers.cloudflare.com/) and [Auth.js](https://authjs.dev/).
|
|
490
497
|
- The deprecated client-side implicit grant for the GitLab backend will not be supported, as it has already been [removed from GitLab 15.0](https://gitlab.com/gitlab-org/gitlab/-/issues/344609). Use the client-side PKCE authorization instead.
|
|
491
498
|
- The deprecated Netlify Large Media service will not be supported. Consider other storage providers.
|
|
492
499
|
- The deprecated Date widget will not be supported, as it has already been removed from Decap CMS 3.0. Use the DateTime widget with the `time_format: false` option instead.
|
|
@@ -534,7 +541,7 @@ Sveltia CMS provides partial compatibility with [Static CMS](https://github.com/
|
|
|
534
541
|
- The `logo_link` global option will not be supported. Use `display_url` or `site_url` instead.
|
|
535
542
|
- The `yaml` global option will not be supported, as Sveltia CMS doesn’t expose the `yaml` library options directly for forward compatibility reasons. However, we do have some [data output options](#controlling-data-output), including YAML indentation and quotes.
|
|
536
543
|
- I18n support
|
|
537
|
-
- The `enforce_required_non_default` i18n option will not be supported. Sveitia CMS enforces required fields in all locales by default. However, the `save_all_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]`.
|
|
544
|
+
- The `enforce_required_non_default` i18n option will not be supported. Sveitia CMS enforces required fields in all locales by default. However, the `save_all_locales` or `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]`.
|
|
538
545
|
- Widgets
|
|
539
546
|
- The KeyValue widget is implemented in Sveltia CMS with the same options.
|
|
540
547
|
- The UUID widget is also implemented, but with different options.
|
|
@@ -712,7 +719,7 @@ collections:
|
|
|
712
719
|
|
|
713
720
|
This is actually not new in Sveltia CMS but rather an undocumented feature in Netlify/Decap CMS.[^4] You can specify media and public folders for each collection that override the [global media folder](https://decapcms.org/docs/configuration-options/#media-and-public-folders). Well, it’s [documented](https://decapcms.org/docs/collection-folder/#media-and-public-folder), but that’s probably not what you want.
|
|
714
721
|
|
|
715
|
-
Rather, if you’d like to add all the media files for a collection in one single folder, specify both `media_folder` and `public_folder` instead of leaving them empty. The trick is to use a **project relative path
|
|
722
|
+
Rather, if you’d like to add all the media files for a collection in one single folder, specify both `media_folder` and `public_folder` instead of leaving them empty. The trick is to use a **project relative path starting with a slash** for `media_folder` like the example below. You can try this with Netlify/Decap CMS first if you prefer.
|
|
716
723
|
|
|
717
724
|
```diff
|
|
718
725
|
media_folder: static/media
|
|
@@ -723,7 +730,7 @@ Rather, if you’d like to add all the media files for a collection in one singl
|
|
|
723
730
|
label: Products
|
|
724
731
|
create: true
|
|
725
732
|
folder: data/products/
|
|
726
|
-
+ media_folder: /static/media/products #
|
|
733
|
+
+ media_folder: /static/media/products # make sure to append a slash
|
|
727
734
|
+ public_folder: /media/products
|
|
728
735
|
```
|
|
729
736
|
|
|
@@ -1493,3 +1500,5 @@ This software is provided “as is” without any express or implied warranty. W
|
|
|
1493
1500
|
[^184]: Netlify/Decap CMS [#377](https://github.com/decaporg/decap-cms/issues/377)
|
|
1494
1501
|
|
|
1495
1502
|
[^185]: Netlify/Decap CMS [#6203](https://github.com/decaporg/decap-cms/issues/6203), [#7417](https://github.com/decaporg/decap-cms/issues/7417)
|
|
1503
|
+
|
|
1504
|
+
[^186]: Netlify/Decap CMS [#7379](https://github.com/decaporg/decap-cms/issues/7379)
|