LabSpace.Workbench 0.3.0-alpha.1

This is a prerelease version of LabSpace.Workbench.
dotnet add package LabSpace.Workbench --version 0.3.0-alpha.1
                    
NuGet\Install-Package LabSpace.Workbench -Version 0.3.0-alpha.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="LabSpace.Workbench" Version="0.3.0-alpha.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="LabSpace.Workbench" Version="0.3.0-alpha.1" />
                    
Directory.Packages.props
<PackageReference Include="LabSpace.Workbench" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add LabSpace.Workbench --version 0.3.0-alpha.1
                    
#r "nuget: LabSpace.Workbench, 0.3.0-alpha.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package LabSpace.Workbench@0.3.0-alpha.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=LabSpace.Workbench&version=0.3.0-alpha.1&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=LabSpace.Workbench&version=0.3.0-alpha.1&prerelease
                    
Install as a Cake Tool

<div align="center">

LabSpace

A graphical instrumentation studio for desktop and the browser.

Build front panels, connect typed block diagrams, inspect live values and run simulated signal-processing programs in a shared Uno Platform application.

Open the studio · User guide · Typed structures · Architecture · Compatibility

Build Engine tests License: MIT

</div>

LabSpace front panel

0.3 — Structured programs and cross-VI debugging

0.3.0-alpha.1 adds executable numeric/string/Boolean/error Case Structures, ordered sequence frames and typed sequence locals, a compiled scalar Formula Node, error-cluster and complex-number controls and functions. Staged editors validate changes before Apply, named terminals support right-click creation and branching, and nested debugging includes step-out. Structure frame selectors, actual-body previews and resize handles are shared by the desktop and browser editors.

Open Case Dispatch.vi: the command run selects a frame producing 42. Open Sequence Pipeline.vi: an earlier frame writes 21, a later formula computes 84. Errors and Complex.vi displays a real typed error cluster and computes the magnitude of 3 + 4i as 5. Edit their case labels, formula, error code/source or real/imaginary components to change actual results. These are executable diagrams, not animations.

Formula Control Flow.vi evaluates a bounded for loop with continue into separately wired results 84 and 9. Open View → Debug window to inspect its probe, switch to another VI and use Locate to return. Debugging flags and probe/breakpoint overrides are session state: toggling them does not dirty source or create Undo records.

Cross-VI Debug window

Debugger guide · Advanced structures guide · Typed loops and registers · Compatibility ledger

Sequence with executable frames

LabSpace is a working independent implementation inspired by the classic NI LabVIEW workflow. It is not yet a complete, pixel-identical or binary-compatible LabVIEW replacement. NI VIs, the entire G language, instrument drivers and real-time/FPGA targets are not implemented. The compatibility ledger records exact supported behavior and remaining boundaries. No NI source code, proprietary artwork, drivers or runtime are included.

Explore the application

Area Working functionality
Studio Project explorer, VI tabs, paired Front Panel / Block Diagram editors, split view, searchable palettes, context help, properties, errors and keyboard commands
Front panel Numeric controls, knobs, sliders, gauges, switches, LEDs, strings, numeric arrays, waveform graphs/charts, error-cluster and complex controls/indicators, cursors, positioning and resizing
Diagram Typed named terminals, single-driver input wiring, output fan-out, drag/marquee selection, pan/zoom, duplication, deletion, probes and undo/redo
Structures Multi-case dispatch, sequential frames/locals, For/While/Boolean Case/embedded SubVI contracts; typed ordinary tunnels; numeric input/output indexing; conditional collection; array concatenation; stacked register state
Execution Cached topological plans, explicit feedback, cooperative nested activations, shared budgets, run/continuous/pause/abort, step-over/step-into and nested breakpoints, scoped cross-VI probes and session-only debug options
Functions Arithmetic/transcendentals, Boolean logic, typed Select, Unicode string transforms, numeric array transforms, waveform construction, simulated signals, filtering, RMS, peak-to-peak FFT, compiled scalar formulas, errors and complex arithmetic
Documents Version-3 JSON, version-1/2 migration, source-generated serialization, bounded imports/history, waveform CSV, browser IndexedDB and native recovery

