PortalX.Forms 0.1.0

PortalX

A cross-platform UI framework painted with Skia — a love letter to everyone who misses WinForms but knows it is no longer supported and not cross-platform.

PortalX.Forms gives you WinForms' development model — Control, Form, Application.Run, event-driven, code-first — on a rendering stack that runs anywhere Skia does. It is deliberately not a WinForms clone: it advances the paradigm with things WinForms never had, including theming, control repeaters, and a considerably larger set of built-in controls.

Status: early. The window opens, the paint pipeline runs, and the background renders. Almost everything else is an unimplemented API skeleton. See Roadmap.


Goals

The goals are staged, and which stage you are in drives almost every decision in the repo.

Horizon Goal
Near-term WinForms-like development paradigms. Familiar shapes, familiar event model, no designer required. Divergence from the real WinForms API is allowed and sometimes correct.
Long-term Direct portability — bring a WinForms application over largely as-is.

A practical consequence: the generated API surface is a reference for shape, not a contract to satisfy. Matching .NET signature-for-signature is not today's goal. See Decisions.

Build and run

dotnet build PortalX.slnx
dotnet run --project PortalX/PortalX.csproj

Requires the .NET 10 SDK. PortalX/ is a live smoke-test app — a MainForm : Form and an Application.Run. It opens a real window and paints Form.BackColor.

Layout

PortalX.slnx
PortalX/            smoke-test app (MainForm : Form, Application.Run)
PortalX.Drawing/    System.Drawing's shape, implemented over Skia
PortalX.Forms/      WinForms' shape; references PortalX.Drawing
  Platform/         the single seam to a windowing system (SDL3 today)
docs/               architecture, decisions, roadmap, skeleton workflow
tools/              strip_members.py

PortalX.Forms depends on PortalX.Drawing. Nothing depends on PortalX.

Documentation

Document What's in it
docs/ARCHITECTURE.md Layering, the platform seam, the paint pipeline, namespaces, what the framework already gives us for free
docs/DECISIONS.md Every architectural decision with its rationale and its cost
docs/SKELETONS.md The generated-skeleton workflow, the generator's known defects, and how to implement without losing work to a regeneration
docs/ROADMAP.md What works, what's next, and the known gaps behind each
CLAUDE.md Operational guidance for Claude Code sessions

History

PortalX began in C++ with Mono embedded for the scripting layer. It moved to C# end to end to serve the goals above. Any lingering reference to Mono in older material describes the abandoned C++ architecture, not a current runtime choice.

No packages depend on PortalX.Forms.

Version Downloads Last updated
0.1.1 3 09/01/2026
0.1.0 3 09/01/2026