Building from source
Requirements
- .NET 10 SDK — the exact
version is pinned by
global.jsonat the repository root - Visual Studio with the Desktop development with C++ workload (the Native AOT compilation links with the MSVC toolchain)
- ViGEmBus driver at runtime
Build and run (development)
dotnet build
dotnet run --project src/Rodenstick.App
Release build (Native AOT)
dotnet publish src/Rodenstick.App -c Release -r win-x64
The self-contained native executable lands in
src/Rodenstick.App/bin/Release/net10.0/win-x64/publish/rodenstick.exe.
No .NET runtime is required on the target machine.
Tests
dotnet test
Formatting is checked against the root .editorconfig, and warnings are errors
(TreatWarningsAsErrors in Directory.Build.props):
dotnet format --verify-no-changes
Installer
The Inno Setup script is installer/rodenstick_inno.iss; compile it with
Inno Setup 6 or later after publishing the release build:
ISCC.exe installer/rodenstick_inno.iss
The script bundles the ViGEmBus driver installer, which is not kept in the
repository (it is a third-party binary, not built from source). Download it
once before compiling and place it next to the script as
installer/ViGEmBus_1.22.0_x64_x86_arm64.exe:
To bundle a newer driver, download that release and update the ViGEmBusSetup
define at the top of the .iss to match the new filename.
Documentation
Both documentation sets are built and published together by the pages
workflow on every push to main; the commands below reproduce that build
locally.
API reference (Doxygen)
Generated from the /// XML comments on public members. Install
Doxygen and
Graphviz (add Graphviz to PATH so the
diagrams are drawn), then:
cd docs/doxygen
doxygen Doxyfile
The HTML lands in docs/api/html; open index.html to read it. The published
copy is at https://hectoraal.github.io/Rodenstick/api/.
Documentation site (MkDocs)
The bilingual site is built from the docs/en and docs/es trees:
pip install mkdocs-material mkdocs-static-i18n
mkdocs serve
mkdocs serve previews on http://127.0.0.1:8000 with live reload;
mkdocs build --strict produces site/ and is what the workflow runs.
Every page exists in both languages under the same filename. A docs change touches both trees in the same commit, or the Spanish site silently falls back to the English page.
Wiki sync
The Codeberg and GitHub wikis are read-only mirrors of this docs/ folder,
projected by scripts/sync-wiki.ps1 (run it after docs changes land on
main). Never edit wiki pages directly — the next sync overwrites them.
One-time prerequisite per host: wikis are separate git repos that only start to exist after the first page is created, so enable the wiki in the repository settings and create any page from the web UI before the first sync, or the clone step fails.
Project layout
src/Rodenstick.Core— platform-independent logic (config, localization, mapping, capture orchestration)src/Rodenstick.Platform.Windows— Win32 and ViGEm implementations of the Core abstractionssrc/Rodenstick.App— Avalonia UI and composition roottests/Rodenstick.Core.Tests— xUnit tests for Core
Version numbers
The version lives in Directory.Build.props and is repeated in three places
that must be bumped with it:
installer/rodenstick_inno.iss(MyAppVersion)src/Rodenstick.App/app.manifest(assemblyIdentity version)docs/doxygen/Doxyfile(PROJECT_NUMBER)