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