# Server, session, window, pane

Source: https://libtmux.org/en/ruby/v0.1.0.alpha.2/concepts/server-session-window-pane/

> How tmux servers, sessions, windows, panes and attached clients relate to each other.

libtmux models tmux's server, session, window, and pane objects:

```
Server
├── Session
│   └── Window
│       └── Pane
└── Client (attached view)
```

A `Server` contains sessions. Each [`Session`](<https://libtmux.org/en/ruby/v0.1.0.alpha.2/reference/libtmux-session-nvps/>) contains links to windows, and each
[`Window`](<https://libtmux.org/en/ruby/v0.1.0.alpha.2/reference/libtmux-window-1vfx/>) contains panes. Commands run inside a [`Pane`](<https://libtmux.org/en/ruby/v0.1.0.alpha.2/reference/libtmux-pane-14z6/>), where you send input and
capture output. A window can be linked to more than one session.

## Stable identity, not name or index

tmux assigns a unique ID to each session, window, and pane at creation. The ID
remains stable for that object's lifetime even if its name or index changes:

| Object | ID prefix | Example |
|--------|-----------|---------|
| Session | `$` | `$13` |
| Window | `@` | `@3243` |
| Pane | `%` | `%5433` |
| Server | - | identified by socket name or path instead |

Use stable IDs to identify the same tmux object across reads. Names and indexes
can change while a program is running.

## Client: a view, not a child

A tmux client represents a terminal attached to a session. Several clients can view
the same server, and each can switch sessions or windows independently. Client
fields describe the view at the time of the read.

A [control-mode connection](https://libtmux.org/en/ruby/v0.1.0.alpha.2/concepts/transports/) is also a client. It appears in
[`list-clients`](https://libtmux.org/en/tmux/latest/manual/list-clients/), counts toward `session_attached`, and affects
attachment-dependent behavior such as `destroy-unattached`. Closing the last
attached client can therefore destroy a session configured with that option.
