You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(bootcamp): split Unit 1 into parallel CLI + Embedded setup tracks
Unit 1 was the only unit with material shape-divergence (install +
wire-up). From Unit 2 on, the workbench UI is identical regardless of
how Bowire got mounted, so threading Path A/B inline through every
later lesson was duplication for nothing.
Now: Unit 0 ends by pointing at two parallel tracks --
units/unit-1-cli/ for the bowire --url two-process shape and
units/unit-1-embedded/ for the AddBowire()/MapBowire() in-process
shape. Each track is two lessons (first call + multi-protocol).
Learners walk one track, the other is a deliberate diff target.
Samples move to units/unit-1-samples/ so both tracks reference the
same HelloApi/HelloGrpc projects without duplication; the embedded
track instructs learners to add Kuestenlogik.Bowire and wire it up.
LEARNING_PATHS, units-overview, Unit 0 next-step, and the prereq
headers in Units 2-5 all updated to point at 'pick your track'
instead of the old monolithic Unit 1 link.
Six role-based paths through the Bowire Bootcamp. Or, complete all units in order for the full picture (~3 hours).
3
+
Five role-based paths through the Bowire Bootcamp. Or, complete all units in order for the full picture (~3 hours).
4
4
5
5
Every path lists its **path-level prerequisites** (the toolchain you need before starting any of its units). Individual lessons also list their own prerequisites — those are subsets of the path-level list.
6
6
7
-
> **First decision — pick your deployment shape.** Bowire ships in two: standalone **CLI** (point at any URL) and **embedded** (`AddBowire()` + `MapBowire()` in your own ASP.NET service). [Unit 0 → Lesson 0.1](units/unit-0/lesson-1/README.md) breaks the choice down with diagrams. Most paths below work with either shape; **Path #6 (Embedded Backend Workflow)** is the embedded-native walkthrough for backend devs mounting the workbench inside their service.
7
+
> **First decision — pick your deployment shape.** Unit 0 introduces the two:
8
+
>
9
+
> -**CLI (two-process)** — `bowire --url <service>` from a terminal. Bowire is its own process; your service is untouched.
10
+
> -**Embedded (single-process)** — `AddBowire()` + `MapBowire()` inside your ASP.NET host. Workbench mounts at `/bowire` on the host's own port.
11
+
>
12
+
> Unit 1 splits into two parallel **setup tracks** — [CLI](units/unit-1-cli/README.md) or [Embedded](units/unit-1-embedded/README.md). Pick one based on the shape that matches your deployment.
13
+
>
14
+
> From Unit 2 onwards the tracks merge — the workbench UI is identical regardless of how Bowire got mounted, so recording, mocking, AI integration, plugin authoring, and CI work are shared.
8
15
9
16
---
10
17
@@ -17,11 +24,12 @@ Every path lists its **path-level prerequisites** (the toolchain you need before
17
24
**Prerequisites:**
18
25
-[.NET 10 SDK](https://dotnet.microsoft.com/download) — for the sample REST + gRPC backends.
19
26
- A modern web browser — workbench UI runs in-browser, opens automatically.
27
+
- Either the `bowire` CLI installed (CLI track) **or** an ASP.NET host you can `dotnet add package Kuestenlogik.Bowire` into (Embedded track).
20
28
21
29
| # | Unit | Why it matters |
22
30
|---|------|----------------|
23
-
| 1 |[Unit 0: Introduction](units/unit-0/README.md)| What Bowire is, how it positions vs Postman/Insomnia/Bruno, install verification |
| 1 |[Unit 0: Introduction](units/unit-0/README.md)| What Bowire is, how it positions vs Postman/Insomnia/Bruno, install verification, **pick your setup track**|
32
+
| 2 | Unit 1 — [CLI track](units/unit-1-cli/README.md)**or**[Embedded track](units/unit-1-embedded/README.md)| First REST call + multi-protocol session (REST + gRPC), walked through your chosen setup track|
25
33
| 3 |[Unit 2.1: Record & Replay](units/unit-2/lesson-1/README.md)| Capture a session, save as `.bwr`, replay through `bowire mock`|
26
34
27
35
---
@@ -34,7 +42,7 @@ Every path lists its **path-level prerequisites** (the toolchain you need before
34
42
35
43
**Prerequisites:**
36
44
-[.NET 10 SDK](https://dotnet.microsoft.com/download) — the bootcamp's sample backend uses it; production frontend devs can swap in their own.
- Bowire CLI: `dotnet tool install --global Kuestenlogik.Bowire.Tool`. (Mock-server is a CLI-only feature, so this path defaults to the CLI shape regardless of what your backend team uses.)
38
46
39
47
| # | Unit | Why it matters |
40
48
|---|------|----------------|
@@ -50,13 +58,13 @@ Every path lists its **path-level prerequisites** (the toolchain you need before
-**Claude Desktop** or **Cursor** installed (any other MCP-aware host also works — the config snippet is portable).
55
63
56
64
| # | Unit | Why it matters |
57
65
|---|------|----------------|
58
-
| 1 |[Unit 1: Workbench Basics](units/unit-1/README.md)| Understand Bowire's discovery + invoke surface first (the toolset the agent will drive) |
59
-
| 2 |[Unit 3.1: AI-Agent Integration](units/unit-3/lesson-1/README.md)|`bowire mcp serve` over stdio, wire it into the agent's MCP config, drive REST + gRPC from a chat window |
66
+
| 1 | Unit 1 — [CLI track](units/unit-1-cli/README.md)**or**[Embedded track](units/unit-1-embedded/README.md)| Understand Bowire's discovery + invoke surface first (the toolset the agent will drive) |
67
+
| 2 |[Unit 3.1: AI-Agent Integration](units/unit-3/lesson-1/README.md)|`bowire mcp serve` over stdio (CLI shape), or `MapBowireMcpAdapter()` HTTP MCP (embedded shape) — wire it into the agent's MCP config, drive REST + gRPC from a chat window |
60
68
61
69
---
62
70
@@ -67,14 +75,14 @@ Every path lists its **path-level prerequisites** (the toolchain you need before
-**Python 3.10+** + `pip` — only for the Unit 4.2 sidecar lesson. Unit 4.1 (.NET plugin) needs nothing beyond the SDK.
72
80
-[`dotnet new bowire-plugin`](https://github.com/Kuestenlogik/Bowire.Templates) template installed: `dotnet new install Kuestenlogik.Bowire.Templates`.
73
81
74
82
| # | Unit | Why it matters |
75
83
|---|------|----------------|
76
-
| 1 |[Unit 1: Workbench Basics](units/unit-1/README.md)| Understand how the host discovers and renders a protocol (REST + gRPC reference) |
| 1 | Unit 1 — [CLI track](units/unit-1-cli/README.md)**or**[Embedded track](units/unit-1-embedded/README.md)| Understand how the host discovers and renders a protocol (REST + gRPC reference) |
85
+
| 2 |[Unit 4.1: .NET Protocol Plugin](units/unit-4/lesson-1/README.md)| Implement `IBowireProtocol`, `dotnet pack`, install via `bowire plugin install` (CLI) or `PackageReference` (Embedded)|
78
86
| 3 |[Unit 4.2: Python Sidecar Plugin](units/unit-4/lesson-2/README.md)| Same surface, polyglot — `BowirePlugin` subclass, JSON-RPC stdio, ship as a zip |
79
87
80
88
---
@@ -86,7 +94,7 @@ Every path lists its **path-level prerequisites** (the toolchain you need before
-[.NET 10 SDK](https://dotnet.microsoft.com/download) + Bowire CLI. (CI workflows always run the CLI shape — there's no in-process host to mount the workbench into at CI time.)
90
98
-**Docker** (for the CI examples that run the mock as a service container — optional in local dev).
91
99
- A **GitHub repository** you can push the sample workflow to (any other CI runner works analogously; the lesson examples are GitHub Actions).
92
100
@@ -97,48 +105,18 @@ Every path lists its **path-level prerequisites** (the toolchain you need before
97
105
98
106
---
99
107
100
-
## 6. Embedded Backend Workflow
101
-
102
-
**For:** Backend developers and internal-tools teams who mount the workbench *inside* their own ASP.NET service via `AddBowire()` + `MapBowire()` — workbench inherits the host's DI container, `[Authorize]` policies, `IOptions<T>` config, and logging providers, so what the workbench discovers is exactly what production exposes.
- An ASP.NET host to mount Bowire into — either your own service, or scaffold a fresh one with `dotnet new web` (Lesson 0.2 walks the scaffold).
109
-
-`Kuestenlogik.Bowire` NuGet referenced from the host (`dotnet add package Kuestenlogik.Bowire`). No separate `bowire` CLI install required for this path, though the CLI is handy to keep around for external targets.
110
-
111
-
| # | Unit | Why it matters |
112
-
|---|------|----------------|
113
-
| 1 |[Unit 0: Introduction](units/unit-0/README.md)| Pick Path B in Lesson 0.2; mount the workbench in two lines |
114
-
| 2 |[Unit 1: Workbench Basics](units/unit-1/README.md)| First call against your own in-process service — same workbench surface as the CLI path, no separate process |
115
-
| 3 |[Unit 2.1: Record & Replay](units/unit-2/lesson-1/README.md)| Capture sessions against your own service; replay through `bowire mock` (CLI) for downstream consumers |
116
-
117
-
**Where embedded beats CLI:**
118
-
- The workbench inherits your auth pipeline. A method behind `[Authorize(Policy="…")]` needs the same token; no parallel credentials store.
119
-
- Discovery reads gRPC reflection / OpenAPI document provider / SignalR hub registry directly through DI — faster, no schema-version drift.
120
-
- Ship a debug UI *with* your binary — no separate distribution, no companion container.
121
-
122
-
**Where CLI still beats embedded:**
123
-
- External targets you don't control.
124
-
- Air-gapped or CI environments where adding a NuGet to the host isn't an option.
125
-
- MCP agents driving many services simultaneously — one CLI instance, many `--url` targets.
126
-
127
-
> **Coverage status.** Unit 0 is the only one with full Path-A / Path-B coverage today. Other units still write samples for the CLI path by default; [Kuestenlogik/Bowire#55](https://github.com/Kuestenlogik/Bowire/issues/55) tracks bringing the embedded path to lesson-by-lesson parity. The embedded code path is fully supported in the product — the bootcamp just hasn't finished documenting every variant yet.
128
-
129
-
---
130
-
131
108
## Or: the full bootcamp
132
109
133
110
Complete every unit in order — ~3 hours, ~9 lessons, plus the capstone.
Copy file name to clipboardExpand all lines: README.md
+14-5Lines changed: 14 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -78,15 +78,24 @@ Understand what Bowire is and verify your environment.
78
78
|[0.2](units/unit-0/lesson-2/README.md)| Setup | Install the bowire CLI, the bundled plugins, the workbench host |
79
79
|[0.3](units/unit-0/lesson-3/README.md)| Hello Bowire | Launch the workbench, point it at a public REST API, invoke your first method |
80
80
81
-
### Unit 1: Workbench Basics
82
-
*Time: ~15 minutes*
81
+
### Unit 1: Workbench Basics — pick your setup track
82
+
*Time: ~15 minutes per track (you only walk one)*
83
+
84
+
Drive Bowire's discovery and invoke surface across two protocols at once. Two parallel tracks based on your deployment shape — pick one and the rest of the bootcamp (Unit 2+) is shared.
85
+
86
+
**[CLI track](units/unit-1-cli/README.md)** — for the `bowire --url <service>` two-process shape:
87
+
88
+
| Lesson | Topic | What You'll Build |
89
+
|--------|-------|-------------------|
90
+
|[1.1](units/unit-1-cli/lesson-1/README.md)| First call (REST + OpenAPI) | A REST sample API, discovered through its OpenAPI doc, invoked from the workbench |
91
+
|[1.2](units/unit-1-cli/lesson-2/README.md)| Multi-protocol session (REST + gRPC) | A gRPC sample side-by-side with REST via repeated `--url`, server-streaming demo |
83
92
84
-
Drive Bowire's discovery and invoke surface across two protocols at once.
93
+
**[Embedded track](units/unit-1-embedded/README.md)** — for the `AddBowire()` / `MapBowire()` in-process shape:
85
94
86
95
| Lesson | Topic | What You'll Build |
87
96
|--------|-------|-------------------|
88
-
|[1.1](units/unit-1/lesson-1/README.md)|First call (REST + OpenAPI) | A REST sample API, discovered through its OpenAPI doc, invoked from the workbench|
89
-
|[1.2](units/unit-1/lesson-2/README.md)|Multi-protocol session (REST + gRPC) |A gRPC sample side-by-side with REST, both discovered automatically, server-streaming demo|
97
+
|[1.1](units/unit-1-embedded/lesson-1/README.md)|Mount the workbench in your host |`AddBowire()` + `MapBowire()` in `Program.cs`, workbench at `/bowire` on the host's port|
98
+
|[1.2](units/unit-1-embedded/lesson-2/README.md)|Add a second protocol (gRPC) | gRPC co-hosted in the same ASP.NET process; the workbench picks both up through DI|
| Unit 1 — pick one track: [CLI](units/unit-1-cli/README.md)or [Embedded](units/unit-1-embedded/README.md)| Workbench Basics — setup track for your deployment shape | 2 per track|
Copy file name to clipboardExpand all lines: units/unit-0/README.md
+6-3Lines changed: 6 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16,12 +16,15 @@ Understand what Bowire is, **pick your deployment shape** (standalone CLI vs emb
16
16
|--------|-------|-------------------|
17
17
|[0.1](lesson-1/README.md)| What is Bowire? | Multi-protocol API workbench, the **two-process** (CLI) and **single-process** (embedded) models, when to pick which |
18
18
|[0.2](lesson-2/README.md)| Setup | Path A: install the `bowire` global tool. Path B: scaffold an ASP.NET host + `AddBowire()` / `MapBowire()`. Both paths covered side by side. |
19
-
|[0.3](lesson-3/README.md)| Hello Bowire (CLI) | Launch the workbench against a public REST API, invoke your first method. Skipped on Path B — [Unit 1.1](../unit-1/lesson-1/README.md)is the embedded equivalent. |
19
+
|[0.3](lesson-3/README.md)| Hello Bowire (CLI) | Launch the workbench against a public REST API, invoke your first method. Embedded learners can skim — Unit 1's [Embedded track](../unit-1-embedded/README.md)walks the in-process equivalent. |
20
20
21
21
## Why this unit
22
22
23
-
Before you can drive Bowire across protocols, you need a working install and a clear mental model of what it is vs the API-client tools you've used before. The two deployment shapes (CLI vs Embedded) cover meaningfully different jobs, so Unit 0 makes the choice explicit before any code gets written. If you already know the positioning and have at least one path installed, skip straight to [Unit 1](../unit-1/README.md).
23
+
Before you can drive Bowire across protocols, you need a working install and a clear mental model of what it is vs the API-client tools you've used before. The two deployment shapes (CLI vs Embedded) cover meaningfully different jobs, so Unit 0 makes the choice explicit before any code gets written. If you already know the positioning and have at least one path installed, head to Unit 1 — pick the [CLI track](../unit-1-cli/README.md) or the [Embedded track](../unit-1-embedded/README.md) based on your shape.
Copy file name to clipboardExpand all lines: units/unit-0/lesson-2/README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -158,7 +158,7 @@ If you want to add a plugin that isn't bundled, reference its NuGet next to `Kue
158
158
|`bowire plugin list` errors with `Access denied`| A | Check `~/.bowire/plugins/` exists and is writable. The directory is created on first install; manual creation needs `mkdir -p`. |
159
159
| Tool install times out behind a corporate proxy | A · B | Configure `dotnet nuget` proxy settings (`dotnet nuget config -s <feed>`) or set `HTTP_PROXY` / `HTTPS_PROXY`. |
160
160
|`/bowire` returns 404 in the embedded host | B | Make sure `app.MapBowire()` runs **after**`var app = builder.Build()` but **before**`app.Run()`. ASP.NET ignores route registrations after `Run()` starts the host. |
161
-
| Workbench renders but discovers no endpoints | B | The host has no services registered yet. Either add a sample route (`app.MapGet("/api/ping", () => "pong")`) or skip ahead to [Unit 1](../../unit-1/README.md) which adds a discovery target. |
161
+
| Workbench renders but discovers no endpoints | B | The host has no services registered yet. Either add a sample route (`app.MapGet("/api/ping", () => "pong")`) or skip ahead to [Unit 1 — Embedded track](../../unit-1-embedded/README.md) which adds a discovery target. |
Copy file name to clipboardExpand all lines: units/unit-0/lesson-3/README.md
+6-3Lines changed: 6 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,9 +6,9 @@
6
6
7
7
Point your freshly-installed `bowire` at a public REST API, watch the workbench discover it, invoke one method. The smallest end-to-end loop that proves the install works — without writing any code or running any sample server yet.
8
8
9
-
You'll bring your own sample API in [Unit 1.1](../../unit-1/lesson-1/README.md); this lesson uses one that's already on the public web.
9
+
You'll bring your own sample API in [Unit 1 — CLI track Lesson 1.1](../../unit-1-cli/lesson-1/README.md); this lesson uses one that's already on the public web.
10
10
11
-
> **Embedded users (Path B):** This lesson is CLI-native — pointing the workbench at a public URL is the CLI's day job. Skip ahead to [Unit 1.1](../../unit-1/lesson-1/README.md) which walks the equivalent loop against an in-process service. You can come back to this lesson later if you ever want to drive an external target.
11
+
> **Embedded users:** This lesson is CLI-native — pointing the workbench at a public URL is the CLI's day job. Skip ahead to [Unit 1 — Embedded track Lesson 1.1](../../unit-1-embedded/lesson-1/README.md) which walks the equivalent loop against an in-process service. You can come back to this lesson later if you ever want to drive an external target.
12
12
13
13
## Steps
14
14
@@ -104,7 +104,10 @@ Petstore's REST endpoints are all unary. To see the streaming-pane shape, point
104
104
105
105
You're done with Unit 0. Time to bring up your own sample API and drive REST + gRPC side-by-side in the same workbench.
0 commit comments