LibTmux.Extensions.DependencyInjection 0.1.1

Prefix Reserved
dotnet add package LibTmux.Extensions.DependencyInjection --version 0.1.1
                    
NuGet\Install-Package LibTmux.Extensions.DependencyInjection -Version 0.1.1
                    
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="LibTmux.Extensions.DependencyInjection" Version="0.1.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="LibTmux.Extensions.DependencyInjection" Version="0.1.1" />
                    
Directory.Packages.props
<PackageReference Include="LibTmux.Extensions.DependencyInjection" />
                    
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 LibTmux.Extensions.DependencyInjection --version 0.1.1
                    
#r "nuget: LibTmux.Extensions.DependencyInjection, 0.1.1"
                    
#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 LibTmux.Extensions.DependencyInjection@0.1.1
                    
#: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=LibTmux.Extensions.DependencyInjection&version=0.1.1
                    
Install as a Cake Addin
#tool nuget:?package=LibTmux.Extensions.DependencyInjection&version=0.1.1
                    
Install as a Cake Tool

LibTmux.Extensions.DependencyInjection

LibTmux.Extensions.DependencyInjection libtmux.org

Registers LibTmux with Microsoft.Extensions.DependencyInjection, so an application that already composes its services can take a tmux server handle as a dependency.

Add it to your project:

$ dotnet add package LibTmux.Extensions.DependencyInjection

Releases. Releases are numbered 0.1.N, and each release increments N. The API is not settled: any release may change or remove exported identifiers, and the changelog marks each break. Pin an exact version to avoid one.

Quick start

Register the server, then take it as a constructor parameter:

using Microsoft.Extensions.DependencyInjection;

var services = new ServiceCollection();
services.AddLibTmux(options => options with { SocketName = "build" });

Server is then injectable:

using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using LibTmux;

public sealed class Builder(Server server)
{
    public Task<IReadOnlyList<Session>> SessionsAsync(CancellationToken cancellationToken) =>
        server.GetSessionsAsync(cancellationToken);
}

The next block points the registration at a socket and resolves the handle. It uses server and ct from a tmux server of its own, and it throws if the resolved handle reaches no sessions:

ServiceCollection services = new();
services.AddLibTmux(options => options with { SocketName = server.ConnectionOptions.SocketName });

await using ServiceProvider provider = services.BuildServiceProvider();
Server injected = provider.GetRequiredService<Server>();

IReadOnlyList<Session> sessions = await injected.GetSessionsAsync(ct);
if (sessions.Count == 0)
{
    throw new InvalidOperationException("The injected Server reached no sessions.");
}

What AddLibTmux registers

  • Server is a singleton. Handles are immutable and safe to share across threads.
  • AddLibTmux opens a server without connecting: nothing runs tmux until a call needs it, and a tmux that restarts is picked up by the next call.
  • Nothing serializes tmux itself. One server applies commands in the order it receives them.

Bind options from configuration

ServerConnectionOptions is registered through IOptions<T>, so it binds from configuration. This example also references Microsoft.Extensions.Configuration and Microsoft.Extensions.Options.ConfigurationExtensions:

using LibTmux;
using Microsoft.Extensions.DependencyInjection;

var services = new ServiceCollection();
var configuration = new Microsoft.Extensions.Configuration.ConfigurationBuilder().Build();
configuration["LibTmux:SocketName"] = "build";
services.Configure<ServerConnectionOptions>(configuration.GetSection("LibTmux"));
services.AddLibTmux();

The options are immutable, so the callback receives a copy and returns one. It runs after binding, so it has the last word:

using System;
using Microsoft.Extensions.DependencyInjection;

var services = new ServiceCollection();
services.AddLibTmux(options => options with { CommandTimeout = TimeSpan.FromSeconds(5) });

When the options name no logger and the provider has an ILoggerFactory, one is taken from it, so tmux commands are logged with everything else.

What it leaves out

  • Scoped or transient lifetimes. Server is registered as a singleton.
  • Hosting. It registers services and starts nothing in the background.

Support and status

  • Releases. Releases are numbered 0.1.N, and each release increments N. The API is not settled: any release may change or remove exported identifiers, and the changelog marks each break. Pin an exact version to avoid one.
  • Dependencies. LibTmux and the Microsoft.Extensions.DependencyInjection abstractions.
  • tmux and .NET. The tmux versions LibTmux supports, on net8.0 and net10.0.
  • Systems. Linux, including WSL. macOS is best effort, without CI coverage. CI builds on Windows x64.

Documentation

License

MIT

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 was computed.  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

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
0.1.1 106 11/1/2026
0.1.0 128 10/25/2026
0.0.0-alpha.24 63 10/25/2026
0.0.0-alpha.23 100 10/24/2026
0.0.0-alpha.22 69 10/19/2026
0.0.0-alpha.21 66 10/11/2026
0.0.0-alpha.20 66 10/5/2026
0.0.0-alpha.19 63 10/4/2026
0.0.0-alpha.18 70 10/3/2026
0.0.0-alpha.17 88 9/27/2026
0.0.0-alpha.16 67 9/26/2026
0.0.0-alpha.15 76 9/20/2026
0.0.0-alpha.14 72 9/20/2026

LibTmux, LibTmux.FSharp, LibTmux.Testing, LibTmux.Query.Json, LibTmux.Extensions.DependencyInjection, LibTmux.Workspace, LibTmux.Workspace.Cli and LibTmux.Mcp share one version, so this release covers them together. What changed, per package and per release: https://github.com/libtmux/libtmux-dotnet/blob/master/CHANGELOG.md The public API is not settled and any release may change it; pin an exact version.