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
<PackageReference Include="LibTmux.Extensions.DependencyInjection" Version="0.1.1" />
<PackageVersion Include="LibTmux.Extensions.DependencyInjection" Version="0.1.1" />
<PackageReference Include="LibTmux.Extensions.DependencyInjection" />
paket add LibTmux.Extensions.DependencyInjection --version 0.1.1
#r "nuget: LibTmux.Extensions.DependencyInjection, 0.1.1"
#:package LibTmux.Extensions.DependencyInjection@0.1.1
#addin nuget:?package=LibTmux.Extensions.DependencyInjection&version=0.1.1
#tool nuget:?package=LibTmux.Extensions.DependencyInjection&version=0.1.1
LibTmux.Extensions.DependencyInjection
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 incrementsN. 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
Serveris a singleton. Handles are immutable and safe to share across threads.AddLibTmuxopens 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.
Serveris 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 incrementsN. 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.DependencyInjectionabstractions. - 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
Server: the handle this registers- Source:
src/LibTmux.Extensions.DependencyInjection; issues and history on GitHub - Package: NuGet
License
| Product | Versions 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. |
-
net10.0
- LibTmux (>= 0.1.1)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Options (>= 10.0.10)
-
net8.0
- LibTmux (>= 0.1.1)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.0)
- Microsoft.Extensions.Options (>= 8.0.0)
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.