How to enable and disable features in CE.SDK
CE.SDK includes a Feature API that gives you global control over which editor features are visible and available to your users. You can hide delete buttons, disable crop controls, or conditionally enable features based on user roles or selection state. Because the Feature API works globally, any change you make applies everywhere in the editor at once, which is what distinguishes it from the Component Order API, which targets specific components in specific areas.
The core methods
The Feature API exposes five methods:
cesdk.feature.enable()enables a feature with its default behavior.cesdk.feature.disable()hides a feature from the UI entirely.cesdk.feature.set()sets a feature with custom logic using a predicate function.cesdk.feature.isEnabled()checks whether a feature is currently enabled.cesdk.feature.list()returns all registered feature IDs so you can discover what is available.
Enabling and disabling features
You can pass a single feature ID, an array of IDs, or a glob pattern using the * wildcard:
// Single feature
cesdk.feature.enable('ly.img.delete');
cesdk.feature.disable('ly.img.crop');
// Multiple at once
cesdk.feature.enable(['ly.img.duplicate', 'ly.img.group']);
// Glob pattern — affects all matching features
cesdk.feature.disable('ly.img.transform*');
cesdk.feature.enable('ly.img.video*');
Conditional logic with set()
When you need more than a simple on/off toggle, set() lets you pass a predicate function that determines whether a feature is enabled based on runtime conditions. A common example is enabling a feature only when a block is selected:
// Enable duplicate only when something is selected
cesdk.feature.set('ly.img.duplicate', ({ engine }) => {
return engine.block.findAllSelected().length > 0;
});
// Extend the default predicate with an extra condition
cesdk.feature.set('ly.img.delete', ({ defaultPredicate, engine }) => {
return defaultPredicate() && engine.block.findAllSelected().length > 0;
});
One important thing to keep in mind: when you use set() with a boolean value, it is terminal. It takes precedence over any enable() or disable() calls made for the same feature.
Discovering available features
If you want to see all registered features or filter by a pattern, use list():
// All registered features
const all = cesdk.feature.list();
// Filter by pattern
const videoFeatures = cesdk.feature.list({ matcher: 'ly.img.video*' });
Built-in feature IDs
CE.SDK ships with a large set of built-in features organized by category. These cover navigation (ly.img.navigation.*), editing actions (ly.img.delete, ly.img.duplicate, ly.img.crop), video timeline controls (ly.img.video.timeline.*), text tools (ly.img.text.*), effects (ly.img.filter, ly.img.blur, ly.img.shadow), transform options (ly.img.transform.*), and more.
For the full list of built-in feature IDs and a live demo, visit the CE.SDK Feature API documentation.