Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

BRUTAL is a free, open-source C# framework for building games or for creating your own engine. It targets Windows, Linux, and macOS through the same package family, but it does not provide the editor, scene graph, renderer, or project architecture you would get from a turnkey engine. To get started, install the .NET 10 SDK, add BRUTAL packages to a console project, create a GLFW window, and then add Vulkan and other systems deliberately.

This approach gives an experienced team control over native interop, memory, scheduling, and engine design. It also means that windowing, rendering, content management, input, audio, packaging, and platform testing remain your responsibility. The setup below takes you from an empty project to a cross-platform window and then shows how to build the rest of the stack without assuming that BRUTAL has already made those decisions for you.

What BRUTAL is—and what it is not

The project describes BRUTAL as a framework: you can make a game directly with it, or use it as the foundation for a separate engine. Its custom interop layer connects C# code to native APIs and libraries. Supporting facilities cover mathematics, memory, collections, job scheduling, logging, localization, and bindings for Vulkan, GLFW, Dear ImGui, FMOD, RakNet, Jolt, and Box2D.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

That scope is intentionally lower level than a general-purpose engine. BRUTAL does not include a built-in editor, scene graph, or renderer. You choose how entities, resources, scenes, render passes, tools, serialization, and build pipelines are represented. A small game can call the framework directly; a larger project will usually benefit from an engine layer that your team owns.

#1 Best Overall
Elebase USB to USB C Adapter for iPhone 18 Pro Max,USBC Car Charger Adapter | 4Pack Type C Female to A Male Cable Converter for Apple Duo 17 16 15 14 Plus,iWatch Watch 12 11 10,iPad 9 8 Air,Airpods 5 4
  • 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.

Why the distinction matters

  • Framework: supplies libraries and bindings while leaving the application architecture to you.
  • Engine foundation: lets you assemble a renderer, asset pipeline, editor, and runtime around those libraries.
  • Turnkey engine: would normally provide those systems and tools already; BRUTAL does not promise that level of integration.

Plan staffing and schedule accordingly. The freedom to select native libraries is valuable for unusual simulations or performance-sensitive games, but every selected subsystem becomes part of your maintenance and release workload.

Supported platforms and prerequisites

Ahwoo’s product information lists Windows, Linux, and macOS targets and states that every package supports the same three targets. The getting-started documentation describes Windows or Linux as the initial setup environments, so establish your first project on one of those systems and then validate the macOS build on actual macOS hardware before committing to a release schedule.

Item When you need it What to verify
.NET 10 SDK Always The SDK is installed and available to the dotnet command.
Current Vulkan-capable GPU drivers When the game renders through Vulkan The target machine exposes Vulkan 1.3 capability through its current driver.
Vulkan SDK When developing with validation layers The SDK and its validation-layer components are installed for the development machine.
Windows or Linux development host For the documented initial setup Your compiler, native dependencies, and package restore work on that host.
macOS test machine For a macOS release Windowing, graphics drivers, native library loading, signing, and distribution work on macOS.

A Vulkan 1.3-capable GPU is a rendering requirement, not a requirement for the framework’s non-rendering code. The first sample below creates a window only, so it can be used to verify the C# and GLFW portions before you add a graphics device.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Install the SDK and create a BRUTAL project

1. Install the .NET 10 SDK

Install the .NET 10 SDK on the development machine, then open a new terminal so the dotnet command sees the installation. Confirm the command is available before creating the project:

dotnet --version

The output should report a .NET 10 SDK version. If the command is missing or reports an older SDK, fix the SDK installation or the machine’s PATH before continuing; package restore and compilation will otherwise fail for reasons unrelated to BRUTAL.

2. Create a console project and add the core packages

Use the standard .NET CLI to create a small executable. These commands add the core framework and its GLFW binding:

Rank #2
Anker USB-C Hub, 5-in-1 USB Hub for Laptops, 4K HDMI Multiport Adapter | USB C Dongle with 90W Max Power Delivery, 3×5Gbps USB A Data Ports, for MacBook, Dell, and More (Charger Not Included)
  • 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.
