Ahwoo’s BRUTAL is a free, open-source C# framework for making games or building your own engine. You install it by creating a normal .NET project and adding the NuGet packages you need; there is no single BRUTAL installer. The quickest verified start is a GLFW window on Windows or Linux, followed by a renderer and the other systems your game requires.
This guide covers the documented .NET 10 setup, creates a first window, explains what that test proves, and lays out a practical path to a real game. It refers to Ahwoo’s BRUTAL framework, not the separate “Brutal Engine” package used with Autodesk Maya 2025.
As an Amazon Associate I earn from qualifying purchases.
What BRUTAL is—and what it is not
BRUTAL describes itself as “A free, open source C# framework for making games, or your own game engine.” Ahwoo positions it as a framework rather than a finished, general-purpose engine. You can use its libraries directly in a game, or use them as the foundation for an engine whose editor, scene model, rendering architecture, asset pipeline and tools you design yourself.
That distinction determines the installation experience. A traditional engine often supplies a launcher, editor, project wizard, scene graph and default renderer. BRUTAL supplies libraries published as individual NuGet packages. Your project references only the components it needs, and your team owns the architecture that connects them. The approach provides more control over native APIs, memory and update order, but it assumes substantially more programming and systems knowledge.
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Prerequisites before creating a project
- .NET 10 SDK: install the SDK, not only a runtime. The SDK provides the
dotnetcommand used to create, restore and run the project. - Operating system: the repository’s getting-started instructions specifically document Windows and Linux. Ahwoo lists Windows, Linux and macOS package targets, but an identical first-window setup on macOS is not established by the documented path.
- Graphics hardware for rendering: use a GPU that supports Vulkan 1.3 with current drivers when you add a Vulkan renderer. The initial GLFW example does not create a graphics context and therefore does not require a Vulkan renderer just to open a window.
- Vulkan SDK (recommended for validation): install it when you plan to use Vulkan validation layers during development. It is optional for the window-only smoke test.
- C# development environment: any editor or IDE that supports modern C# and .NET will work. BRUTAL does not require a proprietary editor.
Check the installed SDK from a terminal:
dotnet --version
The command should print a .NET 10 SDK version. If it reports an older major version or the command is missing, install or select the .NET 10 SDK before proceeding. A project can contain additional native dependencies later, but none are needed for the minimal window example.
Install BRUTAL through NuGet
Because BRUTAL is modular, installation means adding packages to a .NET project. The following commands create a console project, enter its directory, and add the two packages used by the official minimal example.
- Open a terminal in the folder where you keep source code.
- Create the project:
dotnet new console -n HelloBrutal
cd HelloBrutal
- Add BRUTAL’s core and GLFW packages:
dotnet add package Ahwoo.Brutal.Core
dotnet add package Ahwoo.Brutal.Glfw
NuGet restores the packages and records them in the project file. There is no global engine installation to configure, and you do not need to copy a BRUTAL runtime into a separate directory. Keeping dependencies in the project makes it possible to add or remove subsystems independently.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Create and run the first BRUTAL window
Replace the generated program
Open Program.cs, remove the template code, and replace it with this documented minimal loop:
using Brutal.GlfwApi;
using Brutal.Numerics;
if (!Glfw.Init())
throw new Exception("Failed to initialize GLFW");
Glfw.WindowHint(GlfwWindowHint.ClientApi, 0);
var window = Glfw.CreateWindow(new GlfwWindow.CreateInfo
{
Title = "Hello BRUTAL",
Size = new int2(1280, 720),
});
while (!window.ShouldClose)
Glfw.PollEvents();
Glfw.Terminate();
Glfw.Init() starts GLFW and returns a success flag. The client-api hint is set to zero so GLFW creates a window without selecting OpenGL or another graphics API. The window is 1,280 by 720 pixels, the loop continues until the user closes it, and Glfw.PollEvents() processes operating-system events each iteration. Glfw.Terminate() releases GLFW resources when the loop ends.
Run it
dotnet run
A window titled “Hello BRUTAL” should appear. Closing it should return you to the terminal without an unhandled initialization error. This is a successful first-project smoke test: it demonstrates that the .NET project was created, NuGet resolved the packages, GLFW initialized, events were polled and shutdown ran correctly.
What the window test does not do
The example intentionally has no graphics API. It clears no framebuffer, submits no command buffer and draws no pixels. A blank window is therefore expected. Treat it as proof of project and window plumbing, not proof that a renderer or game loop is complete.
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
When the window works, make a small commit or copy of the project before adding more systems. If a later graphics change fails, you can return to a known-good GLFW baseline instead of debugging project creation and rendering at the same time.
Turn the smoke test into a game project
BRUTAL does not impose a scene graph, editor or renderer. Build your project in increments so that each new subsystem has a clear reason and a testable result.
1. Choose and add a rendering path
For Vulkan rendering, the repository lists these package families:
| Purpose | Packages named by the repository | What you would own |
|---|---|---|
| Vulkan API abstractions | Ahwoo.Brutal.Vulkan.Abstractions |
Instance and device setup, queues, command submission and synchronization in your renderer. |
| Vulkan memory allocation | Ahwoo.Brutal.Vulkan.Vma |
Resource lifetime, allocation strategy and safe destruction around your engine’s ownership rules. |
| Runtime shader compilation | Ahwoo.Brutal.ShaderC |
Shader source organization, compilation errors, caching and compatibility with your pipeline layouts. |
Add only the packages that match your chosen design. A Vulkan renderer also requires a Vulkan 1.3-capable GPU and current driver, unlike the initial window-only test. Use validation layers during development where practical; the Vulkan SDK is recommended for that workflow.
2. Establish a predictable update and render loop
The GLFW sample only polls events. A game normally separates event processing, simulation and drawing. One common shape is:
- Poll operating-system and input events.
- Advance game simulation using a measured or fixed time step.
- Update cameras, animations, world state and UI data.
- Record and submit rendering commands.
- Present the completed frame.
BRUTAL does not provide a mandatory loop or dictate whether you use fixed timestep simulation, variable timestep updates, an entity-component design or another architecture. Decide how shutdown, ownership, threading and error handling work before the codebase grows. Keep the first implementation small: one window, one clear color or triangle, one input action and one update path are enough to validate the foundation.
3. Add input and platform behavior
Use the GLFW layer to process keyboard, mouse and window events, then translate those events into an input abstraction owned by your game. Avoid allowing gameplay code to depend directly on every platform callback. A compact input state—pressed, released and held—makes it easier to test and to replace platform details later.
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
4. Add assets deliberately
The repository’s library table includes texture, glTF, FreeType and mesh-related packages, along with SDL and OpenGL packages for projects that need those technologies. Select an asset format and loading policy early. Decide whether assets are read directly from a development folder, packed into archives, converted to an internal format, or embedded in a release. Those choices affect loading time, memory use and how you reproduce a player’s installation.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
5. Add diagnostics before content multiplies
Ahwoo.Brutal.ImGui and Ahwoo.Brutal.ImPlot are listed for debug interfaces and plots. A development HUD can expose frame time, draw calls, memory counters, asset state and input values while you are still changing the renderer. Remove or disable it in release builds according to your own packaging policy.
6. Add physics, audio and networking only when the game needs them
The listed package families include Ahwoo.Brutal.Jolt and Ahwoo.Brutal.Box2D for physics, Ahwoo.Brutal.Fmod for audio, and Ahwoo.Brutal.RakNet for networking. These are optional systems, not installation requirements. Choose one physics model that matches your game rather than adding both by default. Similarly, do not introduce networking until you have defined authority, state replication and failure behavior.
7. Use concurrency intentionally
Ahwoo.Brutal.Concurrency is listed for parallel work. Background asset loading, visibility processing or simulation jobs can improve responsiveness, but they also create ownership and synchronization problems. First make a correct single-threaded path, then measure where parallelism is useful. Establish which data may be read or written by worker threads and how shutdown waits for outstanding work.
Suggested first-project sequence
A practical milestone plan keeps each stage demonstrable:
Recommended Free Tools
- Project bootstrap: create the console project, add Core and Glfw, and show the 1,280×720 window.
- Input proof: handle a close action and one keyboard or mouse action, displaying the resulting state in a debug message or overlay.
- Renderer proof: initialize one graphics API, clear the window or draw a single primitive, and shut down cleanly.
- Game loop: move one object using time-based simulation and render it every frame.
- Asset proof: load one texture or model and report a useful error when the file is missing or invalid.
- Gameplay slice: add one collision or physics interaction, one audio event and a restart path.
- Packaging: build on every target you intend to support, copy native libraries and assets, and test the release outside your development machine.
Do not interpret this sequence as a BRUTAL template. It is a risk-reduction order for a framework in which the game team owns the architecture.
Supported platforms and macOS qualification
Ahwoo lists Windows, Linux and macOS targets for its packages. The repository’s getting-started section, however, specifically names Windows or Linux for the documented setup. You can treat those two systems as the confirmed path for the first-window instructions above. Do not promise that the same native dependencies, GLFW behavior, Vulkan availability or build commands will work unchanged on macOS without verifying the relevant package and driver requirements for your project.
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
Cross-platform support also includes more than compiling C#. Your release process must account for graphics drivers, native runtime libraries, filesystem paths, window behavior, controller input, shader availability and asset case sensitivity. Test each target on a clean machine or virtualized build environment rather than assuming that a successful development build is portable.
Commercial use and BRUTAL’s licence obligations
The repository says BRUTAL is free for commercial games with no royalties. Its MIT-based licence still specifies release obligations. Before shipping, review the current LICENSE.txt and every package notice used by your build.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →- Include the BRUTAL copyright notice in your credits.
- Show the BRUTAL logo before gameplay starts.
- Ship
NOTICE.txtalongside the product. - Track the licences of third-party libraries separately; BRUTAL’s terms do not replace those obligations.
The repository states that non-profit projects, and cases where displaying the logo would harm the application’s purpose, may receive a waiver. It also says a separate commercial licence can be arranged. Obtain any waiver or alternative licence in writing and keep it with your release records. Do not assume that an exception applies automatically.
How BRUTAL compares with a general-purpose engine
The relevant choice is not simply which product has the fastest first window. It is how much of the engine and its maintenance you want to own.
| Decision axis | BRUTAL | General-purpose engines such as Unity, Unreal or Godot |
|---|---|---|
| Editor and scene tooling | No editor or scene graph is supplied; you build or choose your own tools. | Typically provide an editor and established scene or level workflows. |
| Rendering and engine architecture | Libraries and lower-level building blocks; your team designs the renderer and engine structure. | Provide a prebuilt rendering pipeline and broader default engine services. |
| Native API and memory control | More direct control, with corresponding responsibility for synchronization, lifetime and platform details. | More behavior is abstracted, which can accelerate production but limit low-level control. |
| Language and package workflow | C# project plus NuGet packages selected per subsystem. | Use the engine’s project format, editor and supported extension or package workflow. |
| Expected experience | Best suited to programmers comfortable designing and maintaining engine systems. | Usually easier for teams that want ready-made tools and conventions. |
| Cross-platform work | Possible across the listed targets, but you own platform testing and native integration. | More platform setup is packaged, although target-specific testing remains necessary. |
| Licensing and attribution | No royalties are stated for commercial games, with BRUTAL credit, logo and notice requirements plus third-party licences. | Terms, fees and attribution vary by engine and version; read the applicable licence. |
| Systems maintenance | Your team maintains the editor, asset pipeline, runtime services and engine conventions it creates. | The engine vendor or project maintainers provide more of those systems. |
Choose BRUTAL when control, a C# and NuGet workflow, and the ability to shape a custom engine outweigh the cost of building tools and maintaining systems. Choose a more complete engine when a team needs an editor, scene workflow and production-ready subsystems immediately.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Troubleshooting the first setup
dotnet is not found or reports the wrong SDK
Install the .NET 10 SDK and open a new terminal so the updated PATH is loaded. Run dotnet --version again before creating the project. Installing only a runtime will not provide dotnet new or package-management commands.
Free tools Windows power users keep installed
One-click scans. No signup required.
NuGet restore fails
Confirm that the project directory contains the generated .csproj, that the package names are typed exactly, and that the machine can reach its configured NuGet feed. Run dotnet restore from the project directory and read the first package or network error rather than repeatedly adding packages. A clean restore is required before diagnosing runtime behavior.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
The program will not compile after replacing Program.cs
Check that the two package references exist and that the file contains the using Brutal.GlfwApi; and using Brutal.Numerics; directives. Preserve the capitalization of namespaces and types. Delete no generated project file unless you understand the SDK settings it contains.
No window appears
Run from a local graphical session, not a headless terminal without a display server. Confirm that Glfw.Init() is succeeding and that the process has not exited immediately because of an exception. The sample requests no graphics API, so a Vulkan driver is not the first thing to troubleshoot for this particular test.
The window opens but rendering fails later
Separate window initialization from graphics initialization. Verify Vulkan 1.3 support, update the GPU driver, install the Vulkan SDK if you need validation layers, and enable validation output during development. Then check instance extensions, physical-device selection, queue-family availability, swapchain dimensions and resource lifetimes one at a time.
Closing the window leaves resources or a hanging process
Ensure the loop exits when window.ShouldClose becomes true and that shutdown waits for graphics work before destroying devices or native windows. Add logging around each subsystem’s initialization and disposal so the first incomplete teardown is visible.
Examples of BRUTAL projects and reported performance
The repository and Ahwoo’s product material list Kitten Space Agency, Torpedia, Art of the Rail, Gruntz, Afterskies and RimWorld’s Waylith engine as projects using BRUTAL or built on it. These examples show that the framework can underpin different kinds of software, but they do not establish that every BRUTAL project will have the same performance or tooling.
Ludeon Studios reported a 2–4× performance improvement for the Waylith engine compared with its Unity build in tests described for 2026. Ahwoo’s page also presents a reported 2.2× late-game colony-performance figure and a reduction from 14 to 6 minutes to load a 1,500-mod pack. Those are developer or vendor reports, not independent benchmarks. They depend on the tested game, hardware, workload and implementation, so they should not be used as a guaranteed result for a new project. Ahwoo also attributes the 2026 NZ Hi-Tech Awards Most Innovative Hi-Tech Creative Technology Solution award to Kitten Space Agency; an award is evidence of recognition, not a performance specification.
Release checklist for a first commercial build
- Build and run the release on every target you claim to support.
- Include all native libraries, shaders, fonts, textures, models and other runtime assets required by the build.
- Test on a machine that does not contain your development SDKs, source tree or environment variables.
- Review BRUTAL’s current
LICENSE.txt, package notices and third-party licences. - Place the required copyright notice in credits, show the BRUTAL logo before gameplay, and ship
NOTICE.txtunless you have a documented waiver or alternative commercial licence. - Record graphics-device requirements and a useful startup error for unsupported hardware.
- Keep a reproducible build command and a versioned list of NuGet packages.
Bottom line
Install BRUTAL as a set of NuGet dependencies in a .NET 10 C# project, not as a monolithic engine application. The official GLFW example is the right first checkpoint: it proves that your project, packages and window loop work, while deliberately stopping before graphics. From there, add a renderer, input, simulation, assets and optional systems in small, testable steps. BRUTAL is a strong fit when your team wants to design and own its engine architecture; it is a poor fit if you need a ready-made editor and scene-driven workflow immediately.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

