Simcraft
Open web IDE

Build and run open simulations anywhere

Simcraft is a visual IDE, CLI, and MCP server for discrete-event, agent-based, system dynamics and resource-flow models, built on an open standard.

Open web IDE Quickstart

Pre-alpha, version 0.1.0. No account needed. Interfaces can change before 1.0.0.

bakery.osdl.json
...
ExperimentOne day
Speed2 minutes
Results

Every paradigm on one canvas

Mix queues, populations and stocks in one model.

The Simcraft IDE running an urgent-care clinic model: a patient population, a triage queue, doctors and a fatigue stock in one diagram, with a pulsing feedback loop.The Simcraft IDE running an urgent-care clinic model: a patient population, a triage queue, doctors and a fatigue stock in one diagram, with a pulsing feedback loop.
Doctors, effective doctors and the doctor fatigue stock in the same clinic diagram.Doctors, effective doctors and the doctor fatigue stock in the same clinic diagram.
The components catalogue, grouped by library, opening on Discrete-Event Components, des 0.1.0, with Source and Queue.The components catalogue, grouped by library, opening on Discrete-Event Components, des 0.1.0, with Source and Queue.

One document, three views

Diagram, Stage and Code show the same OSDL document.

Concept render. The Stage view is in development.

Streamed results and interactive simulations

Charts, the diagram and the event stream update as the run plays. Pause, step, scrub or update a parameter at any point.

Results tab during a run, with a chart for flourBin.value.Results tab during a run, with a chart for flourBin.value.
Events tab during a run: the event stream console with metric.updated, state.changed and entity.moved lines.

Collaborate with an AI Assistant

Ask the Assistant to edit a model and run an experiment, or connect Claude or ChatGPT over MCP.

The Assistant and MCP need an account. Invitation-only beta.

Part of the bakery diagram in the IDE. Couriers is selected, the Assistant’s cursor is on it, and Edit history lists Set Couriers capacity by the Assistant.Part of the bakery diagram in the IDE. Couriers is selected, the Assistant’s cursor is on it, and Edit history lists Set Couriers capacity by the Assistant.
InspectAssistant

Orders back up at lunch. Try one more courier and tell me what changes.

Selected: Couriers

Assistant

  1. DoneRead the couriers parameterget_model
  2. DoneAdd a third courieredit_model
  3. DoneNo problemsvalidate_model
  4. DoneOne day, completedrun_experiment

With three couriers the bakery delivers 30 orders instead of 28, and next-day orders fall from 7 to 5. Couriers are busy 51% of the time, down from 73%.

Selected: Couriers

Ask the AssistantSend
Illustrative mockup. The figures come from real runs of the bakery model.

Claude and ChatGPT connect over MCP with 15 tools.

claude mcp add --transport http simcraft https://app.simcraft.io/mcp
  • get_authoring_guide
  • list_libraries
  • describe_component_type
  • list_examples
  • get_example
  • list_models
  • create_model
  • get_model
  • render_model
  • edit_model
  • validate_model
  • run_experiment
  • get_run
  • get_run_series
  • get_run_distribution

One document, many tools

clinic-hybrid.osdl.json
{
  "id": "doctors",
  "type": "des.server",
  "label": "Doctors",
  "params": {
    "serviceTime": {
      "dist": "exponential",
      "rate": { "expr": "1 / treatmentTime" }
    },
    "capacity": { "expr": "effectiveDoctors.value" }
  }
},
{
  "id": "effectiveDoctors",
  "type": "sd.auxiliary",
  "label": "Effective doctors",
  "params": {
    "value": {
      "expr": "max(1, round(baseDoctors * (1 - 0.5 * fatigue.value)))"
    }
  }
}

A model is plain JSON. Here a discrete-event server reads a system dynamics value.OSDL on GitHub

/-- Dispatch one calendar entry and its post-event checks: exactly one
calendar-dispatch semantic unit. -/
def stepOnce (state : MachineState) : StepDisposition :=
  match state.popNextCalendarEntry with
  | none => .completed .quiescent state
  | some (entry, popped) =>
    if state.pastEndTime entry.time then .completed .endTime state
    else
      let state := { popped with time := entry.time }
      let step := dispatchCalendarTarget entry.target state

Machine/Kernel.lean

The Lean reference machine defines the modeled kernel. Engine traces are compared with its traces for each conformance case.

OSDL on GitHub
  • Repeatable traces

    Same document, experiment and seed give the same event stream.

  • Live branching

    Change a parameter mid-run and the run forks a branch.

  • Collaborative AI

    The Assistant in the IDE and connected tools over MCP edit your model with you. Invitation-only beta.

  • Conformance-tested kernel

    Engine traces are compared with a Lean reference machine.

  • Clean Git diffs

    Models are plain JSON, so changes review like code.

  • Portable component libraries

    Package your own components as WebAssembly for the CLI and server. Not yet public.

  • Open format

    OSDL is Apache-2.0, with published schemas and a conformance suite.

  • Portable engine

    The same model runs in the browser, on the CLI or on a server. CLI and server not yet public.

  • Python integrations

    Dagster, MLflow and ClearML through the Python SDK. Not yet published.

Open web IDE

Pre-alpha, version 0.1.0. No account needed. Interfaces can change before 1.0.0.