Thank you for your interest in contributing! This project is a free tool for the SQL Server DBA community, and all forms of contribution are valued.
- Bug reports — found something broken? Open an issue.
- Feature requests — have an idea? Describe the use case in an issue.
- Documentation — fix typos, improve wording, add examples.
- Dashboard panels — new SQL queries or panel types in
dashboard-config.json. - SQL diagnostic scripts — useful T-SQL checks for the
scripts/folder. - Code — bug fixes, performance improvements, new features.
- Screenshots — help fill the Screenshots section of the README.
Before opening an issue, please:
- Search existing issues to avoid duplicates.
- Reproduce against the latest release if possible.
- Include:
- SQLTriage version (shown in the About page)
- SQL Server version(s) being monitored
- Windows version
- Steps to reproduce
- Expected vs actual behaviour
- Relevant log lines from
logs/app-*.log
- Visual Studio 2022 (Community edition works fine) with:
- .NET desktop development workload
- ASP.NET and web development workload
- .NET 8.0 SDK
- SQL Server 2016+ instance (for testing)
- SQLWATCH deployed on the test instance (see Deployment Guide)
git clone https://github.com/SQLAdrian/SQLTriage.git
cd SQLTriage
dotnet build SQLTriage.slnOr open SQLTriage.sln in Visual Studio and press F5.
Copy or edit appsettings.json to point at your local SQL Server:
{
"ConnectionStrings": {
"SqlServer": "Server=.;Database=SQLWATCH;Integrated Security=true;Application Name=SQLTriage;"
}
}cd Tests
dotnet testSee Tests/TESTING_GUIDE.md for the full testing guide.
-
Fork the repository and create a branch from
master.git checkout -b feature/my-new-panel
-
Make your changes. Keep commits focused and descriptive.
-
Test your changes:
- Run the application against a real SQL Server instance.
- Run
dotnet testin theTests/folder. - Check for regressions in existing dashboards.
-
Submit a Pull Request against
master.- Describe what you changed and why.
- Reference any related issues (
Fixes #123). - Include before/after screenshots for UI changes.
This is a C# / Blazor project. General guidelines:
- Follow existing patterns in the codebase — consistency matters.
- Use
async/awaitfor any I/O operation; never.Resultor.Wait(). - Inject dependencies via constructor injection; avoid static state.
- Use
SqlParameterfor all user-supplied SQL values — no string interpolation. - Log at
Debugfor diagnostic detail,Informationfor lifecycle events,WarningandErrorfor actionable conditions. - Keep Razor components focused: data-fetching logic belongs in the
Data/service layer, not in.razorfiles.
Panels are defined in dashboard-config.json. Each panel needs:
And a matching query entry:
{
"id": "my_query_id",
"sqlServer": "SELECT TOP 100 ... FROM SQLWATCH...",
"sqlite": null, // optional: SQLite fallback for cached data
"parameters": []
}Edit dashboard-config.json directly, or use the in-app Dashboard Editor (Ctrl+E) and submit a pull request with the resulting JSON.
Place .sql files in the scripts/ folder. Scripts should:
- Be idempotent and read-only (SELECT only; no DDL/DML unless clearly flagged).
- Include a header comment describing purpose, author, and source.
- Target SQL Server 2016+.
Use imperative mood and be specific:
Add execution plan caching for top-queries panel
Fix session bubble view rendering on dark themes
Update SQLWATCH deployment to version 4.x dacpac
By contributing, you agree that your contributions will be licensed under the GNU General Public License v3.0.
{ "id": "my_new_panel", "title": "My New Panel", "type": "DataGrid", // StatCard | BarGauge | TimeSeries | DataGrid "refreshGroup": "standard", "queryId": "my_query_id", "layout": { "row": 1, "col": 1, "width": 6, "height": 4 } }