dotnet new console -n HelloBrutal
cd HelloBrutal
dotnet add package Ahwoo.Brutal.Core
dotnet add package Ahwoo.Brutal.Glfw

Package restore should complete without errors and create or update the project file. Keep the package family at compatible versions when you add more BRUTAL components; upgrading one binding in isolation can create native or API mismatches.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

3. Replace Program.cs with a window-only sample

The following is the official minimal pattern. It initializes GLFW, requests a window with no client graphics API, polls events, and terminates GLFW when the window closes:

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();

Save the file and run it:

dotnet run

A 1280×720 window titled “Hello BRUTAL” should appear. Close it to leave the polling loop and call Glfw.Terminate(). This test deliberately does not create a Vulkan instance or draw a frame; its purpose is to prove that the managed project, BRUTAL core package, GLFW binding, and native window library are loading correctly.

What each part of the sample does

  • using Brutal.GlfwApi; exposes the window and event functions.
  • using Brutal.Numerics; supplies the int2 size value.
  • Glfw.Init() initializes GLFW and returns a success flag that should be checked.
  • Glfw.WindowHint(GlfwWindowHint.ClientApi, 0) asks GLFW not to create an OpenGL client context. That leaves the window ready for a graphics API you create yourself.
  • Glfw.CreateWindow receives a title and dimensions through GlfwWindow.CreateInfo.
  • window.ShouldClose is the loop condition, while Glfw.PollEvents() dispatches operating-system window events.
  • Glfw.Terminate() releases GLFW resources after the loop exits.

Add Vulkan rendering when the window test works

For Vulkan rendering, add the BRUTAL Vulkan packages:

dotnet add package Ahwoo.Brutal.Vulkan.Abstractions
dotnet add package Ahwoo.Brutal.Vulkan.Vma

Use Ahwoo.Brutal.ShaderC when you need runtime shader compilation. Install current Vulkan-capable drivers on every rendering machine. During development, install the Vulkan SDK if you want validation layers to identify incorrect API usage, lifetime errors, synchronization mistakes, or unsupported combinations.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A practical Vulkan bring-up order

  1. Keep the window test green. Run the GLFW-only program on each target before introducing Vulkan. This separates native window failures from graphics initialization failures.
  2. Check driver capability. Confirm that the development GPU and each planned minimum-specification GPU exposes Vulkan 1.3 through its current driver.
  3. Create the Vulkan instance. Query the extensions required by the GLFW surface for the active platform, then enable validation layers in development when the Vulkan SDK is installed.
  4. Select a physical device and queue families. Require the features and queue capabilities your renderer actually uses rather than assuming that every Vulkan 1.3 device has identical optional features.
  5. Create the surface and swapchain. Use the GLFW window to obtain a presentation surface, select a supported format and present mode, and recreate the swapchain when the drawable size changes.
  6. Add memory allocation. Use the VMA binding for allocation policy, but define ownership and lifetime rules in your own renderer.
  7. Compile and load shaders. Add ShaderC only when runtime compilation is part of your workflow; otherwise establish a separate shader build step and load its output.
  8. Render a diagnostic frame. Start with a clear color or triangle, then add resource upload, synchronization, and your actual render passes.

The framework supplies bindings and abstractions, not a finished renderer. You must choose command-buffer organization, synchronization strategy, descriptor management, asset formats, and error handling.

Rank #3
Sale
Anker USB C Hub, 7in1 Multi-Port USB Adapter, 4K@60Hz USBC to HDMI Splitter | 85W Max PD, 2 USB 3.0 & 1 USBC Data Ports, SD/TF Card Reader, for Laptops/Mac and Other Type C Devices (Charger Not Included)
  • 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.

Build a cross-platform project deliberately

Using the same BRUTAL package family on Windows, Linux, and macOS reduces API drift, but it does not remove platform work. Native drivers, filesystem conventions, window behavior, audio backends, distribution formats, and signing requirements still differ.

