Developer guide
You’ve installed wippctl + the wippit-publish skill. Here’s how to drive it by hand. The CLI is self-documenting — this is the curated tour.
# the two sources of truth — always current with your installed version wippctl describe # every command + flags, as JSON wippctl cms model # how a site is structured (components, types, gotchas)
Wire up your tenant
Redeem your invite code (see /redeem), then point wippctl at your workspace:
wippctl env add acme --server grpcs://wipp.it:443 --token wpt_XXXXXX_xxxx
wippctl env use acme
wippctl tenant info # smoke test
Publish a site
A template is your site; it holds components, each a directory mounted at a URI. Conventional layout: base → /assets, root → /, errors by status.
wippctl cms template create site --display-name "Acme" \
--data '{"site_name":"Acme","primary_color":"#0066cc"}'
wippctl cms component add site/base --uri-mount /assets --type static
wippctl cms component add site/root --uri-mount / --type static
wippctl cms file write site/root/index.html --from ./dist/index.html
wippctl cms file write site/base/site.css --from ./dist/site.css
wippctl cms template activate site # first activation can omit --expected-etag
Inside any text file, Wippit etc. are substituted server-side at upload. Change them with cms template and components re-substitute automatically.
Publish a single-page app at a sub-path
An SPA is a spa component — on a URI miss within its mount it serves index.html (so client-side routers work). The one gotcha: build it with its base set to the mount, or assets 404.
# build with the mount as base — Vite: vite build --base=/cotizacion/ wippctl cms component add site/cotizacion --uri-mount /cotizacion --type spa wippctl cms file write site/cotizacion/index.html --from ./dist/index.html wippctl cms template reload site # publishes the new component, live
Adding or removing a component — then cms template reload — takes effect immediately on your live site. No redeploy.
Day–2: tokens, users, domains
wippctl token issue --name ci-acme --scopes admin
wippctl user create --email alice@acme.com --name "Alice"
wippctl role assign <user-uid> admin
wippctl tenant settings --update '{"primaryColor":"#0066cc"}'
# custom domain: add → publish the TXT it prints → verify → point an A record
wippctl tenant alias add acme.com
wippctl tenant alias verify acme.com
Troubleshooting
connection error / EOF — use grpcs://wipp.it:443 (TLS), not grpc://.
Unauthenticated — token expired or wrong env (wippctl env list).
expected_etag is required — another template is active; pass --expected-etag from cms template list --json.
404 from a custom domain — A record points here but no template is active for that tenant.
Anything confusing is a bug — tell us at beta@wippit.systems.
Ready when you are.
No workspace yet? Grab a beta invite and you’re publishing in minutes.
Request beta access →