Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/facett

.nornir/roadmap-unsorted.md

facett roadmap — incoming components, guest wrappers, the rest

What's queued, grouped. Phase rule still holds: copy + fix in facett; cut the source over only for knut (quiescent), copy-only for nornir/znippy/osm.

Done (the uniformity + look pass)

The component-uniformity design set is now built:

Remaining

Components to bring in

Source Component Notes
nornir src/viz/callgraph.rs 3D CallGraph ✅ DONE — the port landed and this row was still queuing it on 2026-08-27. It is facett-graph3d, a workspace member (7 299 lines across 9 modules), and CallGraphLayout (callgraph_layouts.rs:38) carries all 7 layouts the row asked for, by name: Force, ClusterZ (Louvain communities → z-shells), Topo, Spectral, Mds, Centrality (hubs front), Helix. Consumed, not shelved — facett-demo's demo_codevault/demo_systemmap/vg_lab_tab mount facett_graph3d::{CodeVault, SystemMap, Graph3D} as Facets. The old text is kept below the line so the ask that produced it is still readable: "Big port → a facett-graph3d (or facett-callgraph) component. Copy-only."
nornir src/viz/funnel_tab.rs snarl funnel DAG uses egui-snarl (interactive node editor). Either wrap egui-snarl (guest) or port. Copy-only.
nornir src/viz/graph.rs dep-graph ✓ already copied → DepGraphView (incl. the drill-down; my copy is current).

Guest wrappers (use best-in-class egui crates where we don't have our own)

Policy: thin Facet wrappers around good egui crates, added to the MEGA matrix. Candidates:

Crate Wrap as For
egui_xyflow 0.4.3 facett-flow a React-Flow-style interactive node/flow editor. Blocked: it's on egui 0.31; facett is on 0.34 (chosen to match osm-viewer/wgpu). The wrapper is written + works except the egui-version mismatch (two egui trees → Ui/Pos2 don't unify). Wait for an egui_xyflow 0.34 release, then re-add.
egui_extras::TableBuilder upgrade facett-table ✓ done — facett-table is now virtualized (only visible rows built), so a million-row Arrow batch scrolls at 60 fps. The "Arrow data, perfect for scrolling" ask.
egui_plot facett-plot ✅ DONE — shipped, and this row was still listing it as a candidate on 2026-08-27. facett-plot is a workspace member (src/lib.rs, 613 lines) and is consumed by facett-warehousedeck, facett-plotters, facett-demo, facet-wrapped/src/tabular.rs and facett's own surface tests — i.e. the warehouse bar-charts this row was written for are drawn through it.
egui-snarl facett-flow alt node editor (also nornir's funnel)

The egui bump — ✓ done (facett on 0.35, not 0.34)

facett's workspace egui / eframe / egui_extras went to 0.34 in 8c79c20 (Rounding→CornerRadius, rect_stroke StrokeKind), which unblocked the virtualized table and egui_plot. Corrected 2026-08-27: the workspace pin is now egui = "0.35" (Cargo.toml:25). Every "facett is on 0.34" above and below is one bump behind; they are left standing because the xyflow argument they make does not change — an 0.31 crate does not unify with 0.34 or with 0.35.

The two things the bump was for:

The historical decision was to do the bump as one bundled, GUI-verified pass (bump → xyflow → wgpu); the bump and the wgpu halves are done, xyflow remains.

Plan (mechanical):

  1. ✓ Bump workspace egui/eframe/egui_extras → 0.34 (8c79c20), and since to 0.35. (knut's egui-snarl → 0.9 follows when knut is touched.)
  2. ✓ Fix the breakage: Rounding → CornerRadius, rect_stroke StrokeKind. The headless matrix is the regression net — green matrix + sane vertex counts = components still render.
  3. Add facett-flow wrapping egui_xyflow 0.4.3; add to the matrix. (waiting on an xyflow release on facett's egui — the one step here still open)
  4. ✓ Land the wgpu kernel — done, facett-core/src/render/gpu/; see above.
  5. ✓ The GUIs render on a machine with a GPU (oden, RTX 4090).

Arrow data viewer (scrolling)

facett-table → virtualized via egui_extras::TableBuilder (only visible rows built) + a facett-arrow adapter RecordBatch → rows, so a million-row Arrow batch scrolls at 60 fps. Pairs with facett-osm (already streams 6.3M pts/s).

Audio (future 🔊)

A facett-audio lane — sonify the data (ingest progress ticks, alert tones on a failed pipeline stage, a sweep as the map loads). Likely cpal/rodio behind a Facet-adjacent trait (fn audio(&self) -> AudioCue). Sketch only; revisit after the visual layers settle.

Themable + striking palettes ✓

Done — Theme + seven palettes (default/sci_fi/nordic_aurora/ cyberpunk_neon/amber_crt/deep_space/hugin_noir), the glow field, and the Theme::ALL/names/by_name enumeration; every component reads theme(ui); korp defaults to sci-fi (ce91f1f). The CPU effects (glow/raven/shimmer) ship glow-backend-only. Next: wire the theme picker + effects into FacetDeck (fx-deck-integration above), and true HDR bloom once wgpu lands (theming.md, effects.md).