Vigilance.Debug
0.2.12
dotnet add package Vigilance.Debug --version 0.2.12
NuGet\Install-Package Vigilance.Debug -Version 0.2.12
<PackageReference Include="Vigilance.Debug" Version="0.2.12" />
<PackageVersion Include="Vigilance.Debug" Version="0.2.12" />
<PackageReference Include="Vigilance.Debug" />
paket add Vigilance.Debug --version 0.2.12
#r "nuget: Vigilance.Debug, 0.2.12"
#:package Vigilance.Debug@0.2.12
#addin nuget:?package=Vigilance.Debug&version=0.2.12
#tool nuget:?package=Vigilance.Debug&version=0.2.12
Vigilance
Vigilance is a 2D game engine/framework for C# and .NET, built on Raylib and focused on developer experience and performance. It runs natively on desktop and in the browser through WebAssembly, and it is compatible with Native AOT.
Documentation
The engine documentation and API reference are available at vigilance.samaelheaven.workers.dev.
Features
- Entity component system: components are stored in sparse sets, so adding, removing, and iterating them stays cheap. Structural changes can be deferred while you iterate, and every add, set, and remove can be observed through events.
- Scenes: a scene ties everything together. It holds your entity hierarchies and the systems that act on them, and supports names, prefabs, and transitions between scenes.
- Game loop: the frame runs through update, fixed update, and render phases, each with its own pre and post steps. Transforms are interpolated between fixed updates, so motion stays smooth at any frame rate.
- Systems: write your logic as ordered systems that hook into any phase. Built-in systems already handle physics, sprite batching, drawables, animations, UI, and more!
- Rendering: draw sprites, animations, shapes, and text with FreeType fonts, use shaders, render textures, and cameras, and batch sprites through instancing.
- Physics: Box2D bodies and shapes, with contact and sensor events and ray casts.
- UI: high-level UI elements laid out with flexbox, usable in both immediate and retained mode.
- Input: keyboard, mouse, gamepads, and the clipboard.
- Audio: sounds, music, and audio streams.
- Utilities: collections, math, tweens, timers, assets, logging, HTTP requests, and more!
Installation
Vigilance targets .NET 10 and later.
dotnet add package Vigilance
Vigilance.Debug is the same engine with internal assertions enabled, for catching misuse during development. To use it
in Debug builds and the regular package in Release builds, add both references to your project, replacing x.y.z with
the latest version:
<PackageReference Include="Vigilance" Version="x.y.z" Condition="'$(Configuration)' == 'Release'" />
<PackageReference Include="Vigilance.Debug" Version="x.y.z" Condition="'$(Configuration)' == 'Debug'" />
Benchmarks
The engine's entity operations and queries are compared against Flecs.NET after each release. The ratio column compares each Vigilance benchmark with the Flecs.NET baseline of the same operation; the measurements come from a shared CI machine, so the ratios are more meaningful than the absolute times.
BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.5 LTS (Noble Numbat)
AMD EPYC 7763 3.24GHz, 1 CPU, 2 logical cores and 1 physical core
.NET SDK 10.0.401
[Host] : .NET 10.0.12 (10.0.12, 10.0.1226.42308), X64 RyuJIT x86-64-v3
Job-NHQAEU : .NET 10.0.12 (10.0.12, 10.0.1226.42308), X64 RyuJIT x86-64-v3
Entities
EnvironmentVariables=DOTNET_TieredCompilation=0 InvocationCount=1 IterationCount=12 UnrollFactor=1 WarmupCount=4
| Method | Categories | EntityCount | Mean | Error | StdDev | Ratio | RatioSD | Gen0 | Gen1 | Gen2 | Allocated | Alloc Ratio |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Vigilance_AddComponent | AddComponent | 1000 | 32.22 μs | 0.878 μs | 0.581 μs | 4.08x faster | 0.13x | - | - | - | 41408 B | NA |
| Flecs_AddComponent | AddComponent | 1000 | 131.46 μs | 5.399 μs | 3.571 μs | baseline | - | - | - | - | NA | |
| Vigilance_AddComponent | AddComponent | 100000 | 2,254.97 μs | 39.857 μs | 26.363 μs | 5.14x faster | 0.06x | - | - | - | 4598704 B | NA |
| Flecs_AddComponent | AddComponent | 100000 | 11,590.85 μs | 49.630 μs | 35.886 μs | baseline | - | - | - | - | NA | |
| Vigilance_Create | Create | 1000 | 53.26 μs | 4.835 μs | 3.198 μs | 1.02x faster | 0.07x | - | - | - | 59608 B | NA |
| Flecs_Create | Create | 1000 | 54.05 μs | 3.438 μs | 2.684 μs | baseline | - | - | - | - | NA | |
| Vigilance_Create | Create | 100000 | 5,476.60 μs | 42.413 μs | 30.668 μs | 1.16x slower | 0.02x | 1000.0000 | 1000.0000 | 1000.0000 | 6958440 B | NA |
| Flecs_Create | Create | 100000 | 4,713.97 μs | 92.898 μs | 67.171 μs | baseline | - | - | - | - | NA | |
| Vigilance_CreateWithComponents | CreateWithComponents | 1000 | 107.62 μs | 19.182 μs | 14.976 μs | 2.51x faster | 0.34x | - | - | - | 142424 B | NA |
| Flecs_CreateWithComponents | CreateWithComponents | 1000 | 265.21 μs | 10.173 μs | 7.943 μs | baseline | - | - | - | - | NA | |
| Vigilance_CreateWithComponents | CreateWithComponents | 100000 | 11,776.67 μs | 138.132 μs | 107.845 μs | 2.41x faster | 0.08x | 2000.0000 | 2000.0000 | 2000.0000 | 16156160 B | NA |
| Flecs_CreateWithComponents | CreateWithComponents | 100000 | 28,405.68 μs | 1,254.468 μs | 979.406 μs | baseline | - | - | - | - | NA | |
| Vigilance_Destroy | Destroy | 1000 | 110.88 μs | 19.475 μs | 15.205 μs | 1.60x slower | 0.23x | - | - | - | 8392 B | NA |
| Flecs_Destroy | Destroy | 1000 | 69.38 μs | 4.745 μs | 3.704 μs | baseline | - | - | - | - | NA | |
| Vigilance_Destroy | Destroy | 100000 | 7,613.90 μs | 33.997 μs | 22.487 μs | 1.49x slower | 0.01x | - | - | - | 1048944 B | NA |
| Flecs_Destroy | Destroy | 100000 | 5,125.64 μs | 30.980 μs | 24.187 μs | baseline | - | - | - | - | NA | |
| Vigilance_RemoveComponent | RemoveComponent | 1000 | 24.44 μs | 0.531 μs | 0.414 μs | 3.98x faster | 0.15x | - | - | - | - | NA |
| Flecs_RemoveComponent | RemoveComponent | 1000 | 97.29 μs | 5.238 μs | 3.464 μs | baseline | - | - | - | - | NA | |
| Vigilance_RemoveComponent | RemoveComponent | 100000 | 1,842.47 μs | 21.524 μs | 16.804 μs | 4.50x faster | 0.05x | - | - | - | - | NA |
| Flecs_RemoveComponent | RemoveComponent | 100000 | 8,294.40 μs | 55.601 μs | 43.410 μs | baseline | - | - | - | - | NA |
Components
IterationCount=12 WarmupCount=4
| Method | Categories | EntityCount | Mean | Error | StdDev | Ratio | RatioSD | Allocated | Alloc Ratio |
|---|---|---|---|---|---|---|---|---|---|
| Vigilance_Get | Get | 1000 | 3.227 μs | 0.0089 μs | 0.0059 μs | 3.70x faster | 0.02x | - | NA |
| Flecs_Get | Get | 1000 | 11.951 μs | 0.0896 μs | 0.0648 μs | baseline | - | NA | |
| Vigilance_Get | Get | 100000 | 316.520 μs | 2.0282 μs | 1.3415 μs | 3.78x faster | 0.02x | - | NA |
| Flecs_Get | Get | 100000 | 1,195.861 μs | 2.3303 μs | 1.5414 μs | baseline | - | NA | |
| Vigilance_Has | Has | 1000 | 2.255 μs | 0.0085 μs | 0.0061 μs | 5.41x faster | 0.02x | - | NA |
| Flecs_Has | Has | 1000 | 12.196 μs | 0.0192 μs | 0.0127 μs | baseline | - | NA | |
| Vigilance_Has | Has | 100000 | 223.472 μs | 1.3050 μs | 0.8632 μs | 5.48x faster | 0.02x | - | NA |
| Flecs_Has | Has | 100000 | 1,225.686 μs | 5.0287 μs | 3.3262 μs | baseline | - | NA | |
| Vigilance_Set | Set | 1000 | 9.318 μs | 0.1506 μs | 0.1176 μs | 3.67x faster | 0.06x | - | NA |
| Flecs_Set | Set | 1000 | 34.166 μs | 0.5483 μs | 0.3965 μs | baseline | - | NA | |
| Vigilance_Set | Set | 100000 | 925.330 μs | 4.6283 μs | 3.0614 μs | 3.63x faster | 0.01x | - | NA |
| Flecs_Set | Set | 100000 | 3,361.391 μs | 2.9880 μs | 1.9764 μs | baseline | - | NA | |
| Vigilance_Write | Write | 1000 | 4.439 μs | 0.0075 μs | 0.0054 μs | 3.92x faster | 0.01x | - | NA |
| Flecs_Write | Write | 1000 | 17.389 μs | 0.0410 μs | 0.0296 μs | baseline | - | NA | |
| Vigilance_Write | Write | 100000 | 457.098 μs | 2.6054 μs | 1.8839 μs | 3.50x faster | 0.02x | - | NA |
| Flecs_Write | Write | 100000 | 1,597.847 μs | 8.1178 μs | 6.3378 μs | baseline | - | NA |
Queries
IterationCount=12 WarmupCount=4
| Method | Categories | EntityCount | IsFragmented | Mean | Error | StdDev | Ratio | RatioSD | Allocated | Alloc Ratio |
|---|---|---|---|---|---|---|---|---|---|---|
| Vigilance_OneComponent | OneComponent | 1000 | False | 701.4 ns | 0.95 ns | 0.69 ns | 1.20x faster | 0.00x | - | NA |
| Flecs_OneComponent_Each | OneComponent | 1000 | False | 839.3 ns | 4.87 ns | 3.22 ns | baseline | - | NA | |
| Flecs_OneComponent_Iter | OneComponent | 1000 | False | 841.0 ns | 10.94 ns | 7.91 ns | 1.00x slower | 0.01x | - | NA |
| Vigilance_OneComponent | OneComponent | 1000 | True | 719.7 ns | 2.67 ns | 1.77 ns | 2.19x faster | 0.01x | - | NA |
| Flecs_OneComponent_Each | OneComponent | 1000 | True | 1,573.9 ns | 4.86 ns | 3.22 ns | baseline | - | NA | |
| Flecs_OneComponent_Iter | OneComponent | 1000 | True | 1,543.0 ns | 4.00 ns | 2.65 ns | 1.02x faster | 0.00x | - | NA |
| Vigilance_OneComponent | OneComponent | 100000 | False | 66,838.1 ns | 118.40 ns | 78.32 ns | 1.05x slower | 0.00x | - | NA |
| Flecs_OneComponent_Each | OneComponent | 100000 | False | 63,831.8 ns | 269.54 ns | 178.28 ns | baseline | - | NA | |
| Flecs_OneComponent_Iter | OneComponent | 100000 | False | 63,394.8 ns | 50.53 ns | 36.53 ns | 1.01x faster | 0.00x | - | NA |
| Vigilance_OneComponent | OneComponent | 100000 | True | 67,006.6 ns | 464.21 ns | 307.05 ns | 1.01x slower | 0.01x | - | NA |
| Flecs_OneComponent_Each | OneComponent | 100000 | True | 66,149.6 ns | 281.04 ns | 185.89 ns | baseline | - | NA | |
| Flecs_OneComponent_Iter | OneComponent | 100000 | True | 65,375.1 ns | 90.34 ns | 65.32 ns | 1.01x faster | 0.00x | - | NA |
| Vigilance_ThreeComponents | ThreeComponents | 1000 | False | 550.9 ns | 2.03 ns | 1.35 ns | 1.21x faster | 0.00x | - | NA |
| Flecs_ThreeComponents_Each | ThreeComponents | 1000 | False | 666.3 ns | 1.37 ns | 0.99 ns | baseline | - | NA | |
| Flecs_ThreeComponents_Iter | ThreeComponents | 1000 | False | 664.2 ns | 7.05 ns | 4.66 ns | 1.00x faster | 0.01x | - | NA |
| Vigilance_ThreeComponents | ThreeComponents | 1000 | True | 547.0 ns | 1.69 ns | 1.22 ns | 2.21x faster | 0.01x | - | NA |
| Flecs_ThreeComponents_Each | ThreeComponents | 1000 | True | 1,209.8 ns | 4.07 ns | 2.69 ns | baseline | - | NA | |
| Flecs_ThreeComponents_Iter | ThreeComponents | 1000 | True | 1,196.1 ns | 4.03 ns | 2.66 ns | 1.01x faster | 0.00x | - | NA |
| Vigilance_ThreeComponents | ThreeComponents | 100000 | False | 56,159.1 ns | 82.24 ns | 59.47 ns | 1.11x slower | 0.00x | - | NA |
| Flecs_ThreeComponents_Each | ThreeComponents | 100000 | False | 50,557.8 ns | 217.05 ns | 143.56 ns | baseline | - | NA | |
| Flecs_ThreeComponents_Iter | ThreeComponents | 100000 | False | 47,780.5 ns | 116.62 ns | 84.33 ns | 1.06x faster | 0.00x | - | NA |
| Vigilance_ThreeComponents | ThreeComponents | 100000 | True | 56,016.2 ns | 69.50 ns | 45.97 ns | 1.08x slower | 0.00x | - | NA |
| Flecs_ThreeComponents_Each | ThreeComponents | 100000 | True | 51,721.7 ns | 247.33 ns | 163.59 ns | baseline | - | NA | |
| Flecs_ThreeComponents_Iter | ThreeComponents | 100000 | True | 44,291.3 ns | 174.26 ns | 126.00 ns | 1.17x faster | 0.00x | - | NA |
| Vigilance_TwoComponents | TwoComponents | 1000 | False | 854.9 ns | 2.19 ns | 1.58 ns | 1.19x faster | 0.00x | - | NA |
| Flecs_TwoComponents_Each | TwoComponents | 1000 | False | 1,019.3 ns | 2.29 ns | 1.66 ns | baseline | - | NA | |
| Flecs_TwoComponents_Iter | TwoComponents | 1000 | False | 869.4 ns | 1.64 ns | 1.09 ns | 1.17x faster | 0.00x | - | NA |
| Vigilance_TwoComponents | TwoComponents | 1000 | True | 853.7 ns | 2.94 ns | 1.95 ns | 2.29x faster | 0.01x | - | NA |
| Flecs_TwoComponents_Each | TwoComponents | 1000 | True | 1,958.6 ns | 5.68 ns | 3.76 ns | baseline | - | NA | |
| Flecs_TwoComponents_Iter | TwoComponents | 1000 | True | 1,914.3 ns | 3.72 ns | 2.46 ns | 1.02x faster | 0.00x | - | NA |
| Vigilance_TwoComponents | TwoComponents | 100000 | False | 80,773.3 ns | 134.28 ns | 88.82 ns | 1.02x slower | 0.00x | - | NA |
| Flecs_TwoComponents_Each | TwoComponents | 100000 | False | 79,561.1 ns | 246.40 ns | 178.17 ns | baseline | - | NA | |
| Flecs_TwoComponents_Iter | TwoComponents | 100000 | False | 71,818.7 ns | 124.95 ns | 90.35 ns | 1.11x faster | 0.00x | - | NA |
| Vigilance_TwoComponents | TwoComponents | 100000 | True | 81,008.7 ns | 235.33 ns | 170.16 ns | 1.08x slower | 0.00x | - | NA |
| Flecs_TwoComponents_Each | TwoComponents | 100000 | True | 75,226.0 ns | 182.98 ns | 121.03 ns | baseline | - | NA | |
| Flecs_TwoComponents_Iter | TwoComponents | 100000 | True | 75,685.8 ns | 76.01 ns | 50.27 ns | 1.01x slower | 0.00x | - | NA |
License
Vigilance is licensed under the zlib License.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. net11.0 is compatible. |
-
net10.0
- Box2D.NET (>= 3.1.654)
- FreeTypeSharp (>= 3.1.0)
- JetBrains.Annotations (>= 2026.2.0)
- LinkDotNet.StringBuilder (>= 3.7.4)
- Raylib-cs (>= 8.1.0)
- ZLinq (>= 1.5.6)
-
net11.0
- Box2D.NET (>= 3.1.654)
- FreeTypeSharp (>= 3.1.0)
- JetBrains.Annotations (>= 2026.2.0)
- LinkDotNet.StringBuilder (>= 3.7.4)
- Raylib-cs (>= 8.1.0)
- ZLinq (>= 1.5.6)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.