Releases: bubba8587/solenoid
Release list
v1.3
Solenoid 1.3
The biggest release yet: computed columns, a JavaScript Script node, Query, and about forty new analysis nodes. Runs free in your browser at solenoid-ngc.vercel.app; the Windows portable exe is below.
Highlights
- Computed columns. A table column can now be defined, not just typed. Pick Formula on any Frame Input column and write @price * @qty. References work like an Excel table: a bare name is the whole column, @name is this row's cell, so @revenue / SUM(revenue) is a share of total per row. Computed columns can reference each other and take units and number formats like any typed column. Mid-pipeline, the Computed Column node does the same over any frame. The "Computed Columns & @" example canvas tours it.
- Script node. Write a JavaScript function; it runs as a node. The value types itself from what you return: a number, text, [ ] for a list, [[ ]] for a table, [{name: value}, ...] for a frame. Real editor, sandboxed, time-capped. The "Script: worked examples" canvas has Monte Carlo pi, Collatz, a 30-year amortization table, and Friday-the-13ths.
- Query. A Power Query-style transform node: drop a Query, drill in, chain the table verbs, Refresh on demand. Upstream changes only mark it stale, never silently recompute.
- The analytics shelf. The numpy / pandas / scipy / R toolkit as nodes, roughly forty new cards: Forecast (Holt-Winters ETS with confidence intervals), Window (per-group running / rank / lag columns), K-Means, PCA, Logistic Regression, Spectrum (FFT), Smooth, Find Peaks, Decompose, Fit Distribution, Monte Carlo with correlated inputs, ODE Integrate, Text Similarity, Fuzzy Match, Returns (drawdown, CAGR, Sharpe), Describe, Correlation Matrix, Amortization Schedule, and more. The deeper science tools ship as two optional packs (Scientific Computing, Data Science) so the base Add menu stays lean.
- Records & forms. The Record node shows one table row as a card you lay out yourself, with Gallery and Board views over the whole frame. Flip a table popup to Form view and that layout becomes editable: page through rows and enter data in widgets that follow each column's type.
- Node Inspector. Press the (i) and a reference panel docks beside the canvas: what the selected node computes, its Excel equivalence, and every socket described under its real glyph, example tables included.
- Frame hints. Hover any frame input's socket and a miniature example table shows exactly the columns that input expects.
- Dates you can just type. Date Input takes a date in about any format through a real parser; an ambiguous one answers #AMBIGUOUS!, never a silent guess. Opt in to relative dates and next friday or in 3 days resolve on the spot.
Also in 1.3
- The formula surface is whole-Excel now: matrices and the array core (SEQUENCE, TRANSPOSE, MMULT...), LAMBDA as a first-class value you can wire across the graph, complex numbers over a true complex type, and every in-scope Excel name callable.
- Charts: wire a frame in and every column is a named series with a legend; click a legend entry to spotlight one series. Merge Plots overlays several charts on one plot; Proportion (treemap or waffle) and 2-D Histogram join the figures.
- The table popup is a mini spreadsheet: arrow/Tab/Enter movement, sorting ranks the whole dataset, and a summary footer puts a stat picker under every column.
- One card per job: dozens of near-duplicate nodes merged into op-driven cards (one Distribution, one Hypothesis Test, one Series...), and every card renames itself to the op it's set to. Add-menu search finds every op inside them.
- An Excel-accuracy audit pinned the dark corners against real Excel: T-bill day counts, bond pricing, quartile endpoints, half-away-from-zero rounding, the iterative solvers. Nodes and formulas share one kernel per name, so both surfaces answer alike.
- Every formula autocompletes with named arguments, never "N args".
- The Function Reference separates Superseded from Out of scope, filters by category, pack, or source library, and reads properly in light mode. Node packs group into an accordion in Settings.
- The date, text, and complex families are element-wise now: wire a list of dates into EOMONTH like a column.
- A frame verb typed in a formula (FILTER, PIVOT...) redirects you to its node instead of a bare #NAME?.
- Drill into a composite and the full canvas comes with you: lasso, keyboard, Tidy, minimap, touch.
- Heavy tables stopped being copied around: downstream readers pull only the columns they need from a lazy handle.
- A value's unit is first-class: changing a display unit takes a Convert node, because a unit change is a magnitude change.
- Two new palettes (Orchard, Blueprint), and a palette now paints the whole app.
- Tidy takes options: direction, density, and a width cap.
- A crash can no longer black out the app: the failing card degrades to a red box with a copyable message and everything else keeps working.
- The desktop (Polars) engine and the web engine are corpus-tested to agree bit for bit.
- Touch and tablet: stable pinch-zoom, selection lands on release, correct viewports, fullscreen on the zoom pill.
Under the hood
- The canvas is React Flow end-to-end; the old render stack is deleted. Snapshot undo/redo with labeled entries.
- Statistics, distribution, date, and lookup formulas run the nodes' kernels: one implementation per name, parity-pinned.
- New utility nodes: Set Cell, Template, Hash / UUID, Wrap Text, File Link, Save Times, XSTACK, Bind Columns.
- Toolchain: TypeScript 7, Vite 8, React 19.2, plus a full dependency-major sweep.
Full Changelog: v1.0.0...v1.3
v1.2.5
Windows (portable): download solenoid-*-windows-x64.exe below and run it — no installer.
The binary is unsigned, so Windows SmartScreen will warn: click More info → Run anyway.
Full Changelog: v1.2.0...v1.2.5
v1.2.0
Windows (portable): download solenoid-1.2.0-windows-x64.exe below and run it. Unsigned, so SmartScreen warns — More info → Run anyway.
Units
- Real units on values: per-element lists, per-column frames (
Name (unit)headers lock), one-per-matrix, per-cell cubes #UNIT!on mismatch across Arithmetic / Math / Expression / Aggregate / SUMIFS / Get Column / REDUCE·BYROW·BYCOL- FC authors the unit, Convert re-bases;
10 m ÷ 2 m→ 5:1 ratio,m × m→ m²,SUM(5 km, 3)→ 8 km - Trig reads the incoming angle unit (deg / rad / Auto); custom units are opaque dimensions;
$5 ≠ 5€
What-if
- Monte Carlo run mode: ± spread in, mean ± sd + histogram out, seeded
- By-Row run mode; Goal Seek bounds / tolerance / max-iters; Simulation "Stop when" + convergence readout
- Series sparkline on card and in drill-in
- Tornado keeps and marks divergent inputs; fuzzer + Problems panel itemize per-cell errors; "+ Clamp" pre-seeded
Charts & visuals
- Waterfall, Candlestick, Boxplot, Calendar heatmap, Waffle, Contour, Vector Field, 7-Segment
- Surface: orbitable 3-D mesh; Grid Interpolate: bilinear + thin-plate spline with forecast
- INTERPOLATE lookup node; all figures embed live in Reports
Controls
- Point Plotter, Curve (monotone spline), Grid Painter, SVG Picker
- Drag-to-scrub every number field (Shift coarse / Alt fine)
Tables
- Fill Down/Up, Replace Values, Merge Columns, Promote/Demote Headers, Drop Blank Rows
- Head first/last/skip/range; Add Index two-way → coordinate-bordered grid
- Stable sorts (chain for multi-key); Filter is-blank/not-blank; EXPAND null pad
- Table Input keeps blank rows + unparseable text verbatim; MUNIT blank toggle; WORKDAY/NETWORKDAYS holidays
Documents
- Obsidian import (vault note → live typed source) and export (Notes/Reports → markdown + rasterized figures)
documentsocket; Reference data-model chapter; widget nodes (weather, geocode, FX, holidays, TZ, QR)
Formulas & chrome
- Autocomplete arg hints + parameter bar;
IF(x=0,,x)omitted args parse as blank; SCAN/REDUCE bind LAMBDA by name - Add menu no-scrollbar panes + exact-name ranking; Frame socket glyph; Socket Reference hover pills
- Forced scientific past 12 digits / below 1e-4; per-column popup format+unit controls; Color Blend node
Known issues
- Composite drill-in: no grouping / Cleanup / Autofit / Navigator / lasso yet; top toolbar drives the main canvas
- Hairline header/body seam at some zooms (cosmetic); no cable collision avoidance
- Browser Data Feed is CORS-limited (desktop fetches natively); Android status bar won't tint to accent
Full Changelog: v1.1.5...v1.2.0
v1.1.5
Solenoid 1.1.5 is a content and correctness release on top of 1.1.0: a set of domain packs, a new bidirectional Equation node, a redesigned relational/filter family, two new nodes, and a wide sweep of Excel-parity fixes.
Domain packs (Add menu → Packs)
Ten optional packs, all off by default, each bundling the nodes and constants a particular field reaches for:
- Electricity & Circuits, and Electromagnetism (builds on it)
- Fluid Mechanics, and Thermodynamics & Air
- Health & Fitness
- Chemistry Basics, and Earth & Sky
- Geometry (circles, arcs, and 3-D solids)
- Sets & Membership, with its set-relational companions
- Timesavers (formula-preset batch, Reverse Text, Spell Number, Quarter, Days in Month)
Each pack also got an enhancement pass adding the one tool a domain user most reaches for.
Equation node
A new bidirectional node that solves for any unknown and can check an equation for truth. Quadratics return every real root as a list. The finance/TVM rearrangement groups and the Triangle Solver are now Equation presets, and Expression, LAMBDA, Equation, and the Report where-legend all show per-variable explanations.
Relational and filter family redesign
- Filter split into a 1-D List Filter and a frame route, with matching Frame Filter / List Filter / Frame Sort / List Sort naming.
- SUMIFS now takes one frame plus column pickers instead of parallel lists.
- Frame Filter exposes a Dropped output.
- The append family is unified: N-ary, element-agnostic, Excel-style padding, plus TAKE/DROP/EXPAND, VSTACK, and Concat Lists.
- Table Input is now a literal source with a type toggle, and the wildcard socket split into
anyand a newtrueanysupremum.
New nodes
- SCAN, the running-intermediate twin of REDUCE.
- Physics Constant, which carries its unit like a Format Controller lock.
Excel parity and correctness
- SORTBY sorts any-element arrays by a numeric key.
- Combinatorics and MROUND match Excel and the formula path.
- Cast to Number turns a logical into 1/0 instead of #VALUE!.
- QUARTILE.EXC returns #DOMAIN! for an out-of-domain quantile.
- CHOOSEROWS / CHOOSECOLS return #VALUE! for an out-of-range index.
- MINIFS / MAXIFS and the histogram avoid a spread overflow on large inputs.
- Set nodes compare complex numbers by value.
Fixes
- The private-browsing chunk-reload guard now fails safe instead of looping.
- Fixed a React #310 crash when collapsing a Display node.
- Table Input no longer emits a phantom trailing-blank column.
Windows (portable): download solenoid-1.1.5-windows-x64.exe below and run it, no installer.
The binary is unsigned, so Windows SmartScreen will warn: click More info → Run anyway.
Full Changelog: v1.1.0...v1.1.5
v1.1.0
Windows (portable): download solenoid-*-windows-x64.exe below and run it — no installer.
The binary is unsigned, so Windows SmartScreen will warn: click More info → Run anyway.
What's new in 1.1
Composites & what-if
- Composite sub-graph container node
- Goal Seek, Scenarios, Data Table & Simulation run modes on composites
- Composite sub-graphs with an isolated, manual compute chain (Solve button + stale marker)
- Full drill-in editor: minimap, keyboard, right-click, Tidy, copy/paste inside a composite
Nodes & analysis
- Set Operations & Set Relations nodes
- Unified XLOOKUP node: lists, frames & cubes; approximate + as-of match
- As-Of Join (nearest-match on time keys, with tolerance)
- Data Feed node: FRED economic series (no key) & Alpha Vantage stock history; date range, frequency, quick-picks
- Expect, Reconcile & Tornado nodes
- One-click model fuzzer
- Problems panel
- Where-used highlight
- Node-anchored comments
- Cube Rollup node
- Coalesce/Fill is N-ary (extensible Else rows)
- Filter Rows with extensible AND/OR condition rows
- Input Switch: named slots + Many mode (collects into a Cube)
- Date Range picker node
- Session History node
- Write CSV / Write JSON file-sink nodes
Charts & visuals
- Chart ops: Pie, Scatter, Bubble, Radar, Radial, Funnel, Composed
- Treemap, Sankey, Histogram, KPI card & Bullet nodes
- Sparkline node (line / column / win-loss)
- Mermaid diagram node
- Chart accepts a Frame for a labeled x-axis
- Minified (collapsed) previews: Sparkline, Gauge, Slicer & charts
Reports & presentation
- Report node: markdown with live
=nameembeds (numbers, tables, charts, equations, diagrams) - Report docks to the right edge
- Export a Report as a webpage (static HTML)
- Presentation node & Presenter mode
- Image bundling: attached images save to an
images/folder beside the document
Data & engine
- Verb chains compile to one fused Polars query
- Sketch calc mode: sampled execution on huge tables
- Native CSV reader on desktop (with date inference)
- Native Parquet & Arrow source
- Error provenance: every error carries its origin; popups fly to the source
- Connection nodes auto-refresh on an interval
- Headless graph runner (
npm run run-graph)
Canvas & app
- Command Palette (Ctrl+K), with an always-on docked option
- Align & Distribute bar, plus batch collapse/expand
- Mobile design pass: three-zone chrome + touch action bar
- Custom Palette Editor (+ the Equinox palette)
- Document Properties
- Format Controller redesign: one function model, flow-state arrows, advanced tier (separators, accounting negatives, K/M/B)
- Type-default display: values render in their type's format everywhere
- Quick-wire: drop a cable on empty canvas for a filtered Add menu
- Semantic zoom
- Drag-to-scrub number fields
- Universal node body resizer
- Conduit lanes with switchable socket types
- Minimap position setting (bottom / top / hidden)
- Fullscreen: F11 on desktop, a button on mobile
Known issues
- Tidy / Cleanup around expanded groups is wonky — auto-arrange and cleanup can misplace nodes when expanded groups are involved; re-running or nudging recovers.
- Inside a composite drill-in, grouping, Isolate, Cleanup/Autofit, the Navigator and lasso-select aren't available yet (main canvas only), and the top toolbar still drives the main canvas — the keyboard and right-click menu do target the subgraph.
- Node-label edits aren't undoable (on any surface) — Ctrl+Z skips them.
- A hairline seam can show between a node's header and body at some zoom levels (cosmetic).
- Data Feed in the browser is CORS-limited — some providers only work in the desktop app, which fetches natively.
- The Problems panel and model fuzzer only see whole-value errors — a per-cell error inside a list/frame shows in the value, but isn't itemized in the panel.
- Tornado ranking mixes true sensitivity with each input's sweep width (a Slider sweeps its full range, a Number ±10%), and an input that errors at an extreme is dropped from the chart rather than marked.
- The model fuzzer's "+ Clamp" quick-fix inserts an unconfigured Clamp — set the bounds yourself after inserting.
- Set nodes compare complex numbers by identity, so equal complex values from different sources never match.
- No cable collision avoidance yet — cables can overlap each other and nodes in dense graphs.
- In private browsing during a network outage, recovering from a stale deploy can reload-loop (the web app can't persist its retry guard).
- Android: the status bar doesn't tint to the app accent in a normal tab (platform limitation).
Full Changelog: v1.0.0...v1.1.0
Solenoid 1.0.0
Windows (portable): download solenoid-*-windows-x64.exe below and run it — no installer.
The binary is unsigned, so Windows SmartScreen will warn: click More info → Run anyway.
Full Changelog: https://github.com/jortscity/solenoid/commits/v1.0.0