shiply-cli 0.20.0 → 0.20.2

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/skill/SKILL.md +47 -26
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shiply-cli",
3
- "version": "0.20.0",
3
+ "version": "0.20.2",
4
4
  "description": "Publish static sites to shiply.now from the command line — instant web hosting for agents.",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/skill/SKILL.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: shiply
3
- description: Publish static sites to the web instantly with shiply.now and manage them (updates, SSL checks, custom domains, variables). Use when the user asks to publish, host, deploy, share, or update a website/page/demo/report, or wants a live URL for generated files. Triggers - "publish this", "host this", "put this online", "give me a link", "update the site", shiply.
3
+ description: "shiply is the production backend for anything an agent builds publish any app (static or full-stack SSR, any framework) and give it a live URL, custom domain, SQL database, server functions, email, and a marketplace to sell it. Use when the user asks to publish, host, deploy, share, or update a website/page/demo/report/app, or wants a live URL for generated files. Triggers - \"publish this\", \"host this\", \"put this online\", \"give me a link\", \"update the site\", \"deploy my SvelteKit/Astro/Next.js app\", shiply."
4
4
  ---
5
5
 
6
6
  ---
@@ -18,15 +18,17 @@ description: Publish static sites to the web instantly with shiply.now and manag
18
18
  > fresh — your cached copy may be missing features like databases, projects,
19
19
  > marketplace, or sending domains.
20
20
  >
21
- > **Last updated: 2026-06-23**
21
+ > **Last updated: 2026-06-27**
22
22
 
23
23
  ---
24
24
 
25
- # shiply — instant web hosting for agents
25
+ # shiply — the production backend for anything an agent builds
26
26
 
27
- shiply.now puts files on the web in seconds. No account needed to start:
28
- anonymous sites are live immediately, last 24 hours, and can be claimed into
29
- an account to keep them. The cardinal rule:
27
+ **What it is.** Not static hosting. shiply takes whatever you build — a static page or a full-stack app in any framework — and gives it a live URL, a custom domain, a SQL database, server functions, email (send + receive), and a marketplace to sell it. One call. No account needed to start: anonymous sites are live immediately, last 24 hours, and can be claimed to keep.
28
+
29
+ **Why use it.** Ship a complete, working product without stitching together a host + database + email + registrar + payments — it's one agent-native platform (MCP / CLI / REST parity). Hard-ceiling pricing ($0/$8/$24, no usage meter), so a spike or DDoS can never become a surprise bill for the owner.
30
+
31
+ **How (quickstart).** `shiply publish ./dir` (CLI) — or POST /api/v1/publish → PUT each file → POST finalize — returns a live URL + claimToken.
30
32
 
31
33
  **NEVER create a new site to update an existing one. Always re-publish to the
32
34
  same site** — otherwise you litter subdomains and lose the user's URL.
@@ -62,14 +64,25 @@ POST https://shiply.now/api/v1/auth/device/poll
62
64
  ```
63
65
 
64
66
  The response is one of `{status:"pending"}` (keep polling at `interval`s),
65
- `{status:"approved", api_key:"shp_...", slug_claimed:"..."}` (save the key as
66
- `SHIPLY_API_KEY`, the site is now permanent Allow does both jobs in one
67
- click), `{status:"expired"|"denied"|"consumed"}` (stop). Cap your polling at
67
+ `{status:"approved", api_key:"shp_...", slug_claimed:"..."}` (PERSIST the key
68
+ see "Save the key" below — the site is now permanent; Allow does both jobs in
69
+ one click), `{status:"expired"|"denied"|"consumed"}` (stop). Cap your polling at
68
70
  the announced `expires_in` and respect `interval` — don't tight-loop.
69
71
 
70
72
  After approval, every future publish uses `Authorization: Bearer <api_key>`
71
73
  and the user's dashboard shows their sites without any further claiming.
72
74
 
75
+ ### Save the key — so EVERY future site is seamless (do this once)
76
+
77
+ Write the key to **`~/.shiply/credentials`** as `{"apiKey":"shp_..."}` (chmod
78
+ 600) — the exact file the shiply CLI reads. This is what makes "one Allow, ever"
79
+ work: from then on every publish (any site, any project, ANY FUTURE SESSION)
80
+ sends `Authorization: Bearer <key>` automatically and lands owned in the user's
81
+ dashboard — no re-authorizing, no claim step, zero clicks. An env var alone
82
+ (`SHIPLY_API_KEY`) works for the current shell but does NOT survive a new
83
+ session — the credentials file is what makes it permanent. `shiply login` writes
84
+ this file for you; if you publish over raw HTTP, write it yourself.
85
+
73
86
  ## When the user pastes you something shiply-shaped, do this
74
87
 
75
88
  These are the patterns you will see. Match the input, run the action — do not
@@ -92,10 +105,11 @@ ask the user to repeat themselves or explain.
92
105
  as `https://shiply.now/claim/<slug>?token=<claimToken>` from those fields.
