Skip to content

Releases: halapenyoharry/exoskeleton

Exoskeleton v2.0.0-beta — Dockview 8, the document edge, and a web build

Choose a tag to compare

@halapenyoharry halapenyoharry released this 22 Oct 15:49
d7708e4

Exoskeleton v2.0.0-beta — Dockview 8, the document edge, and a web build

Since v1.0.0 (2026-07-29) the app went from a desktop-only Tauri workspace to a web-first one that also builds for Tauri: it ships to exo-skeleton.org as a PWA, works on a phone, and keeps the desktop grid intact. The JSON document moved out of the grid into a left edge group that also holds Settings and the menu, and every panel's controls are now rendered with Dockview primitives (Paneview panes, a nested Dockview for control tabs, header actions) instead of custom chrome. Seven panels were added: text-viewer, topology-extract, json-graph3d-inspect, json-attention, and the five-panel procedural-visuals suite (control, manifold, balls, fountain, recursive). A bundled library of twelve graph documents, including two books, ships with the app. Dockview was upgraded from 6.0.5 to 8.6.0 and the package version now reads 2.0.0-beta (it was still 0.1.0 under the v1.0.0 tag).

Highlights

  • Dockview 6.0.5 → 8.6.0; React bindings move to dockview-react; GitHub Dark via the theme prop (e5f997f).
  • The JSON document is a left edge group, not a grid panel: document-edge, ⌘J, collapses to a vertical strip (7730801); the same edge group now holds Settings and the menu as tabs, opened with ⌘B / ⊞ (c7bb4ef).
  • All custom pane chrome (capsule tab, pull-down drawer, slim toolbar row) removed; declared controls render as a Paneview inside a Splitview, with a "Controls" pane whose body is a nested locked Dockview, one tab per declared control set (b163c14, 6933037).
  • Web-first runtime: web storage parity with exo-skeleton.org, PWA manifest, icons and service worker, npm run ship:web plus a GitHub Action deploying to exo-skeleton.org (d5db440, 16b1069).
  • Phone layout (≤600px, web): grid by default with tap-to-maximize, an opt-in deck mode (one panel full screen, panels as a scrollable tab row), two layouts per workspace reconciled on width change, back gesture absorbed (33987d7, 02d5660).
  • New panels: text-viewer (f40113e), topology-extract (1c68831), procedural-visuals suite (b91ec7a), json-graph3d-inspect (694ff7f), json-attention (7f2abda).
  • The two in-process buses are unified: json-bus is now OSC + a retainer, with typed channels (selection, focus, active-doc, connected) and the document as the only exception (0d63925).
  • Bundled graph library: ten fixture documents (5783be1) plus two books from the information2topology pipeline (69aa086, 3bea1a4) and the Exoskeleton system map as a TopoDocument (0dcae49).

Panels

New panels

  • text-viewer — read-only document flow for the loaded graph with Markdown rendering (react-markdown), two-way selection sync with the 2D/3D graph panels (f40113e). Follows the active document (4f0fe88).
  • topology-extract — entry point of the i2t funnel: sends text to a model (OpenRouter wired; Ollama and iterative extraction added later) and pushes the resulting TopoDocument onto the bus; editable system prompt persisted in panel params (1c68831, 27f4276, f0d703f). Schema v9.
  • procedural-visuals suite — five OSC-driven panels: procedural-visuals-control (Eurorack-style controls), procedural-visuals-manifold (3D surfaces with GLSL shaders), -balls, -fountain, -recursive; SuiteManifest engine for multi-panel suites; procedural-lab preset (b91ec7a). Schema v10. The manifold panel was rebuilt without its iframe and CDN imports, renamed from topological, and its emoji glyphs replaced (78cec9c).
  • json-graph3d-inspect ("3D-Inspect") — a copy of json-graph3d built for reading: text-sprite nodes, colors per i2t category, transparent containment hulls, degree-driven size, inline edge labels (694ff7f). Round two: along-edge labels, predicate labels on relation nodes, hub size exaggeration, legend off by default, hulls refit from a rAF loop so they no longer vanish on zoom (9a47acf). Schema v11.
  • json-attention — Rapier 2D rigid-body field over the loaded graph: mass from incident edge weight, an attention token walking edges and making the paths it takes heavier; canvas renderer with pan/zoom/drag; selection and focus synced over the bus (7f2abda; merged 33d8ae2).

