Thanks for your interest in improving DatPlotX! This guide covers how to get set up and the conventions we follow.
DatPlotX is released under the MIT License, and there is no CLA to sign. By submitting a pull request, you agree that your contribution is licensed under the same MIT terms as the rest of the project (inbound = outbound). That's it — no copyright assignment, no sign-off ceremony.
If your employer owns the rights to your work, make sure you are authorized to contribute it under the MIT License.
- .NET 10 SDK — https://dotnet.microsoft.com/download
- Git
- An editor with EditorConfig support (VS / VS Code / Rider all work). The repo
ships an
.editorconfig— please keep it enabled.
# Build the active app
dotnet build DatPlotX/DatPlotX.csproj
# Run it
dotnet run --project DatPlotX
# Run the test suite
dotnet test DatPlotX.Tests/DatPlotX.Tests.csproj
# Verify formatting before you push (CI enforces this)
dotnet format --verify-no-changesDatPlotX is an Avalonia + .NET 10 MVVM application. Please match the existing style:
- Strict MVVM. Code-behind is for view wiring only — no business logic in views. ViewModels never reference Views directly; bridge with events and services.
- Compiled bindings. Prefer Avalonia compiled bindings (
x:DataType) over reflection bindings. - Async all the way. Use
async/awaitfor I/O. No.Result, no.Wait(), noasync voidoutside event handlers. - Nullable reference types are enabled repo-wide. Keep new code warning-clean.
- Culture-aware parsing. Always pass an explicit
IFormatProvider(options.Culture) — never rely on the current culture. - Security. Route all file paths through
FilePathValidatorand all column names throughInputValidator. Never introduceBinaryFormatteror other unsafe serializers. - Follow
.editorconfigfor formatting; rundotnet format.
The authoritative deep-dive on architecture, data flow, and the trickier Avalonia
quirks (DataGrid rebuild path, the three plot modes, analysis wiring) lives in
DatPlotX/CLAUDE.md. Read it before making non-trivial
changes inside DatPlotX/.
- Branch from
main. - Keep PRs focused — one logical change per PR.
- Add or update tests in
DatPlotX.Tests/for behavior changes. - Ensure
dotnet build,dotnet test, anddotnet format --verify-no-changesall pass locally (CI runs them on Windows, macOS, and Linux). - Update
CHANGELOG.mdif your change is user-visible.
- Bugs / feature requests: open a GitHub Issue.
- Usage questions: use Discussions, not Issues.
- Security vulnerabilities: do not open a public issue — see SECURITY.md.
By contributing, you agree that your contributions will be licensed under the project's MIT License.