Eight executable examples are included: Signal Analysis.vi, Arithmetic.vi, Stateful Loop.vi, Indexed Accumulator.vi, Case Dispatch.vi, Sequence Pipeline.vi, Errors and Complex.vi, and Formula Control Flow.vi. The plots and indicators display results from their real dataflow graphs, not decorative sample animation. Acquisition is explicitly simulated.

Press Ctrl+Space, search for a function/control, press Enter, then click to place it. Escape cancels without editing. Right-click a canvas for the corresponding context palette. Ctrl+E switches editors; Ctrl+R runs; F6 runs continuously; F10/F11 step over/into; Ctrl+F11 steps out. Canvas undo and clipboard commands do not replace text-field editing behavior.

Rendering and performance

Both editors render with SkiaSharp through Uno's SKCanvasElement. The browser is a real C#/Uno WebAssembly application, not an HTML imitation of the interface. Browser and native desktop hosts share the model, engines, rendering code and workbench.

Rendering uses retained drawing resources, visible-area culling, cached wire paths, cached SKPicture structure previews and extrema-preserving waveform decimation. Immutable connector contracts are resolved through a weak identity cache. Graphs compile only when needed; pointer geometry edits do not repeatedly compile the dataflow graph.

The workbench targets a 40 ms execution timer and yields nested work after 4,096 transitions or roughly 8 ms checked after the first 16 transitions. Individual kernels still run to completion. Hardware acceleration/fallback depends on the Uno host. DSP/dataflow run in managed C#, not WebGPU compute, and these scheduling limits are not hard-real-time guarantees.

Run tools/LabSpace.Benchmarks for reproducible engine/FFT timing and allocation measurements. These are managed-engine measurements, not GPU or UI frame times. See architecture and performance.

Download

Every release ships a self-contained, single-file desktop app — no .NET install needed:

OS x64 Arm64
Windows LabSpace-<version>-win-x64.zip LabSpace-<version>-win-arm64.zip
macOS LabSpace-<version>-osx-x64.tar.gz LabSpace-<version>-osx-arm64.tar.gz
Linux LabSpace-<version>-linux-x64.tar.gz LabSpace-<version>-linux-arm64.tar.gz

Extract and run LabSpace (LabSpace.exe on Windows). Builds are not code-signed yet: on macOS clear the quarantine flag with xattr -d com.apple.quarantine LabSpace; on Windows choose More info → Run anyway in SmartScreen. Verify downloads against SHA256SUMS. Releases also include the browser distribution and engine benchmarks.

The libraries below are published to NuGet.org, e.g. dotnet add package LabSpace.Core.

Reusable libraries

Package Responsibility
LabSpace.Core Models, immutable typed values, node catalog, named terminals and immutable structure contracts
LabSpace.Signals Signal generation, transformations, filtering, stable RMS and FFT
LabSpace.Dataflow Graph validation/compilation, bounded formula bytecode, named-output execution, nested activations, register/feedback state and budgets
LabSpace.Documents Versioned source-generated JSON, validation/migration and executable examples
LabSpace.Editing UI-independent editing, transactions, history, wiring, connector synchronization and debugging session
LabSpace.Skia Instrument/diagram rendering, geometry, cached previews, icons and plot decimation
LabSpace.Storage Host-neutral storage contract and protected recovery behavior
LabSpace.Controls Uno canvases, chrome, palette, Quick Drop, staged editors, cross-VI Debug window and property inspector
LabSpace.Workbench Complete reusable studio, commands, navigation, execution and recovery scheduling

All nine libraries are published to NuGet.org with symbols. The host application and tests are not library packages.

Use the engine independently

using LabSpace.Dataflow;
using LabSpace.Documents;

