๐Ÿ“„Encrypted, on-demand documentation backups with Plakar + Cloudflare R2

17 changed ยท 8 files unchanged (carried over intact from the previous snapshot)

changedgetting-started/installation.md
                      @@ -5,29 +5,32 @@  # Installing Nimbus -![Nimbus edge infrastructure](./images/logo.jpg)+![The Nimbus 2.0 platform](./images/logo.jpg) -Nimbus 1.5 adds official packages for every major platform and a container-image.+Nimbus 2.0 runs your sync, your deploys, and now your **edge functions** from one+CLI. Install it however you like:  ```bash brew install nimbus                      # macOS / Linux npm install -g @nimbus/cli               # Node 18+-docker pull ghcr.io/nimbus/cli:1.5       # container+docker pull ghcr.io/nimbus/cli:2         # container+winget install Nimbus.CLI                # Windows ``` -Language SDKs are published for TypeScript, Python, and Go:+SDKs track the CLI version:  ```bash-npm install @nimbus/sdk-pip install nimbus-sdk-go get go.nimbus.dev/sdk+npm install @nimbus/sdk        # TypeScript+pip install nimbus-sdk         # Python+go get go.nimbus.dev/sdk       # Go ```  Verify:  ```bash nimbus --version-# nimbus 1.5.0+# nimbus 2.0.0 ``` +<div class="callout callout-note"><div class="callout-title">Upgrading from 1.x?</div>2.0 changes a few config keys and the token model. Follow the <a href="../../guides/troubleshooting/">migration notes</a> before you deploy.</div>+
                    
changedgetting-started/quickstart.md
                      @@ -5,38 +5,41 @@  # Quickstart -Watch the overview, then set up a project with zero-downtime deploys.+Watch the 2.0 launch tour, then ship your first edge function. -<div class="embed embed-video"><iframe src="https://www.youtube.com/embed/jNQXAC9IVRw" title="Nimbus 1.5 overview" allowfullscreen loading="lazy"></iframe></div>+<div class="embed embed-video"><iframe src="https://www.youtube.com/embed/jNQXAC9IVRw" title="Nimbus 2.0 launch" allowfullscreen loading="lazy"></iframe></div> <p class="embed-caption">Placeholder video. Swap in your product walkthrough.</p>++Scaffold a project and run it live:  ```bash nimbus init nimbus run --watch ``` -The same flow from each SDK:+Add an edge function, a small handler that runs at every region:  ```ts-// TypeScript-import { Nimbus } from '@nimbus/sdk'-const nimbus = new Nimbus({ key: process.env.NIMBUS_KEY })-await nimbus.deploy({ source: 'docs', strategy: 'drain' })+// functions/hello.ts+import type { EdgeRequest } from '@nimbus/sdk'++export default function (req: EdgeRequest) {+  return new Response(`hello from ${req.region}`)+} ``` -```python-# Python-from nimbus import Nimbus-nimbus = Nimbus(key=os.environ["NIMBUS_KEY"])-nimbus.deploy(source="docs", strategy="drain")+Deploy it everywhere with one command:++```bash+nimbus deploy --remote edge ``` -```go-// Go-n := nimbus.New(os.Getenv("NIMBUS_KEY"))-n.Deploy(ctx, nimbus.Deploy{Source: "docs", Strategy: "drain"})+Or from your own code:++```python+from nimbus import Nimbus++nimbus = Nimbus(key=os.environ["NIMBUS_KEY"])+nimbus.deploy(source="docs", functions="./functions", strategy="drain") ``` -`strategy: "drain"` is the 1.5 default: old instances finish in-flight requests-before they are retired.-
                    
changedguides/configuration.md
                      @@ -5,37 +5,48 @@  # Configuration -![The Nimbus edge fleet](./images/architecture.jpg)+![The Nimbus 2.0 edge fleet](./images/architecture.jpg) -1.5 introduces **plugins**. Add a plugin block to `nimbus.toml` and Nimbus loads-it during sync:+`nimbus.toml` in 2.0 adds a `[functions]` block and per-team defaults:  ```toml [project] name = "docs"-concurrency = 12+team = "platform"+concurrency = 16++[[source]]+type = "local"+path = "./data"++[functions]+dir = "./functions"+runtime = "edge-js@2"  [[plugin]] name = "image-optimize" version = "^2.0" -[[plugin]]-name = "html-minify"- [remote.edge] url = "https://edge.nimbus.dev"-regions = ["iad", "fra", "sin", "gru"]+regions = ["iad", "fra", "sin", "gru", "syd"] strategy = "drain" ``` -Plugins run in order and can transform files before they are deployed. List what-is available:+## Resolution order++Values are merged from several places. Later sources win:++| Source                        | Example                              |+| ----------------------------- | ------------------------------------ |+| `nimbus.toml`                 | `concurrency = 16`                   |+| team defaults                 | set in the dashboard                 |+| environment variables         | `NIMBUS_PROJECT__CONCURRENCY=32`     |+| command-line flags            | `--concurrency 32`                   |++Print the fully resolved config before shipping:  ```bash-nimbus plugin search-nimbus plugin add image-optimize+nimbus config show --resolved --format json ``` -The full architecture is in the spec sheet on the-[References](../references/) page.-
                    
