APP v1.3.94

adom-tsci — Tscircuit Board Viewer

Interactive tscircuit preview in a Hydrogen webview — first-class 3D / PCB / Schematic tabs, Components & Nets HUDs, an auto-glow x-ray view, Inspect, Measure, a Walkthrough Demo, and a one-click `export-wiki` that ships the whole interactive viewer + source bundle + plan.md to a wiki molecule page.

adom-tsci 1.3.90 walkthrough — TPS562201 12V→3.3V buck, 7:33 narrated tour with the new in-walkthrough TTS (Andrew Neural). 16 steps: chip / caps / inductor / feedback divider / contacts / testpoints / Nets panel with per-net x-ray copper highlight (VIN, GND, SW, VCC, FB, BST, EN). Each step's narration auto-plays from the new /api/tts proxy; step duration is gated by audio length so visuals and voice stay locked. 🔊/🔇 toggle in the HUD persists across reloads.

Install this app

Paste this into Claude Code (VS Code panel, Adom editor, or terminal) to install:

I want to install the "adom-tsci — Tscircuit Board Viewer" app from the Adom Wiki (https://wiki-ufypy5dpx93o.adom.cloud/wiki/apps/adom-tsci). For the Docker CLI: curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-tsci/adom-tsci -o /tmp/adom-tsci && chmod +x /tmp/adom-tsci && sudo install -m 0755 /tmp/adom-tsci /usr/local/bin/adom-tsci && adom-tsci install Then verify the install works.

Download v1.3.94

Windows coming soon
macOS coming soon
🐧 Linux coming soon
🐳 Adom Docker CLI adom-tsci ·

See all releases on GitHub

adom-tsci — Tscircuit Board Viewer

An Adom-Docker CLI that gives you first-class 3D / PCB / Schematic tabs for a tscircuit project inside a Hydrogen webview, plus the canonical "ship this molecule to the wiki" flow.

What it does

  • 3D tab — full Babylon-based viewer (orbit, zoom, ortho/perspective) with the tscircuit GLB loaded, ground shadow, IBL environment.
  • Components HUD — every chip / passive / testpoint / machine pin the GLB ships, grouped by kind. Click a row to hide that component and see the traces underneath.
  • Nets HUD — every routed pcb_trace lifts off the baked surface as a live polygon mesh on top of an x-ray-transparent substrate. The button auto-selects the biggest power/ground net the moment you open the panel — that's the gorgeous GlowLayer x-ray shot the walkthrough demos.
  • Walkthrough Demo — narrated tour of the board with cinematic camera flyovers. Drives by walkthrough.json you can hand-edit per project. Auto-plays in static-export mode (wiki embed).
  • Inspect / Measure — Fusion 360-style smart picking. Hover any pad/hole/chip/silkscreen/board for an info card; pin two clicks for a measurement.
  • Re-run autorouter — one-click hot reload, regenerates traces
    • GLB without restarting tsci dev.
  • export-wiki — bundle the running viewer + source + plan.md and publish to the Adom Wiki as a molecule page.

Install

Auto-discover-friendly, single command:

curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-tsci/adom-tsci -o /tmp/adom-tsci \
  && chmod +x /tmp/adom-tsci \
  && sudo install -m 0755 /tmp/adom-tsci /usr/local/bin/adom-tsci \
  && adom-tsci install

adom-tsci install deploys SKILL.md + the adom-usbc, demo-recording, and export-wiki guides to ~/.claude/skills/.

Quick start

# Boot the preview against any tscircuit project (lib/index.tsx convention):
cd ~/project/adom-tsci-projects/My-Board
adom-tsci start . --port 8861 --tsci-port 3061 --texture-resolution 4096

# Drive the running viewer programmatically:
adom-tsci view top
adom-tsci net --on            # x-ray view, auto-glow on biggest net
adom-tsci walkthrough start   # narrated tour
adom-tsci toggle-component U1 --hide   # see traces under the chip

# Publish to the wiki as a molecule:
adom-tsci export-wiki . \
  --slug my-board \
  --page-type molecules \
  --label "Live 3D viewer"

export-wiki bundles the static viewer + a tarball of the project source (lib/, package.json, walkthrough.json, plan.md) + uploads the plan.md standalone so a future agent picking up your molecule sees both the brief and the source in one place.

See also

  • adom-tsci/guides/adom-usbc.md — USB-C placement / rotation / lint
  • adom-tsci/guides/demo-recording.md — making a 30-second narrated demo video of a board
  • adom-tsci/guides/export-wiki.md — the molecule publish flow (hero image, plan.md, body completeness rules)
MD
SKILL.md 26 days ago
adom-tsci user-facing skill (Claude/AI usage docs)
SKILL.md v1.3.94John Lauer · 26 days ago
73.7 KB
MD
adom-usbc.md 26 days ago
USB-C placement / rotation / lint guide
USB-C guide v1.3.94John Lauer · 26 days ago
14.9 KB
MD
demo-recording.md 26 days ago
30-second demo recording guide
demo-recording guide v1.3.94John Lauer · 26 days ago
12.7 KB
MD
export-wiki.md 26 days ago
Molecule publish-to-wiki guide (hero, plan.md, body completeness rules)
export-wiki guide v1.3.94John Lauer · 26 days ago
10.4 KB
ADOM
adom-tsci 26 days ago
adom-tsci Linux x86_64 binary v1.3.94 — interactive tscircuit board viewer + wiki publisher.
binary v1.3.94John Lauer · 26 days ago
18.4 MB
GZ
LM555-Blinky-Molecule.tar.gz 1 month ago
Sample project: LM555-Blinky-Molecule (source + pre-built dist/). Extract + bun install + adom-tsci start to preview.
343.4 KB
GZ
RP2040-DevBoard-Molecule.tar.gz 1 month ago
Sample project: RP2040-DevBoard-Molecule (source + pre-built dist/). Extract + bun install + adom-tsci start to preview.
1.5 MB
GZ
SN65HVD230-Molecule.tar.gz 1 month ago
Sample project: SN65HVD230-Molecule (source + pre-built dist/). Extract + bun install + adom-tsci start to preview.
396.5 KB
GZ
iCE40HX1K-USB-Molecule.tar.gz 1 month ago
Sample project: iCE40HX1K-USB-Molecule (source + pre-built dist/). Extract + bun install + adom-tsci start to preview.
3.4 MB

Install notes

Adom Docker CLI install steps
curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-tsci/adom-tsci -o /tmp/adom-tsci && chmod +x /tmp/adom-tsci && sudo install -m 0755 /tmp/adom-tsci /usr/local/bin/adom-tsci && adom-tsci install

Screenshots

Videos

adom-tsci 1.3.7 feature tour (5:36) — REAL interactive recording of all 13 sections: intro, 8-molecule montage, 3D/PCB/Schematic/Parts tabs, Inspect cards, Measure (3 pad-to-pad distances via new adom-tsci measure CLI), Components HUD, right-click ghost-hide + Ctrl-Z, Parts 4-rotation invariant, footer reveal, lint, Walkthrough, Re-run autorouter. Andrew-neural TTS narration. 20/80 AI-chat/feature split.

adom-tsci 1.3.5 feature tour (3:16) — all 8 example molecules + Inspect, Measure, Components HUD, right-click, Parts invariant, footer reveal, lint, Walkthrough, Re-run autorouter. TTS narration via edge-tts en-US-AndrewNeural.

adom-tsci 1.3 feature tour — 34 scenes with TTS narration on RP2040 dev board (4:20)

v0.4.1 polished demo (1:22, 2x speed) — overlay captions for every scene; Inspect chip/pad/board; Components HUD Test-points reveal; 10-step Walkthrough with 3D flyovers on contact ring + testpoints

AI Skill — how Claude uses this app

Edit AI Skill

name: adom-tsci description: > Interactive tscircuit preview inside a Hydrogen webview panel ("Tscircuit Board Viewer"). First-class 3D / PCB / Schematic tabs rendered from the tscircuit build output, plus: an Inspect tool (hover any chip / pad / hole / via / silkscreen / board and get a labelled info card with refdes, footprint, net routing, stackup — all pulled from circuit.json), a Measure tool (Fusion 360-style smart picking + precision + mm/inches/mils), a Walkthrough Demo (guided 10-step tour with 3D flyover animations across the contact ring + testpoints), a one-click Re-run autorouter, a background stale-deps check, and a --texture-resolution N flag that re-bakes the board-surface texture up to 8192x8192 so silkscreen stays readable at zoom. The 3D viewer is fully AI-drivable: every toolbar action has a CLI subcommand + HTTP endpoint + JS eval channel + console forwarder. Use when the user asks to preview a tscircuit project, inspect board features, measure pin-to-pin distances, start a walkthrough demo, re-run the autorouter, bump the silkscreen resolution, or upgrade tscircuit packages. Trigger words: tscircuit preview, adom-tsci, tsci dev webview, preview tscircuit, interactive tscircuit viewer, inspect board, hover chip info, what is this chip, pcb inspect tool, measure pcb distance, measure between pins, tscircuit hot reload, rerun autorouter, re-run autorouter, walkthrough demo, board walkthrough, sharper silkscreen, bump texture resolution, tscircuit 8192, upgrade tscircuit, stale tscircuit deps, hide chip see traces, AI-driven 3D pcb viewer.

adom-tsci

An Adom app that gives you first-class 3D / PCB / Schematic tabs for a tscircuit project inside a Hydrogen webview panel, plus a one-click Re-run autorouter button, a background stale-deps check against the npm registry, and a secondary tsci live tab (the raw tscircuit RunFrame, served through a slingshot proxy) for features the primary UI hasn't wrapped.

⚡ CLI-FIRST — non-negotiable

If an adom-tsci preview is running (or you're about to start one), every interaction goes through the adom-tsci CLI. Do not reach for adom-cli hydrogen workspace add-tab, raw curl to the slingshot, fetch('/api/...') inside a shell, or any other workaround. The CLI has a subcommand for every runtime concern — including multi-instance tab management, JS eval inside the webview, console tailing, camera control, per-component visibility, and autorouter rerun.

The reflex: when you think "I need to touch the running preview", run adom-tsci --help first and find the subcommand. If the CLI doesn't expose it, that's a bug in the tool, not a reason to hand-roll bash — stop and extend the CLI instead. (If you need to ship a temporary workaround, leave a TODO: CLI gap — add <flag> breadcrumb in the skill so the gap gets closed.)

Quick-reference table — the subcommand you want is probably here:

I want to…Command
Spin up a preview (1st instance)adom-tsci start <dir>
Spin up a 2nd / Nth preview (no tab collision)adom-tsci start <dir> --port 8851 --tsci-port 3041 --tab-name "adom-tsci <ProjectName>"
Open / re-attach the webview tab on an existing slingshotadom-tsci open --port <N> [--tab-name "..."] [--display-icon mdi:led-on]
Stop the preview (clean: kills tsci dev group + releases PID lock)adom-tsci stop [--port <N>]
Re-run the autorouter on the running projectadom-tsci rerun [--clean] [--fast]
Kick the 3D / PCB / Schematic tabs to re-poll the buildadom-tsci reload [--port <N>]
Move the 3D cameraadom-tsci view <front|back|left|right|top|bottom|iso> or adom-tsci camera --alpha <A> --beta <B> --radius <R>
Cinematic orbitadom-tsci tour start | stop
Run the guided walkthroughadom-tsci walkthrough <start|next|prev|pause|resume|close|status>
Flip a toolbar flagadom-tsci toggle <ground|wireframe|axes>
Hide a chip to see traces under itadom-tsci toggle-component U1 --hide
List components in the loaded GLBadom-tsci list-chips
Run JS inside the webviewadom-tsci eval "<js>"
Read the browser consoleadom-tsci console [--follow] [--tail N] [--level log,warn,error]
Health / statusadom-tsci health [--port <N>], adom-tsci status [--port <N>] [--json]
Upgrade tscircuit packages in the target projectadom-tsci upgrade [<dir>]

Every write-mutation targeting the preview has --port <N> if you need to target a specific instance; defaults to 8850.

No Adom Viewer dependency (v0.3.0+)

As of v0.3.0, the 3D tab is a self-contained three.js canvas — no external service, no port 8770 probe, no "AV not reachable" states. The old Basic3dView iframe and the av_bridge module were removed. The 3D view is fully AI-drivable from the CLI: every toolbar button has a subcommand, plus there's a JS eval channel for hot-patching and a console forwarder so Claude can read UI-side errors. See the "Remote-control from the CLI" section below.

What's new in v0.4.x

Everything below is in the v0.4.0 / v0.4.1 binary that's on the wiki right now:

  • Inspect tool (🔍 / keybind I). Hover any feature on the board for a labelled info card: chip refdes + footprint + pin count + JLCPCB part #; pad → pin name + net + "Connects to MC1.pin1, TP1.pin1" via N direct traces + solder-mask state; plated hole → drill/outer diameters + role (mechanical-only vs wired); via → drill/pad/bridged layers/net; silkscreen → text + layer + parent; board → dims + thickness + layer count + baked texture resolution. Click to pin, Esc unpins. Fields tscircuit doesn't emit today (MPN, datasheet, surface finish) render as with a tooltip explaining and linking to upstream feature requests filed in TSCIRCUIT_FEATURE_REQUESTS.md.
  • Measure tool (📏 / keybind M). Fusion 360-style smart picking (pad / hole / chip / pin / edge), precision + secondary units (mm / inches / mils), vertex snap. Hover highlights in cyan; Inspect uses amber so you can tell them apart.
  • Walkthrough Demo (🎬). A narrated 10-step tour. Auto-advances based on narration text length; orbit auto-pauses; 3D flyover animations on the contact-ring + testpoint steps (6 waypoints per step, ease-in-out, so the camera visibly scans instead of staring). CLI drivable: adom-tsci walkthrough start | next | prev | pause | resume | close | status.
  • Board-surface texture resolution — tscircuit bakes silkscreen + copper pads + annular rings + solder mask into a single PNG per board face, hardcoded at 1024. On big boards that's unreadable at zoom. adom-tsci start --texture-resolution 8192 re-bakes the GLB via circuit-json-to-gltf and caches by circuit.json content hash (first bake ~75s; cache hit ~190ms). Current resolution is shown on the "Board Surface → Baked" row of the Components HUD.
  • Components HUD group toggles. Master eye per group (●/○/◐). Test points are hidden by default — tscircuit's default cuboid placeholders add noise without detail; toggle them on when needed.
  • Custom monochrome SVG toolbar icons per the Adom brand rule — no emoji anywhere. Ruler with ticks for Measure, magnifier with a data-point for Inspect, clapperboard with play arrow for Walkthrough.
  • Robust shutdown + PID lock (v0.4.1). adom-tsci start scans /proc for stale bun tsci dev processes from prior runs and SIGTERM+SIGKILL them before spawning. Atomic PID lock at /tmp/adom-tsci-<port>.pid refuses to double-start on the same port. Fixes the "15 orphan tsci devs from 15 crashed restarts" situation that used to compound.

Keyboard shortcuts

KeyAction
MToggle Measure tool
IToggle Inspect tool
GToggle ground plane
WToggle wireframe
CToggle Components panel
SpacePause / resume walkthrough
EscUnpin Inspect card / close tool

Shortcuts only fire when the 3D tab is active and no input field is focused.

Credit to Ray

This app is an onboarding layer over Ray's authoritative tscircuit workflow guide at ~/.claude/skills/adom/guides/adom-tscircuit-skill.md (author: ray, 22 kB). Everything this tool does with tscircuit — the <Molecule> component, MachineContactMedium placement rules, the sizing grid, the DRC notes, the bunx tsci build --glbs --svgs flags, the project skeleton, the SN65HVD230 reference — traces back to Ray's guide. If you're building more than a single-chip molecule (connector families, molecule generators, review servers, DRC tooling), go read Ray's guide. This app doesn't replace any of it; it just makes the "show me what I'm building" step trivial.

Quick start

# One-time install
curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-tsci/adom-tsci \
    -o /usr/local/bin/adom-tsci && \
  chmod +x /usr/local/bin/adom-tsci && \
  adom-tsci install

# From any tscircuit project directory:
adom-tsci start .
# …open the adom-tsci tab in your editor, edit lib/index.tsx,
#    click Re-run autorouter when you want fresh outputs,
#    stop with:
adom-tsci stop

The UI

┌──────────────────────────────────────────────────────────────────────────┐
│ [3D*]  [PCB]  [Schematic]   GLB: 8:56:56 AM   ⟳ Re-run autorouter  │
│                                                ─────   tsci live    │
├────┬─────────────────────────────────────────────────┬───────────────────┤
│ ⌂  │                                                 │  COMPONENTS       │
│ T  │                                                 │   U1    CHIP      │
│ F  │               (three.js canvas —                │   U2    CHIP      │
│ R  │            self-contained, no AV)               │   C1    CAPACITOR │
│ I  │                                                 │   Y1    CRYSTAL   │
│ ⎚  │                                                 │   TP1   TESTPOINT │
│ ▭  │                                                 │   ...             │
└────┴─────────────────────────────────────────────────┴───────────────────┘

Primary tabs (first-class, big, prominent):

  • 3D (default). A full-bleed canvas rendered by the real Adom 3D Viewer (adom-3d-viewer.min.js, the same Babylon-based engine the rest of Adom uses for 3D), bundled into the adom-tsci binary so there is no AV service dependency — no port 8770 probe, no "AV not reachable" states. Shadows, IBL environment, transparent ground plane all work out of the box.

    Everything else floats over the canvas so it doesn't steal real estate:

    • Floating toolbar (top-centre, draggable via the ⋮⋮ grip): ⌂ home (iso), ◱ frame, T top, F front, R right, I iso, ▭ ground, ⎚ wireframe, ⊡ ortho/perspective, 📏 measure.
    • Measure tool: click 📏 then click two points on the model to get the distance between them in millimetres, with an on-screen label at the midpoint. Click a third time to clear.
    • Floating component panel (top-right, draggable via header, collapsible with , dismissible with ×, restorable via the button): every chip / passive / testpoint / machine contact from circuit.json, listed with kind. Click a row to hide that component — the "hide U1 to see the traces routed under the FPGA" use case. Click "all on" to restore.

    Mesh → component-name mapping: tscircuit's GLB writer names meshes Box0_primitive0 / OBJBox12_primitive1 (no component names in the scene graph). The UI fetches /circuit.json, auto-detects the GLB unit scale (meters vs mm), probes orientation via mounting-post corner positions, and groups meshes by nearest-neighbour assignment within a per-kind tolerance (chip=10mm, testpoint=1.2mm, contact=2mm, …). Meshes outside tolerance land in a catch-all Board group so the board outline and any unmatched geometry is still toggleable.

  • PCB. Inline dist/lib/index/pcb.svg in a panzoom container. Scroll wheel zooms toward cursor, drag to pan. Lazy-loaded on first click.

  • Schematic. Inline dist/lib/index/schematic.svg, same panzoom. Lazy-loaded on first click.

Secondary tab:

  • tsci live. The raw tscircuit RunFrame served through the slingshot proxy. Escape hatch for features tscircuit ships in the future that we haven't wrapped yet. Dimmed via CSS filter: brightness(0.78) because RunFrame's light theme is hardcoded and would be blinding inside a dark editor.

The Re-run autorouter button

Top-right of the header. Click it to:

  1. Touch lib/index.tsx via the slingshot → tsci dev file server. A no-op POST /api/files/upsert fires a FILE_UPDATED event, tsci dev re-evaluates the circuit (which re-runs the autorouter), and RunFrame (the tsci live tab) refreshes its in-memory view.
  2. Spawn bunx tsci build lib/index.tsx --glbs --svgs in the background. This regenerates dist/lib/index/{3d.glb,pcb.svg, schematic.svg} on disk, which the first-class 3D / PCB / Schematic tabs poll for (/glb/meta every 3 s). Within ~30 s the tabs re-render with the new output.
  3. Shift-click for a clean re-run. Holding Shift while clicking deletes manual-edits.json first, so any interactive trace edits made in RunFrame's PCB editor are discarded and the autorouter runs from scratch.

Same feature from the CLI:

adom-tsci rerun                # re-run autorouter, preserve manual edits
adom-tsci rerun --clean        # also delete manual-edits.json first

Stale-deps check

On adom-tsci start, a background thread queries https://registry.npmjs.org/@tscircuit/cli/latest and compares against the version field in <project>/node_modules/@tscircuit/cli/package.json. If the installed version is behind the latest, you see a HINT: line:

HINT: @tscircuit/cli is out of date (installed 0.1.1226, latest 0.1.1234).
Run `adom-tsci upgrade` to refresh.

The check is non-fatal (3-second timeout, no network → no warning) and never blocks startup. tscircuit does daily releases — this just nudges you when you're behind.

adom-tsci upgrade [project-dir] shells out to bun update --latest in the target directory, upgrading every dep to its latest version (not just tscircuit). Restart adom-tsci start for changes to take effect.

Credit to the slingshot: the 127.0.0.1 problem

tsci dev emits a hardcoded absolute URL in its HTML shell:

<script>
  window.TSCIRCUIT_FILESERVER_API_BASE_URL = "http://127.0.0.1:3040/api";
</script>
<script type="module" src="/standalone.min.js"></script>

Inside a Hydrogen webview iframe, 127.0.0.1 resolves to the user's machine, not the container, so every fetch fails and RunFrame hangs at loading... forever.

adom-tsci's slingshot:

  1. Fetches the shell HTML from 127.0.0.1:3040/.
  2. Rewrites the two hardcoded references to relative paths: TSCIRCUIT_FILESERVER_API_BASE_URL = "api" and <script src="standalone.min.js">.
  3. Proxies /runframe/api/* and /runframe/standalone.min.js to 127.0.0.1:3040, preserving HTTP method, body, and query string. A v0.1 bug dropped query strings on forward, which broke files/get?file_path=...; fixed in v0.2 with a full method-aware proxy.

Tsci dev uses HTTP polling (/api/events/list?since=<id>) for hot reload — no WebSockets — so the slingshot is a plain HTTP forwarder.

CLI commands

Every command follows the Adom CLI conventions (OK: / ERROR: / Hint: prefixes, both human and --json output).

CommandPurpose
adom-tsci start <dir> [--port 8850] [--tsci-port 3040] [--no-open] [--texture-resolution N]Spawn tsci dev, start the slingshot + shell server, open the webview tab. --texture-resolution N re-bakes the board-surface texture at N×N (default 1024; recommend 2048 for 60-100 mm boards, 4096 for 100-200 mm, 8192 for >200 mm)
adom-tsci stopClean shutdown of the preview server + the tsci dev process group (and the descendant sweep + PID lock release — no more orphan bun processes)
adom-tsci walkthrough <start|next|prev|pause|resume|close|status>Drive the Walkthrough Demo from the CLI / AI
adom-tsci status [--json]GET /state from the running instance
adom-tsci openRe-add or navigate to the webview tab
adom-tsci reloadForce the 3D / PCB / Schematic tabs to re-poll the build outputs
adom-tsci rerun [--clean]Re-run the tscircuit autorouter (optionally deleting manual-edits.json)
adom-tsci upgrade [dir]bun update --latest in the target tscircuit project
adom-tsci healthProbe tsci_reachable
adom-tsci installDrop SKILL.md into ~/.claude/skills/adom-tsci/
adom-tsci --versionPrint version

Remote-control the 3D viewer from the CLI (no clicking):

CommandPurpose
adom-tsci view <preset>Camera preset: front / back / left / right / top / bottom / iso / isometric
adom-tsci camera [--alpha A] [--beta B] [--radius R]Raw alpha/beta (radians) + radius multiplier
adom-tsci tour start | stopCinematic slow-orbit camera
adom-tsci toggle <flag>Flip a toolbar flag: ground, wireframe, axes
adom-tsci toggle-component <NAME> [--hide | --show]Show/hide a single component — e.g. adom-tsci toggle-component U1 --hide to see traces under the FPGA
adom-tsci list-chipsList the components the 3D viewer discovered in the current GLB
adom-tsci eval "<js>"Run a JS snippet inside the running webview, print the result
adom-tsci console [--follow] [--tail N] [--level log,warn,error]Print the JS console log forwarded from the webview (all console.* + uncaught errors)

HTTP API

Every CLI verb is a thin wrapper over an HTTP endpoint. Curl them directly if you want to script without the CLI. All on 127.0.0.1:8850 by default.

RouteMethodPurpose
/GETThe tabbed shell HTML
/runframe/GETSlingshot root: rewrites tsci dev's HTML shell to relative paths
/runframe/api/*anyFull HTTP proxy to 127.0.0.1:<tsci-port>/api/* (method, body, query string preserved)
/runframe/standalone.min.jsGETStreamed proxy of the 8.6 MB RunFrame bundle
/adom.css, /favicon.svgGETStatic brand assets
/glbGETStreams <project>/dist/lib/index/3d.glb
/glb/metaGET{mtime, size} for polling
/pcb.svgGETStreams <project>/dist/lib/index/pcb.svg
/schematic.svgGETStreams <project>/dist/lib/index/schematic.svg
/circuit.jsonGETStreams <project>/dist/lib/index/circuit.json (UI uses it to map GLB meshes to component names)
/rerun[?clean=1]POSTTouch lib/index.tsx via upsert + spawn bunx tsci build --glbs --svgs
/reloadPOSTBump GLB mtime to force 3D tab reload
/healthGET{ok, tsci_reachable, project_dir}
/stateGETServer state + toolbar flags + component visibility + component list
/shutdownPOSTKill tsci dev process group, return 204, exit
/api/set-viewPOSTBody {"view":"top"} — camera preset
/api/set-cameraPOSTBody {"alpha":…,"beta":…,"radius":…} — raw camera
/api/tourPOSTBody {"action":"start"|"stop"} — slow orbit
/api/togglePOSTBody {"name":"wireframe"} — toggle a toolbar flag
/api/toggle-componentPOSTBody {"name":"U1"[,"visible":false]} — show/hide a component
/api/componentsGET/POSTGET returns the UI-discovered component list; POST is how the UI publishes it after GLB load
/api/camera-commandGETUI polls this every 500 ms; returns the latest queued command and atomically clears it
/consoleGET/POSTPOST from UI appends a console message; GET returns {messages, next_since} for the CLI adom-tsci console
/evalPOSTBody {"code":"…"} — queue a JS snippet; returns {"id":…}
/eval/pendingGETUI polls this; returns the next pending snippet or 204
/eval/:id/resultPOSTUI posts the snippet's result
/eval/:idGETAI polls for the result

curl examples:

# Health check
curl -sS http://127.0.0.1:8850/health

# Re-run autorouter, clean mode
curl -sS -X POST "http://127.0.0.1:8850/rerun?clean=1"

# Fetch the PCB SVG
curl -sS http://127.0.0.1:8850/pcb.svg > pcb.svg

# Stop the server
curl -sS -X POST http://127.0.0.1:8850/shutdown

Architecture

+---------------------------+        +---------------------------+
|  Hydrogen webview tab     |        |  adom-tsci (Rust)         |
|  /proxy/8850/             |<------>|  tiny_http on 127.0.0.1:8850
|                           |        |                           |
|  +----------+             |        |  /              shell.html
|  |   3D     |<------------+------->|  /glb           file stream
|  +----------+             |        |  /pcb.svg       file stream
|  |  PCB     |             |        |  /schematic.svg file stream
|  +----------+             |        |                           |
|  | Schematic|             |        |  /runframe/     slingshot
|  +----------+             |        |  /runframe/api/*  (proxy)
|                           |        |  /runframe/standalone.min.js
|  +----------+             |        |                           |
|  | tsci live|<------------+------->|  /compare       compare.html
|  +----------+             |        |  /av/basic3d    AV bridge
|  | 3d cmp   |             |        |  /av/upload-glb AV bridge
|  +----------+             |        |                           |
|                           |        |  /rerun         [-> upsert + spawn build]
|  ⟳ Re-run autorouter -----+------->|  /reload  /shutdown  /health
+---------------------------+        +---------------------------+
                                              |           |
                                              v           v
                          +--------------------+   +----------------+
                          | bun tsci dev       |   | AV (8770/8771) |
                          |   -p 3040          |   | Basic3dView +  |
                          | (process group)    |   | serve_glb      |
                          +--------------------+   +----------------+

Example session

User: preview my SN65HVD230 molecule

Claude: (runs adom-tsci start ~/project/tscircuit-projects/SN65HVD230-Molecule)

Output:

OK: spawning tsci dev -p 3040
HINT: @tscircuit/cli is out of date (installed 0.1.1226, latest 0.1.1234).
      Run `adom-tsci upgrade` to refresh.
OK: tsci dev is ready
OK: webview tab created
OK: adom-tsci running — project=... port=8850 tsci_port=3040

The adom-tsci webview tab opens in the editor (with a brand-compliant #e6edf3 monochrome chip icon in the tab bar). The 3D tab is active by default, showing the molecule in a clean dark-themed three.js viewer. User rotates with the mouse, clicks through to PCB, then Schematic, sees the tscircuit SVGs in panzoom containers.

User: move R_TERM to pcbX=8

Claude: (edits lib/index.tsx) Done. Click ⟳ Re-run autorouter in the header to regenerate the build outputs, then the 3D / PCB / Schematic tabs will auto-refresh.

User: (clicks the button)

Shell flashes ⟳ Running…⟳ Re-ran. ~30 s later the 3D tab shows R_TERM at its new position; PCB and Schematic re-fetch on next click.

User: ship it

Claude: (runs bunx tsci push)

Troubleshooting

HINT: @tscircuit/cli is out of date Not an error. tscircuit does daily releases; adom-tsci upgrade in your project directory pulls the latest. Or ignore it — the hint is fire-and-forget.

Re-run autorouter button does nothing visible The rebuild is async and takes ~30 s. Watch the GLB: <time> pill in the header; when it updates, the 3D tab has re-rendered. PCB and Schematic lazy-reload on next click.

tsci dev crashed with MethodNotAllowedError: only POST accepted That's tsci dev's own internal fileserver spitting non-fatal noise during its node_modules upload on startup. Doesn't break anything — the server recovers. Check /health to confirm tsci_reachable: true.

Webview stuck at Loading files... Known tscircuit v0.1.1226+ issue. RunFrame's isLoadingFiles flag only clears when files/list + files/get?file_path=... both succeed. In v0.1 of this app, the slingshot dropped query strings on forward, which broke files/get; v0.2 forwards the query string. If you're hitting this on v0.2, curl http://127.0.0.1:8850/runframe/api/files/get?file_path=lib/index.tsx and see if the response has the real file content.

3D tab — flat-lit, no shadows, no transparent ground The same-origin bridge didn't run. Symptoms:

  • ground plane is opaque (not 50% transparent)
  • no board shadow on the ground
  • iframe.contentWindow.viewer is undefined

Causes to check:

  1. Different origin. If the shell is on /proxy/8850/ but Basic3dView is on a different host (not /proxy/8770/ on the same subdomain), the contentWindow.viewer access will throw SecurityError: Blocked a frame with origin. Check that VSCODE_PROXY_URI is set to the same subdomain as AV's 8770.
  2. Viewer not yet constructed. The bridge polls for up to 10 s waiting for scene.meshes to have at least one non-ground mesh. On a cold cache where Basic3dView has to download its Babylon bundle + the GLB, this may not be enough.
  3. basic-3d.html changed module structure. The bridge relies on var viewer being top-level scope in a non-module <script>. If upstream Adom wraps basic-3d.html in type="module", the bridge breaks. Confirm with curl .../proxy/8770/basic-3d.html | grep 'var viewer'.

3D compare pane is still flat-lit Known v0.2 limitation. The 3d compare secondary tab lives in a separate compare.html where both Basic3dView and three.js use default lighting. The compare view is for material-fixup regression, not for aesthetic rendering. Tracked for v0.3.

"Some sites block embedding" banner at the top of the webview That banner is a persistent affordance shown on every webview tab regardless of whether the page loaded. It is not an error signal. If the panel below it is actually blank, check /health and the tsci-preview.log file for subprocess errors.

tsci dev subprocess doesn't die after stop Shouldn't happen in v0.1.0+. tsci dev is spawned in a new process group (setsid) and the whole group is killed on shutdown. If you see an orphan bun ... tsci dev after adom-tsci stop, file an issue with ps auxf | grep tsci output.

Publishing your molecule

adom-tsci is a preview tool — it doesn't publish anything. Use tscircuit's own flow:

cd ~/project/tscircuit-projects/MyChip-Molecule
bunx tsci push

This publishes to @tsci/<your-user>.MyChip-Molecule on the tscircuit registry. Requires bunx tsci login once (browser OAuth, must be an adom-inc org member).

For the full production workflow (connector families, molecule generators, DRC, review servers, snapshot approval), go to Ray's guide at ~/.claude/skills/adom/guides/adom-tscircuit-skill.md.

See also

  • Ray's guide: ~/.claude/skills/adom/guides/adom-tscircuit-skill.md — the authoritative tscircuit workflow. Go there for production molecule families.
  • adom-tscircuit skill: ~/.claude/skills/adom-tscircuit/SKILL.md — onboarding layer that points new users to this app for display.
  • hydrogen-tab-icons skill: documents how the #e6edf3 monochrome chip favicon in src/assets/icon.svg ends up on the tab bar (spoiler: the page's <link rel="icon"> overrides any --display-icon placeholder).
  • Basic3dView: ~/.claude/skills/adom/guides/basic-3d-viewer.md — the Adom Babylon viewer used in the 3D compare tab's left pane.
  • Web View panel API: ~/.claude/skills/adom/webview/SKILL.md.
  • Adom brand guide: ~/.claude/skills/adom/guides/brand/SKILL.md — all icons must be monochrome #e6edf3, the chip favicon follows this rule.
  • tscircuit docs · iconify MDI catalog

Sub-Skills
?
What are Sub-Skills?

Sub-skills are community-contributed AI skill extensions for this component. They teach AI assistants about specific tools, configurators, or workflows.

Examples:

  • A manufacturer’s configuration tool for a motor controller
  • A community-written design guide for an amplifier circuit
  • An automated test/validation script for a sensor module

How to add one: Click Add Sub-Skill, provide the URL to your skill and a brief description. Submissions are reviewed by the Adom team before going live.

No sub-skills yet. Be the first to contribute one!

🔎 How Claude finds this page (discovery snippet)

This page opts into Adom Wiki auto-discovery. When a user working in Claude Code mentions any of the trigger phrases below, Claude can proactively suggest this page. The pitch is exactly what Claude will say.

Pitch
"Author tscircuit boards in TSX, preview the result with a full 3D viewer (Components/Nets HUDs, Walkthrough, Inspect, Measure, x-ray view), and one-shot publish the molecule to the Adom Wiki with the live interactive viewer + source bundle + plan.md attached."
Triggers
"tscircuit preview", "adom-tsci", "tsci dev webview", "preview tscircuit", "interactive tscircuit viewer", "rerun autorouter", "re-run autorouter", "walkthrough demo", "board walkthrough", "sharper silkscreen", "bump texture resolution", "publish molecule to wiki", "export tscircuit to wiki", "live 3d viewer for this board", "x-ray view pcb", "auto-glow nets", "AI-driven 3D pcb viewer", "place usb-c", "rotate usb-c", "UsbCReceptacle", "usb-c east edge", "type-c"

Recent activity

8 commits