From v9.3.0.5 to the current 9.5 line
This note records the main project changes from
v9.3.0.5on March 17, 2026 to the current documented9.5baseline. What changed in this period was not only the version line itself, but the project’s internal boundaries, runtime coverage, validation paths, documentation structure, and release discipline.
The scale of the change
Measured at the repository level, this phase includes roughly:
298changed files- about
27,011inserted lines - about
6,080deleted or rewritten lines
This was not a narrow patch cycle. It was a structural expansion from a compatibility-focused codebase into a more complete runtime and release-oriented system.
What v9.3.0.5 represented
v9.3.0.5 already established an important early baseline:
- the core package split was present
LVGLSharp.Forms,Core,Interop,Native,Runtime.Windows, andRuntime.Linuxwere already recognizable- common controls,
Application.Run(Form), NativeAOT direction, and event bridging were already part of the public story - demos such as
WinFormsDemo,PictureBoxDemo, andSerialPortalready existed - documentation still centered mainly on the repository README
That made the 9.3 line the stage where the project proved its foundation. The 9.5 line is where that foundation became broader, clearer, and more organized.
What changed between 9.3 and 9.5
1. The LVGL and runtime abstraction base became stronger
The first major shift in the 9.5 line was at the platform foundation:
- the project moved onto the
LVGL 9.5baseline - the generated P/Invoke surface grew with new enums, structs, and drawing-related bindings
- earlier abstractions continued to converge toward a clearer
IView/ViewLifetimeBasedirection - runtime registration became more standardized, with
ApplicationConfiguration.Initialize()taking a clearer central role
This matters because it makes the relationship between the Forms layer and the lower runtime layer more explicit and easier to extend.
2. The runtime model moved from “can run” to “can be layered”
Compared with v9.3.0.5, the current 9.5 line has a much more explicit runtime matrix:
- the Windows side has been further normalized in naming and runtime boundaries
- the Linux side now covers
WSLg,X11,Wayland,SDL, andFrameBuffer DrmViewis now in the repository as the first clear entry point forDRM/KMSOffscreenwas split out of the Linux host branch intoLVGLSharp.Runtime.HeadlessLVGLSharp.Runtime.MacOsandLVGLSharp.Runtime.Remotenow exist as dedicated skeletons for futuremacOS,VNC, andRDPwork
In other words, the project is no longer only “cross-platform enough to run.” It is becoming a runtime system whose host boundaries can be explained, extended, and validated more deliberately.
3. Demo and validation coverage expanded significantly
At the 9.3 stage, demos mainly served as proof-of-life paths. In the 9.5 line, they became a major part of how capability is expressed and checked:
MusicDemoandSmartWatchDemoexpanded the repository into richer UI validation pathsOffscreenDemoadded a dedicated entry point for headless rendering and PNG outputMacOsAotDemoprovided the first AOT-oriented verification path for the macOS skeletonWinFormsVncDemo,WinFormsRdpDemo, andRdpDemogave the remote runtime story concrete demo surfacestests/LVGLSharp.Headless.Testsintroduced the first real automated checks around snapshots, background color handling, and frame-source reuse
That means the project now relies less on ad hoc manual validation alone and more on a combination of demos, snapshots, and release-output checks.
4. Documentation moved from README-first to site-first
One of the clearest visible changes from 9.3 to 9.5 is the documentation system itself.
What was once mostly README-driven now includes a structured site with:
- home pages
- navigation pages
- blog articles
- project news
- NuGet guidance
- screenshot galleries
- bilingual page organization and language switching
- roadmap and changelog alignment
- local preview tooling and GitHub Pages publication flow
The documentation is no longer just attached to the repository. It has become part of the project’s actual engineering and release surface.
5. Packaging and release engineering became more deliberate
The 9.5 line also pushed release engineering forward:
- native assets are organized under
runtimes/{rid}/native - workflows are now decomposed into prepare, native build, NuGet pack, demo build, and release publish stages
- version normalization and asset aggregation are more explicit
- the dependency relationship between source builds, Native packaging, and downstream package consumers is better controlled
This is a major shift from “the project can build” toward “the project can build, package, and publish with clearer rules.”
What the 9.5 line really means
Taken together, the project achieved three especially important transitions between v9.3.0.5 and the current 9.5 line:
- from a compatibility-layer proof point to a multi-runtime structure
- from basic demos to layered validation through demos, tests, and screenshots
- from repository-centered notes to a fuller site, roadmap, changelog, and release flow
That is why the 9.3 line can be understood as the stage where the project established its base, while the 9.5 line is the stage where it began to take on real engineering shape.
What continues next
Even with that progress, several paths are still actively moving:
DRM/KMSstill needs a fuller native backend- Headless validation should continue to grow
macOSand Remote are still in skeleton and early-validation formLVGLSharp.Runtime.Headless,LVGLSharp.Runtime.MacOs, andLVGLSharp.Runtime.Remotehave now been added to the packaging workflow and are expected to move into formal NuGet publication later
The direction remains consistent: preserve the WinForms-style top-level developer experience, while continuing to strengthen runtime boundaries, automated verification, and release discipline underneath it.