changedguides/deployment.md
                      @@ -5,31 +5,40 @@  # Deployment -## Zero downtime+## Functions and assets, together -1.5 deploys drain by default. Two instances run behind the region's load-balancer and are replaced one at a time:+2.0 deploys your static output and your edge functions in one atomic release:  ```bash-nimbus deploy --remote edge --strategy drain+nimbus deploy --remote edge --follow ```++```text+โ†’ building functions (edge-js@2) โ€ฆ 2 functions, 41ms+โ†’ iad   drain โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ served rel_9f2a+โ†’ fra   drain โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ served rel_9f2a+โ†’ sin   drain โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ served rel_9f2a+โœ“ release rel_9f2a live in 5 regions (4.1s)+```++## Rollback++Every release is immutable and addressable. Roll back instantly:++```bash+nimbus releases list --remote edge+nimbus rollback --remote edge rel_9e11+```++<div class="callout callout-tip"><div class="callout-title">Tip</div>A rollback is just a deploy of an older release, so it drains the same way, with no downtime and no rebuild.</div>  ## Observability -Every deploy now emits OpenTelemetry traces and Prometheus metrics. Point them-at your collector:--```toml-[telemetry]-otlp_endpoint = "http://otel-collector:4317"-metrics = true-```--Scrape the node directly if you prefer:+Traces and metrics are on by default in 2.0:  ```bash curl https://edge.nimbus.dev/metrics-# nimbus_deploy_duration_seconds{region="iad"} 3.2-# nimbus_active_instances{region="iad"} 2+# nimbus_function_invocations_total{region="iad",fn="hello"} 1832+# nimbus_deploy_duration_seconds{region="iad"} 4.1 ``` 
                    
changedguides/security.md
                      @@ -5,25 +5,30 @@  # Security -![The Nimbus security dashboard](./images/dashboard.jpg)+![The Nimbus 2.0 security dashboard](./images/dashboard.jpg) -1.5 adds short-lived deploy tokens on top of long-lived keys. Mint a token that-expires in an hour for CI:+2.0 organises access around **teams**. Members get roles. Deploy tokens are+minted per role and expire.  ```bash+nimbus team invite alex@acme.dev --role deployer nimbus token mint --remote edge --scope deploy --ttl 1h ``` -Plugins are sandboxed and pinned by content hash. Review what a plugin can touch-before adding it:+| Role       | Can deploy | Can manage keys | Can invite |+| ---------- | :--------: | :-------------: | :--------: |+| `viewer`   |     โœ—      |        โœ—        |     โœ—      |+| `deployer` |     โœ“      |        โœ—        |     โœ—      |+| `admin`    |     โœ“      |        โœ“        |     โœ“      |++Edge functions run in a sandbox with no ambient credentials. Secrets are+injected explicitly:  ```bash-nimbus plugin inspect image-optimize-# capabilities: read-files, write-files-# network:      none+nimbus secret set STRIPE_KEY --remote edge ``` -<div class="callout callout-warn"><div class="callout-title">Heads up</div>Only add plugins whose <code>network</code> capability is <code>none</code> unless you have reviewed the source. A plugin with network access can exfiltrate the files it processes.</div>+<div class="callout callout-warn"><div class="callout-title">Never commit keys</div>Keep <code>NIMBUS_KEY</code> and any function secrets in a secret manager or the environment. <code>nimbus.toml</code> is meant to be committed and must stay free of credentials.</div>  For the full history of security-relevant changes, see the [release changelog (PDF)](../documents/changelog.pdf).
                    
changedguides/troubleshooting.md
                      @@ -5,23 +5,45 @@  # Troubleshooting -![Tracing a deploy across regions](./images/flow.jpg)+![Tracing a 2.0 release across regions](./images/flow.jpg) -**A plugin failed the sync.** Run it in isolation with verbose logging:+## Migrating from 1.x++Two config keys changed in 2.0:++```diff+ [project]+ name = "docs"+-worker_count = 12++concurrency = 16++-[remote.edge]+-single_token = "nk_live_..."++[remote.edge]++# tokens are now minted per role (see Security)+```++Run the migration helper to rewrite an old file in place:  ```bash-nimbus plugin run image-optimize ./data -v+nimbus migrate config ./nimbus.toml ``` -**Drain never finishes.** An instance is stuck on a long-lived connection. Cap-the drain window so it force-cycles:+## Common issues++**A function won't build.** Check the runtime matches your code:  ```bash-nimbus deploy --remote edge --strategy drain --drain-timeout 30s+nimbus functions check --runtime edge-js@2 ``` -**Traces aren't showing up.** Confirm the collector endpoint resolves from inside-the node and that `metrics = true` is set under `[telemetry]`.+**A region is behind.** Releases are atomic, so a lagging region kept an older+release. Inspect and, if needed, redeploy just that region: -<div class="callout callout-tip"><div class="callout-title">Tip</div>Add <code>-v</code> to any command to see the exact HTTP calls and plugin steps Nimbus runs.</div>+```bash+nimbus releases list --remote edge+nimbus deploy --remote edge --regions fra+``` +<div class="callout callout-note"><div class="callout-title">Still stuck?</div>Add <code>-v</code> for HTTP-level logs, or open the release in the dashboard to see per-region traces.</div>+
                    
changedreference/api.md
                      @@ -5,31 +5,39 @@  # API reference -1.5 adds plugin and telemetry endpoints. All require a bearer token or a-short-lived deploy token.+The 2.0 REST API adds releases and functions. Authenticate with a bearer key or+a short-lived, role-scoped token. -| Method | Path         | Description                     |-| ------ | ------------ | ------------------------------- |-| `GET`  | `/status`    | node health and last deploy     |-| `GET`  | `/manifest`  | files currently served          |-| `GET`  | `/metrics`   | Prometheus metrics              |-| `GET`  | `/audit`     | signed deploy history           |-| `POST` | `/run`       | trigger a deploy                |-| `POST` | `/plugins`   | register a plugin for a project |+| Method   | Path              | Description                       |+| -------- | ----------------- | --------------------------------- |+| `GET`    | `/status`         | node health and current release   |+| `GET`    | `/manifest`       | files currently served            |+| `GET`    | `/releases`       | immutable release history         |+| `GET`    | `/metrics`        | Prometheus metrics                |+| `POST`   | `/run`            | deploy a new release              |+| `POST`   | `/rollback`       | serve a previous release          |+| `GET`    | `/functions`      | deployed edge functions           | -## Example: deploy with a strategy+## Example: deploy a release  ```bash curl -X POST https://edge.nimbus.dev/run \   -H "Authorization: Bearer $NIMBUS_TOKEN" \-  -d '{"source": "docs", "strategy": "drain", "regions": ["iad", "fra"]}'+  -H "Content-Type: application/json" \+  -d '{+        "source": "docs",+        "functions": ["hello"],+        "strategy": "drain",+        "regions": ["iad", "fra", "sin"]+      }' ```  ```json {-  "deploy": "dpl_8b21",+  "release": "rel_9f2a",   "strategy": "drain",-  "regions": { "iad": "draining", "fra": "queued" }+  "functions": ["hello"],+  "regions": { "iad": "draining", "fra": "queued", "sin": "queued" } } ``` 
                    
changedreference/cli.md
                      @@ -7,18 +7,22 @@  ```text nimbus init                       scaffold a nimbus.toml-nimbus run [--watch]              sync, optionally continuously-nimbus deploy --remote <r>        deploy (drain by default)-nimbus plugin search|add|inspect  manage plugins-nimbus token mint                 create a short-lived deploy token+nimbus run [--watch]              sync (and functions) continuously+nimbus deploy --remote <r>        deploy a release (drain by default)+nimbus rollback --remote <r> <id> serve a previous release+nimbus releases list              show immutable release history+nimbus functions check|run        build and test edge functions+nimbus team invite                add a member with a role+nimbus token mint                 create a short-lived, scoped token+nimbus migrate config <file>      upgrade a 1.x config to 2.0 ```  ## Deploy flags -| Flag               | Default | Description                          |-| ------------------ | ------- | ------------------------------------ |-| `--strategy`       | `drain` | `drain` or `replace`                 |-| `--drain-timeout`  | `60s`   | force-cycle instances after this     |-| `--follow`         | `false` | stream per-region progress           |-| `--regions`        | all     | limit the deploy to some regions     |+| Flag              | Default | Description                        |+| ----------------- | ------- | ---------------------------------- |+| `--strategy`      | `drain` | `drain` or `replace`               |+| `--regions`       | all     | limit the release to some regions  |+| `--follow`        | `false` | stream per-region progress         |+| `--dry-run`       | `false` | show the plan without deploying    | 
                    
changedreference/data/api-endpoints.json
                      @@ -1,13 +1,14 @@ {-  "version": "1.5.0",-  "auth": ["bearer", "deploy-token"],+  "version": "2.0.0",+  "auth": ["bearer", "scoped-token"],   "endpoints": [-    { "method": "GET", "path": "/status", "desc": "node health and last deploy" },+    { "method": "GET", "path": "/status", "desc": "node health and current release" },     { "method": "GET", "path": "/manifest", "desc": "files currently served" },+    { "method": "GET", "path": "/releases", "desc": "immutable release history" },     { "method": "GET", "path": "/metrics", "desc": "Prometheus metrics" },-    { "method": "GET", "path": "/audit", "desc": "signed deploy history" },-    { "method": "POST", "path": "/run", "desc": "trigger a deploy" },-    { "method": "POST", "path": "/plugins", "desc": "register a plugin" }+    { "method": "GET", "path": "/functions", "desc": "deployed edge functions" },+    { "method": "POST", "path": "/run", "desc": "deploy a new release" },+    { "method": "POST", "path": "/rollback", "desc": "serve a previous release" }   ] } 
                    
changedreference/data/config-defaults.csv
                      @@ -1,8 +1,9 @@ key,default,description-project.concurrency,12,number of parallel workers-plugin.name,,plugin to load during sync+project.team,,team that owns the project+project.concurrency,16,number of parallel workers+functions.dir,./functions,directory of edge functions+functions.runtime,edge-js@2,edge function runtime remote.strategy,drain,deploy strategy (drain or replace)-deploy.drain_timeout,60s,force-cycle instances after this window-telemetry.otlp_endpoint,,OpenTelemetry collector endpoint-telemetry.metrics,false,expose Prometheus metrics+remote.regions,,list of region codes to deploy to+NIMBUS_KEY,,role-scoped API key (env or secret manager only) 
                    
changedreferences.md
                      @@ -5,19 +5,27 @@  # References and further reading -- The plugin author's guide-- Draining, connection lifetimes, and `--drain-timeout`-- Wiring Nimbus telemetry into Grafana+- The edge functions runtime (`edge-js@2`) reference+- Teams, roles, and scoped tokens+- Immutable releases and instant rollback+- Migrating a 1.x project to 2.0 -## What people are building+## What people are saying -<div class="tweet-embed"><div class="tweet-head"><img class="tweet-avatar" src="./guides/images/avatar.jpg" alt="" /><div><div class="tweet-name">Priya Nair</div><div class="tweet-handle">@priya_builds</div></div><span class="tweet-bird">๐Ÿฆ</span></div><p class="tweet-body">Switched our docs + assets pipeline to Nimbus 1.5 plugins. Image optimization and zero-downtime deploys out of the box. Rollouts went from minutes to seconds.</p><p class="tweet-date">10:24 AM ยท Mar 4, 2025</p></div>+<div class="tweet-embed"><div class="tweet-head"><img class="tweet-avatar" src="./guides/images/avatar.jpg" alt="" /><div><div class="tweet-name">Marcus Feld</div><div class="tweet-handle">@marcusships</div></div><span class="tweet-bird">๐Ÿฆ</span></div><p class="tweet-body">Nimbus 2.0 shipped our static docs AND the edge functions behind them in a single atomic release. Rollback is one command. This is how deploys should feel.</p><p class="tweet-date">9:02 AM ยท Jun 18, 2025</p></div>  ## Spec sheet -<div class="embed embed-pdf"><object data="./documents/spec-sheet.pdf" type="application/pdf"><a href="./documents/spec-sheet.pdf">Open the Nimbus 1.5 spec sheet (PDF) โ†’</a></object></div>+<div class="embed embed-pdf"><object data="./documents/spec-sheet.pdf" type="application/pdf"><a href="./documents/spec-sheet.pdf">Open the Nimbus 2.0 spec sheet (PDF) โ†’</a></object></div>++## Release changelog++<div class="embed embed-pdf"><object data="./documents/changelog.pdf" type="application/pdf"><a href="./documents/changelog.pdf">Open the Nimbus release changelog (PDF) โ†’</a></object></div>  ## Downloads++Every file here is captured in the backup and retrieved from the snapshot on+demand:  - [Spec sheet (PDF)](./documents/spec-sheet.pdf) - [Release changelog (PDF)](./documents/changelog.pdf)
                    
changedtheme.css
                      @@ -1,72 +1,87 @@-/* Nimbus 1.5 docs theme: refined slate, larger headings, dark code blocks. */+/* Nimbus 2.0 docs theme: modern, clean, violet accent, soft cards. */ .doc {-  --accent: #6366f1;+  --accent: #7c3aed;+  --accent-soft: #f3efff;   font-family:     'Inter', system-ui, -apple-system, sans-serif;-  line-height: 1.72;-  color: #0f172a;+  line-height: 1.75;+  color: #1c1917;+  font-size: 16px; } .doc h1 {-  font-size: 2.1rem;+  font-size: 2.15rem;   font-weight: 800;   letter-spacing: -0.03em;-  color: #0f172a;+  color: #2e1065; } .doc h2 {   font-weight: 700;   letter-spacing: -0.02em;-  color: #1e293b;+  color: #4c1d95;   margin-top: 2em;+  padding-bottom: 4px;+  border-bottom: 1px solid #ece9f6; } .doc h3 {-  color: #334155;+  color: #5b21b6; } .doc a {   color: var(--accent);   text-decoration: none;   font-weight: 500;+  border-bottom: 1px solid #ddd6fe; } .doc a:hover {-  text-decoration: underline;+  border-bottom-color: var(--accent); } .doc code {-  background: #eef0fb;-  color: #4338ca;-  border-radius: 4px;+  background: var(--accent-soft);+  color: #6d28d9;+  border-radius: 5px;+  font-size: 0.9em; } .doc pre {-  background: #0f172a;-  color: #e2e8f0;-  border: 1px solid #1e293b;-  border-radius: 10px;-  box-shadow: 0 10px 30px -18px rgba(15, 23, 42, 0.7);+  background: #1e1b2e;+  color: #ede9fe;+  border-radius: 12px;+  box-shadow: 0 12px 34px -20px rgba(46, 16, 101, 0.7); } .doc pre code {   background: none;   color: inherit; } .doc img {-  border-radius: 14px;-  box-shadow: 0 14px 36px -18px rgba(15, 23, 42, 0.55);+  border-radius: 16px;+  box-shadow: 0 16px 40px -20px rgba(46, 16, 101, 0.45); } .doc thead th {-  background: #f1f5f9;-  color: #1e293b;+  background: var(--accent-soft);+  color: #4c1d95; } .doc th, .doc td {-  border-color: #e2e8f0;+  border-color: #ece9f6;+}+.doc blockquote {+  border-left: 3px solid var(--accent);+  background: var(--accent-soft);+  border-radius: 0 10px 10px 0; } .doc .embed-video {-  border-radius: 14px;-  box-shadow: 0 16px 40px -20px rgba(15, 23, 42, 0.6);+  border-radius: 16px;+  box-shadow: 0 18px 44px -22px rgba(46, 16, 101, 0.6);+}+.doc .embed-pdf iframe {+  border-radius: 12px;+  border-color: #ece9f6; } .doc .callout {-  border-radius: 10px;-  background: #f8fafc;+  border-radius: 12px;+  background: #faf9ff; } .doc .tweet-embed {-  border-color: #e2e8f0;-  box-shadow: 0 10px 30px -20px rgba(15, 23, 42, 0.5);+  border-radius: 16px;+  border-color: #ece9f6;+  box-shadow: 0 12px 34px -22px rgba(46, 16, 101, 0.5); } 
                    
changedgetting-started/images/logo.jpg

Binary file. The bytes differ between versions (for example an image or PDF that was replaced).

changedguides/images/architecture.jpg

Binary file. The bytes differ between versions (for example an image or PDF that was replaced).

changedguides/images/avatar.jpg

Binary file. The bytes differ between versions (for example an image or PDF that was replaced).

changedguides/images/dashboard.jpg

Binary file. The bytes differ between versions (for example an image or PDF that was replaced).

changedguides/images/flow.jpg

Binary file. The bytes differ between versions (for example an image or PDF that was replaced).