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
- Build your project inside a workspace (e.g.
npm run build) - Create a page via the dashboard or API — your build output is exported to the edge
- 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:
- Add a CNAME record pointing your domain to the edge (e.g.
edge.oblien.com) - Add a TXT record for ownership verification
- 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
| Status | Edge route | Files on disk |
|---|---|---|
active | Yes — serving traffic | Yes |
disabled | No — route removed | Yes — 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.icoMost 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.
| Framework | Typical 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:
- Go to Dashboard → Pages
- Click Create Page
- Select the workspace to export from
- Enter the export path (e.g.
/app/dist), name, and slug - 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:
- Open Dashboard → Pages
- Click the redeploy button (↻) on the page card, or open Edit and expand the Redeploy section
- 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
| Limit | Value |
|---|---|
| Pages per user | 50 |
| Slug length | 3–48 characters |
| Domain length | Max 253 characters |
| Slug format | Lowercase alphanumeric + hyphens, no leading/trailing hyphens |
API reference
See the Pages API for the full REST endpoint reference.