# pflow.xyz > Visual Petri net editor with an embeddable, dependency-free ES module > library for discrete simulation and continuous (ODE) analysis. All modules > are served from this origin with `Access-Control-Allow-Origin: *` — import > them directly from any ad-hoc HTML page, no build step, no npm. ODE > semantics are behaviorally identical to go-pflow (enforced by a parity > test suite). Models are JSON-LD (`@context: https://pflow.xyz/schema`): `places` and `transitions` are objects keyed by id, `arcs` is an array of `{source, target, weight}`. `initial`, `capacity`, and `weight` are vectors (one entry per token color); capacity 0 means unbounded; an explicit 0 weight component means "this color is not involved". ## Docs - [Full guide](https://pflow.xyz/llms-full.txt): model format, copy-paste recipes for solving/plotting/embedding, discrete simulation, related services - [JSON-LD schema](https://pflow.xyz/schema): the @context served as JSON-LD - [Book](https://book.pflow.xyz): Petri nets as a universal abstraction ## Modules - [petri-solver.js](https://pflow.xyz/petri-solver.js): mass-action ODE solver (Tsit5, adaptive) + SVGPlotter interactive charts - [petri-sim.js](https://pflow.xyz/petri-sim.js): discrete firing semantics, pure functions - [petri-colors.js](https://pflow.xyz/petri-colors.js): colored-net unfolding - [petri-view.js](https://pflow.xyz/petri-view.js): the full `` editor web component (with tabbed ODE analysis workbench) - [petri-view.css](https://pflow.xyz/petri-view.css): editor styles, light + dark themes ## Services - [Analysis & codegen MCP server](https://pilot.pflow.xyz/mcp): petri-pilot JSON-RPC tools (petri_ode, petri_rate_scan, petri_ode_sweep, petri_phase_plot, petri_validate, petri_codegen, …) - [Server-side SVG rendering](https://pflow.xyz/api/svg): POST a model, get an SVG ## Optional - CDN mirrors for strict-CSP hosts that block pflow.xyz — pin a tag, `@main` is cached ~12h by jsDelivr: - [jsDelivr](https://cdn.jsdelivr.net/gh/pflow-xyz/pflow-xyz@v1.21.1/public/petri-solver.js) - npm-backed (after `pflow-xyz` is on npm): `https://esm.sh/pflow-xyz@1.21.1` or `https://unpkg.com/pflow-xyz@1.21.1/public/petri-solver.js` - cdnjs (pending acceptance — placeholder, 404s until then): `https://cdnjs.cloudflare.com/ajax/libs/pflow-xyz//petri-solver.js` - **claude.ai artifacts cannot load these modules today.** Their CSP allows scripts only from `cdnjs.cloudflare.com`; pflow.xyz, jsDelivr, esm.sh, and unpkg are all refused (`Failed to fetch dynamically imported module`). Do not emit an import-with-fallback loader for artifacts — host the page elsewhere instead. Also note `file://` pages can't load ES modules at all; open local pages via `python3 -m http.server`.