Skip to content

Building from source

Requirements

  • .NET 10 SDK — the exact version is pinned by global.json at 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 abstractions
  • src/Rodenstick.App — Avalonia UI and composition root
  • tests/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)