Skip to content
Konjure / spatial intelligence

Applications and Konjure Kreate

Kreate's implemented browser workshop, project-file boundary, and shared target contracts.

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:

Sourcejson
{
  "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

LayerCurrent responsibility
apps/kreateBrowser application shell, project library, browser persistence, Kreate project-file core and app-specific WASM binding
packages/workbenchReusable editor, source panes, scene presentation, inspection and live-session interface shared with website embeds
Rust SDK and languageData, checked DSL execution, scene/runtime semantics, geometry, typed controls and accepted live history
packages/web and konjure-webBrowser rendering, DOM and browser-platform integration
proto/wgpu-probeCurrent native Konjure renderer and RayNeo client using the shared Rust core
apps/live-relayPublic 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:

Sourcesh
npm run kreate:build
npm run kreate:dev
npm run kreate:live
npm run verify

kreate: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.