Konjure Kreate is the default workshop application. It is an independent Astro
browser application under apps/kreate/, deployed at
kreate.alkem.dev. It starts as a local workshop:
no account, room or connected device is needed to create, edit and run a scene.
The website remains the canonical home for guides, tutorials, examples,
research, devlog and Rust API documentation. Kreate is an application consumer
of the Rust SDK and the extracted @konjure/workbench interface. Both deploy
from this monorepo; Kreate does not create a second documentation tree.
What Kreate stores
Kreate autosaves projects in the browser’s IndexedDB. Every saved record has a revision; a stale writer caused by another browser window creates a separate copy rather than replacing the newer work. Browser storage is local to that browser. Save file is the portable path. Kreate is installable as a PWA. After its first successful cache, source editing and local runs work offline; pairing needs a reachable live host. Downloaded updates activate after all old Kreate windows close, keeping an open draft or run on its current release.
A Kreate v1 .konjure file is JSON with exactly these source-project fields:
{
"format": "konjure.kreate",
"version": 1,
"title": "Spinning forms",
"sources": { "main": "..." },
"active_module": "main"
}The Rust konjure-kreate core validates the envelope, title, module IDs,
selected module and storage limits, then canonicalizes it. It intentionally does
not compile the source. Invalid or unfinished DSL drafts therefore remain
saveable and reopenable. Kreate can also open a single .kj source file as a
new project, and projects support adding and removing source modules.
This format is source only. Reopening a project constructs a new runtime at
tick 0. A Kreate .konjure file is not the SDK’s SceneDocument, does not
persist a native scene runtime or session history, and is not yet an
interchangeable runtime-save format.
Shared boundaries
| Layer | Current responsibility |
|---|---|
apps/kreate | Browser application shell, project library, browser persistence, Kreate project-file core and app-specific WASM binding |
packages/workbench | Reusable editor, source panes, scene presentation, inspection and live-session interface shared with website embeds |
| Rust SDK and language | Data, checked DSL execution, scene/runtime semantics, geometry, typed controls and accepted live history |
packages/web and konjure-web | Browser rendering, DOM and browser-platform integration |
proto/wgpu-probe | Current native Konjure renderer and RayNeo client using the shared Rust core |
apps/live-relay | Public relay implementation for admission and accepted ordered collaboration |
Kreate’s four starters import their source directly from checked fixtures in
crates/konjure-lang/examples/; the app does not maintain copied TypeScript
programs. The shared workbench excludes Kreate’s project persistence,
application navigation and deployment concerns so it can remain embedded in
learning pages.
For a typed scene control, Rust resolves the callback and updates accepted state. The browser projects that state into DOM controls; the RayNeo client projects it through its native stereo adapter. A renderer never reconstructs callback identity from component JSON or a button label.
Pairing and targets
Kreate can pair the current work with another browser or Konjure on RayNeo through a reachable live host. Joining a participant creates a new Kreate project, retaining the local project from before the join. Connected clients share accepted source and controls; this does not transfer a standalone runtime’s tick into a room.
Use npm run kreate:live from a source checkout to start the local application
at its root path on port 4323 and Rust host on port 8830. The hosted app supplies a public HTTPS/WSS relay automatically. It persists
accepted history until the room expires; local host rooms remain in memory.
See Live sessions for admission limits and recovery.
Pairing does not establish a shared physical coordinate system or room anchoring.
The browser and RayNeo are the initial clients. RayNeo is not a relocated
Kreate Android application: it remains the native Konjure client under
proto/wgpu-probe, sharing Rust semantics and the live protocol. Native
protocol checks and APK builds are separate from physical-device validation;
no hardware result follows from the browser build.
Build and deployment
From the repository root:
npm run kreate:build
npm run kreate:dev
npm run kreate:live
npm run verifykreate:build produces and verifies apps/kreate/dist. kreate:dev starts
the independent app after its SDK and Kreate-core assets are prepared.
npm run verify builds both the application and website as independent
artifacts. Cloudflare Pages deploys apps/kreate/dist as konjure-kreate at
kreate.alkem.dev; it deploys web/dist as the documentation website at
konjure.alkem.dev.
The relay is a separate Worker deployment, managed by npm run relay:deploy.
Another SDK application may use the portable Rust crates and its appropriate platform adapters without inheriting Kreate’s editor or project library. A paired application implements the same live-client protocol; static website hosting alone does not provide the live host.