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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Ahwoo.BRUTAL.NotCurses" Version="2026.10.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ahwoo.BRUTAL.NotCurses" Version="2026.10.0" />
                    
Directory.Packages.props
<PackageReference Include="Ahwoo.BRUTAL.NotCurses" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Ahwoo.BRUTAL.NotCurses --version 2026.10.0
                    
#r "nuget: Ahwoo.BRUTAL.NotCurses, 2026.10.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Ahwoo.BRUTAL.NotCurses@2026.10.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Ahwoo.BRUTAL.NotCurses&version=2026.10.0
                    
Install as a Cake Addin
#tool nuget:?package=Ahwoo.BRUTAL.NotCurses&version=2026.10.0
                    
Install as a Cake Tool

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 under Generated/.
  • 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 Ninja on 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.xz from ftp.gnu.org on first build (hash-pinned) and caches it under build/cmake/<Configuration>/Brutal.NotCurses.Native-ep/. That directory is not removed by just 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.Sdk and the RocketWerkz.Brutal.* packages. Configure a nuget.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.ZLib dependency.

macOS (osx-arm64)

  • Xcode Command Line Tools — provides clang, the macOS SDK, and xcrun (the binding generator calls xcrun --sdk macosx --show-sdk-path).
  • Homebrew packages:
    brew install cmake ninja pkg-config
    

Linux (linux-x64)

  • A C toolchain (build-essential or 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, default C:\msys64); no separate LLVM/Xcode install needed.

Linux isn't wired up yet (it currently falls through the macOS path and fails).

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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)