# Getting started

Source: https://libtmux.org/en/csharp/latest/guides/getting-started/

> Run a complete program with this language library.

Use [`LibTmux`](<https://libtmux.org/en/csharp/latest/reference/#LibTmux>) to create sessions, send input and read pane output from C#.
The [complete capture program](https://libtmux.org/en/csharp/latest/examples/capture-pane-output/) includes
imports, its entry point, project files, dependency setup and a run command.

## Run the smallest thing that proves it works

Open that example in an empty directory and save the files using their displayed
names. Its setup pins the library revision that was used to execute the program.
It needs tmux on `PATH` and the native tools named on the example page.

The program creates a private server, sends a command, waits for the complete
line `libtmux capture ready`, then cleans up. A timeout or command failure is
reported. It does not need an existing tmux session.

## What just happened

[`Pane.CaptureAsync`](<https://libtmux.org/en/csharp/latest/reference/libtmux-pane-captureasync/>) reads visible pane lines. The complete program passes a
cancellation token, compares whole lines and bounds its waits with a
[`CancellationTokenSource`](https://learn.microsoft.com/en-us/dotnet/api/system.threading.cancellationtokensource?view=net-10.0). Its [`OwnedServerScope`](<https://libtmux.org/en/csharp/latest/reference/libtmux-ownedserverscope/>) owns the private server and
is disposed with `await using`.

## Connect to an existing server

Use the [complete attach program](https://libtmux.org/en/csharp/latest/guides/attaching-to-tmux/) to select an existing
socket and find the `work` session. That example leaves tmux running; its
launcher owns setup and cleanup for trying it safely.

## Where to go next

[Sending keys](https://libtmux.org/en/csharp/latest/guides/sending-keys/) explains input, and
[Capturing output](https://libtmux.org/en/csharp/latest/guides/capturing-output/) explains completion.
[Querying and filtering](https://libtmux.org/en/csharp/latest/guides/querying-and-filtering/) selects a target.
