ControlSpace.Rendering.Skia 0.1.0

dotnet add package ControlSpace.Rendering.Skia --version 0.1.0
                    
NuGet\Install-Package ControlSpace.Rendering.Skia -Version 0.1.0
                    
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="ControlSpace.Rendering.Skia" Version="0.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ControlSpace.Rendering.Skia" Version="0.1.0" />
                    
Directory.Packages.props
<PackageReference Include="ControlSpace.Rendering.Skia" />
                    
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 ControlSpace.Rendering.Skia --version 0.1.0
                    
#r "nuget: ControlSpace.Rendering.Skia, 0.1.0"
                    
#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 ControlSpace.Rendering.Skia@0.1.0
                    
#: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=ControlSpace.Rendering.Skia&version=0.1.0
                    
Install as a Cake Addin
#tool nuget:?package=ControlSpace.Rendering.Skia&version=0.1.0
                    
Install as a Cake Tool

ControlSpace

An independent automation-engineering workspace for desktop and browser

Open the Uno application · Workbench guide · Builds and verification

ControlSpace implements a TIA Portal-style engineering workflow using C# / .NET 10, Uno Platform 6.7, and shared Skia rendering. The engineering model, compiler, virtual controller, persistence, rendering, controls and workbench are eight reusable libraries.

Status: 0.1.0 development preview. This is not an exact, feature-complete or qualified replacement for Siemens TIA Portal. All controller execution is simulation. The Pages root serves the compiled Uno WebAssembly application; the independent JavaScript interaction prototype remains under /prototype/.

Project-view workbench

The shared Uno shell has compact menus and toolbars, a hierarchical project tree and details view, central editors, independent right-side task cards, a bottom Properties/Info/Diagnostics inspector, a closable editor bar and a status line. Portal view groups actions by project, device, programming, visualization and diagnostic tasks.

Pane splitters support pointer and keyboard resizing. Maximize/restore preserves the normal window layout. User preferences are saved separately from project files; compact windows use project/task drawers. Project search keeps matching ancestors, and editor sessions preserve SCL drafts/caret positions and LAD zoom/scroll. See behavior, shortcuts and remaining boundaries.

Compiled Uno workbench, captured by the browser workflow

This preview is generated by the compiled Uno browser workflow. JavaScript prototype screenshots are separately labelled in docs/images/.

Editable PLC tag tables

The Uno tag editor now has a compact, virtualized grid with inline editing, rectangular clipboard paste, validation, undo/redo, reference-safe renaming, filtering, sorting, column resizing/reordering, optional monitoring, and add/duplicate/delete commands. See the tag-table guide and compatibility limits.

Program authoring

Create, organize and duplicate LAD/SCL blocks from the project tree or block directory. Edit network titles/comments, contacts, flat parallel branches and typed operands through dialogs, context menus and keyboard commands. Collapsible networks, two-axis scrolling and packaged renderer fonts keep long rungs readable. See the program-editing guide for commands, reuse and model boundaries.

Engineering workflows

Area Implemented scope
PLC tags BOOL, INT, DINT, REAL and TIME; %I, %Q, %M addressing; overlap/value validation, comments and retain metadata
Ladder Series contacts and parallel paths; NO/NC and edges; comparisons; assignment/set/reset coils; TON/TOF/TP, CTU and constant MOVE
SCL subset Typed assignments, IF/THEN/ELSE/END_IF, arithmetic, comparisons, Boolean expressions, comments and a bounded parser; no eval
Virtual PLC Run/stop/reset/single-scan, input image, virtual forcing, scan-order execution, rollback on faults and bounded trace history
Hardware editor Generic controller, panel and remote-I/O views; editable addresses, modules and topology metadata; no hardware transport
HMI Labels, lamps, buttons, numeric displays, tanks and gauges; per-screen navigation, tag bindings, dragging and virtual-input buttons
Persistence Versioned ControlSpace JSON, duplicate-key rejection, import limits, CSV tag interchange, draft recovery and an atomic-save helper
Transactions Validation before commit, undo/redo, compilation invalidation and token-aware symbol renaming

The capability matrix distinguishes supported subsets from unimplemented areas. FBD/STL/GRAPH, full SCL, native Siemens project files, PLC code generation, S7/PROFINET communication, WinCC compatibility, safety, drives, motion and enterprise services remain unsupported.

Download

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

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

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

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

Reusable libraries

Library Responsibility
ControlSpace.Core Typed model, validation and detached snapshots
ControlSpace.Languages Bounded SCL parser, LAD compiler and typed intermediate representation
ControlSpace.Simulation Deterministic virtual scans, inputs, forcing and trace
ControlSpace.Storage JSON, CSV and atomic filesystem persistence
ControlSpace.Engineering Editing transactions, references, WorkbenchLayout and EditorSession
ControlSpace.Rendering.Skia Shared vector drawing and hit regions
ControlSpace.Controls.Uno Canvas, table, project tree, theme, pane chrome, splitters and editor bar
ControlSpace.Workbench.Uno Composable workbench, IProjectFiles and optional IWorkbenchPreferences

