Vigilance.Debug
0.2.13
dotnet add package Vigilance.Debug --version 0.2.13
NuGet\Install-Package Vigilance.Debug -Version 0.2.13
<PackageReference Include="Vigilance.Debug" Version="0.2.13" />
<PackageVersion Include="Vigilance.Debug" Version="0.2.13" />
<PackageReference Include="Vigilance.Debug" />
paket add Vigilance.Debug --version 0.2.13
#r "nuget: Vigilance.Debug, 0.2.13"
#:package Vigilance.Debug@0.2.13
#addin nuget:?package=Vigilance.Debug&version=0.2.13
#tool nuget:?package=Vigilance.Debug&version=0.2.13
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.402
[Host] : .NET 10.0.13 (10.0.13, 10.0.1326.50504), X64 RyuJIT x86-64-v3
Job-NHQAEU : .NET 10.0.13 (10.0.13, 10.0.1326.50504), 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.17 μs | 1.062 μs | 0.768 μs | 4.08x faster | 0.11x | - | - | - | 41408 B | NA |
| Flecs_AddComponent | AddComponent | 1000 | 131.09 μs | 3.077 μs | 2.035 μs | baseline | - | - | - | - | NA | |
| Vigilance_AddComponent | AddComponent | 100000 | 2,330.88 μs | 29.558 μs | 19.551 μs | 5.10x faster | 0.04x | - | - | - | 4598704 B | NA |
| Flecs_AddComponent | AddComponent | 100000 | 11,877.08 μs | 41.045 μs | 29.678 μs | baseline | - | - | - | - | NA | |
| Vigilance_Create | Create | 1000 | 54.34 μs | 4.582 μs | 3.031 μs | 1.02x faster | 0.08x | - | - | - | 59608 B | NA |
| Flecs_Create | Create | 1000 | 55.10 μs | 4.739 μs | 3.427 μs | baseline | - | - | - | - | NA | |
| Vigilance_Create | Create | 100000 | 5,679.41 μs | 73.344 μs | 53.033 μs | 1.21x slower | 0.01x | 1000.0000 | 1000.0000 | 1000.0000 | 6958440 B | NA |
| Flecs_Create | Create | 100000 | 4,709.20 μs | 39.926 μs | 28.869 μs | baseline | - | - | - | - | NA | |
| Vigilance_CreateWithComponents | CreateWithComponents | 1000 | 108.27 μs | 12.417 μs | 8.213 μs | 2.48x faster | 0.20x | - | - | - | 142424 B | NA |
| Flecs_CreateWithComponents | CreateWithComponents | 1000 | 266.80 μs | 4.857 μs | 3.212 μs | baseline | - | - | - | - | NA | |
| Vigilance_CreateWithComponents | CreateWithComponents | 100000 | 12,116.18 μs | 156.185 μs | 112.932 μs | 2.36x faster | 0.02x | 2000.0000 | 2000.0000 | 2000.0000 | 16156160 B | NA |
| Flecs_CreateWithComponents | CreateWithComponents | 100000 | 28,532.92 μs | 126.633 μs | 83.760 μs | baseline | - | - | - | - | NA | |
| Vigilance_Destroy | Destroy | 1000 | 96.01 μs | 1.343 μs | 0.888 μs | 1.34x slower | 0.05x | - | - | - | 8392 B | NA |
| Flecs_Destroy | Destroy | 1000 | 71.56 μs | 3.637 μs | 2.630 μs | baseline | - | - | - | - | NA | |
| Vigilance_Destroy | Destroy | 100000 | 7,871.87 μs | 40.844 μs | 31.889 μs | 1.54x slower | 0.01x | - | - | - | 1048944 B | NA |
| Flecs_Destroy | Destroy | 100000 | 5,118.64 μs | 15.925 μs | 11.515 μs | baseline | - | - | - | - | NA | |
| Vigilance_RemoveComponent | RemoveComponent | 1000 | 23.15 μs | 0.385 μs | 0.255 μs | 4.21x faster | 0.11x | - | - | - | - | NA |
| Flecs_RemoveComponent | RemoveComponent | 1000 | 97.50 μs | 3.299 μs | 2.385 μs | baseline | - | - | - | - | NA | |
| Vigilance_RemoveComponent | RemoveComponent | 100000 | 1,888.56 μs | 22.728 μs | 16.433 μs | 4.39x faster | 0.04x | - | - | - | - | NA |
| Flecs_RemoveComponent | RemoveComponent | 100000 | 8,298.29 μs | 46.970 μs | 31.068 μs | baseline | - | - | - | - | NA |
Components
IterationCount=12 WarmupCount=4
| Method | Categories | EntityCount | Mean | Error | StdDev | Ratio | RatioSD | Allocated | Alloc Ratio |
|---|---|---|---|---|---|---|---|---|---|
| Vigilance_Get | Get | 1000 | 3.236 μs | 0.0117 μs | 0.0077 μs | 3.69x faster | 0.01x | - | NA |
| Flecs_Get | Get | 1000 | 11.930 μs | 0.0521 μs | 0.0345 μs | baseline | - | NA | |
| Vigilance_Get | Get | 100000 | 324.902 μs | 1.5651 μs | 1.0352 μs | 3.69x faster | 0.01x | - | NA |
| Flecs_Get | Get | 100000 | 1,198.552 μs | 2.9561 μs | 2.1374 μs | baseline | - | NA | |
| Vigilance_Has | Has | 1000 | 2.245 μs | 0.0246 μs | 0.0192 μs | 5.44x faster | 0.05x | - | NA |
| Flecs_Has | Has | 1000 | 12.202 μs | 0.0439 μs | 0.0318 μs | baseline | - | NA | |
| Vigilance_Has | Has | 100000 | 229.439 μs | 0.4282 μs | 0.2832 μs | 5.35x faster | 0.01x | - | NA |
| Flecs_Has | Has | 100000 | 1,227.746 μs | 3.8997 μs | 2.5794 μs | baseline | - | NA | |
| Vigilance_Set | Set | 1000 | 9.090 μs | 0.1116 μs | 0.0871 μs | 3.99x faster | 0.04x | - | NA |
| Flecs_Set | Set | 1000 | 36.310 μs | 0.0878 μs | 0.0581 μs | baseline | - | NA | |
| Vigilance_Set | Set | 100000 | 929.367 μs | 2.3432 μs | 1.5499 μs | 3.66x faster | 0.01x | - | NA |
| Flecs_Set | Set | 100000 | 3,400.592 μs | 10.9230 μs | 7.2249 μs | baseline | - | NA | |
| Vigilance_Write | Write | 1000 | 4.607 μs | 0.0268 μs | 0.0194 μs | 2.61x faster | 0.01x | - | NA |
| Flecs_Write | Write | 1000 | 12.010 μs | 0.0307 μs | 0.0222 μs | baseline | - | NA | |
| Vigilance_Write | Write | 100000 | 459.068 μs | 1.5561 μs | 1.1251 μs | 3.59x faster | 0.01x | - | NA |
| Flecs_Write | Write | 100000 | 1,648.848 μs | 7.3571 μs | 5.3197 μ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 | 699.2 ns | 2.56 ns | 1.69 ns | 1.20x faster | 0.00x | - | NA |
| Flecs_OneComponent_Each | OneComponent | 1000 | False | 839.8 ns | 2.75 ns | 1.82 ns | baseline | - | NA | |
| Flecs_OneComponent_Iter | OneComponent | 1000 | False | 841.1 ns | 2.53 ns | 1.83 ns | 1.00x slower | 0.00x | - | NA |
| Vigilance_OneComponent | OneComponent | 1000 | True | 697.9 ns | 1.90 ns | 1.38 ns | 2.27x faster | 0.01x | - | NA |
| Flecs_OneComponent_Each | OneComponent | 1000 | True | 1,582.1 ns | 7.12 ns | 4.71 ns | baseline | - | NA | |
| Flecs_OneComponent_Iter | OneComponent | 1000 | True | 1,501.9 ns | 4.51 ns | 2.98 ns | 1.05x faster | 0.00x | - | NA |
| Vigilance_OneComponent | OneComponent | 100000 | False | 67,523.2 ns | 285.74 ns | 189.00 ns | 1.05x slower | 0.00x | - | NA |
| Flecs_OneComponent_Each | OneComponent | 100000 | False | 64,067.8 ns | 157.43 ns | 104.13 ns | baseline | - | NA | |
| Flecs_OneComponent_Iter | OneComponent | 100000 | False | 63,718.8 ns | 281.62 ns | 186.28 ns | 1.01x faster | 0.00x | - | NA |
| Vigilance_OneComponent | OneComponent | 100000 | True | 67,554.7 ns | 232.98 ns | 154.10 ns | 1.02x slower | 0.00x | - | NA |
| Flecs_OneComponent_Each | OneComponent | 100000 | True | 66,445.6 ns | 149.77 ns | 99.07 ns | baseline | - | NA | |
| Flecs_OneComponent_Iter | OneComponent | 100000 | True | 65,920.8 ns | 319.92 ns | 211.61 ns | 1.01x faster | 0.00x | - | NA |
| Vigilance_ThreeComponents | ThreeComponents | 1000 | False | 544.4 ns | 0.93 ns | 0.68 ns | 1.25x faster | 0.00x | - | NA |
| Flecs_ThreeComponents_Each | ThreeComponents | 1000 | False | 678.1 ns | 2.35 ns | 1.56 ns | baseline | - | NA | |
| Flecs_ThreeComponents_Iter | ThreeComponents | 1000 | False | 589.5 ns | 8.06 ns | 5.83 ns | 1.15x faster | 0.01x | - | NA |
| Vigilance_ThreeComponents | ThreeComponents | 1000 | True | 547.2 ns | 0.97 ns | 0.64 ns | 2.21x faster | 0.01x | - | NA |
| Flecs_ThreeComponents_Each | ThreeComponents | 1000 | True | 1,208.4 ns | 3.66 ns | 2.65 ns | baseline | - | NA | |
| Flecs_ThreeComponents_Iter | ThreeComponents | 1000 | True | 1,218.9 ns | 4.92 ns | 3.25 ns | 1.01x slower | 0.00x | - | NA |
| Vigilance_ThreeComponents | ThreeComponents | 100000 | False | 53,959.8 ns | 276.03 ns | 182.58 ns | 1.07x slower | 0.00x | - | NA |
| Flecs_ThreeComponents_Each | ThreeComponents | 100000 | False | 50,615.1 ns | 81.27 ns | 53.75 ns | baseline | - | NA | |
| Flecs_ThreeComponents_Iter | ThreeComponents | 100000 | False | 47,927.6 ns | 98.67 ns | 65.26 ns | 1.06x faster | 0.00x | - | NA |
| Vigilance_ThreeComponents | ThreeComponents | 100000 | True | 56,599.7 ns | 595.95 ns | 430.91 ns | 1.08x slower | 0.01x | - | NA |
| Flecs_ThreeComponents_Each | ThreeComponents | 100000 | True | 52,268.7 ns | 394.15 ns | 307.72 ns | baseline | - | NA | |
| Flecs_ThreeComponents_Iter | ThreeComponents | 100000 | True | 49,513.1 ns | 142.33 ns | 102.91 ns | 1.06x faster | 0.01x | - | NA |
| Vigilance_TwoComponents | TwoComponents | 1000 | False | 851.4 ns | 2.13 ns | 1.54 ns | 1.18x faster | 0.01x | - | NA |
| Flecs_TwoComponents_Each | TwoComponents | 1000 | False | 1,004.7 ns | 7.54 ns | 4.99 ns | baseline | - | NA | |
| Flecs_TwoComponents_Iter | TwoComponents | 1000 | False | 858.9 ns | 3.29 ns | 2.38 ns | 1.17x faster | 0.01x | - | NA |
| Vigilance_TwoComponents | TwoComponents | 1000 | True | 852.8 ns | 2.62 ns | 1.89 ns | 2.31x faster | 0.01x | - | NA |
| Flecs_TwoComponents_Each | TwoComponents | 1000 | True | 1,969.1 ns | 4.69 ns | 3.39 ns | baseline | - | NA | |
| Flecs_TwoComponents_Iter | TwoComponents | 1000 | True | 1,943.0 ns | 5.16 ns | 3.41 ns | 1.01x faster | 0.00x | - | NA |
| Vigilance_TwoComponents | TwoComponents | 100000 | False | 80,930.3 ns | 249.05 ns | 164.73 ns | 1.15x slower | 0.00x | - | NA |
| Flecs_TwoComponents_Each | TwoComponents | 100000 | False | 70,466.8 ns | 155.48 ns | 102.84 ns | baseline | - | NA | |
| Flecs_TwoComponents_Iter | TwoComponents | 100000 | False | 72,566.3 ns | 816.52 ns | 637.49 ns | 1.03x slower | 0.01x | - | NA |
| Vigilance_TwoComponents | TwoComponents | 100000 | True | 80,950.5 ns | 125.46 ns | 82.98 ns | 1.07x slower | 0.00x | - | NA |
| Flecs_TwoComponents_Each | TwoComponents | 100000 | True | 75,484.3 ns | 362.36 ns | 239.68 ns | baseline | - | NA | |
| Flecs_TwoComponents_Iter | TwoComponents | 100000 | True | 75,853.2 ns | 97.95 ns | 70.82 ns | 1.00x 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.