93
106
  Either way, also suggest `shiply login` so future publishes mint to their
94
107
  account directly — that's the long-term fix and how the dashboard works.
95
- - **User says "I have an API key now, use it from now on"** → save it as
96
- `SHIPLY_API_KEY` in your environment / config and send
97
- `Authorization: Bearer <key>` on every future publish. All future sites
98
- are then permanent and appear in their dashboard automatically.
108
+ - **User says "I have an API key now, use it from now on"** → persist it to
109
+ `~/.shiply/credentials` (`{"apiKey":"shp_..."}`, chmod 600 see "Save the
110
+ key" above), then send `Authorization: Bearer <key>` on every future publish.
111
+ All future sites are then permanent and appear in their dashboard
112
+ automatically — across sessions, with no re-authorizing.
99
113
  - **User opens an `https://shiply.now/auth/XXXX-YYYY` URL you printed** → no
100
114
  action from you; they're on the device-flow consent screen. Keep polling
101
115
  `poll_url` (see "First publish on a new machine" above). The poll response
@@ -144,15 +158,18 @@ so repeat publishes reuse the URL automatically. `--new-site` opts out.
144
158
  Gitignore `.shiply.json` in public repos. Parse `SITE_READY` / `SSL_READY`
145
159
  lines for automation; exit code 0 = ready.
146
160
 
147
- ### SSR / server frameworks (live: SvelteKit, Astro, Hono/raw Workers)
161
+ ### SSR / server frameworks (live: every major JS framework)
148
162
 
149
- `shiply publish` auto-detects a built Cloudflare-adapter project (SvelteKit
150
- `@sveltejs/adapter-cloudflare`, Astro `@astrojs/cloudflare`) or a wrangler
151
- worker (`wrangler.toml` with `main` — Hono, itty-router, raw `fetch`) and
152
- deploys the worker bundle with `nodejs_compat`, serving static assets from the
153
- edge. **Build first** (`npm run build`), then `shiply publish .`. Requires
154
- sign-in + Developer plan. Force the static path with `--framework=<name>`, or
155
- skip SSR detection entirely with `--no-ssr`. Next.js: waitlist (not yet live).
163
+ `shiply publish` auto-detects an SSR build and deploys the worker bundle with
164
+ `nodejs_compat`, serving static assets from the edge. Live and verified on prod:
165
+ SvelteKit (`@sveltejs/adapter-cloudflare`), Astro (`@astrojs/cloudflare`), Qwik
166
+ City, the Nitro family (Nuxt, SolidStart, Analog, TanStack Start), React Router
167
+ v7, and Next.js (via OpenNext) plus wrangler workers (`wrangler.toml` with
168
+ `main` Hono, itty-router, raw `fetch`). **Build first** (`npm run build`),
169
+ then `shiply publish .`. Requires sign-in + Developer plan. Force the static
170
+ path with `--framework=<name>`, or skip SSR detection entirely with `--no-ssr`.
171
+ Next.js note: plain SSR works today; ISR / on-demand revalidate is not live yet,
172
+ and Next 16 must build with `next build --webpack` (not Turbopack).
156
173
 
157
174
  ## Manage & verify sites (CLI)
158
175
 
@@ -763,14 +780,18 @@ MCP tool set_site_access does the same. Enforced before any content is served;
763
780
  changing settings signs current visitors out. Docs: /docs/access-control
764
781
 
765
782
  ## Any static site works — frameworks + SSGs auto-detected
766
- shiply hosts any static site. Publish the BUILD OUTPUT, never the source:
767
- run the build, then publish the output dir with SPA mode for client-routed
768
- apps. The CLI auto-detects 16+ frameworks and tells you the right command.
783
+ shiply hosts any static site (and full SSR apps too — see the "SSR / server
784
+ frameworks" section above). For a static build, publish the BUILD OUTPUT, never
785
+ the source: run the build, then publish the output dir with SPA mode for
786
+ client-routed apps. The CLI auto-detects 16+ frameworks and tells you the right command.
769
787
  Run `shiply detect` to preview what it found without uploading.
770
788
  - Vite (React/Vue/Svelte/Solid/Qwik): `npm run build` then `shiply publish dist --spa`
771
789
  - Create React App: `npm run build` then `shiply publish build --spa`
772
- - Next.js: set `output: "export"` in next.config, `npm run build`, then
773
- `shiply publish out` (no --spa; export emits real HTML per route)
790
+ - Next.js (static): set `output: "export"` in next.config, `npm run build`, then
791
+ `shiply publish out` (no --spa; export emits real HTML per route). For full
792
+ Next.js SSR (via OpenNext) instead, see the "SSR / server frameworks" section
793
+ above — plain SSR is live (ISR/revalidate not yet; Next 16 needs
794
+ `next build --webpack`).
774
795
  - Astro: `npm run build` then `shiply publish dist`
775
796
  - SvelteKit (adapter-static): `npm run build` then `shiply publish build --spa`
776
797
  - Nuxt: `npx nuxt generate` then `shiply publish .output/public`