This guide shows you how to integrate CreativeEditor SDK (CE.SDK) into your Svelte project through a custom component. By the end of this guide, your Svelte application will have a fully functional CE.SDK component, ready for customization.
Who Is This Guide For?#
This tutorial is for developers who:
- Have experience with Svelte.
- Already have a vanilla Svelte project (without SvelteKit) in place.
- Want to add a fully-featured image and video editor component to their Svelte application.
What You’ll Achieve#
- Install CE.SDK via NPM.
- Set up CE.SDK within your Svelte project.
- Create a basic creative editor component with default configurations.
- Render the custom CE.SDK Svelte component in your application.
Prerequisites#
Before getting started, ensure you have the following:
- Node.js v20+ and NPM 10+ installed locally. Download the latest LTS version of Node.js and NPM.
- A Svelte 5+ project, managed with a build tool like Vite, Parcel, or RSBuild.
- A valid CE.SDK license key (Get a free trial).
Step 1: Install CE.SDK#
First, add CreativeEditor SDK to your project’s dependencies using the cesdk/cesdk-js NPM package. Run the following command in your project’s folder to install it:
npm install @cesdk/cesdk-js
Step 2: Create Your Creative Editor Svelte Component#
Assume that your current vanilla Svelte project follows the default Vite initialization file structure:
your-svelte-app/│├── public│ └── ...│└── src│ ├── assets│ │ └── ...│ ││ ├── lib│ │ └── ...│ ││ ├── app.css│ ├── App.svelte│ ├── main.js│ └── vite-env.d.ts│├── .gitignore├── index.html├── jsconfig.json├── package.json├── README.md├── svelte.config.js└── vite.config.js
In the src/lib/
folder of your Svelte project, create a file named CreativeEditorSDK.svelte
containing the custom image and video component:
<script> import CreativeEditorSDK from '@cesdk/cesdk-js'; import { onDestroy, onMount } from 'svelte';
// reference to the container HTML element where CE.SDK will be initialized let container; // where to keep track of the CE.SDK instance let cesdk = null;
// deafult CreativeEditor SDK configuration const defaultConfig = { license: '<YOUR_LICENSE_KEY>', // replace it with a valid CE.SDK license key callbacks: { onUpload: 'local' }, // enable local file uploads in the Asset Library // other default configs... };
// accessing the component's props const { el, children, class: _, config, ...props } = $props();
// hook to initialize the CreativeEditorSDK component onMount(() => { // integrate the configs read from props with the default ones const ceSDKConfig = { ...defaultConfig, ...config, };
try { // initialize the CreativeEditorSDK instance in the container element // using the given config CreativeEditorSDK.create(container, ceSDKConfig).then(async instance => { cesdk = instance;
// do something with the instance of CreativeEditor SDK (e.g., populate // the asset library with default / demo asset sources) await Promise.all([ cesdk.addDefaultAssetSources(), cesdk.addDemoAssetSources({ sceneMode: 'Design' }), ]);
// create a new design scene in the editor await cesdk.createDesignScene(); }); } catch (err) { console.warn(`CreativeEditor SDK failed to mount.`, { err }); } });
// hook to clean up when the component unmounts onDestroy(() => { try { // dispose of the CE.SDK instance if it exists if (cesdk) { cesdk.dispose(); cesdk = null; } } catch (err) { // log error if CreativeEditor SDK fails to unmount console.warn(`CreativeEditor SDK failed to unmount.`, { err }); } });</script>
<!-- the container HTML element where the CE.SDK editor will be mounted --><div id="cesdk_container" bind:this="{container}"></div>
<style> /* styling for the CE.SDK container element to take full viewport size */ #cesdk_container { height: 100vh; width: 100vw; }</style>
The above Svelte component sets up a CreativeEditor SDK instance with basic configuration inside a <div>
container element defined in the component’s HTML section. Upon unmounting, the CE.SDK instance is correctly disposed of to release resources.
Step 3: Render the Creative Editor Component#
Import the CreativeEditorSDK component into your App.svelte
file. Add the following line in the <script>
section of your App.svelte
component:
import CreativeEditorSDK from './lib/CreativeEditorSDK.svelte';
You can now render the CreativeEditorSDK component in the template section of App.svelte
as follows:
<CreativeEditorSDK config={ { // custom configs ... } }/>
Or, without custom props:
<CreativeEditorSDK />
Your App.svelte
will look something like this:
<script> // other imports... import CreativeEditorSDK from "./lib/CreativeEditorSDK.svelte";</script>
<main> <!-- other components... --> <CreativeEditorSDK config={{ // custom configs ... }} /> <!-- other components... --></main>
<style> /* custom stylying... */</style>
Step 4: Serve the Project#
Run the project locally using the development server provided by the bundler configured in your project. In this case, we’re using Vite, so execute the following command:
npm run dev
By default, the Svelte local application will be available on your localhost at http://localhost:5173/
.
Step 5: Test the Integration#
- Open
http://localhost:5173/
in your browser. - A fully functional CE.SDK editor should load on the page.
Troubleshooting & Common Errors#
❌ Error: The following dependencies are imported but could not be resolved: @cesdk/cesdk-js
- Verify that you’ve correctly installed CE.SDK via
npm install @cesdk/cesdk-js
.
❌ Error: The $props rune is only available inside .svelte and .svelte.js/ts files
- Make sure to load the
CreativeEditorSDK.svelte
component’s props using$props()
in the top-level<script>
section, not insideonMount()
or other lifecycle functions.
❌ Error: Editor engine could not be loaded: The License Key (API Key) you are using to access CE.SDK is invalid
- Double-check that your license key is valid and hasn’t expired.
❌ Editor does not load
- Check the browser console for any errors.
- Verify that your component paths and imports are correct.
Next Steps#
Congratulations! You’ve successfully integrated CE.SDK into your existing Svelte project. Now, take some time to explore the SDK and move on to the next steps whenever you’re ready: