# libtmux.Server.new_session

- **Module:** libtmux
- **Package:** libtmux
- **Language:** Python
- **Kind:** method
- **Source:** https://github.com/tmux-python/libtmux/blob/38e368c11117fb4aeb2f082d552cd4f210eae06a/src/libtmux/server.py#L2197
- **Page:** https://libtmux.org/en/py/stable/reference/libtmux-server-new_session/

tmux command: [`new-session`](/en/tmux/latest/manual/new-session/)

```
libtmux.Server.new_session(
    self,
    session_name: str | None = None,
    kill_session: bool = False,
    attach: bool = False,
    start_directory: StrPath | None = None,
    window_name: str | None = None,
    window_command: str | None = None,
    x: int | DashLiteral | None = None,
    y: int | DashLiteral | None = None,
    environment: dict[str, str] | None = None,
    args: t.Any,
    detach_others: bool | None = None,
    no_size: bool | None = None,
    client_flags: str | None = None,
    kwargs: t.Any,
) -> Session
```

Create new session, returns new :class:`Session`.

Uses ``-P`` flag to print session info, ``-F`` for return formatting
returns new Session object.

[`$ tmux new-session -d`](/en/tmux/latest/manual/new-session/) will create the session in the background
[`$ tmux new-session -Ad`](/en/tmux/latest/manual/new-session/) will move to the session name if it already
exists. todo: make an option to handle this.

## Examples

Sessions can be created without a session name (0.14.2+):

```python
>>> server.new_session()
Session($2 2)
```

Creating them in succession will enumerate IDs (via tmux):

```python
>>> server.new_session()
Session($3 3)
```

With a `session_name`:

```python
>>> server.new_session(session_name='my session')
Session($4 my session)
```

## Parameters

- `session_name` (`str | None`): ::
$ tmux new-session -s <session_name>
- `kill_session` (`bool`)
- `attach` (`bool`): create session in the foreground. ``attach=False`` is equivalent
to::
$ tmux new-session -d
- `start_directory` (`StrPath | None`)
- `window_name` (`str | None`)
- `window_command` (`str | None`)
- `x` (`int | DashLiteral | None`)
- `y` (`int | DashLiteral | None`)
- `environment` (`dict[str, str] | None`)
- `args` (`t.Any`)
- `detach_others` (`bool | None`)
- `no_size` (`bool | None`)
- `client_flags` (`str | None`)
- `kwargs` (`t.Any`)

## Returns

:class:`Session`

## Raises

- [`exc.BadSessionName`](/en/py/stable/reference/libtmux-exc-badsessionname/)

## In other ports

### Create a session

- Ruby: [`LibTmux::Server#new_session`](/en/ruby/latest/reference/libtmux-server-new_session/) (method)
- Lua: [`libtmux.Server:new_session`](/en/lua/latest/reference/libtmux-server-new_session/) (method)
- TypeScript: [`server.Server.newSession`](/en/ts/latest/reference/server-server-newsession/) (method)
- Rust: [`server.Server.new_session`](/en/rs/latest/reference/server-server-new_session/) (method)
- Go: [`tmux.Server.NewSession`](/en/go/latest/reference/tmux-server-newsession/) (method)
- Java: [`io.github.libtmux.Server.Server.newSession`](/en/java/latest/reference/io-github-libtmux-server-server-newsession/) (method)
- C#: [`LibTmux.Server.CreateSessionAsync`](/en/csharp/latest/reference/libtmux-server-createsessionasync/) (method)
- C++: [`libtmux::Server::new_session`](/en/cxx/latest/reference/libtmux-server-new_session/) (method)
- Swift: [`Server.newSession(named:startDirectory:windowName:width:height:)`](/en/swift/latest/reference/server-newsession(named-startdirectory-windowname-width-height-)/) (method)
- Kotlin: [`io.github.libtmux.kotlin.Server.newSession`](/en/kotlin/latest/reference/io-github-libtmux-kotlin-server-newsession/) (method)
- Scala: [`io.github.libtmux.scaladsl.Server.newSession`](/en/scala/latest/reference/io-github-libtmux-scaladsl-server-newsession/) (method)
