--- title: Custom Editor Shell description: Build your own editor shell with provideEditor, CanvasRoot, menus, panels, and toolbars. --- # Custom Editor Shell A typical OpenPencil Vue app has three layers: 1. `@open-pencil/core` creates the editor 2. `@open-pencil/vue` adapts it into Vue composables and headless primitives 3. your app renders the shell, styling, and product UX ## Why this matters The built-in OpenPencil app is only one possible shell. You can build a very different one for a focused workflow: an embedded editor inside another product, an internal asset tool, a template editor, an annotation UI, or an AI-assisted editing surface with custom controls. That is the main reason the SDK exists. ## Recommended composition A practical shell often looks like this: - provider at the top with `provideEditor()` - canvas in the center - page/layer navigation on one side - properties on the other side - menus and toolbars driven by composables ## Example ```vue ``` ## Why this split works - the SDK owns editor integration and reusable headless logic - your app owns layout, styling, and product-specific actions - composables can power menus and panels without extra wrapper components ## Related APIs - [provideEditor](../api/composables/provide-editor) - [useCanvas](../api/composables/use-canvas) - [ToolbarRoot](../api/components/toolbar-root) - [PageListRoot](../api/components/page-list-root) - [LayerTreeRoot](../api/components/layer-tree-root)