var vi = StructuredExamples.IndexedAccumulator();
var loop = vi.Diagram.Nodes.Single(node => node.Kind == "for");
var graph = GraphCompiler.Compile(vi.Diagram);
var runtime = new DataflowRuntime();

using var cancellation = new CancellationTokenSource();
var frame = runtime.Run(graph, cancellation.Token, maximumNodes: 100_000);
Console.WriteLine(frame.GetOutput(loop.Id, "state").Number); // 15
Console.WriteLine(string.Join(", ", frame.GetOutput(loop.Id, "totals").Samples));
// 1, 3, 6, 10, 15

InstrumentWorkbench(session, storage, fonts) embeds the entire studio in another Uno application. Individual controls and engines are separately reusable. See typed structures for contract definitions and resumable execution.

Build and run

Pinned toolchain: .NET SDK 10.0.401, Uno SDK 6.7.30 / WinUI 6.7.135, and SkiaSharp 3.119.4 with matching managed/native assets. The selected Skia release is Uno-compatible; do not independently upgrade only its managed assembly.

git clone https://github.com/wieslawsoltes/LabSpace.git
cd LabSpace
dotnet workload install wasm-tools --skip-manifest-update
python3 scripts/fetch-assets.py
dotnet test tests/LabSpace.Tests -c Release

The asset script retrieves content-pinned OFL assets and checks their hashes. No proprietary platform fonts are required.

# Windows, Linux or macOS native desktop host
dotnet run --project src/LabSpace.App -f net10.0-desktop \
  -p:LabSpaceDesktopOnly=true

# Browser distribution with the GitHub Pages project base path
dotnet publish src/LabSpace.App -f net10.0-browserwasm -c Release \
  -o artifacts/publish -p:WasmShellWebAppBasePath=/LabSpace/
python3 scripts/check-native-abi.py
python3 scripts/collect-site.py artifacts/publish artifacts/site
python3 scripts/serve-site.py --directory artifacts/site --port 4173

Open http://localhost:4173/LabSpace/. In another terminal, run the real-pointer acceptance suite:

npm install --ignore-scripts
npx playwright install chromium
npm run test:browser

See development for dependencies, packaging, base paths, opt-in test diagnostics and deployment provenance.

Quality and releases

GitHub Actions runs engine tests, three-OS desktop builds, a real Uno browser publish, keyboard/pointer acceptance, screenshot capture, and Pages deployment with a source-commit check. The same browser workflows run against the public deployment. Browser tests inspect read-only diagnostics but edit the application using real input; they do not call private model-mutating test functions.

The release workflow runs for v* tags, matching main-branch changes or a supplied manual version. It runs storage and engine tests, publishes self-contained single-file desktop executables for Windows, macOS and Linux (x64 and arm64), packs all nine versioned libraries with symbols, audits resolved Skia versions, publishes a browser distribution, records engine benchmarks and emits SHA256SUMS. Tags attach all assets to a GitHub Release (prerelease for - versions) and publish the packages to NuGet.org with Trusted Publishing (OIDC, no stored API key) from the protected nuget environment. Other runs are dry runs: they build and upload every asset as workflow artifacts but publish nothing. Code-signed desktop installers and physical hardware/GPU certification are not included.

Files, safety and licensing

Save projects as .labspace.json. Version-1 and version-2 files migrate to version 3. Earlier LabSpace releases cannot read version-3 files; retain original copies when migrating. NI .vi, .ctl and .lvproj files are not imported. Local recovery is not a substitute for explicit saved copies. Imported JSON does not evaluate script or install drivers.

The application is intended for experimentation, education and component development. It is not validated for safety-critical equipment or physical/hard-real-time control.

MIT license · Third-party notices · Contributing · Security · Changelog

Product Compatible and additional computed target framework versions.
.NET net10.0-browserwasm1.0 is compatible.  net10.0-desktop1.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.3.0-alpha.1 0 9/29/2026