Changed panels

  • json-edit — Library submenu with the bundled documents (9feaf85); the ≡ menu is the first cell of its "Document" control set (db02db3); document name shown as a text cell / chip (02d5660, c7bb4ef); republishes restored text on load (426e307); republishes the system map when the bus is empty under JSON Lab (02d5660).
  • editor — open/save/save as as a declared control set ("File" pane); status line moved into the content (c834e31, c7bb4ef).
  • json-graph3d — root-cause fix for empty "always" labels: TopoThink spokes carry role, not label (694ff7f).
  • json-graph3d-inspect and json-dyadic — edge-as-node rows are treated as relations for category, color and containment (ddb51be).
  • json-dyadic — defaults to the first layer; layer select moved into declared controls (4f0fe88, 045b3e9).
  • json-tree, json-mass, text-viewer — follow the active document; json-tree fits to view (4f0fe88, 02d5660).
  • json-graph, json-cytoscape, json-tree, json-circles, json-mass, json-graph3d(-inspect) — fit/reset actions and parameter controls declared as panes (6afbdf1, c834e31).
  • menu (⊞) — was a floating group (de549c1); now a tab in the left edge group titled "Exo-skeleton" (c7bb4ef, 536e102).
  • settings — scrim sliders removed with the chrome they controlled (9755088); now a left edge tab (c7bb4ef).
  • blank — the group "+" header action adds a blank picker panel that replaces itself in place; Alt-click keeps the old clone (9feaf85).
  • status-bar — compact on phones; hidden in deck mode and restored with the grid (4f0fe88, ab242b5).

Layout and chrome

  • Dockview 8.6.0 (e5f997f): dockview is a core re-export, React components come from dockview-react; onDidActivePanelChange now yields {panel, origin}; floating and popout entries may carry grid instead of data, tolerated in deck, document-edge and transient-strip code.
  • Tabs are Dockview's default tab with accent and glyph; the capsule tab, pull-down controls, slim toolbar row, pane-chrome state and scrim settings are gone (b163c14, 9755088).
  • Controls as Paneview/nested Dockview: declared controls render as a vertical Splitview whose top cell is a Paneview holding a title pane (edge panels) and a "Controls" pane; the Controls body is a nested locked Dockview (no dnd, no floating) with one tab per declared control set plus a "Pane" tab (window / move / follow / accent / about); tab-group chips when a declaration asks for one (none does yet); active tab and fold state persist in params (6933037, 7b83f6f, d4ab97c). Snapping the top cell away on the sash shows a ▤ "Show controls" button in the left header-actions slot (6933037).
  • Document edge group (document-edge, left): holds json-edit; ⌘J, ⊞ → Document, or clicking the collapsed strip toggles it; size and collapsed state persist per grid and deck (7730801). Header is always Dockview's left vertical tab strip, read bottom-to-top, which also fixed the group shrinking to nothing on collapse under 8.x (d4ab97c, 0e411d4, d519236). Tab title follows the document via api.setTitle (ae7e708).
  • Settings and menu as edge tabs: the left edge group holds JSON Edit, Settings and Exo-skeleton (menu); ⌘B and ⊞ toggle them; the right edge, the floating ⊞ button and the floating menu group are removed (c7bb4ef, 205adaa, 536e102, 68f83fd).
  • Header actions: the ≡ menu and pane action buttons render in Dockview's left header-actions slot; the separate header-actions declaration machinery was removed in favour of panes (c7bb4ef).
  • Stacking: every panel is its own stacking context (isolation: isolate) so panel-internal z-index can never cover the tab row (4d00479).
  • useElementSize re-measures hidden-at-mount and late-mounted targets, which fixed viewers that never drew (c31cf93, 9feaf85).
  • Intermediate chrome iterations between 2026-10-10 and 2026-10-13 (pill tabs a0aa378, drawer and strip registry 4394ad2, menu/toolbar/control-panel kinds e295a05, select cell 045b3e9) were superseded by the Dockview-primitive rewrite above; their declarations survive as manifest.panes.

