Ahwoo.BRUTAL.NotCurses
2026.10.0
Prefix Reserved
dotnet add package Ahwoo.BRUTAL.NotCurses --version 2026.10.0
NuGet\Install-Package Ahwoo.BRUTAL.NotCurses -Version 2026.10.0
<PackageReference Include="Ahwoo.BRUTAL.NotCurses" Version="2026.10.0" />
<PackageVersion Include="Ahwoo.BRUTAL.NotCurses" Version="2026.10.0" />
<PackageReference Include="Ahwoo.BRUTAL.NotCurses" />
paket add Ahwoo.BRUTAL.NotCurses --version 2026.10.0
#r "nuget: Ahwoo.BRUTAL.NotCurses, 2026.10.0"
#:package Ahwoo.BRUTAL.NotCurses@2026.10.0
#addin nuget:?package=Ahwoo.BRUTAL.NotCurses&version=2026.10.0
#tool nuget:?package=Ahwoo.BRUTAL.NotCurses&version=2026.10.0
Brutal.NotCurses
Modern C# bindings for notcurses — a library for building TUIs and character graphics on modern terminal emulators.
The bindings are generated from the upstream C headers (vendored as a git submodule under
submodules/notcurses) and bound against a minimal, core-only build of the native
notcurses-core library.
Layout
src/Brutal.NotCurses/— main library; generated bindings (*.gen.cs) live underGenerated/.src/Brutal.NotCurses.Generate/— binding generator (CLI); parses the C headers and emits the bindings.src/Brutal.NotCurses.Native/— native superbuild: builds ncurses and libunistring from source, then notcurses against them; zlib comes from the Brutal.ZLib package.submodules/notcurses/— vendored upstream source (git submodule).samples/— runnable examples.test/— xUnit tests.
Build
Prerequisites (all platforms)
- .NET 10 SDK — every project targets
net10.0. - CMake ≥ 3.22 and Ninja — the native build is driven by
cmake -G Ninjaon every platform. - Git submodules — both upstream sources must be checked out before building:
git submodule update --init - The native build downloads
libunistring-1.4.tar.xzfrom ftp.gnu.org on first build (hash-pinned) and caches it underbuild/cmake/<Configuration>/Brutal.NotCurses.Native-ep/. That directory is not removed byjust clean; delete it to force a full rebuild of the dependencies. - After bumping a dependency pin (the ncurses submodule or the libunistring tarball), run
just clean, which reconfigures the superbuild and rebuilds both dependencies. - RocketWerkz GitHub Packages access — restore pulls
RocketWerkz.BrutalPackage.Sdkand theRocketWerkz.Brutal.*packages. Configure anuget.config/ PAT with read access to the feed.
The native build is orchestrated by RocketWerkz.Brutal.Interop.NativeBuild: the
<NativesTarget> build produces notcurses-core, notcurses-ffi, ncursesw and unistring
and stages them into the package's runtimes/<rid>/native/ layout. Ahwoo.BRUTAL.ZLib
supplies zlib on all three platforms.
This is a core-only build: no multimedia (ffmpeg / OpenImageIO), no C++ layer, no demos, and zlib instead of libdeflate. ncurses and libunistring are built from source and shipped inside the package; zlib comes from the
Ahwoo.BRUTAL.ZLibdependency.
macOS (osx-arm64)
- Xcode Command Line Tools — provides
clang, the macOS SDK, andxcrun(the binding generator callsxcrun --sdk macosx --show-sdk-path). - Homebrew packages:
brew install cmake ninja pkg-config
Linux (linux-x64)
- A C toolchain (
build-essentialor equivalent). - Packages (Debian / Ubuntu names):
sudo apt install -y build-essential cmake ninja-build pkg-config
Windows (win-x64) — experimental
Upstream notcurses only supports a MinGW / MSYS2 (UCRT64) toolchain on Windows, so the native
build drives MSYS2's own gcc/cmake/ninja rather than MSVC.
Install MSYS2 (default location C:\msys64, or set MSYS2_ROOT), then the required packages are:
pacman -S --needed base-devel \
mingw-w64-ucrt-x86_64-toolchain \
mingw-w64-ucrt-x86_64-cmake \
mingw-w64-ucrt-x86_64-ninja \
mingw-w64-ucrt-x86_64-pkgconf
The package bundles libncursesw6.dll, libunistring-5.dll and libwinpthread-1.dll
alongside notcurses-core.dll; zlib.dll comes from Brutal.ZLib, so consumers do not need
MSYS2 on PATH.
export PATH="/c/msys64/ucrt64/bin:$PATH"
Commands
just build # dotnet build (Release by default)
just test # dotnet test
just pack # dotnet pack
just sample # run the samples project
Use just --set configuration Debug build for a Debug build.
Regenerating bindings
just generate
The generator parses submodules/notcurses/include/notcurses/notcurses.h and rewrites the
*.gen.cs files under src/Brutal.NotCurses/Generated/. The generated sources are committed,
so building on other platforms does not require regenerating them.
Regeneration works on:
- macOS — resolves system headers via the macOS SDK (
xcrun --sdk macosx --show-sdk-path). - Windows — resolves system headers via the MSYS2 UCRT64 install (
MSYS2_ROOT, defaultC:\msys64); no separate LLVM/Xcode install needed.
Linux isn't wired up yet (it currently falls through the macOS path and fails).
| 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. |
-
net10.0
- Ahwoo.BRUTAL.Core (>= 2026.10.1)
- Ahwoo.BRUTAL.Interop (>= 2026.10.1)
- Ahwoo.BRUTAL.Numerics (>= 2026.10.1)
- Ahwoo.BRUTAL.Strings (>= 2026.10.1)
- Ahwoo.BRUTAL.ZLib (>= 2026.10.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2026.10.0 | 398 | 10/15/2026 |
NotCurses now uses the shared RID-native package contract for its wrapper and superbuild. Packages include the required ncurses, unistring, MinGW, and ZLib native closure by platform, verified by an isolated external consumer calling notcurses_version.
**Full Changelog:** [v2026.9.1...v2026.10.0](https://github.com/RocketWerkz/brutal.notcurses/compare/v2026.9.1...v2026.10.0)