Concepts

Pages

Pages let you serve build artifacts, documentation, or any static files directly from the edge. Build inside a workspace VM, export the output folder, and your page is live — the workspace can be stopped or deleted without affecting the page.

How it works

  1. Build your project inside a workspace (e.g. npm run build)
  2. Create a page via the dashboard or API — your build output is exported to the edge
  3. Your page is live on the CDN with automatic TLS — the workspace can be stopped or deleted

Key concepts

Independence from workspaces

Pages are not mounted from a running VM. Files are copied out via a one-time transfer. This means:

  • No coupling to VM lifecycle — your page stays up even if the workspace is offline
  • No performance impact on the VM from serving traffic
  • No risk of filesystem corruption from concurrent access
  • You can delete the workspace and redeploy from a different one later

Slugs and domains

Every page gets a URL based on its slug and domain:

https://{slug}.{domain}
  • Slug — a URL-safe identifier (lowercase letters, numbers, hyphens). Auto-generated if not provided.
  • Domain — defaults to preview.oblien.com. Enterprise users can use their own wildcard domains.

Slugs must be unique within a domain. The system checks for collisions before creating a page.

Custom domains

Pages support fully custom domains with managed SSL — the same flow used by workspace custom domains:

  1. Add a CNAME record pointing your domain to the edge (e.g. edge.oblien.com)
  2. Add a TXT record for ownership verification
  3. Connect via POST /pages/:slug/domain — the route is registered immediately, and the SSL certificate is requested once edge DNS is ready

Certificates are auto-renewed once active. Custom domains use the same SSL infrastructure as workspaces.

Page status

StatusEdge routeFiles on disk
activeYes — serving trafficYes
disabledNo — route removedYes — preserved

Disabling a page removes the edge route (traffic stops immediately) but keeps the files on disk. Re-enabling restores the route without re-deploying.

File requirements

The export path must contain an index.html file at the root — this is the entry point served by the edge when visitors hit your page URL. Without it, visitors will see a 404.

A typical build output looks like this:

/app/dist/
├── index.html      ← required entry point
├── assets/
│   ├── style.css
│   └── app.js
└── favicon.ico

Most frameworks (Vite, Next.js static export, Astro, Hugo, etc.) produce this structure automatically. Point the export path to the build output folder — not the project root.

FrameworkTypical export path
Vite / React/app/dist
Next.js (static)/app/out
Astro/app/dist
Hugo/app/public
Plain HTML/app (wherever index.html lives)

Deploying a page

From the dashboard

Inside a workspace, open Pages → Create Page. The current workspace is already selected; enter the build output path, name, and slug. The workspace must be running to export files. The Pages tab also lists its existing exports, with All Pages linking to your account-wide list. Pages management is available to the workspace owner.

You can also start from the account-wide list:

  1. Go to Dashboard → Pages
  2. Click Create Page
  3. Select the workspace to export from
  4. Enter the export path (e.g. /app/dist), name, and slug
  5. Click Deploy — files are transferred and the page goes live immediately

Finding and monitoring deployments

Dashboard → Pages lists your account's static Pages, including deployments created through the API or SDK. Each entry shows its status, public URL, namespace, source workspace, and creation/update dates. Use Refresh to load new deployments. A failed request shows an error and retry control instead of an empty deployment list.

Open a Page for its Deployment overview, exported folder, source workspace, and hostnames. Domain & SSL provides the DNS records required by the API, connection status, and certificate controls. Analytics lets you choose the managed hostname or a custom-domain alias. Path rules contains optional redirects, rewrites, headers, and proxy paths for that Page.

The source workspace is a reference to the export source; stopping or deleting it does not remove the deployed Page.

The dashboard URL is /dashboard/pages; old /dashboard/sites bookmarks redirect there. Routes is the separate inventory of all public hostnames, including workspace ports, Pages, proxies, and tunnels. Each route has its own analytics link. A Page with advanced path rules remains a static Page in the Pages inventory.

Namespace-scoped API credentials can list and manage only Pages in their bound namespace; account credentials list the account's Pages across namespaces.

From the API

Create a page by exporting files from a running workspace:

curl -X POST "https://api.oblien.com/pages" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"workspace_id": "ws_abc", "path": "/app/dist", "name": "my-app"}'

Re-deploying

When you redeploy, old files are deleted first and replaced with the fresh export. You can also change the export path or source workspace on redeploy.

From the dashboard:

  1. Open Dashboard → Pages
  2. Click the redeploy button (↻) on the page card, or open Edit and expand the Redeploy section
  3. Select a workspace, enter the export path, and click Redeploy

From the API:

curl -X POST "https://api.oblien.com/pages/my-app/deploy" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"workspace_id": "ws_abc", "path": "/app/dist"}'

You can use a different workspace or path than the original deployment. If the page was disabled, redeploying automatically re-enables it.

Connecting a custom domain

# 1. Check DNS first
curl -X POST "https://api.oblien.com/pages/my-app/domain/check" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain": "docs.example.com"}'

# 2. Connect
curl -X POST "https://api.oblien.com/pages/my-app/domain" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain": "docs.example.com"}'

Limits

LimitValue
Pages per user50
Slug length3–48 characters
Domain lengthMax 253 characters
Slug formatLowercase alphanumeric + hyphens, no leading/trailing hyphens

API reference

See the Pages API for the full REST endpoint reference.