BRUTAL

ahwootech活跃维护

用 C# 写游戏或自研引擎的开源框架,直接调用 Vulkan 等原生 API 和底层库,省去自己搭底层设施的麻烦。

A free, open source C# framework for making games, or your own game engine. Direct access to native APIs and Vulkan, with the low-level libraries around them. The foundation under Kitten Space Agency and RimWorld's Waylith engine.

v2026.10.1发布于 2026-10-23 05:18 UTC2,428star +34 / 7 天159fork同步于 2026-11-10 17:46 UTC

怎么上手

由 README 提炼,执行前请确认
dotnet new console -n HelloBrutal
dotnet add package Ahwoo.Brutal.Core
dotnet add package Ahwoo.Brutal.Glfw
dotnet run
硬件要求按 README 说明

渲染需要支持 Vulkan 1.3 的 GPU 及最新驱动;开发验证层需装 Vulkan SDK;系统支持 Windows 或 Linux。README 未说明显存要求。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

免费开源的 C# 游戏框架,直连原生 API 与 Vulkan,可当游戏引擎底座

用 C# 写游戏或自研引擎的开源框架,直接调用 Vulkan 等原生 API 和底层库,省去自己搭底层设施的麻烦。

核心能力

  • 自定义 interop 层让 C# 直接调用原生 API
  • 按需引用 NuGet 包,只取所需库
  • 内置无分配内存、字符串与集合类型
  • 提供 Vulkan、GLFW、ImGui、FMOD、Jolt 等绑定
  • 自带作业调度、日志与本地化基础模块

容易踩的坑

需要 .NET 10 SDK,版本过低无法编译;仓库暂无项目文件和构建脚本,只能先用 NuGet 包;商业产品需在致谢页署名、游戏开始前显示 BRUTAL logo 并附带 NOTICE.txt,否则需单独商业授权。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

