Loading CDN resources
Loading CKEditor 5 and its plugins from a CDN requires adding the necessary script and style sheet tags to the <head>
of your page. In some environments, this can be easily done manually by following the CDN for Vanilla JavaScript guide.
However, other environments may require more work. It is especially true if you want to load some resources conditionally or dynamically or need to wait for the resources to be loaded before using them.
For this reason, we provide the useCKEditorCloud
and loadCKEditorCloud
helper functions to make this process easier. These functions will handle adding the necessary script and style sheet tags to your page, ensure that the resources are only loaded once, and provide access to the data exported by them. This way you can load CKEditor 5 and its plugins from a CDN without worrying about the technical details.
If you use our React or Vue.js 3+ integrations, see the Using the useCKEditorCloud
function section. Otherwise, see the Using the loadCKEditorCloud
function section.
# Using the useCKEditorCloud
function
Our React and Vue.js 3+ integrations export a helper function named useCKEditorCloud
to help you load CDN resources. These helpers are only small wrappers around the loadCKEditorCloud
function but are designed to better integrate with the specific framework, its lifecycle, and reactivity mechanisms.
Here is an example of how you can use useCKEditorCloud
:
const cloud = useCKEditorCloud( {
version: '44.0.0',
premium: true
} );
This will add the necessary script and style sheet tags to the page’s <head>
and update the internal state to reflect the loading status. Depending on the framework, the useCKEditorCloud
function may return different values. Please refer to the documentation of the specific integration for more details.
Regardless of the framework used, the useCKEditorCloud
functions always accept the same options, which are described in the loadCKEditorCloud
function options section.
# Using the loadCKEditorCloud
function
To use the loadCKEditorCloud
helper, you need to install the following package:
npm install @ckeditor/ckeditor5-integrations-common
Then you can use the loadCKEditorCloud
function like this:
import { loadCKEditorCloud } from '@ckeditor/ckeditor5-integrations-common';
const { CKEditor, CKEditorPremiumFeatures } = await loadCKEditorCloud( {
version: '44.0.0',
premium: true
} );
The loadCKEditorCloud
function returns a promise that resolves to an object in which each key contains data of the corresponding CDN resources. The exact object shape depends on the options passed to the function.
The options accepted by the loadCKEditorCloud
function are described in The loadCKEditorCloud
function options section.
# The loadCKEditorCloud
function options
The loadCKEditorCloud
function (and useCKEditorCloud
functions which are small wrappers around it) accepts an object with the following properties:
version
(required) – The version of CKEditor 5 and premium features (ifpremium
option is set totrue
) to load.translations
(optional) – An array of language codes to load translations for.premium
(optional) – A Boolean value that indicates whether to load premium plugins. [1]ckbox
(optional) – Configuration for loading CKBox integration. [1]plugins
(optional) – Configuration for loading additional plugins. The object should have the global plugin name as keys and the plugin configuration as values. [1]injectedHtmlElementsAttributes
(optional) – An object with attributes that will be added to the<script>
and<link>
tags that are injected into the page. This can be used to add attributes likeintegrity
orcrossorigin
to the tags. By default, it is set to{ crossorigin: 'anonymous' }
.
[1] Using this option will result in additional network requests for JavaScript and CSS assets. Make sure to only use this option when you need it.
Here is an example showing all the available options:
{
version: '44.0.0',
translations: [ 'es', 'de' ],
premium: true,
ckbox: {
version: '2.5.1',
theme: 'lark' // Optional, default 'lark'.
},
plugins: {
ThirdPartyPlugin: [
'https://cdn.example.com/plugin.umd.js',
'https://cdn.example.com/plugin.css'
],
AnotherPlugin: () => import( './path/to/plugin.umd.js' ),
YetAnotherPlugin: {
scripts: [ 'https://cdn.example.com/plugin.umd.js' ],
stylesheets: [ 'https://cdn.example.com/plugin.css' ],
// Optional, if it's not passed then the name of the plugin will be used.
checkPluginLoaded: () => window.PLUGIN_NAME
}
}
}
Note that unless the checkPluginLoaded
callback is used, the keys in the plugins
object must match the names of the global object used by the plugins. As shown in the example above, we used the checkPluginLoaded
to be able to access the plugin using the YetAnotherPlugin
key, while the plugin itself assigns to the window.PLUGIN_NAME
property.
With this configuration, the object returned by this function will have the following properties:
CKEditor
– The base CKEditor 5 library.CKEditorPremiumFeatures
– Premium features for CKEditor 5. This option is only available whenpremium
is set totrue
.CKBox
– The CKBox integration. This option is only available when theckbox
option is provided.ThirdPartyPlugin
– The custom plugin registered in theplugins
option.AnotherPlugin
– The custom plugin registered in theplugins
option.YetAnotherPlugin
– The custom plugin registered in theplugins
option.
Every day, we work hard to keep our documentation complete. Have you spotted outdated information? Is something missing? Please report it via our issue tracker.
With the release of version 42.0.0, we have rewritten much of our documentation to reflect the new import paths and features. We appreciate your feedback to help us ensure its accuracy and completeness.