Separate portable game code from platform code

  • Keep simulation, rules, serialization formats, and most math in projects that do not call platform APIs directly.
  • Put GLFW, Vulkan surface creation, audio-device selection, filesystem paths, controller mapping, and distribution hooks behind interfaces owned by your engine layer.
  • Use a per-platform configuration or adapter only where behavior genuinely differs; do not fork the entire game loop for each operating system.
  • Run a smoke build on Windows, Linux, and macOS after changing native bindings or package versions.

Validate packaging on every target

A project that runs from an IDE is not necessarily distributable. Test a clean machine or clean user account for each operating system. Verify that native libraries are copied beside the executable or placed where the platform loader can find them, that shader and asset paths work outside the source tree, and that your release process handles platform-specific signing and permissions. BRUTAL leaves these concerns to the game team, so document them as part of your build pipeline rather than relying on a developer workstation’s global installations.

Compare your design choices on three axes

Axis BRUTAL’s position Decision you still make
Target coverage Packages are listed for Windows, Linux, and macOS. Which operating systems, CPU architectures, minimum drivers, and storefronts you will support.
Control versus tooling No built-in editor, scene graph, or renderer. Whether to build custom tools, integrate an external editor, or keep the project code-driven.
Rendering stack Vulkan bindings and related memory and shader packages are available. Renderer architecture, shader workflow, asset pipeline, synchronization, and fallback policy.

Add only the systems your game needs

BRUTAL’s modular packages let you avoid pulling every subsystem into a small project. Add a package when its capability is needed and keep the version family aligned.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Package or binding Use Planning implication
Ahwoo.Brutal.ImGui Immediate-mode debug and development UI Useful for in-game diagnostics, inspectors, and tools; decide whether it ships in release builds.
Ahwoo.Brutal.ImPlot Plots alongside ImGui Helpful for telemetry and profiling views.
Ahwoo.Brutal.Concurrency Job and concurrency support Define ownership, synchronization, and cancellation rules before parallelizing simulation or streaming.
Ahwoo.Brutal.Fmod FMOD audio binding Plan native audio deployment and licensing separately from the framework.
Ahwoo.Brutal.RakNet Networking binding Design packet ownership, security, versioning, and server deployment around the binding.
Jolt and Box2D bindings 3D and 2D physics options Select one according to the game’s simulation needs and establish a deterministic update policy if required.
SDL, texture, glTF, FreeType, monitoring, dialog, and compression packages Additional window/input, asset, font, diagnostics, UI, and data features listed by the repository Evaluate each native dependency for target support, redistribution terms, and maintenance cost before adoption.

Do not treat the package list as an engine architecture. It is a set of building blocks. Write down which subsystem owns resources, which thread may call it, how errors surface, and what happens when a device or native library is unavailable.

A maintainable engine layer around BRUTAL

Because BRUTAL does not impose a scene graph or editor, establish boundaries early. One workable arrangement is a platform layer for OS and native handles, a renderer layer for Vulkan objects and frame scheduling, a resource layer for shaders and assets, a simulation layer for game state and physics, and a tools layer for diagnostics and authoring. The exact names are yours; the important property is that game rules do not depend directly on swapchains or operating-system handles.

Define lifetime and ownership

  • Decide which object creates and destroys the GLFW window, Vulkan instance, device, allocator, swapchain, and command resources.
  • Use explicit shutdown ordering: stop worker jobs, flush GPU work, release renderer resources, destroy the window, then terminate GLFW.
  • Document unmanaged-memory ownership and unsafe sections. BRUTAL’s low-level approach makes accidental use-after-free or double-release bugs your responsibility.
  • Give every asynchronous job a clear input snapshot and output handoff so the simulation and renderer do not race.

Make diagnostics a first-class feature

Use BRUTAL’s logging facilities for startup configuration, selected GPU, enabled validation, package versions, and asset failures. Add an ImGui or ImPlot diagnostics screen during development if useful. Capture the exact platform, driver, and package set when a native failure occurs; “works on my machine” is especially costly when three operating systems and unmanaged libraries are involved.

Rank #4
Sale
UGREEN USB to USB C Adapter Combo 4-Pack, 10Gbps USB C Converter Space Gray | Data transfer & Fast charging for MacBook, iPhone 17/16/15, iPad, Samsung Galaxy, Apple Watch
  • 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
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Common setup failures and fixes