Web and mobile

  • Web-first pivot (8fb55b7, d5db440): web storage key exoskeleton_web_state_v8_1 for parity with exo-skeleton.org; blank web default and web presets; VITE_WEB_DEFAULT_PRESET picks the first-run preset per deploy (91b4a0d).
  • PWA: public/manifest.webmanifest, icons, hand-written sw.js, safe-area padding (d5db440).
  • Ship: npm run ship:web (wrangler pages deploy) and .github/workflows/ship-web.yml; public/_headers (16b1069). GitHub Pages landing page with Actions deploy and .nojekyll (6ffd4dd, 0a9ed7a). README points to exo-skeleton.org (d9ecc55).
  • Phone grid (≤600px): grid by default, tap the active tab to maximize and again to restore, pop-out hidden, narrow JSON Lab arrangement (json-edit on top, viewers two per row) (02d5660).
  • Deck mode (opt-in via ⊞): one panel full screen, all panels as a 44px scrollable tab row; layout and mobileLayout per workspace reconciled on width change (src/persistence/deck.ts); back gesture closes menus and open controls first, then returns to the previous panel (33987d7, ab242b5).
  • Document sheet on phones: the document edge is a full-width sheet over the grid, collapsed to a 44px strip, closed first by the back gesture (7730801).
  • Watermark: scrollable on phones, single-column presets, 44px targets (67ea996, 7d1cc60, fa659c1).
  • Browser-safe file I/O (src/utils/file-io.ts) so open/save work outside Tauri (f0d703f).

Library and content

  • Graph library: ten fixture documents under src/fixtures/graphs/ (deep-hierarchy, dense-mesh, karate-club, les-miserables, messy, package-deps, repo-file-tree, star-hub, stat...
Read more

Exoskeleton v1.0.0 — First Public Release

Choose a tag to compare

@halapenyoharry halapenyoharry released this 29 Jul 21:02

Exoskeleton v1.0.0

A cross-platform desktop workspace built on Tauri 2 and Dockview — structure you operate inside while you work. Not a tool you switch to; a chassis your tools live in.

What is Exoskeleton?

Exoskeleton runs several graph layouts of the same data source at once — 2D force, Cytoscape/fCose, 3D force — and keeps them synchronized by identity rather than position. Hover a node in one panel and the same node lights up in the others. Click it and each panel flies its own camera to that node, preserving its own coordinate space.

What's in this release

Sixteen built-in panels organized into a dockable workspace grid:

  • Editor — Markdown text editor with native file save/open
  • Terminal — Real-shell PTY terminal (xterm.js + tauri-plugin-pty) with shell auto-resolution
  • Web Viewport — In-app browser for LAN services and docs
  • JSON Suite — CodeMirror 6 JSON editor feeding seven visualizers (Tree, Circles, Mass, Cytoscape, 2D Graph, 3D Graph, Dyadic) over an in-process json-bus
  • AV Suite — Tempo clock, piano synthesizer, real-time oscilloscope
  • Settings & Status Bar — Raw JSON state inspector/editor

Workspace management (Schema v8):

  • Create, rename, delete, switch between named workspaces
  • Export/import standalone .exo.json workspace documents
  • Open independent workspaces in separate OS windows
  • Four layout presets: Minimal, JSON Lab, AV Lab, Everything

Quality:

  • 40/40 tests passing
  • Fault-tolerant panel error boundaries
  • Debounced persistence with auto-save on close
  • CSP-compliant — no CDN fetches, no telemetry, fully offline

Platforms

  • macOS (Apple Silicon) — .dmg
  • Linux — .AppImage, .deb

macOS note: Not code-signed yet. Clear quarantine after install:

xattr -dr com.apple.quarantine /Applications/Exoskeleton.app

Stack

Tauri 2 (Rust) · React 19 · TypeScript · Dockview 6 · CodeMirror 6 · xterm.js v6 · Three.js (3D force graph)

License

GNU AGPL-3.0-or-later