2 个版本v2026.10.1
  1. v2026.10.02026.10.0 - initial public release2026-10-28 · 2026-10-28 00:57 UTC
    查看更新说明

    Known issues

    • Jolt 2026.10.2's native library is older than its bindings: valid triangle meshes fail, and many mesh and ray calls throw EntryPointNotFoundException (#13). The next release fixes it.
    • Box2D 2026.10.1 binds 64 of its 484 functions to entry points the native library doesn't export, such as b2Rot_GetAngle (#16).
    • NativeList.Insert never updates Capacity, so the next Add writes past the allocation (#11).
    • GlfwBackend.GetClipboardText throws when the clipboard holds no text, crashing the app on paste (#8); #9 fixes it.
    • ISlangBlob.GetBufferSize returns the wrong size on Windows (#22).
    • Sdl.PInvoke.GLGetProcAddress can't be passed to Glad.Initialize() (#18).

    Thanks

    To @renancamm and @LaurensDeV, for fixing this repository's links on launch day.

    Packages

    Ahwoo.BRUTAL.Fmod binds FMOD but doesn't ship its binaries: FMOD's licence doesn't allow it, so bring your own.

    LibraryVersion
    Box2D2026.10.1
    Collections2026.10.1
    Concurrency2026.10.1
    Core2026.10.1
    Fmod2026.10.3
    FreeType2026.10.1
    Glfw2026.10.4
    Gli2026.10.1
    Gltf2026.10.2
    ImGui, ImGui.Abstractions, ImGui.Backends, ImGui.Extensions, ImGui.FreeType, ImPlot2026.10.2
    Interop2026.10.1
    Jolt2026.10.2
    Ktx2026.10.1
    Localization2026.10.2
    Logging2026.10.2
    Maths2026.10.1
    Memory2026.10.1
    MeshOptimizer2026.10.1
    Monitor.Common, Monitor.Host2026.10.2
    NativeFileDialog2026.10.2
    NotCurses2026.10.0
    Numerics2026.10.1
    OpenAl2026.10.2
    OpenGl2026.10.1
    RakNet2026.10.2
    Render.Common, Render.Debug, Render.Mesh2026.10.1
    RenderDoc, RenderDoc.ImGui2026.10.2
    Sdl, Sdl.Image, Sdl.Mixer, Sdl.Ttf2026.10.2
    ShaderC2026.10.2
    Slang2026.10.1
    Stb2026.10.2
    Strings2026.10.1
    Texture, Texture.Abstractions2026.10.2
    Vulkan, Vulkan.Abstractions, Vulkan.Vma2026.10.2
    ZLib2026.10.1

    </detai

  2. v2026.10.12026.10.1 - Update Slang, Vulkan, Gltf and ImGui. Offload natives to sub-packages.最新正式版2026-10-23 · 2026-10-23 05:18 UTC

    Fixed

    • GlfwBackend.GetClipboardText throws when the clipboard holds no text, crashing the app on paste (#8)
    • ISlangBlob.GetBufferSize returns wrong value on Windows (#22)

    Pull requests applied

    • Return null from GlfwBackend.GetClipboardText when the clipboard holds no text (#9) by @LaurensDeV
    • Make version helper (#15) by @sGo7-Dev
    • Find the system Vulkan loader on macOS and Linux (#21) by @Capsup

    Merged into this repository

    • Fix forum links in CONTRIBUTING.md (#6) by @renancamm
    • Fix the remaining forum links (#10) by @LaurensDeV
    • docs: add gruntz to the projects using brutal (#12) by @rocket2guns

    Thanks

    To @LaurensDeV, @sGo7-Dev, @Capsup, @renancamm and @rocket2guns.

    Packages

    LibraryPackagesVersion
    Box2DAhwoo.BRUTAL.Box2D, Ahwoo.BRUTAL.Box2D.Native2026.10.1 → 2026.10.2
    CollectionsAhwoo.BRUTAL.Collections2026.10.1 → 2026.10.2
    ConcurrencyAhwoo.BRUTAL.Concurrency2026.10.1 → 2026.10.2
    CoreAhwoo.BRUTAL.Core2026.10.1 → 2026.10.4
    FmodAhwoo.BRUTAL.Fmod2026.10.3 → 2026.10.4
    FreeTypeAhwoo.BRUTAL.FreeType2026.10.1 → 2026.10.2
    GlfwAhwoo.BRUTAL.Glfw, Ahwoo.BRUTAL.Glfw.Native2026.10.4 → 2026.10.5
    GliAhwoo.BRUTAL.Gli, Ahwoo.BRUTAL.Gli.Native2026.10.1 → 2026.10.2
    GltfAhwoo.BRUTAL.Gltf2026.10.2 → 2026.10.3
    ImGuiAhwoo.BRUTAL.ImGui, Ahwoo.BRUTAL.ImGui.Abstractions, Ahwoo.BRUTAL.ImGui.Backends, Ahwoo.BRUTAL.ImGui.Extensions, Ahwoo.BRUTAL.ImGui.FreeType, Ahwoo.BRUTAL.ImGui.FreeType.Native, Ahwoo.BRUTAL.ImGui.Native, Ahwoo.BRUTAL.ImPlot, Ahwoo.BRUTAL.ImPlot.Native2026.10.2 → 2026.10.3
    InteropAhwoo.BRUTAL.Interop2026.10.1 → 2026.10.2
    JoltAhwoo.BRUTAL.Jolt, Ahwoo.BRUTAL.Jolt.Native2026.10.2 → 2026.10.4
    KtxAhwoo.BRUTAL.Ktx, Ahwoo.BRUTAL.Ktx.Native2026.10.1 → 2026.10.2
    LocalizationAhwoo.BRUTAL.Localization2026.10.2 → 2026.10.3
    LoggingAhwoo.BRUTAL.Logging2026.10.2 → 2026.10.3
    MathsAhwoo.BRUTAL.Maths2026.10.1 → 2026.10.3
    MemoryAhwoo.BRUTAL.Memory2026.10.1 → 2026.10.2
    MeshOptimizerAhwoo.BRUTAL.MeshOptimizer, Ahwoo.BRUTAL.MeshOptimizer.Native2026.10.1 → 2026.10.2
    MonitorAhwoo.BRUTAL.Monitor.Common, Ahwoo.BRUTAL.Monitor.Host2026.10.2 → 2026.10.3
    NativeFileDialogAhwoo.BRUTAL.NativeFileDialog, Ahwoo.BRUTAL.NativeFileDialog.Native2026.10.2 → 2026.10.3
    NotCursesAhwoo.BRUTAL.NotCurses, Ahwoo.BRUTAL.NotCurses.Native2026.10.0 → 2026.10.1
    NumericsAhwoo.BRUTAL.Numerics2026.10.1 → 2026.10.2
    OpenAlAhwoo.BRUTAL.OpenAl, Ahwoo.BRUTAL.OpenAl.Native2026.10.2 → 2026.10.3
    OpenGlAhwoo.BRUTAL.OpenGl, Ahwoo.BRUTAL.OpenGl.Native2026.10.1 → 2026.10.2
    RakNetAhwoo.BRUTAL.RakNet, Ahwoo.BRUTAL.RakNet.Native2026.10.2 → 2026.10.3
    RenderAhwoo.BRUTAL.Render.Common, Ahwoo.BRUTAL.Render.Debug, Ahwoo.BRUTAL.Render.Mesh2026.10.1 → 2026.10.2
    RenderDocAhwoo.BRUTAL.RenderDoc, Ahwoo.BRUTAL.RenderDoc.ImGui2026.10.2 → 2026.10.3
    SdlAhwoo.BRUTAL.Sdl, Ahwoo.BRUTAL.Sdl.Image, Ahwoo.BRUTAL.Sdl.Image.Native, Ahwoo.BRUTAL.Sdl.Mixer, Ahwoo.BRUTAL.Sdl.Mixer.Native, Ahwoo.BRUTAL.Sdl.Native, Ahwoo.BRUTAL.Sdl.Ttf, Ahwoo.BRUTAL.Sdl.Ttf.Native2026.10.2 → 2026.10.3
    ShaderCAhwoo.BRUTAL.ShaderC, Ahwoo.BRUTAL.ShaderC.Native2026.10.2 → 2026.10.3
    SlangAhwoo.BRUTAL.Slang, Ahwoo.BRUTAL.Slang.Native2026.10.1 → 2026.10.3
    StbAhwoo.BRUTAL.Stb, Ahwoo.BRUTAL.Stb.Native2026.10.2 → 2026.10.3
    StringsAhwoo.BRUTAL.Strings2026.10.1 → 2026.10.2
    TextureAhwoo.BRUTAL.Texture, Ahwoo.BRUTAL.Texture.Abstractions2026.10.2 → 2026.10.3
    VulkanAhwoo.BRUTAL.Vulkan, Ahwoo.BRUTAL.Vulkan.Abstractions, Ahwoo.BRUTAL.Vulkan.Native, Ahwoo.BRUTAL.Vulkan.Vma, `Ahwoo.BRUTA

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    BRUTAL Framework

    A free, open source C# framework for making games, or your own game engine.

    BRUTAL is a framework. You can make a game directly with it, or use it as the foundation for a separate engine. We made Kitten Space Agency directly on BRUTAL. Ludeon built their Waylith engine on it to move RimWorld off Unity.

    At its core is a custom interop layer giving C# direct access to native APIs and libraries. Around that we've built mathematics, memory management, strings, collections, job scheduling, logging, localization, and bindings for Vulkan, GLFW, Dear ImGui, FMOD, RakNet, Jolt and Box2D. BRUTAL doesn't make the architectural decisions for you. You write your own stack. You can use whatever NuGet packages you want, including third-party ones.

    It's called BRUTAL for a reason. In some ways it's much harder to use than Unity, Unreal or Godot. In other ways, particularly if you're doing something unusual, it's considerably easier. You actually have to know what you want to do first.

    Why

    You are only as independent as your tools are.

    Developers have surrendered an extraordinary amount of control over their work to companies whose interests are not necessarily aligned with their own. We're not suggesting everyone should make their own game engine. We're suggesting every developer should have the option to, without having to spend four years building the foundations first.

    What that means in practice:

    • Free, including for commercial games. No royalties. We don't want a percentage of your game's revenue. We ask for credit.
    • Open source. The source is here under an MIT-based licence. If one day we stop being accountable to developers, you can fork it and go your own way.
    • Deliberately small. We do a few low-level things well: interop, memory, concurrency, maths, strings, and bindings to native libraries, on the latest C# and Vulkan. We avoid allocations and unnecessary overhead and use unmanaged memory and unsafe code where it makes sense.
    • A foundation, like a kernel. Think of the Linux kernel and something like Ubuntu. It's not an exact comparison, but it gets the idea across. We provide the foundation and you build your own systems on top.

    What BRUTAL is not

    BRUTAL is not trying to be a general-purpose engine. There is no editor, no scene graph and no renderer, and we're not adding them. We push back on efforts to add more, because adding everything is how the industry ended up with the kind of engines we don't want to use. Pull requests that drift away from a clear purpose will be rejected.

    Projects using BRUTAL

    ProductStudioEngine (if any)
    RimWorldLudeon StudiosWaylith
    Kitten Space AgencyRocketWerkzDirect on BRUTAL
    TorpediaRocketWerkzDirect on BRUTAL
    Art of the RailRocketWerkzDirect on BRUTAL
    GruntzRocketWerkzDirect on BRUTAL
    AfterskiesFloating Origin InteractiveDirect on BRUTAL

    Ludeon report 2 to 4 times the performance of the Unity build in their own tests, with the vast majority of existing mods still compatible. See their Steam announcement.

    Kitten Space Agency is a free pre-alpha spaceflight simulation. It runs a solar system at real scale, and is the first major project built directly on BRUTAL. Download it on Ahwoo and see the technology yourself.

    What is in the box

    Each top-level folder in this repository is one library, published as a NuGet package. Reference only the ones you need.

    LibraryWhat it is
    Brutal.CoreBase types, attributes, platform detection, pointer helpers, Roslyn analyzers
    Brutal.InteropThe custom interop layer that gives C# direct access to native APIs
    Brutal.MemoryUnmanaged memory management and allocators
    Brutal.CollectionsCollections that don't allocate
    Brutal.StringsString building and handling without allocation
    Brutal.Maths, Brutal.NumericsVector, matrix and numeric types
    Brutal.ConcurrencyJob system and threading
    Brutal.LoggingLogging
    Brutal.LocalizationLocalization
    Brutal.Vulkan, Brutal.Vulkan.Abstractions, Brutal.Vulkan.VmaVulkan bindings, abstractions and the Vulkan Memory Allocator
    Brutal.OpenGlOpenGL bindings
    Brutal.ShaderC, Brutal.SlangShader compilation
    Brutal.Glfw, Brutal.Sdl, Brutal.Sdl.Image, Brutal.Sdl.Mixer, Brutal.Sdl.TtfWindowing and input, with SDL's image, audio mixing and font add-ons
    Brutal.ImGui, Brutal.ImGui.*, Brutal.ImPlotDear ImGui and ImPlot bindings, docking branch
    Brutal.Render.MeshMesh utilities
    Brutal.Texture, Brutal.Texture.Abstractions, Brutal.Ktx, Brutal.Gli, Brutal.StbTexture loading, KTX and compressed formats, image decoding
    Brutal.Gltf, Brutal.MeshOptimizerglTF loading and mesh optimisation
    Brutal.FreeTypeFont rasterisation
    Brutal.Fmod, Brutal.OpenAlAudio
    Brutal.RakNetNetworking
    Brutal.Jolt, Brutal.Box2D3D and 2D physics
    Brutal.Monitor.Common, Brutal.Monitor.Host, Brutal.RenderDoc, Brutal.RenderDoc.ImGuiRuntime monitoring and RenderDoc capture integration
    Brutal.NativeFileDialog, Brutal.NotCurses, Brutal.ZLibNative file dialogs, terminal UI, compression

    Third-party notices for each library live in its LICENSES folder, Brutal.ImGui/LICENSES say.

    Getting started

    Prerequisites

    • .NET 10 SDK
    • A Vulkan 1.3 capable GPU with current drivers (if you render)
    • The Vulkan SDK if you want validation layers while developing
    • Windows or Linux

    Your first window

    Create a project and add Core and Glfw:

    dotnet new console -n HelloBrutal
    cd HelloBrutal
    dotnet add package Ahwoo.Brutal.Core
    dotnet add package Ahwoo.Brutal.Glfw
    

    Replace Program.cs:

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

    That opens a window with no graphics API. For a minimal sample of every package, see samples.

    What you add next is up to you:

    • Rendering: Ahwoo.Brutal.Vulkan.Abstractions and Ahwoo.Brutal.Vulkan.Vma for a Vulkan renderer, Ahwoo.Brutal.ShaderC to compile shaders at runtime.
    • Debug UI: Ahwoo.Brutal.ImGui and Ahwoo.Brutal.ImPlot.
    • Parallelism: Ahwoo.Brutal.Concurrency for the job system.
    • Audio and networking: Ahwoo.Brutal.Fmod, Ahwoo.Brutal.RakNet.

    Questions and "how do I" threads go on the Guides and Help forum.

    Building from source

    This is the source for every published package. Project files, a solution and build scripts are coming. Until then use the NuGet packages, and use this repository to read and fork the code.

    git clone https://github.com/ahwootech/BRUTAL.git
    

    Licence

    BRUTAL is free to use, modify and distribute, including in commercial games. There are no royalties and we don't want a percentage of your game's revenue.

    The licence is based on MIT with an added attribution requirement. A game or product built with BRUTAL:

    1. includes the BRUTAL copyright notice in its credits screen, or equivalent (section 2.1)
    2. shows the BRUTAL logo before gameplay starts (section 2.2)
    3. ships NOTICE.txt alongside the product (section 2.3)

    If you don't want to do that, we can arrange a separate commercial licence. We also waive the logo requirement for non-profit projects and where displaying it would be detrimental to the application's purpose.

    BRUTAL is open source. There are already OSI-approved licences that allow graphical attribution. Ours is not yet OSI approved because we have not submitted it yet. We intend to, and to develop the licence with community feedback. See LICENSE.txt for the full text.

    Third-party components keep their own licences. Section 4.0 points at the LICENSES folder at the root of each NuGet package; in this repository, those notices are in the LICENSES folder of each library that redistributes them.

    Contributing

    You can submit PRs and issues. We are a small team and maintaining a public framework is going to be a lot of work, so please be patient with us. We'll see what happens, assess the problems, and change our workflows as necessary. What won't change is BRUTAL's scope.

    Before opening a PR, read CONTRIBUTING.md. It covers scope, what we expect from AI-assisted contributions, the contribution grant in section 5.0 of the licence, and the sign-off every commit needs. Small changes you understand and have tested, with a clear purpose, are the ones that will get merged.

    Community

    Credits

    BRUTAL was made by the RocketWerkz Enterprise team and others, named in CONTRIBUTORS.md. When we talk about wanting credit for BRUTAL, these are the people we are talking about.

    BRUTAL is Copyright (c) 2024 Ahwoo Limited.