dotnet is not found or the wrong SDK is selected

Install the .NET 10 SDK, restart the terminal, and run dotnet --version again. If multiple SDKs are installed, inspect the project’s SDK selection and ensure the command is executing in the intended environment.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Package restore fails

Check the package name and spelling, confirm network access to the configured NuGet source, and inspect the project file for incompatible package versions. Restore after correcting the source or version; do not replace a missing BRUTAL package with an unrelated library while diagnosing the problem.

The window does not open

Run the GLFW-only sample before adding Vulkan. Confirm that Glfw.Init() returns true, that the process has access to the native GLFW library, and that the program reaches Glfw.CreateWindow. On a headless Linux machine, a display server may be required even though the C# project compiled successfully.

Vulkan initialization fails

Verify the GPU driver and Vulkan 1.3 capability, then enable validation layers with the Vulkan SDK during development. Check that the instance extensions requested by GLFW are enabled, that the selected device supports the surface format and presentation mode, and that the application handles swapchain recreation after a resize.

It works on one operating system but not another

Compare native library deployment, environment variables, filesystem paths, driver versions, window and input behavior, and compiler output. Build and run a minimal window test on the failing target, then add systems one at a time. This isolates whether the problem is in BRUTAL package loading, the platform adapter, or your renderer.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Performance expectations and trade-offs

BRUTAL’s low-level design can reduce overhead when a team uses its control over memory, native interop, and scheduling effectively, but the framework itself is not a guaranteed performance benchmark. Ahwoo’s product material summarizes tests reported by Ludeon comparing Waylith/RimWorld 1.7 with the Unity-based 1.6 build: a reported improvement of 2–4×, including 2.2× in a late-game colony test, and a load-time change from 14 minutes to 6 minutes for a 1,500-mod pack. These are Ludeon’s reported tests, not independent benchmarks, and they should not be treated as a promise for another game.

Best Value
Anker USB C Hub, 5-in-1 USBC to HDMI Splitter with 4K Display | 85W Max PD, 1 Powered USB-C 5Gbps & 2 Powered USB-A 3.0 5Gbps Data Ports, for MacBook Pro, MacBook Air, Dell and More (Black)
  • 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 trade-off is engineering effort. You gain authority over allocations, native calls, jobs, and engine structure, while taking responsibility for unsafe code, unmanaged memory, tooling, platform integration, and long-term maintenance. A team without experience in those areas should prototype the riskiest subsystem before committing an entire production to the framework.

Licensing, credits, and support

The README states that BRUTAL is free to use, modify, and distribute, including in commercial games, with no royalties. Its attribution conditions are material:

  • Include the BRUTAL copyright notice in your credits or an equivalent attribution.
  • Show the BRUTAL logo before gameplay.
  • Ship NOTICE.txt.

If those conditions do not fit your release, the project says a separate commercial licence can be arranged. Confirm the terms that apply to the exact version you ship and keep a copy of the relevant licence text with your release records.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

For technical help, use the official Guides and Help forum. Before changing package versions, consult Framework Updates and read the migration notes that apply to your current package set. Record the old and new versions, native dependencies, and any rendering or serialization changes so a rollback remains possible.

Pre-release checklist

  • The .NET 10 SDK is installed on every build agent.
  • The GLFW sample opens and closes correctly on Windows, Linux, and macOS test machines.
  • Rendering targets expose Vulkan 1.3 through current drivers.
  • Validation layers have been run during development where the Vulkan SDK is installed.
  • Native libraries, shaders, fonts, and assets are packaged without relying on developer-machine paths.
  • Window resizing, display changes, input focus, suspend/resume, and clean shutdown have been tested on each target.
  • Unsafe and unmanaged-memory ownership rules are documented and checked in code review.
  • BRUTAL attribution, logo display, and NOTICE.txt are present in the release build.
  • Package versions and platform-specific build instructions are recorded for the team.

Once this checklist passes, BRUTAL gives you a portable foundation rather than a prebuilt engine: the same C#-oriented framework can run across the three listed desktop targets, while your team retains control of the renderer, tools, and game architecture.

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.