# Install and load a workspace

Source: https://libtmux.org/en/csharp/latest/workspace/guides/installation/

> Build the workspace command and load a session on a private tmux socket.

Build the documented `tmux-workspace` revision, then load a small session on a
private socket. Use a Unix shell with tmux 3.2a or newer on `PATH`.

## Build the command

Fetch the documented source revision, then build from its repository root.
Keep the exported `PATH` in this shell for the rest of the walkthrough.

```console
$ git clone --filter=blob:none https://github.com/libtmux/libtmux-dotnet.git
```

```console
$ cd libtmux-dotnet
```

```console
$ git fetch --depth=1 origin f77fe776ba67a04abb20ddbbc26cf4a000d63b74
```

```console
$ git checkout --detach FETCH_HEAD
```

Use the .NET 10 SDK to build the command:

```console
$ dotnet build src/LibTmux.Workspace.Cli/LibTmux.Workspace.Cli.csproj --configuration Release
```

```console
$ WORKSPACE_BIN="$(mktemp -d)"
```

```console
$ ln -s "$PWD/src/LibTmux.Workspace.Cli/bin/Release/net10.0/LibTmux.Workspace.Cli" "$WORKSPACE_BIN/tmux-workspace"
```

```console
$ export PATH="$WORKSPACE_BIN:$PATH"
```

Keep the build directory and the matching .NET runtime available when using
this launcher.

```console
$ tmux-workspace --help
```

## Create the input

Keep this shell open. Create a temporary working directory on a filesystem that
supports Unix sockets, then enter it:

```console
$ WORKSPACE_TMP="$(mktemp -d)"
```

```console
$ cd "$WORKSPACE_TMP"
```

Save this as `workspace.yaml`:

```yaml title="workspace.yaml"
session_name: workspace-guide
windows:
  - window_name: editor
    layout: even-horizontal
    panes: [null, null]
```

## Load and inspect

```console
$ tmux-workspace load \
    -S "$WORKSPACE_TMP/tmux.sock" \
    -f /dev/null \
    -d \
    --json \
    workspace.yaml
```

`-d` leaves the session detached. Inspect its panes using the same socket:

```console
$ tmux -S "$WORKSPACE_TMP/tmux.sock" list-panes -t '=workspace-guide:editor'
```

Attach interactively with `tmux -S "$WORKSPACE_TMP/tmux.sock" attach-session -t
'=workspace-guide'`. Detach with your tmux detach binding before continuing.

## Capture and clean up

```console
$ tmux-workspace freeze -S "$WORKSPACE_TMP/tmux.sock" --json workspace-guide
```

Try [export and reload](https://libtmux.org/en/csharp/latest/workspace/guides/export-session/) before cleanup. Capture cannot
recover original scripts, command history or application state.

Remove only the session created by this walkthrough when finished:

```console
$ tmux -S "$WORKSPACE_TMP/tmux.sock" kill-session -t '=workspace-guide'
```

The configuration remains in the temporary directory. Keep the session running
when following guides that continue this example.

## Continue

[Configuration](https://libtmux.org/en/csharp/latest/workspace/configuration/) describes execution fields;
[discovery](https://libtmux.org/en/csharp/latest/workspace/guides/discovery/) finds saved files. Read the [load reference](https://libtmux.org/en/csharp/latest/workspace/cli/load/)
and [automation](https://libtmux.org/en/csharp/latest/workspace/guides/automation/) for attachment, output and failure handling.

[CLI source](https://github.com/libtmux/libtmux-dotnet/blob/f77fe776ba67a04abb20ddbbc26cf4a000d63b74/src/LibTmux.Workspace.Cli/README.md).
