PortalX.Drawing 0.1.1
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.
Showing the top 20 packages that depend on PortalX.Drawing.
| Packages | Downloads |
|---|---|
|
PortalX.Forms
A cross-platform UI framework painted with Skia, for everyone who misses WinForms. Familiar shapes - Control, Form, Application.Run - on SDL3 and SkiaSharp. Pre-release: most members are not implemented yet.
|
3 |
.NET 10.0
- SkiaSharp (>= 4.151.1)
- SkiaSharp.NativeAssets.Win32 (>= 4.151.1)