# server.Server.sessions

- **Module:** server
- **Package:** libtmux
- **Language:** TypeScript
- **Kind:** method
- **Source:** https://github.com/libtmux/libtmux-ts/blob/073b9d7dedad900bff6f5ec0ea47794e40225870/packages/libtmux/src/server.ts#L821
- **Page:** https://libtmux.org/en/ts/latest/reference/server-server-sessions/

```
async sessions(): Promise<Selection<Session>>
```

Every session on the server, read now.

This and its three siblings each take a snapshot of their own — one daemon
identity read and four listings per call — so calling several in a row
describes several different instants and pays for each. Inside a loop that
is an N+1: prefer one
[`snapshot`](/en/ts/latest/reference/server-server-snapshot/) and read [`sessions`](/en/ts/latest/reference/server-server-sessions/), [`windows`](/en/ts/latest/reference/server-server-windows/), [`panes`](/en/ts/latest/reference/server-server-panes/), and [`clients`](/en/ts/latest/reference/server-server-clients/)
off it, which is both cheaper and consistent.

Save this complete program as `sessions.ts`. With Bun 1.4.2 or newer,
tmux 3.3a or newer, and `libtmux` installed, run `bun `[`run`](/en/ts/latest/reference/server-server-run/)` sessions.ts`.
It creates and stops a private tmux server. A failed operation or cleanup
exits with an error; a cleanup error names the retained socket directory.

## Examples

```ts
import { strict as assert } from "node:assert";
import { mkdtemp, readdir, rm } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { Server, NoMatchError } from "libtmux";

const directory = await mkdtemp(join(tmpdir(), "ltx-example-"));
const server = new Server({
  socketPath: join(directory, "tmux.sock"),
  configFile: "/dev/null",
  timeoutMs: 5_000,
});
const failures: unknown[] = [];
try {
  await server.newSession({ name: "prod-api", shellCommand: "cat" });
  await server.newSession({ name: "dev-api", shellCommand: "cat" });
  const sessions = await server.sessions();
  assert.equal(sessions.count(), 2);
  console.log(
    "sessions:",
    sessions
      .map((item) => item.name)
      .sort()
      .join(", "),
  );
  const production = sessions.where({ name: { startsWith: "prod-" } }).one();
  assert.equal(production.name, "prod-api");
  console.log("production:", production.name);
  assert.equal(sessions.oneOrUndefined({ name: "missing" }), undefined);
  try {
    sessions.one({ name: "missing" });
    throw new Error("Expected the missing session to fail lookup");
  } catch (error) {
    if (!(error instanceof NoMatchError)) throw error;
    console.log("missing:", error.code);
  }
} catch (error) {
  failures.push(error);
} finally {
  try {
    if ((await readdir(directory)).includes("tmux.sock")) await server.kill();
    await rm(directory, { recursive: true });
  } catch (error) {
    failures.push(new Error(`Cleanup failed; inspect ${directory}`, { cause: error }));
  }
}
if (failures.length > 0) throw new AggregateError(failures, "Example failed");
```

## Guides

Pages that discuss `sessions`.

### Concepts

- [Filtering and queries](/en/ts/latest/concepts/queries/)

### Topics

- [Traversal](/en/ts/latest/topics/traversal/)

## In other ports

List the server’s sessions

| Language | Equivalent |
| --- | --- |
| Python | [`libtmux.Server.sessions`](/en/py/latest/reference/libtmux-server-sessions/) (property) |
| Ruby | [`LibTmux::Server#list_sessions`](/en/ruby/latest/reference/libtmux-server-list_sessions/) (method) |
| Lua | [`libtmux.Snapshot.sessions`](/en/lua/latest/reference/libtmux-snapshot-sessions/) (attribute) |
| PowerShell | [`LibTmux\Get-TmuxSession`](/en/powershell/latest/reference/libtmux-get-tmuxsession/) (cmdlet). Acquires sessions through [`-Server`](/en/powershell/latest/reference/libtmux-get-tmuxsession/#LibTmux%5CGet-TmuxSession.parameter.Server), with optional exact [`-Id`](/en/powershell/latest/reference/libtmux-get-tmuxsession/#LibTmux%5CGet-TmuxSession.parameter.Id) and [`-Name`](/en/powershell/latest/reference/libtmux-get-tmuxsession/#LibTmux%5CGet-TmuxSession.parameter.Name) selectors. |
| Julia | [`LibTmux.sessions`](/en/julia/latest/reference/libtmux-sessions/) (function). `sessions` reads membership from a captured `Snapshot` without contacting tmux. |
| Elixir | [`LibTmux.Snapshot.sessions/1`](/en/elixir/latest/reference/libtmux-snapshot-sessions-1/) (function). Returns a `Selection` of captured sessions without contacting tmux. |
| Rust | [`server.Server.sessions`](/en/rs/latest/reference/server-server-sessions/) (method) |
| Go | [`tmux.Server.Sessions`](/en/go/latest/reference/tmux-server-sessions/) (method) |
| Java | [`io.github.libtmux.Server.sessions`](/en/java/latest/reference/io-github-libtmux-server-server-sessions/) (method) |
| Kotlin | [`io.github.libtmux.kotlin.Server.sessions`](/en/kotlin/latest/reference/io-github-libtmux-kotlin-server-sessions/) (method) |
| Scala | [`io.github.libtmux.scaladsl.Server.sessions`](/en/scala/latest/reference/io-github-libtmux-scaladsl-server-sessions/) (method) |
| C# | [`LibTmux.Server.Sessions`](/en/csharp/latest/reference/libtmux-server-sessions/) (property) |
| F# | [`LibTmux.FSharp.Server.sessions`](/en/fsharp/latest/reference/libtmux-fsharp-server-sessions/) (function). Builds a deferred session query on `LibTmux.Server`. `Query.list` acquires the results; it does not traverse the handle’s captured membership. |
| C++ | [`libtmux::Server::sessions`](/en/cxx/latest/reference/libtmux-server-sessions/) (method) |
| Swift | [`Server.sessions()`](/en/swift/latest/reference/server-sessions()/) (method) |
