Skip to content

Isora Guide ​

English | 한국어

Isora is an isometric engine for React. You build isometric scenes as data (JSON), draw them as SVG in a React app, and move people and equipment around them — the kind of live floor view used for digital twins, operations dashboards and people/agent simulations. Scenes are made in Studio (a GUI scene editor) or in code, and apps show them with @isora/react. What goes where and who walks where are decided by pure functions in @isora/core, so server rendering, rewinding, fast-forwarding and other renderers all produce the same picture.

scene JSON ──┐
             ├─► @isora/core ─ placement·spots·pathfinding·behavior planning·motion·depth sorting ─► parts to draw
asset packs ─┘                                                                                             │
                                                         @isora/react ─ <IsoScene>·hooks·per-frame layer ◄─┘

Docs ​

DocRead it when you want to
Getting startedShow a scene file in a React app for the first time, then add clicks and live state
ConceptsUnderstand coordinates, objects, assets, poses, states, ticks and frames, and determinism
Moving peopleLet people move on their own with routines and schedules, or send them anywhere with commands. Read where they are and what they do
RenderingUse <IsoScene>, overlays and click coordinates, draw with hooks yourself, or plug in another renderer
Motion engineSee how walking and sitting are computed, why people never pass through furniture, and how fast it is
Custom peopleBuild parts for your own person asset so it can walk and sit
ArchitectureSee how packages and modules are split, how data flows, where to extend, and what is missing
API referenceScan the public functions, hooks and components (including languages)

30-second tour ​

tsx
import { createRegistry, parseScene } from '@isora/core'
import { IsoScene, useBehaviorPlayback } from '@isora/react'
import { officialPacks } from '@isora/assets'
import sceneJson from './scenes/office.isora.json'

const scene = parseScene(sceneJson)
const registry = createRegistry(officialPacks)

export function Office() {
  // When the app owns behavior playback, it can command people and read who is doing what.
  // People with a behavior (routine) move on their own; people listed in control (kim) wait for commands.
  const behavior = useBehaviorPlayback(scene, registry, { control: ['kim'] })
  return (
    <IsoScene
      scene={scene}
      registry={registry}
      behavior={behavior}
      showActivities
      onSceneClick={(point, object) => {
        // Send Kim to where the user clicked (to the chair, if it was a chair).
        if (object?.id.startsWith('chair')) behavior.command('kim', { type: 'do', spot: object.id })
        else behavior.command('kim', { type: 'go', to: [point[0] - 0.25, point[1] - 0.25] })
      }}
    />
  )
}

Released under the MIT License.