Studio visual editor (0.3.2)¶
Alpha
LessonKit Studio is Alpha. Expect breaking changes to the editor UI, exported output, and StudioProjectV1 format between Studio releases.
The local visual editor MVP lives in apps/studio-web and is built from:
@lessonkit/studio-builder— headless project state, commands, undo/redo, autosave hooks@lessonkit/studio-ui—StudioEditorlayout (palette, canvas, inspector, preview)@lessonkit/studio-schema/@lessonkit/studio-renderer— same project model and preview as 0.1
Run locally¶
From the monorepo root (after npm install and npm run build:packages):
npm run dev -w lessonkit-studio-web
Open the URL Vite prints (typically http://localhost:5173).
Live demo (docs site)¶
Use the dedicated Studio live app page (also linked from Studio overview). It is built by the same docs/scripts/build-docs-demos.sh pipeline as the course examples.
Persistence (0.2)¶
Autosave: validated project JSON is written to
localStorageunderlessonkit-studio:project(debounced, default 500ms).Export / import: toolbar buttons download or load
project.json.Reset: restores the bundled sample project.
Export panel (0.3): download a React/Vite zip (renderer or explicit JSX), optional theme preset and xAPI activity IRI, and copy Node CLI steps for LMS packaging. See Studio export guide.
GitHub sync and hosted Studio are planned for 0.4+; do not rely on localStorage for production authoring.
Keyboard shortcuts¶
Action |
Shortcut |
|---|---|
Undo |
|
Redo |
|
Editing model¶
Pages: sidebar page list — add, rename, select active page.
Blocks: drag from the palette onto the canvas, or click a palette entry to insert at the page root.
Containers: drop blocks onto a container (or its empty nested zone) to nest; reorder siblings via drag.
Properties: inspector fields come from the Studio block catalog for the selected block.
Preview: lower pane uses
StudioRendererwith the active page.
Cross-page drag and scenario branching graph editing are out of scope for 0.2.
Embed in your app¶
import { StudioEditor } from "@lessonkit/studio-ui";
import { loadStudioProject } from "@lessonkit/studio-schema";
const loaded = loadStudioProject(json);
if (!loaded.ok) throw new Error("invalid project");
<StudioEditor
project={loaded.project}
onProjectChange={(next) => {
/* persist next */
}}
/>
See also Studio overview, Studio project format v1, Studio export guide, and Studio readiness.