ControlSpace.App supplies entry points and platform storage/file pickers. The first six libraries do not depend on the app shell. The two Uno libraries (desktop and browser targets) can be consumed by another Uno host. Version tags publish all eight packages, with symbols, to NuGet.org; the JavaScript prototype is not published to npm.

using ControlSpace.Core;
using ControlSpace.Languages;
using ControlSpace.Simulation;

var compilation = ProjectCompiler.Compile(DemoProject.Create());
if (!compilation.Success)
    throw new InvalidOperationException(string.Join("\n", compilation.Diagnostics));

var plc = new VirtualPlc(compilation.Program!);
plc.SetInput("Start_PB", 1);
plc.Run();
plc.Step(TimeSpan.FromMilliseconds(100));
Console.WriteLine(plc.Read("Motor_Run")); // 1 in the sample simulation
plc.Stop();

Build and test

Use .NET 10 and the native platform prerequisites required by Uno. global.json selects Uno.Sdk 6.7.30, with SkiaSharp 3.119.2 matched to its graphics integration. This is a compatible host-rendering choice, not a universal fastest-backend claim.

# Platform-neutral engines and workbench state.
dotnet run --project tests/ControlSpace.Tests -c Release -- --fixtures tests/fixtures
dotnet run --project tests/ControlSpace.Workbench.Tests -c Release

# Desktop: Windows, Linux or macOS.
dotnet run --project src/ControlSpace.App -c Release \
  -f net10.0-desktop -p:ControlSpaceTargetFrameworks=net10.0-desktop

# Browser, including the GitHub Pages subpath.
dotnet workload install wasm-tools
dotnet publish src/ControlSpace.App -c Release -f net10.0-browserwasm \
  -p:ControlSpaceTargetFrameworks=net10.0-browserwasm \
  -p:WasmShellWebAppBasePath=/ControlSpace/ -o artifacts/browser
python3 tools/prepare-pages.py artifacts/browser artifacts/site

# Independent JavaScript prototype.
npm test
python3 tools/bundle-prototype.py

The Pages workflow executes pointer/keyboard scenarios against the actual compiled Uno app, captures workspace/Portal/compact screenshots and checks deployed source identity. The read-only test probe requires ?verify=1 and is disabled on ordinary visits. See verification scope and evidence.

Workflow Purpose
build.yml C# engine/workbench and JavaScript tests; Windows/Linux/macOS compile matrix; prototype browser tests; portable packages
pages.yml Uno WASM publish, real UI workflows, Uno packages, screenshots, Pages deployment and live-commit verification
release.yml Self-contained single-file desktop apps (Windows/macOS/Linux, x64 and arm64), browser/source archives, eight NuGet libraries with symbols and a SHA-256 manifest; tags create a GitHub Release and publish packages to NuGet.org via Trusted Publishing from the protected nuget environment, manual runs are dry runs that only upload workflow artifacts

PR builds cannot deploy Pages. No release tag is created by ordinary builds. Deployment instructions cover the pipeline.

Rendering and performance

The Uno editor draws into the host canvas through SKCanvasElement, avoiding a separate application-owned CPU bitmap upload path. Actual GPU acceleration depends on the host configuration; there is no independent direct WebGPU backend in the C# renderer. The separate prototype uses WebGPU geometry when available and Canvas 2D text/fallback.

The renderer culls offscreen LAD networks and retains drawing resources. Parser, undo and trace storage are bounded. Project-tree reconstruction is skipped when the project snapshot is unchanged; layout writes are debounced. None of these mechanisms establishes physical-GPU performance, hard-real-time timing or production-scale qualification.

Safety and licensing

Simulation only. Never use ControlSpace to operate or commission real machinery. There is no controller transport, certified safety function, hard-real-time scheduler or manufacturer qualification. The sample Stop_PB is a simulated process input, not an emergency stop.

ControlSpace is an original independent implementation, not affiliated with Siemens. TIA Portal is the workflow reference. No Siemens logos, databases, firmware, device catalogs or proprietary assets are distributed. Full/pixel-exact UI compatibility remains an objective, not a completed claim.

MIT license · Dependency notices · Contributing · Security boundaries

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on ControlSpace.Rendering.Skia:

Package Downloads
ControlSpace.Controls.Uno

ControlSpace Uno Platform controls: Skia engineering canvas, virtualized tag table, project tree, theme, pane chrome, splitters and editor bar.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0 30 9/29/2026