Workspaces
A workspace is Bowire's project folder — the active workspace binds every discovered URL, environment + variable + secret, collection, recording, flow, and benchmark. The workbench always has exactly one active workspace; switching it swaps every list at once.
This page covers the Workspaces rail — the in-app UX for creating,
switching, and managing workspaces. For the on-disk .bww export format and the
Git-backed per-entity directory layout, see Workspace files (.bww).
For where the rail sits in the data-flow, see
rail pipelines & hand-offs.
What the rail is
| Property | Value |
|---|---|
| Rail id | workspaces (verbatim — deep-link ?rail=workspaces) |
| Package | Core (Kuestenlogik.Bowire) — also carries environment variables (a separate package in v2.0) |
| Sidebar | Workspaces — the workspace overview list |
| Always on | Yes — every RequiresWorkspace rail depends on the binding this rail owns |
The rail is the closest thing Bowire has to a project file-tree: its detail pane
dispatches into sub-views — Collections, Environments, Recordings, Sources,
and Settings — that are no longer separate rail icons (they folded into
Workspaces in v2.1; the boot migration rewrites the old sources / environments
/ collections rail ids to workspaces / compose).
The pipeline
flowchart LR
WS["Workspace set<br/>/api/workspace/*<br/>git events: /api/workspace/events"]
SUB["Detail pane dispatch<br/>Collections · Environments · Recordings · Sources · Settings"]
BIND["Active-workspace binding"]
RAILS["Every RequiresWorkspace rail<br/>(Compose · Recordings · Flows · Benchmarks)"]
WS --> SUB
WS --> BIND --> RAILS
- In — the workspace set, served from
/api/workspace/*(git-backed change events stream on/api/workspace/eventswhen the Workspace.Git runtime is active). - Dispatch — the detail pane routes to the selected sub-view, which reads
/api/collections,/api/environments,/api/presets. - Out — the active-workspace binding: the one piece of state every
RequiresWorkspacerail reads to know which project's data to show. This is why Compose, Recordings, Flows, and Benchmarks all redirect to Home when opened with no workspace selected.
Switching workspaces
The topbar workspace chip is the always-visible switcher — click it for the dropdown of workspaces, or open New workspace…. Switching is atomic: the Library, environment selector, recordings, flows, and benchmarks all repoint to the newly-active workspace in one step.
Creating a workspace — templates
Creating a workspace (topbar chip → New workspace…, or + New workspace in the rail / the Home tile) opens a template picker so a workspace starts with realistic seed data. Start from scratch gives a blank workspace; the built-in templates seed a discovery URL, globals, and a starter collection:
| Template | Seeds |
|---|---|
| REST API testing | Petstore discovery URL + baseUrl / apiToken globals + a two-call starter collection |
| gRPC services | grpcs@grpcb.in:443 (reflection) + service / method placeholder globals |
| Mock server build | Petstore seed URL + an empty Mock targets collection for capturing mock fixtures |
| Multi-protocol smoke test | Petstore REST + a WebSocket echo + a gRPC target in one workspace |
User-saved templates appear in the same list. The last-picked template becomes the default for the next create.
Save as template
Any workspace can be snapshotted as a reusable template — the per-row Save as
template action (bookmark icon), or the workspace-detail header's Save as
template…. Templates capture the workspace's URLs, env vars, collections,
globals, plugin pins, and presets. They persist per-machine in localStorage
(bowire_user_workspace_templates) and are not synced across machines.
Environments & secrets
The Workspaces rail also owns environments — named variable sets the
environment selector switches between at run time — and their
secret overlays. Project-level environments travel with the workspace and are
shared with the team; personal environments stay scoped to the user. Secrets are
referenced via {{secret.NAME}} and kept out of git (see
secret separation).
Storage faces
A workspace has three storage faces, covered in depth in
Workspace files (.bww):
- Browser-backed —
localStorageunderbowire_ws_<id>_*(Tool default). - Disk-backed — the
Kuestenlogik.Bowire.Workspace.Gitpackage materialises per-entity files for git review. .bwwbundle — a single-file portable export you commit / share.
Hand-offs
- Open a collection entry → loads it into a Compose builder tab
(
railMode='compose'). - Export / Save now in the detail header → flushes autosave and produces a
<name>.bwwdownload (format).
See also
- Workspace files (
.bww) — the on-disk export format + Git-backed layout - Environments · Collections — the rail's sub-views
- Rail strip · Rail pipelines & hand-offs