@mediamonks/canopy-cli 0.7.5 → 0.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/cli-create.md +46 -0
- package/dist/docs/cli-db.md +86 -0
- package/dist/docs/cli-delete.md +44 -0
- package/dist/docs/cli-deploy.md +58 -0
- package/dist/docs/cli-dev.md +63 -0
- package/dist/docs/cli-docs.md +47 -0
- package/dist/docs/cli-download.md +42 -0
- package/dist/docs/cli-egress.md +37 -0
- package/dist/docs/cli-feedback.md +51 -0
- package/dist/docs/cli-index.md +61 -0
- package/dist/docs/cli-init.md +46 -0
- package/dist/docs/cli-login.md +43 -0
- package/dist/docs/cli-logout.md +32 -0
- package/dist/docs/cli-logs.md +57 -0
- package/dist/docs/cli-open.md +41 -0
- package/dist/docs/cli-projects.md +43 -0
- package/dist/docs/cli-promote.md +44 -0
- package/dist/docs/cli-rollback.md +45 -0
- package/dist/docs/cli-skill.md +39 -0
- package/dist/docs/cli-staging.md +54 -0
- package/dist/docs/cli-token.md +47 -0
- package/dist/docs/cli-upgrade.md +43 -0
- package/dist/docs/cli-usage.md +43 -0
- package/dist/docs/cli-whoami.md +46 -0
- package/dist/docs/developers-agents-and-ai.md +95 -0
- package/dist/docs/developers-architecture.md +106 -0
- package/dist/docs/index.json +331 -0
- package/dist/docs/infrastructure.md +5 -8
- package/dist/docs/overview-faq.md +105 -0
- package/dist/docs/overview-how-it-works.md +81 -0
- package/dist/docs/overview-use-cases.md +76 -0
- package/dist/docs/overview-what-is-canopy.md +75 -0
- package/dist/docs/platform-ai-usage.md +65 -0
- package/dist/docs/platform-client-access.md +53 -0
- package/dist/docs/platform-deploys-and-rollbacks.md +93 -0
- package/dist/docs/platform-egress.md +75 -0
- package/dist/docs/platform-feedback.md +79 -0
- package/dist/docs/platform-members-and-access.md +71 -0
- package/dist/docs/platform-project-data.md +66 -0
- package/dist/docs/platform-schedules.md +90 -0
- package/dist/docs/platform-sites-and-profiles.md +61 -0
- package/dist/docs/static-serving.md +5 -8
- package/dist/docs/troubleshooting.md +6 -8
- package/dist/{docs-DQmUReJR.mjs → docs-DOiL2Sw-.mjs} +42 -20
- package/dist/feedback-BZG8E8zG.mjs +258 -0
- package/dist/index.mjs +10 -9
- package/dist/{logs-DBLDS3aQ.mjs → logs-DuzM-_Rn.mjs} +1 -1
- package/dist/{package-yVoO2pq4.mjs → package-BNiOibhj.mjs} +1 -1
- package/dist/{projects-D2fDeWNU.mjs → projects-C9TBoiW7.mjs} +5 -8
- package/dist/skill/canopy/SKILL.md +17 -8
- package/dist/{skill-12Ga-2UT.mjs → skill-DRTg-mJR.mjs} +1 -1
- package/dist/templates/worker/AGENTS.md +0 -3
- package/dist/templates/worker/README.md +1 -5
- package/dist/{upgrade-Du6U0xjp.mjs → upgrade-BDaM4M6Y.mjs} +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: How the platform serves your project
|
|
3
|
+
description: What happens between a browser and your deployed code — auth wall, static assets, the optional backend worker, and where data lives.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
You never manage servers on Canopy, but it helps to know what the platform
|
|
7
|
+
does with a request. This page covers the pieces a project developer actually
|
|
8
|
+
touches; platform internals stay out of it.
|
|
9
|
+
|
|
10
|
+
## The request path
|
|
11
|
+
|
|
12
|
+
Every project lives at `https://<slug>.canopy.<domain>`. Requests hit the
|
|
13
|
+
**gateway** first, which enforces authentication before any of your project's
|
|
14
|
+
bytes are served — then either serves your deployed static files or, if the
|
|
15
|
+
project has one, dispatches `/api/*` to your backend worker.
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
B[Browser] --> G["Gateway<br/>auth wall: OneLogin session<br/>or client password"]
|
|
20
|
+
G -->|"most paths"| A["Static assets<br/>deployed build, SPA fallback"]
|
|
21
|
+
G -->|"/api/*"| W["Backend worker<br/>(optional, canopy.json 'worker')"]
|
|
22
|
+
G -->|"/_api/data/v1/*"| P["Platform data plane<br/>auth · db · blob · ai"]
|
|
23
|
+
W --> P
|
|
24
|
+
P --> D[("Project database<br/>+ blob prefix")]
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## The auth wall
|
|
28
|
+
|
|
29
|
+
Authentication is a platform property — your app cannot opt out, and must not
|
|
30
|
+
build its own. A visitor without a valid session is redirected into the
|
|
31
|
+
OneLogin sign-in flow; on projects with client access enabled, outsiders get a
|
|
32
|
+
password page and receive a scope-limited `external` session instead. Only
|
|
33
|
+
after that does any project code or asset get served. Your app just asks
|
|
34
|
+
`canopy.auth.user()` who came through the door
|
|
35
|
+
(see the [SDK reference](https://docs.canopy.website/sdk)).
|
|
36
|
+
|
|
37
|
+
## Static assets and the SPA fallback
|
|
38
|
+
|
|
39
|
+
A deploy uploads your built files as an immutable, numbered version; serving
|
|
40
|
+
reads whichever version is live. Requests for paths that don't match a file
|
|
41
|
+
fall back to `index.html`, so client-side routes like `/settings` work on a
|
|
42
|
+
hard refresh without any configuration. Rollback just repoints "live" at an
|
|
43
|
+
earlier version — instant, nothing rebuilt.
|
|
44
|
+
|
|
45
|
+
The full path — including caching, version-pinned `v12-dot-<slug>` preview
|
|
46
|
+
hosts, and the security review — is in
|
|
47
|
+
[How static files are served](https://docs.canopy.website/guides/static-serving).
|
|
48
|
+
|
|
49
|
+
## The optional backend worker
|
|
50
|
+
|
|
51
|
+
Most projects are frontend-only: the SDK talks straight to the platform, and
|
|
52
|
+
no server code exists. When you need server-side code — say, calling an
|
|
53
|
+
external API with a secret the browser can't hold — the `worker` template adds
|
|
54
|
+
a backend, declared in `canopy.json`:
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"slug": "my-app",
|
|
59
|
+
"build": "npm run build",
|
|
60
|
+
"dist": "dist",
|
|
61
|
+
"worker": "worker/index.ts"
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Requests under `/api/*` reach the worker (Hono-style handlers); everything
|
|
66
|
+
else is still static serving. Three things to know:
|
|
67
|
+
|
|
68
|
+
- **Requests arrive authenticated.** The worker sits behind the same gateway
|
|
69
|
+
wall as the frontend.
|
|
70
|
+
- **Platform access goes through the same SDK**, via the `CANOPY` service
|
|
71
|
+
binding — same budgets, same data isolation as the browser:
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
app.get("/api/hello", async (c) => {
|
|
75
|
+
const canopy = createCanopy({ fetch: c.env.CANOPY.fetch.bind(c.env.CANOPY) });
|
|
76
|
+
const user = await canopy.auth.user();
|
|
77
|
+
return c.json({ message: `Hello, ${user.name}!` });
|
|
78
|
+
});
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
- **Secrets and schedules come from the dashboard.** Secrets (Settings →
|
|
82
|
+
Secrets) land as Workers-shaped bindings (`c.env.MY_API_KEY`, not
|
|
83
|
+
`process.env`); dashboard Schedules invoke an exported
|
|
84
|
+
`scheduled(event, env)` — switch on `event.name`.
|
|
85
|
+
|
|
86
|
+
> **Warning:** Backend workers are capability-gated per target: today the GCP target runs them, while on
|
|
87
|
+
> Cloudflare sites a worker deploy answers a clear "not supported yet". Frontend-only projects
|
|
88
|
+
> deploy everywhere.
|
|
89
|
+
|
|
90
|
+
## Where your data lives
|
|
91
|
+
|
|
92
|
+
Every project gets its own database and its own blob-storage prefix. No other
|
|
93
|
+
project can read them, and deleting the project tears everything down. The
|
|
94
|
+
document API is portable across targets; raw SQL speaks the target's dialect
|
|
95
|
+
(`sqlite` or `postgres` — ask `canopy.db.dialect()`). Dumps, snapshots, and
|
|
96
|
+
restores are CLI commands — see the [project data guide](https://docs.canopy.website/guides/data).
|
|
97
|
+
|
|
98
|
+
## Sites
|
|
99
|
+
|
|
100
|
+
A _site_ is one installation of the whole platform. The CLI ships three
|
|
101
|
+
profiles — `main` (canopy.website, Cloudflare), `staging` (thanarie.dev,
|
|
102
|
+
Cloudflare), and `gcp-pilot` (canopy.monks.zone, GCP) — and always shows which
|
|
103
|
+
one you're on. Projects pin theirs in `canopy.json`; `--profile` or
|
|
104
|
+
`CANOPY_PROFILE` overrides per command. Most projects only ever use `main`.
|
|
105
|
+
Target differences (dialect, full-text search, worker support) surface as
|
|
106
|
+
capabilities, not separate APIs.
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
{
|
|
2
|
+
"sections": [
|
|
3
|
+
{
|
|
4
|
+
"key": "overview",
|
|
5
|
+
"title": "Overview",
|
|
6
|
+
"description": "What Canopy is and how it works, in plain language.",
|
|
7
|
+
"topics": [
|
|
8
|
+
{
|
|
9
|
+
"slug": "overview-what-is-canopy",
|
|
10
|
+
"title": "What is Canopy?",
|
|
11
|
+
"summary": "A fully managed home for vibecoded Monks projects — hosting, sign-in, data, files, and AI, all set up before your first prompt."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"slug": "overview-use-cases",
|
|
15
|
+
"title": "Use cases",
|
|
16
|
+
"summary": "What kinds of projects belong on Canopy — and which ones should live somewhere else."
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"slug": "overview-how-it-works",
|
|
20
|
+
"title": "How it works",
|
|
21
|
+
"summary": "The life of a Canopy project in plain words — create, build, deploy, roll back."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"slug": "overview-faq",
|
|
25
|
+
"title": "FAQ",
|
|
26
|
+
"summary": "Quick answers to the questions people ask before (and just after) putting a project on Canopy."
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"key": "guides",
|
|
32
|
+
"title": "Guides",
|
|
33
|
+
"description": "Hands-on walkthroughs — build, ship, and operate a project.",
|
|
34
|
+
"topics": [
|
|
35
|
+
{
|
|
36
|
+
"slug": "getting-started",
|
|
37
|
+
"title": "Getting started",
|
|
38
|
+
"summary": "Install the CLI, sign in with OneLogin, and ship your first project."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"slug": "dev",
|
|
42
|
+
"title": "Local development",
|
|
43
|
+
"summary": "Running a project locally against live or sandboxed data."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"slug": "deploy",
|
|
47
|
+
"title": "Deploying a project",
|
|
48
|
+
"summary": "How canopy deploy builds, uploads, and makes a version live."
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"slug": "staging",
|
|
52
|
+
"title": "Staging & promoting",
|
|
53
|
+
"summary": "Deploy to a safe copy of your project first — own database cloned from live — then promote the exact same version."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"slug": "data",
|
|
57
|
+
"title": "Working with project data",
|
|
58
|
+
"summary": "Pulling, snapshotting, and restoring your project database."
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"slug": "migrations",
|
|
62
|
+
"title": "Migrations & Drizzle",
|
|
63
|
+
"summary": "Evolve your own tables with versioned SQL migrations — generated by Drizzle or written by hand — applied safely by canopy deploy."
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"slug": "ci",
|
|
67
|
+
"title": "CI and deploy tokens",
|
|
68
|
+
"summary": "Push-to-main deploys using a project-scoped deploy token."
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"slug": "porting-nextjs",
|
|
72
|
+
"title": "Porting a Next.js app",
|
|
73
|
+
"summary": "How to restructure a Next.js (App Router) project so it runs on Canopy."
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"slug": "cli",
|
|
77
|
+
"title": "CLI command reference",
|
|
78
|
+
"summary": "Every canopy command, its flags, and what it does."
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"slug": "static-serving",
|
|
82
|
+
"title": "How static files are served",
|
|
83
|
+
"summary": "The full path a browser request takes to a deployed file."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"slug": "infrastructure",
|
|
87
|
+
"title": "Infrastructure as code",
|
|
88
|
+
"summary": "Terraform for the account-level Cloudflare pieces Canopy needs."
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"slug": "troubleshooting",
|
|
92
|
+
"title": "Troubleshooting",
|
|
93
|
+
"summary": "Common errors and how to resolve them."
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"key": "platform",
|
|
99
|
+
"title": "Platform",
|
|
100
|
+
"description": "Each platform feature explained in depth.",
|
|
101
|
+
"topics": [
|
|
102
|
+
{
|
|
103
|
+
"slug": "platform-deploys-and-rollbacks",
|
|
104
|
+
"title": "Deploys & rollbacks",
|
|
105
|
+
"summary": "Every deploy is a numbered version you can preview, download, and make live again — rolling back is instant and loses nothing."
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"slug": "platform-project-data",
|
|
109
|
+
"title": "Project data",
|
|
110
|
+
"summary": "Every project gets its own private database and file storage — browse it in the dashboard, snapshot it before risky changes, and pull it locally."
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"slug": "platform-schedules",
|
|
114
|
+
"title": "Schedules",
|
|
115
|
+
"summary": "Run named cron jobs in your project's backend — configured in the dashboard, so you can change the cadence without redeploying."
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"slug": "platform-egress",
|
|
119
|
+
"title": "Outbound requests",
|
|
120
|
+
"summary": "Which external hosts your project's backend may fetch — a per-project allowlist you manage yourself."
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"slug": "platform-ai-usage",
|
|
124
|
+
"title": "AI access & usage",
|
|
125
|
+
"summary": "Projects talk to AI models through the platform — no API keys to manage, a hard daily budget per project, and full visibility of spend."
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"slug": "platform-members-and-access",
|
|
129
|
+
"title": "Members & access",
|
|
130
|
+
"summary": "Everything on Canopy sits behind Monks sign-in. Collaborators manage a project; other Monks can view the live app — unless you tighten it."
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"slug": "platform-feedback",
|
|
134
|
+
"title": "Feedback & bug reports",
|
|
135
|
+
"summary": "A built-in feedback widget on every project, a ticket-lite inbox behind it, and a CLI that lets agents work the backlog."
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"slug": "platform-client-access",
|
|
139
|
+
"title": "Client access",
|
|
140
|
+
"summary": "Share a project with clients who have no Monks account — a shared password unlocks that one project's URL and nothing else."
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"slug": "platform-sites-and-profiles",
|
|
144
|
+
"title": "Sites & profiles",
|
|
145
|
+
"summary": "Canopy runs as more than one installation. Most people only ever use main — here's what the others are and how the CLI keeps them straight."
|
|
146
|
+
}
|
|
147
|
+
]
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"key": "cli",
|
|
151
|
+
"title": "CLI reference",
|
|
152
|
+
"description": "Every canopy command: usage, flags, and examples.",
|
|
153
|
+
"topics": [
|
|
154
|
+
{
|
|
155
|
+
"slug": "cli-index",
|
|
156
|
+
"title": "Installing the CLI",
|
|
157
|
+
"summary": "Install the canopy CLI, sign in, and learn the conventions every command shares."
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"slug": "cli-login",
|
|
161
|
+
"title": "canopy login",
|
|
162
|
+
"summary": "Sign in to Canopy through OneLogin in your browser and store CLI tokens for every site."
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"slug": "cli-whoami",
|
|
166
|
+
"title": "canopy whoami",
|
|
167
|
+
"summary": "Show which account and site the CLI is currently talking to, and whether your token is still valid."
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"slug": "cli-logout",
|
|
171
|
+
"title": "canopy logout",
|
|
172
|
+
"summary": "Sign out of Canopy by removing all locally stored CLI tokens."
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"slug": "cli-create",
|
|
176
|
+
"title": "canopy create",
|
|
177
|
+
"summary": "Register a new project on Canopy and scaffold it locally from a starter template."
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"slug": "cli-init",
|
|
181
|
+
"title": "canopy init",
|
|
182
|
+
"summary": "Set up a local folder for a project that already exists on Canopy — scaffold a starter or link an existing app."
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"slug": "cli-projects",
|
|
186
|
+
"title": "canopy projects",
|
|
187
|
+
"summary": "List your Canopy projects with their status, role, and live URLs."
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"slug": "cli-delete",
|
|
191
|
+
"title": "canopy delete",
|
|
192
|
+
"summary": "Permanently delete a Canopy project — its deploys, database, and files."
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"slug": "cli-dev",
|
|
196
|
+
"title": "canopy dev",
|
|
197
|
+
"summary": "Run your project locally with a Vite dev server, against live platform data or a local sandbox."
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"slug": "cli-deploy",
|
|
201
|
+
"title": "canopy deploy",
|
|
202
|
+
"summary": "Build the project and push a new version live, from your machine or from CI."
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"slug": "cli-promote",
|
|
206
|
+
"title": "canopy promote",
|
|
207
|
+
"summary": "Make the staged version live — migrations replay against the live database first, then the exact staged artifacts go live."
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"slug": "cli-staging",
|
|
211
|
+
"title": "canopy staging",
|
|
212
|
+
"summary": "Inspect, refresh, or tear down the project's staging channel."
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"slug": "cli-rollback",
|
|
216
|
+
"title": "canopy rollback",
|
|
217
|
+
"summary": "Make an earlier deploy live again by moving the live pointer to a previous version."
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"slug": "cli-download",
|
|
221
|
+
"title": "canopy download",
|
|
222
|
+
"summary": "Download the deployed files of any version of a project as a zip archive."
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"slug": "cli-token",
|
|
226
|
+
"title": "canopy token",
|
|
227
|
+
"summary": "Create, list, and revoke project-scoped deploy tokens for CI and push-to-main deploys."
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"slug": "cli-egress",
|
|
231
|
+
"title": "canopy egress",
|
|
232
|
+
"summary": "Manage which outbound hosts the project's backend worker may fetch."
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"slug": "cli-db",
|
|
236
|
+
"title": "canopy db",
|
|
237
|
+
"summary": "Pull, snapshot, list, restore, and migrate a project's database from the terminal."
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"slug": "cli-logs",
|
|
241
|
+
"title": "canopy logs",
|
|
242
|
+
"summary": "Read your project worker's logs (console output) from the terminal — no cloud console access needed."
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"slug": "cli-usage",
|
|
246
|
+
"title": "canopy usage",
|
|
247
|
+
"summary": "Show a project's AI spend, storage footprint, and deploy count from the terminal."
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"slug": "cli-feedback",
|
|
251
|
+
"title": "canopy feedback",
|
|
252
|
+
"summary": "Read and triage a project's feedback inbox, or file a bug/feedback report — against a project or against Canopy itself."
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"slug": "cli-open",
|
|
256
|
+
"title": "canopy open",
|
|
257
|
+
"summary": "Open the deployed project in your browser."
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"slug": "cli-docs",
|
|
261
|
+
"title": "canopy docs",
|
|
262
|
+
"summary": "Read the Canopy docs from the terminal — live from the platform, with offline fallbacks."
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"slug": "cli-skill",
|
|
266
|
+
"title": "canopy skill",
|
|
267
|
+
"summary": "Install the Canopy agent skill into a repo so coding agents know how to drive the platform."
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"slug": "cli-upgrade",
|
|
271
|
+
"title": "canopy upgrade",
|
|
272
|
+
"summary": "Update the Canopy CLI to the latest published version, using the installer that put it there."
|
|
273
|
+
}
|
|
274
|
+
]
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"key": "sdk",
|
|
278
|
+
"title": "SDK reference",
|
|
279
|
+
"description": "The typed client your project code uses — auth, data, files, AI, services.",
|
|
280
|
+
"topics": [
|
|
281
|
+
{
|
|
282
|
+
"slug": "sdk",
|
|
283
|
+
"title": "Using the SDK",
|
|
284
|
+
"summary": "One typed client for auth, data, files, AI, and services — no keys, no connection strings, the platform authenticates for you."
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"slug": "sdk-auth",
|
|
288
|
+
"title": "Auth",
|
|
289
|
+
"summary": "Read who the platform signed in — you never build a login screen."
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"slug": "sdk-database",
|
|
293
|
+
"title": "Database",
|
|
294
|
+
"summary": "Document-style collections on your project's private database, plus a raw SQL escape hatch."
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"slug": "sdk-files",
|
|
298
|
+
"title": "Files",
|
|
299
|
+
"summary": "Upload, download, and list files on your project's private blob storage."
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"slug": "sdk-ai",
|
|
303
|
+
"title": "AI",
|
|
304
|
+
"summary": "Metered LLM access through the project's budget-capped gateway key — chat, streaming, and an OpenAI-compatible endpoint."
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
"slug": "sdk-services",
|
|
308
|
+
"title": "Services",
|
|
309
|
+
"summary": "Curated internal data services, invoked through the platform's connector — auth handled for you."
|
|
310
|
+
}
|
|
311
|
+
]
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
"key": "developers",
|
|
315
|
+
"title": "For developers",
|
|
316
|
+
"description": "Architecture and building with agents.",
|
|
317
|
+
"topics": [
|
|
318
|
+
{
|
|
319
|
+
"slug": "developers-architecture",
|
|
320
|
+
"title": "How the platform serves your project",
|
|
321
|
+
"summary": "What happens between a browser and your deployed code — auth wall, static assets, the optional backend worker, and where data lives."
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"slug": "developers-agents-and-ai",
|
|
325
|
+
"title": "Building with agents",
|
|
326
|
+
"summary": "Teach your coding agent Canopy — the agent skill, offline docs, template guardrails, and prompts that work."
|
|
327
|
+
}
|
|
328
|
+
]
|
|
329
|
+
}
|
|
330
|
+
]
|
|
331
|
+
}
|
|
@@ -340,21 +340,18 @@ export CANOPY_PROJECT_PROTOCOL="https"
|
|
|
340
340
|
|
|
341
341
|
cd ../../examples/kitchen-sink
|
|
342
342
|
canopy-dev --profile main create "Kitchen Sink" --slug kitchen-sink --no-scaffold
|
|
343
|
-
# CF target: capabilities.workers = false — strip worker for this deploy
|
|
344
|
-
cp canopy.json canopy.json.bak
|
|
345
|
-
# remove the "worker" key (jq / editor), then:
|
|
346
343
|
canopy-dev --profile main deploy
|
|
347
|
-
mv canopy.json.bak canopy.json
|
|
348
344
|
```
|
|
349
345
|
|
|
350
346
|
`canopy.json` already carries the slug, build command, dist dir, and a
|
|
351
347
|
usual `"profile": "main"` pin, so `deploy` builds them — no separate
|
|
352
348
|
`pnpm build` needed. Still pass `--profile` for the intended site so a
|
|
353
349
|
stray active profile cannot send the deploy elsewhere
|
|
354
|
-
(docs/10-cli-sites.md).
|
|
355
|
-
`
|
|
356
|
-
|
|
357
|
-
|
|
350
|
+
(docs/10-cli-sites.md). On a site without worker support
|
|
351
|
+
(`capabilities.workers = false`), a deploy that keeps
|
|
352
|
+
`"worker": "worker/index.ts"` will 501 `not_supported_on_target` — strip
|
|
353
|
+
the `worker` key for an assets-only deploy there; that's still enough to
|
|
354
|
+
exercise `db` / `blob` / `ai.chat` through the platform data plane.
|
|
358
355
|
|
|
359
356
|
### 11. AI Gateway keys + spend rule (script)
|
|
360
357
|
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: FAQ
|
|
3
|
+
description: Quick answers to the questions people ask before (and just after) putting a project on Canopy.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Short answers to common questions. If yours isn't here, the guides go deeper —
|
|
7
|
+
start with [getting started](https://docs.canopy.website/guides/getting-started).
|
|
8
|
+
|
|
9
|
+
## Who can see my project?
|
|
10
|
+
|
|
11
|
+
By default, any Monk who signs in with OneLogin. If that's too broad, switch
|
|
12
|
+
the project to **collaborators only** in Settings — then only the people you've
|
|
13
|
+
invited can open the live app (it still appears in the company project list,
|
|
14
|
+
and platform admins can still manage it).
|
|
15
|
+
|
|
16
|
+
## Can clients without OneLogin see it?
|
|
17
|
+
|
|
18
|
+
Yes. You can put a shared **password** on a project from its Settings. Anyone
|
|
19
|
+
you give the password to can view the app without a Monks account — useful for
|
|
20
|
+
sharing work-in-progress with a client. That's the only way in without
|
|
21
|
+
OneLogin; there is no fully public option.
|
|
22
|
+
|
|
23
|
+
## Can I make my project public?
|
|
24
|
+
|
|
25
|
+
No, and that's deliberate. Nothing on Canopy is reachable without OneLogin or a
|
|
26
|
+
project password. If your project needs an anonymous public audience, it
|
|
27
|
+
belongs on dedicated hosting — see [Use cases](https://docs.canopy.website/overview/use-cases).
|
|
28
|
+
|
|
29
|
+
## What happens if a deploy breaks something?
|
|
30
|
+
|
|
31
|
+
Nothing you can't undo. Every deploy is a numbered version, and you can make
|
|
32
|
+
any earlier version live again in one step from the dashboard or the CLI. You
|
|
33
|
+
can also open any past version at its own preview link to compare before
|
|
34
|
+
deciding.
|
|
35
|
+
|
|
36
|
+
## Where does my data live?
|
|
37
|
+
|
|
38
|
+
With the project. Each project has its own private database and its own file
|
|
39
|
+
storage space — no other project can touch them. You can browse the data in
|
|
40
|
+
the dashboard, and take or restore database snapshots. Deleting a project
|
|
41
|
+
deletes everything it owned.
|
|
42
|
+
|
|
43
|
+
## Can my project use AI models? What stops a runaway bill?
|
|
44
|
+
|
|
45
|
+
Projects get access to the major AI models through the platform, with a hard
|
|
46
|
+
spend cap per project. If something loops out of control, it stops at the cap.
|
|
47
|
+
You can see exactly what's been spent — by model — in the dashboard's Usage
|
|
48
|
+
tab or from the CLI.
|
|
49
|
+
|
|
50
|
+
## Does it cost anything?
|
|
51
|
+
|
|
52
|
+
The platform is run by the Monks platform team, and it's designed so that idle
|
|
53
|
+
projects cost essentially nothing. The costs that do exist — mainly AI usage —
|
|
54
|
+
are visible per project in the dashboard and capped hard, so there are no
|
|
55
|
+
surprises.
|
|
56
|
+
|
|
57
|
+
## Do I need to know how to code?
|
|
58
|
+
|
|
59
|
+
You need to be able to work with an AI coding agent — the agent writes the
|
|
60
|
+
code, and Canopy's bundled skills keep it on the safe path. The
|
|
61
|
+
[getting started guide](https://docs.canopy.website/guides/getting-started) shows how to connect your
|
|
62
|
+
agent so it knows how the platform works.
|
|
63
|
+
|
|
64
|
+
## Can I work on it with teammates?
|
|
65
|
+
|
|
66
|
+
Yes. Invite people from the project's page in the dashboard with the people
|
|
67
|
+
picker — as admins or collaborators. Combined with collaborators-only mode,
|
|
68
|
+
this also controls who can open the live app.
|
|
69
|
+
|
|
70
|
+
## Can I bring an app I already started?
|
|
71
|
+
|
|
72
|
+
Yes. You don't have to start from a Canopy template — an existing app can be
|
|
73
|
+
onboarded onto the platform and gain the same URL, sign-in, and deploy flow.
|
|
74
|
+
The [getting started guide](https://docs.canopy.website/guides/getting-started) covers both paths.
|
|
75
|
+
|
|
76
|
+
## Can I host my Next.js app on Canopy?
|
|
77
|
+
|
|
78
|
+
Not as-is — Canopy serves pages as static files and deliberately runs no
|
|
79
|
+
app servers, so server-side rendering, server components fetching at request
|
|
80
|
+
time, and server actions have nowhere to run. What works well is a port:
|
|
81
|
+
the frontend becomes a static build, backend logic moves into the project's
|
|
82
|
+
worker under `/api/*`, and the platform takes over auth, database, files, and
|
|
83
|
+
AI. For apps that only lightly use Next's server side that's a small job; the
|
|
84
|
+
[porting guide](https://docs.canopy.website/guides/porting-nextjs) walks through it and helps you judge
|
|
85
|
+
whether your app is a good fit.
|
|
86
|
+
|
|
87
|
+
## Can it deploy automatically when we change the code?
|
|
88
|
+
|
|
89
|
+
Yes. Create a project-scoped deploy token, add it to your repository's CI, and
|
|
90
|
+
merging to `main` ships a new version on its own. The token can only deploy
|
|
91
|
+
that one project — it can't touch your data. See the [CI guide](https://docs.canopy.website/guides/ci).
|
|
92
|
+
|
|
93
|
+
## What if my project outgrows Canopy?
|
|
94
|
+
|
|
95
|
+
It graduates. Canopy optimizes for many small projects, not for making one
|
|
96
|
+
project big — so when yours needs scale, guarantees, or a public audience, it
|
|
97
|
+
exports cleanly (code, database file, and file archive) and moves to dedicated
|
|
98
|
+
hosting. No lock-in, no rewrite.
|
|
99
|
+
|
|
100
|
+
## Is my project backed up if something goes wrong?
|
|
101
|
+
|
|
102
|
+
You have two safety nets you control: versions (every deploy is kept, with
|
|
103
|
+
rollback and download) and database snapshots (take one before a risky change,
|
|
104
|
+
restore it if needed). For anything beyond that, remember Canopy offers no
|
|
105
|
+
production guarantees — see [Use cases](https://docs.canopy.website/overview/use-cases).
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: How it works
|
|
3
|
+
description: The life of a Canopy project in plain words — create, build, deploy, roll back.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Every Canopy project follows the same simple lifecycle. Here's what happens at
|
|
7
|
+
each step, without the technical machinery.
|
|
8
|
+
|
|
9
|
+
## Create a project
|
|
10
|
+
|
|
11
|
+
A project starts in one of two ways: your coding agent runs the Canopy CLI to
|
|
12
|
+
create one from a starter template, or you register an app you already started.
|
|
13
|
+
Either way, the project appears in the
|
|
14
|
+
[dashboard](https://dashboard.canopy.website) the moment it exists — with its
|
|
15
|
+
sign-in wall, database, file storage, and AI access already arranged.
|
|
16
|
+
|
|
17
|
+
Starters come in three shapes — a simple static site, a fully-typed React app,
|
|
18
|
+
or a React app with server-side code — so you begin from the shape that fits.
|
|
19
|
+
The details live in the [getting started guide](https://docs.canopy.website/guides/getting-started).
|
|
20
|
+
|
|
21
|
+
## Your project gets its own address
|
|
22
|
+
|
|
23
|
+
Each project has a short name (its _slug_) and lives at its own URL:
|
|
24
|
+
`your-slug.canopy.website`. You don't buy domains or configure anything — the
|
|
25
|
+
address exists as soon as the project does.
|
|
26
|
+
|
|
27
|
+
## Everything sits behind Monks sign-in
|
|
28
|
+
|
|
29
|
+
Visitors to your project's URL hit OneLogin before they see anything. By
|
|
30
|
+
default any Monk can open it. From the project's Settings you can tighten that
|
|
31
|
+
to collaborators only, or add a shared client password so people outside Monks
|
|
32
|
+
can view it. There is no "make it public" switch — that's by design.
|
|
33
|
+
|
|
34
|
+
## Deploys create versions
|
|
35
|
+
|
|
36
|
+
When you (or your agent) publish the project — one command from the terminal, a
|
|
37
|
+
drag-and-drop upload in the dashboard, or automatically when code lands in your
|
|
38
|
+
repository — Canopy records it as a new numbered **version** and makes it live.
|
|
39
|
+
|
|
40
|
+
Versions are what make deploying low-stakes:
|
|
41
|
+
|
|
42
|
+
- Every past version keeps a stable preview link, so you can open an older
|
|
43
|
+
build next to the newest one.
|
|
44
|
+
- You can download the exact files behind any version.
|
|
45
|
+
- If a deploy breaks something, you pick an earlier version in the dashboard or
|
|
46
|
+
CLI and make it live again in one step. That's a **rollback**, and it takes
|
|
47
|
+
seconds.
|
|
48
|
+
|
|
49
|
+
More detail in the [deploying guide](https://docs.canopy.website/guides/deploy) and the
|
|
50
|
+
[CI guide](https://docs.canopy.website/guides/ci) for automatic deploys on push.
|
|
51
|
+
|
|
52
|
+
## Data lives with the project
|
|
53
|
+
|
|
54
|
+
Whatever your app saves — records, uploads — goes into that project's own
|
|
55
|
+
private database and storage space. No other project can read it, and deleting
|
|
56
|
+
a project deletes everything it owned. You can browse the data from the
|
|
57
|
+
dashboard, and take or restore **snapshots** of the database when you want a
|
|
58
|
+
safety net before a risky change. See the [project data guide](https://docs.canopy.website/guides/data).
|
|
59
|
+
|
|
60
|
+
## Usage is visible
|
|
61
|
+
|
|
62
|
+
The dashboard's Usage tab shows how active a project is (page loads today and
|
|
63
|
+
over the last 7 days), what its AI calls have cost by model, and its database,
|
|
64
|
+
file, and deploy footprint. AI spending also has a hard per-project cap — a
|
|
65
|
+
loop gone wrong stops at the cap instead of running up a bill.
|
|
66
|
+
|
|
67
|
+
## Words you'll hear
|
|
68
|
+
|
|
69
|
+
| Word | What it means |
|
|
70
|
+
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
71
|
+
| **Project** | One app on Canopy: its code, its URL, its database, its files, its settings, its people. |
|
|
72
|
+
| **Deploy** | Publishing your project so the new state is live at its URL. |
|
|
73
|
+
| **Version** | The numbered result of each deploy. Every version keeps a preview link and can be downloaded. |
|
|
74
|
+
| **Rollback** | Making an earlier version live again, in one step. |
|
|
75
|
+
| **Snapshot** | A saved copy of a project's database you can restore later. |
|
|
76
|
+
| **Slug** | The project's short name — the first part of its URL. |
|
|
77
|
+
| **Site** (or **profile**) | An installation of the Canopy platform. Most people only ever use the main one; the CLI can point at others (like staging) and always shows which one you're on. |
|
|
78
|
+
| **Collaborator** | A teammate invited to a project through the dashboard's people picker. |
|
|
79
|
+
|
|
80
|
+
- [Getting started](https://docs.canopy.website/guides/getting-started) — From nothing to a live project, step by step.
|
|
81
|
+
- [Local development](https://docs.canopy.website/guides/dev) — Preview changes on your machine against your real project data.
|