LibTmux.Workspace
0.0.0-alpha.7
Prefix Reserved
dotnet add package LibTmux.Workspace --version 0.0.0-alpha.7
NuGet\Install-Package LibTmux.Workspace -Version 0.0.0-alpha.7
<PackageReference Include="LibTmux.Workspace" Version="0.0.0-alpha.7" />
<PackageVersion Include="LibTmux.Workspace" Version="0.0.0-alpha.7" />
<PackageReference Include="LibTmux.Workspace" />
paket add LibTmux.Workspace --version 0.0.0-alpha.7
#r "nuget: LibTmux.Workspace, 0.0.0-alpha.7"
#:package LibTmux.Workspace@0.0.0-alpha.7
#addin nuget:?package=LibTmux.Workspace&version=0.0.0-alpha.7&prerelease
#tool nuget:?package=LibTmux.Workspace&version=0.0.0-alpha.7&prerelease
LibTmux.Workspace
Build tmux sessions from tmuxp workspace files, on top of LibTmux.
Alpha. The public API is not settled and can change between prereleases without notice, so pin an exact version.
$ dotnet add package LibTmux.Workspace --prerelease
Adds one dependency, YamlDotNet, which is why this is a package of its own rather than part of the client.
When you want this
You already describe your development sessions in tmuxp YAML and want to build them from .NET — a launcher, a devcontainer entrypoint, an internal CLI — with typed results instead of shelling out to another runtime.
Use it
session_name: api
start_directory: /tmp
windows:
- window_name: editor
layout: even-horizontal
focus: true
panes:
- shell_command: echo editing
- shell_command: echo watching
- window_name: server
panes:
- shell_command: echo serving
WorkspaceFile workspace = WorkspaceFile.Parse("""
session_name: api
start_directory: /tmp
windows:
- window_name: editor
panes:
- shell_command: echo editing
- window_name: server
panes:
- shell_command: echo serving
""");
WorkspaceResult result = await new WorkspaceBuilder(server).BuildAsync(workspace, ct);
Console.WriteLine($"{result.Session.Name}: {result.Windows.Count} windows");
Reading one off disk is the same call:
WorkspaceFile fromDisk = WorkspaceFile.Parse(File.ReadAllText("session.yaml"));
What the result tells you
BuildAsync returns what it built rather than throwing away a session because
one pane's command was wrong, so a partial build is something you can inspect
and report instead of a stack trace.
A document that describes no session is a WorkspaceFormatException — that one
is not partial, it is unusable.
What is in scope
This reads the workspace shape tmuxp writes: session name, start directory, windows, panes, layouts, options, and the commands to send.
It is not a tmuxp runtime. Plugins, before/after hooks, and tmuxp's own configuration search path are out of scope — if you need those, run tmuxp.
Related packages
| Package | Adds |
|---|---|
| LibTmux | The client. Required. |
| LibTmux.Query.Json | JSON for query documents |
| LibTmux.Mcp | A Model Context Protocol server, as a .NET tool |
Source, docs and issues: https://github.com/libtmux/libtmux-dotnet
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.0.0-alpha.7)
- YamlDotNet (>= 18.1.0)
-
net8.0
- LibTmux (>= 0.0.0-alpha.7)
- YamlDotNet (>= 18.1.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.0.0-alpha.7 | 55 | 8/16/2026 |
| 0.0.0-alpha.6 | 47 | 8/16/2026 |
| 0.0.0-alpha.5 | 43 | 8/16/2026 |
| 0.0.0-alpha.4 | 57 | 8/16/2026 |
| 0.0.0-alpha.3 | 49 | 8/16/2026 |
| 0.0.0-alpha.2 | 52 | 8/15/2026 |
| 0.0.0-alpha.1 | 49 | 8/15/2026 |
Alpha. LibTmux.Mcp is a different server: 42 tools across three safety tiers, six tmux:// resources and four workflow prompts, where it had five tools. Every tool answers a typed record with a JSON output schema rather than prose, and the tool names all changed. Nothing polls — tmux_run reports the shell's real exit status, tmux_wait_for_text sleeps on tmux's control-mode stream, and tmux_start_job carries work that outlives one call. Every capture keeps the newest lines and reports what it dropped. Subscriptions and the Tasks extension are served on the current protocol revision. No change to LibTmux itself. The public API is not settled and may change without notice between prereleases; pin an exact version. Full history: https://github.com/libtmux/libtmux-dotnet/blob/master/CHANGELOG.md