Icod.TermInfo.BerkeleyDb 1.16.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Icod.TermInfo.BerkeleyDb --version 1.16.0
                    
NuGet\Install-Package Icod.TermInfo.BerkeleyDb -Version 1.16.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="Icod.TermInfo.BerkeleyDb" Version="1.16.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Icod.TermInfo.BerkeleyDb" Version="1.16.0" />
                    
Directory.Packages.props
<PackageReference Include="Icod.TermInfo.BerkeleyDb" />
                    
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 Icod.TermInfo.BerkeleyDb --version 1.16.0
                    
#r "nuget: Icod.TermInfo.BerkeleyDb, 1.16.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 Icod.TermInfo.BerkeleyDb@1.16.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=Icod.TermInfo.BerkeleyDb&version=1.16.0
                    
Install as a Cake Addin
#tool nuget:?package=Icod.TermInfo.BerkeleyDb&version=1.16.0
                    
Install as a Cake Tool

Icod.TermInfo.BerkeleyDb

Pure-managed acquisition and deterministic publication for ncurses-compatible Berkeley DB Hash-v9 terminfo stores. Version 1.16 adds whole-file writing to the unchanged 1.15 reader API. The package targets .NET 8, 9, and 10 and depends only on matching-version Icod.TermInfo Runtime. No native library is required.

Read an explicit database

using Icod.TermInfo.BerkeleyDb;

var provider = new BerkeleyDbTerminalDescriptionProvider("./terminfo.db");
if (provider.TryLoad("xterm-256color", out var terminal))
    Console.WriteLine(terminal.Name);

Lookup tries the exact ordinal UTF-8 key first, then one distinct exact Latin-1 key after a clean miss when every character is representable. Malformed or identity-invalid found records never become misses or fall through to another encoding. Successful lookups are cached; misses and failures remain retryable. After replacing a database, construct a new provider to observe changed content that was previously loaded successfully; publication does not invalidate caches.

BerkeleyDbTerminalCatalogReader enumerates canonical and alias publications from an explicit file with deterministic ordering. BerkeleyDbSystemTerminalDescriptionProvider is the opt-in discovery provider: it preserves Runtime's environment/user/system precedence while supporting exact hashed files and absent-location .db companions. Runtime's conventional discovery remains unchanged.

Readers bound file size, record count where applicable, parser work, and index hops. They support the qualified Hash-v9 inline/overflow subset in both byte orders. Acquisition is not an atomic snapshot or general encoding detection.

Publish compiled entries

using Icod.TermInfo;
using Icod.TermInfo.BerkeleyDb;

byte[] data = File.ReadAllBytes("compiled-entry");
TerminalDescription parsed = CompiledTermInfoParser.Parse(data);
var entry = new BerkeleyDbTerminalDatabaseEntry(parsed.Name, parsed.Aliases, data);
BerkeleyDbTerminalDatabaseWriter.Write("./terminfo.db", new[] { entry });

The parent directory must exist. The default refuses an existing destination; new BerkeleyDbTerminalDatabaseWriterOptions(overwriteExisting: true) permits whole-file replacement. Supply exactly the entries to publish: writing does not merge with the old database or update pages in place.

Entries copy their aliases and compiled bytes. Names must be portable, globally unique identities and agree with the parsed payload, including alias order. Logical keys are exact UTF-8; the writer does not manufacture Latin-1 aliases, case-fold, or normalize names. Compiled bytes remain opaque validated payloads. Output is deterministic across entry enumeration order and uses little-endian Hash-v9, 4096-byte pages, mask-addressed primary buckets, collision chains, and overflow pages.

MaximumRecordCount defaults to 65,536 and bounds source enumeration. Each entry costs two records plus one per alias. MaximumDatabaseSize defaults to 64 MiB and bounds the image, not total heap usage. Parser limits are separate. Caller-owned allocations and blocked caller enumeration are outside these bounds.

Safe publication

The writer builds the complete image, acquires a cooperative exclusive lock, writes and flushes a unique sibling file, closes and reopens it through the production reader, verifies bytes/records/catalog, and commits by a same-directory move. Pre-commit failures preserve the old destination or its absence; owned temporary-file cleanup is best effort.

For terminfo.db, the persistent lock is .terminfo.db.icod-terminfo.lock. Its presence does not mean a writer is active. Do not delete it while cooperating writers might use the destination. Contention waits until acquisition or cancellation. Cancellation is observed through the final pre-move check; a successful commit remains successful if cancellation arrives during the move.

Replacement uses fresh metadata and inherited access controls. The immediate parent, destination, and lock must not be symbolic links or reparse points. Atomic visibility depends on supported filesystem move semantics. No universal power-loss durability, hostile ancestor-substitution protection, or native-writer coordination is promised. Windows readers may cause safe replacement refusal. There is no copy/delete fallback.

Commands and examples

icod-terminfo tic --database-format hashed -o ./terminfo.db source.ti
icod-terminfo tic --database-format hashed --force -s -o ./terminfo.db source.ti
icod-terminfo infocmp -A ./terminfo.db xterm-256color

Directory output remains the default. Explicit infocmp -A/-B files and human toe file operands use hashed acquisition. Ambient discovery and frozen JSON schemas retain their established behavior. Migration and catalog automation remain deferred to 1.17.

  • Public writer sample: controlled publication, alias lookup, and input-order determinism.
  • Writing guide: API, commands, exceptions, resource limits, and filesystem scope.
  • Acquisition guide: exact reader/discovery/catalog behavior.
  • API freeze: 12 exported public types; subtracting the three writer types reconstructs the frozen 1.15 reader API.
  • Release audit: exact candidate evidence.

The package remains LGPL-3.0-or-later. Native Berkeley DB and pinned ncurses are CI oracles only; no native code or runtime assets are shipped.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  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 (1)

Showing the top 1 NuGet packages that depend on Icod.TermInfo.BerkeleyDb:

Package Downloads
Icod.TermInfo.Catalogs

Immutable unified directory and hashed terminfo catalog models and bounded acquisition contracts.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.17.0 90 9/28/2026
1.16.0 82 9/27/2026
1.15.0 90 9/17/2026

1.16.0 adds deterministic pure-managed Hash-v9 whole-file publication, exact UTF-8 canonical/alias keys, chained hash pages and overflow, bounded input, and verified cooperative filesystem commit. The nine-type reader API and Runtime-only dependency remain unchanged; no native assets are shipped.