Sites
Skippr Cloud sites lets you publish immutable static deployments at a stable Site hostname. The supported control plane creates Sites, completes and promotes deployments, verifies custom domains, mints protected preview tokens, and invalidates static cache paths.
Status: Preview (partial).
- Supported: Site create/get/list/update/delete; Deployment create/complete/get/list/promote/delete;
CreatePreviewToken; DomainBinding create/get/list/verify/delete;PurgeCacheandRevalidatePathfor static hosts. - Planned:
RevalidateTag(durable ISR tag indexes), framework SSR, durable ISR generation, image optimization, and advanced traffic controls.
Know the control-plane and edge boundary
The Sites control plane manages tenant resources and deployment state. A successful CompleteDeployment verifies an immutable static bundle and makes the deployment READY; PromoteDeployment selects which ready deployment the stable Site hostname serves.
Sites web traffic uses the Sites edge. Cloud service APIs and tenant Gateway Apis continue to use the gateway edge. A Site can declare an explicit origin binding to a tenant Api, but Sites does not create a second public path to Cloud APIs.
Custom Site hostnames use a Sites DomainBinding and Sites-managed edge TLS. They do not use a gateway DomainName or a CertificatescertificateId.
At a glance
| Fact | Value |
|---|---|
| Control endpoint | https://sites.eu-central-1.cloud.skippr.io or https://api.cloud.skippr.io |
| Target prefix | CloudSites. |
| Authentication | Cloud JWT or SigV4 service sites |
| Region | eu-central-1 |
| Stable hostname | {site_id}.sites.skippr.io |
| Preview hostname | {deployment_id}--{site_id}.sites.skippr.io |
| Contract | Generated Sites operations |
What you can do
- Create a stable Site identity and platform hostname.
- Upload, complete, and inspect immutable static deployments.
- Promote a ready deployment or roll back by promoting an earlier one.
- Create a token for a ready deployment's protected preview.
- Purge static cache entries or revalidate a path or tag.
- Verify a custom hostname and receive managed edge TLS.
- Declare same-origin routes to a tenant gateway Api in a deployment bundle.
Before you start
You need a Cloud JWT or operator/workload SigV4 key and permission to manage Sites resources. Your static build output must include index.html and stay within the deployment limits below. A custom domain also requires control of the DNS records returned by CreateDomainBinding.
Create your first Site
Set a token from Auth:
export CLOUD_BEARER_TOKEN='<token>'Create a public Site:
curl -sS https://sites.eu-central-1.cloud.skippr.io/ \
-H "Authorization: Bearer ${CLOUD_BEARER_TOKEN}" \
-H 'Content-Type: application/json' \
-H 'X-Cloud-Target: CloudSites.CreateSite' \
-d '{
"name":"docs",
"publicAccess":true,
"clientToken":"site-docs-1"
}'A successful response includes siteId, platformHostname, and revision. Reuse the same clientToken when retrying the same create request.
Understand Sites resources
| Concept | Meaning |
|---|---|
| Site | Stable resource with a hostname, active Deployment, and revision |
| Deployment | Immutable static build output identified by a content digest |
| SiteBundle | Versioned manifest of assets, routes, headers, redirects, and declared origins |
| Promotion | Atomic selection of the Site's active ready Deployment |
| Rollback | Promotion of an earlier ready Deployment |
| Preview token | Credential scoped to one ready Deployment preview |
| DomainBinding | Verified custom hostname attached to one Site |
| OriginBinding | Explicit path and method mapping to a tenant gateway Api |
siteId, deploymentId, and bindingId are opaque tenant-scoped identifiers. Do not derive routing or tenancy from their text.
Manage Sites
| Task | Supported operations |
|---|---|
| Create and read | CreateSite, GetSite, ListSites |
| Change settings | UpdateSite |
| Remove | DeleteSite |
cloud_site is the Terraform resource for this lifecycle. CDKTF TypeScript and Python expose the generated binding for the same resource.
Deploy and promote static content
- Build static output in your own build environment.
- Create a deterministic SiteBundle and content digest.
- Call
CreateDeploymentto receive upload instructions. - Upload the required immutable assets.
- Call
CompleteDeploymentwith the generated manifest contract. - Read
GetDeploymentuntil the deployment isREADYorFAILED. - Call
PromoteDeploymentto switch the stable Site hostname.
| Task | Supported operations |
|---|---|
| Create and complete | CreateDeployment, CompleteDeployment |
| Inspect history | GetDeployment, ListDeployments |
| Authorize a protected preview | CreatePreviewToken |
| Release or roll back | PromoteDeployment |
| Remove inactive history | DeleteDeployment |
Completion verifies content digests and manifest limits. A deployment is immutable after completion. DeleteDeployment rejects the active deployment. Promotion uses the Site revision, so a conflicting concurrent promotion fails instead of overwriting a newer selection.
Bind a custom domain
- Call
CreateDomainBindingwith thesiteIdand hostname. - Publish the returned ownership and routing records at your DNS provider, or use DNS when Skippr Cloud manages the zone.
- Call
VerifyDomainBinding. - Read
GetDomainBindinguntil the binding reports its active status.
| Task | Supported operations |
|---|---|
| Create and verify | CreateDomainBinding, VerifyDomainBinding |
| Read | GetDomainBinding, ListDomainBindings |
| Remove | DeleteDomainBinding |
cloud_site_domain_binding is the Terraform resource for stable custom-domain configuration. Do not send DNS provider credentials to Sites.
Invalidate cache without implying ISR
PurgeCache and RevalidatePath are supported for static Sites. PurgeCache accepts at most 100 paths in one request. Use an optional deploymentId when the invalidation must target one immutable deployment. RevalidateTag remains planned until durable tag → path indexes land.
| Task | Supported operation |
|---|---|
| Purge selected paths or a scoped static cache | PurgeCache |
| Revalidate one path | RevalidatePath |
These operations invalidate or refresh current static cache entries. They do not make durable ISR generation callable. ISR regeneration, request collapsing, framework SSR, and image optimization remain planned product behavior without a current operation recipe.
Normal promotion uses immutable deployment assets, so broad cache purges should not be required for a routine release.
Limits and errors
| Limit per Deployment | Value |
|---|---|
| Static files | 20,000 |
| Individual static file | 25 MiB |
| Total uncompressed static assets | 1 GiB |
| Worker bundle | 10 MiB compressed; reserved for a later runtime profile |
| Static redirects | 2,000 |
| Response-header rules | 100 |
- 400: the SiteBundle, digest, hostname, or request shape is invalid.
- 401: authentication is missing or invalid.
- 403: the policy denies the operation or hostname.
- 404: the Site, Deployment, or DomainBinding does not exist.
- 409: an idempotency token, Site revision, active-deployment deletion, or domain ownership conflict prevents the mutation.
- 500: the service could not persist state or complete the edge operation.
An oversized file or bundle returns a validation error. Fix the input before retrying. Reuse the same clientToken for the same create or completion request.
Uploaded bundles must not contain path traversal, escaping symlinks, duplicate normalized paths, or files that do not match the declared digest.
