# tmuxp.workspace.builder.WorkspaceBuilderProtocol

- **Module:** tmuxp.workspace.builder
- **Package:** tmuxp
- **Language:** Python
- **Kind:** class
- **Source:** https://github.com/tmux-python/tmuxp/blob/153acdf6ff1268b14d3d03ed488f545a7123c8f1/src/tmuxp/workspace/builder/protocol.py#L28
- **Bases:** [`t.Protocol`](https://docs.python.org/3/library/typing.html#typing.Protocol)
- **Page:** https://libtmux.org/en/py/stable/workspace/reference/tmuxp-workspace-builder-workspacebuilderprotocol/

Contract a builder must satisfy to be driven by ``tmuxp load``.

A conforming builder is constructed with at least ``session_config`` and
``server`` (plus the optional ``plugins`` and ``on_*`` callbacks the classic
builder accepts). It exposes :meth:`build`, surfaces the populated tmux
session via :attr:`session`, and honors the plugin/progress integration
points the CLI drives.

Because the protocol carries data members (``session``, ``plugins``, the
``on_*`` callbacks), validate *instances* with :func:`isinstance`;
class-level ``issubclass`` checks are not supported for runtime-checkable
protocols with non-method members.

## Examples

A builder implementing the full contract satisfies the protocol:

```python
>>> from tmuxp.workspace.builder.protocol import WorkspaceBuilderProtocol
>>> class MiniBuilder:
...     plugins: list = []
...     on_progress = None
...     on_before_script = None
...     on_script_output = None
...     on_build_event = None
...     def __init__(self, session_config, server, **kwargs):
...         self._session_config = session_config
...     def build(self, session=None, append=False):
...         ...
...     def session_exists(self, session_name):
...         ...
...     def find_current_attached_session(self):
...         ...
...     @property
...     def session(self):
...         ...
>>> builder = MiniBuilder(session_config={}, server=None)
>>> isinstance(builder, WorkspaceBuilderProtocol)
True
```

An object missing the contract does not:

```python
>>> isinstance(object(), WorkspaceBuilderProtocol)
False
```

## Members

### Other members

- [`build`](/en/py/stable/workspace/reference/tmuxp-workspace-builder-workspacebuilderprotocol-build/) (method): Build the workspace, creating or populating a tmux session.
- [`find_current_attached_session`](/en/py/stable/workspace/reference/tmuxp-workspace-builder-workspacebuilderprotocol-find_current_attached_session/) (method): Return the session currently attached within ``$TMUX``.
- [`on_before_script`](/en/py/stable/workspace/reference/tmuxp-workspace-builder-workspacebuilderprotocol-on_before_script/) (attribute)
- [`on_build_event`](/en/py/stable/workspace/reference/tmuxp-workspace-builder-workspacebuilderprotocol-on_build_event/) (attribute)
- [`on_progress`](/en/py/stable/workspace/reference/tmuxp-workspace-builder-workspacebuilderprotocol-on_progress/) (attribute)
- [`on_script_output`](/en/py/stable/workspace/reference/tmuxp-workspace-builder-workspacebuilderprotocol-on_script_output/) (attribute)
- [`plugins`](/en/py/stable/workspace/reference/tmuxp-workspace-builder-workspacebuilderprotocol-plugins/) (attribute)
- [`session`](/en/py/stable/workspace/reference/tmuxp-workspace-builder-workspacebuilderprotocol-session/) (property): Return the tmux session the builder created or populated.
- [`session_exists`](/en/py/stable/workspace/reference/tmuxp-workspace-builder-workspacebuilderprotocol-session_exists/) (method): Return ``True`` if a session with ``session_name`` already exists.
- [`__init__`](/en/py/stable/workspace/reference/tmuxp-workspace-builder-workspacebuilderprotocol-__init__/) (method): Construct a builder from an expanded workspace and a tmux server.
