shiply-cli
v0.20.2
Published
Publish static sites to shiply.now from the command line — instant web hosting for agents.
Maintainers
Readme
shiply-cli
Publish static sites to shiply.now from the command line — instant web hosting built for agents.
The npm package is
shiply-cli, notshiply. A different npm package namedshiply(an unrelated auto-commit watcher) is published by someone else — installing it does NOT give you the shiply.now CLI. Always useshiply-cli. The binary on PATH is still namedshiplyafter install; the warning is only about the npm package name.
npm install -g shiply-cli
# or, no install:
npx -y shiply-cli@latest publish ./dist
# or, install script:
curl -fsSL https://shiply.now/install.sh | bashUsage
shiply publish ./dist # publish a directory, print the live URL
shiply publish ./dist # run it AGAIN → updates the SAME site (no new subdomain)
shiply publish ./dist --spa # single-page app mode
shiply login # email a 6-digit code, mint + save an API key
shiply status <slug-or-domain> [--wait] # SSL + readiness check — confetti when live 🎉shiply remembers each directory's site in .shiply.json (slug + update token),
so repeat publishes always hit the same URL. Use --new-site to start fresh;
gitignore .shiply.json in public repos.
shiply status prints stable SSL_READY / SITE_READY markers for agents and
exits 0 only when the certificate is valid and the site serves. --wait polls
until ready (great while a custom domain's certificate issues).
Without an API key, sites are anonymous: live immediately at
https://<slug>.shiply.now/, expire after 24 hours, and print a one-time
claimToken/claimUrl so they can be updated or claimed into an account.
With an API key (shiply login, $SHIPLY_API_KEY, or --key), sites are
permanent and owned by your account.
Unchanged files are hash-skipped on updates — only diffs are uploaded.
shiply db
Per-site SQL databases. Pick the engine that fits the job: Cloudflare D1 (SQLite at the edge, free on every plan) or Neon Postgres (with copy-on-write branches, developer plan). Needs an API key.
shiply db create <name> # D1 by default (binding <NAME>_DB)
shiply db create <name> --postgres # Neon Postgres (binding DATABASE_URL) — developer plan
shiply db ls # list databases (name, provider, size, attached site)
shiply db sql <name-or-id> "<query>" # one-shot query; --params '[1,"a"]' for binds (D1 + Neon)
shiply db migrate <name-or-id> <dir> # apply every *.sql in dir, sorted
shiply db attach <name-or-id> --site <slug> # bind an existing DB to a site
shiply db delete <name-or-id> --yes # drop the database
# Neon only — branching off main:
shiply db branch <db> <branch-name> # cheap, fast, copy-on-write branch
shiply db branches <db> # list branches of a Neon database
shiply db delete-branch <name-or-id> --yes # drop a branch + its compute endpoint
shiply db merge <branch-name> # no-op alias — prints the pg_dump migration tipshiply db create inside a directory that already has a .shiply.json
records the new databaseId there, so the next shiply publish
auto-attaches it.
- D1: pages query it through a built-in fetch shim at
/_shiply/db/<binding>/query— no API key in the browser. - Neon: the connection URI is AES-256-GCM encrypted at rest and
surfaced to your serving Worker as
env.DATABASE_URL. Use it with@neondatabase/serverless,pg, drizzle, etc.
To bind a publish to a specific Neon branch instead of main, pass
shiply publish --preview-branch=<branchDbId> — handy for preview
deploys and safe schema rollouts.
See https://shiply.now/docs/databases for the full reference (REST routes, per-DB MCP URL, plan caps, D1 caveats, the Neon branch flow).
Frameworks
shiply publish . auto-detects the framework, runs the build if needed, and
publishes the right output folder with the right flags. Supported:
- JS app frameworks — Next.js (static export), Astro, SvelteKit, Vite
(React/Vue/Svelte/Solid/Qwik), Create React App, Nuxt (
nuxt generate), Remix (client build), SolidStart (static), Qwik City (static adapter). - Doc sites — Docusaurus, MkDocs.
- Static site generators — Hugo, Jekyll, Eleventy, Hexo.
- Anything else — generic fallback for any project that builds to
dist/,build/,out/,_site/,public/, or.output/public/. - Plain HTML — publishes as-is.
Use shiply detect to preview which framework was matched, which build
command will run, and which folder will be uploaded — without uploading
anything. Override auto-detection with --framework=<name>.
For agents
- Machine guide: https://shiply.now/llms.txt
- OpenAPI spec: https://shiply.now/openapi.json
- Docs: https://shiply.now/docs
License
MIT
