# LibTmux::Server.new

- **Module:** LibTmux
- **Package:** libtmux
- **Language:** Ruby
- **Kind:** method
- **Source:** https://github.com/libtmux/libtmux-ruby/blob/da7b6191b9439e3c84fa1c9eeaa9168263ee7af4/gems/libtmux/lib/libtmux/server.rb#L141
- **Page:** https://libtmux.org/en/ruby/v0.1.1/reference/libtmux-server-new/

```
def self.new: (
  ?endpoint: ::LibTmux::Endpoint?,
  ?socket_path: ::String?,
  ?socket_name: ::String?,
  ?executable: ::String,
  ?max_requests: ::Integer,
  ?max_controls: ::Integer,
  ?close_timeout: ::Numeric,
  ?version_timeout: ::Numeric
) -> ::LibTmux::Server
```

Behavior: Borrowed bindings.

Behavior contract: Borrowed bindings.

## Examples

Connect a Server client to an existing endpoint and close it without stopping the daemon. The outer Server.start block owns the private demonstration server. Use Ruby 3.3 or newer with Bundler, and tmux 3.3a or newer, on Unix with `/bin/cat` and `/bin/sh` available. In an empty directory, save this `Gemfile`:

```ruby
source "https://rubygems.org"

gem "libtmux", "0.1.1"
```

Save this complete program as `server.rb`. Its `Server.start` block owns a private tmux server and stops it on exit, including after an error.

[Source example](https://github.com/libtmux/libtmux-ruby/blob/da7b6191b9439e3c84fa1c9eeaa9168263ee7af4/examples/api/server.rb).

```ruby
# frozen_string_literal: true

begin
  # docs:begin main
  require "libtmux"

  LibTmux::Server.start do |owner|
    owner.new_session(name: "work", command: ["/bin/cat"])
    server = LibTmux::Server.new(endpoint: owner.endpoint)
    begin
      puts "connected sessions: #{server.list_sessions.length}"
    ensure
      server.close
    end
    puts "sessions after client close: #{owner.list_sessions.length}"
  end
  # docs:end main
rescue StandardError => error
  warn "#{error.class}: #{error.message}"
  exit 1
end
```

Install the gem and run the program. An operation or cleanup error makes it exit unsuccessfully:

```console
$ bundle install && \
  bundle exec ruby server.rb
```

Expected output:

```text
connected sessions: 1
sessions after client close: 1
```

## Parameters

- `endpoint` (`::LibTmux::Endpoint?`)
- `socket_path` (`::String?`)
- `socket_name` (`::String?`)
- `executable` (`::String`)
- `max_requests` (`::Integer`)
- `max_controls` (`::Integer`)
- `close_timeout` (`::Numeric`)
- `version_timeout` (`::Numeric`)
