One environment · one microVM · one guest kernel

Ephemeral environments
with a real kernel boundary.

Run a complete dev or test environment inside its own microVM, with its own guest kernel. Your image, unchanged. An HTTPS URL the moment you ask for one — and a TTL that throws the whole thing away.

region eu-north-1 runtime Kata microVM on paid plans access by invitation
pr-482-acme-7f3a9c21 Running
https://pr-482-acme-7f3a9c21.orkastor.cloud
web :8080
api :3000
postgres internal
guest kernel this environment's own
microVM boundary
Bare metal host kernel · tainted node pool

boundaryA separate guest kernel, so a container escape lands the attacker inside their own kernel, not on the host.

Diagram: an Orkastor environment. Inside one microVM sit three services — web on port 8080, api on port 3000, and an internal-only postgres — above a guest kernel belonging to that environment alone. Below the microVM boundary is the bare-metal host and its own separate host kernel, on a node pool tainted for tenant work.


The boundary

Every environment gets its own kernel.

Most platforms in this space put your code in a container next to everyone else's, sharing one host kernel. That is a namespace, and a namespace is a scheduling construct — it was never designed to hold against code that is actively trying to leave.

Shared-kernel modelone kernel, many tenants

Both containers make their system calls against the same kernel. The isolation is a set of kernel features asking the kernel to restrain itself, which is a different kind of promise from a boundary that sits underneath it.

Diagram: two tenants, A and B, each in a container, both calling down into a single shared host kernel.

Orkastor modelone guest kernel per environment

Two guest kernels, independent of each other and of the host's. Each environment's system calls are served by a kernel that only that environment is running in.

Diagram: two environments side by side. Each contains its application and its own guest kernel inside its own microVM. Both sit above bare metal whose host kernel neither of them reaches.

HARDWARE ISOLATION

Kata Containers, on metal we operate

A microVM with its own guest kernel, scheduled onto a dedicated, tainted bare-metal node pool. A platform pod cannot land on a tenant node and a tenant workload cannot land beside a platform pod.

WHERE IT DIFFERS

Trial and Dev plans use gVisor

Those two plans run under gVisor — a userspace kernel on ordinary compute. A real boundary, and a weaker one than a separate guest kernel. We would rather name that difference than average it away into one word.

Everything else follows from that line. An ephemeral Postgres is isolated by the same boundary as the web process in front of it — not by a second mechanism bolted on for databases.


What you run

A whole environment, not a container.

A frontend, an API and a real datastore, started together, addressed on one hostname and thrown away together. The Console is where they live.

Environments acme / eu-north-1
An illustration of the Orkastor Console's environments list, showing four environments and their tier, status, remaining time to live and URL.
EnvironmentTierStatusTTLURL
pr-482-acme standard Running 08:00:00 pr-482-acme-7f3a9c21.orkastor.cloud
pr-479-acme preemptible Provisioning pr-479-acme-c0d41e77.orkastor.cloud
nightly-e2e standard Expiring 00:10:02 nightly-e2e-acme-2b41f8d0.orkastor.cloud
agent-sandbox-3 preemptible Suspended paused resume to serve

A provisioning environment already has its URL — the hostname is issued when you ask for the environment, not when it finishes starting. Until the first deploy succeeds it serves a holding page, which is exactly why it can go on the pull request straight away.

Multi-service, one hostname

Paths route to services on a single host, so the frontend calls /api relative. No CORS, no build-time API URL, and the same bundle in every environment.

Datastores inside the boundary

Run Postgres or Redis as a service of the environment. A service on a well-known datastore port cannot be given a public route at all — that is refused, not discouraged.

Services find each other

Ordinary DNS inside the environment, plus injected ORKASTOR_SERVICE_<NAME>_URL variables. Your own PORT always wins over ours.


Routing

One hostname. Relative /api. No CORS.

A single-page app learns its API address at build time. Give each service its own subdomain and the frontend bundle becomes environment-specific — which is exactly what breaks promoting one image through several environments.

Request pathfirst match wins

Diagram: one HTTPS hostname splits into two path rules. Requests to /api reach the api service; everything else reaches the web service. The api service in turn reaches postgres, which is internal-only and has no route of its own.

stripPrefix: false keeps /api on the request, so the backend sees the same path here that it sees on your laptop.


How it works

Describe it once. Get a URL immediately.

Bring the image your CI already builds, or connect a repository and let Orkastor build it. Either way the environment is described by one file, and the URL is minted before anything has booted.

orkastor.yaml
# orkastor.yaml
version: 1
ttl: 8h
tier: standard
routes:                  # first match wins
  - path: /api
    service: api
    stripPrefix: false   # backend keeps /api
  - path: /
    service: web
services:
  web:
    image: ghcr.io/acme/web:9f2c1ab
    port: 8080
    size: s
    access: unlisted
  api:
    image: ghcr.io/acme/api:9f2c1ab
    port: 3000
    size: s
    access: unlisted
  postgres:
    image: postgres:16
    port: 5432
    size: s
    access: internal
    ephemeral: true      # dies with the environment
Creating
$ create environment # from the Console, or one API call
 
202 accepted — hostname minted before anything boots
https://pr-482-acme-7f3a9c21.orkastor.cloud
 
PENDING entitlement and quota checked
PROVISIONING pulling ghcr.io/acme/web:9f2c1ab
PROVISIONING booting microVM · guest kernel starting
PROVISIONING starting web, api, postgres
PROVISIONING attaching routes · terminating TLS
RUNNING serving
 
ttl 8h 00m
tier standard
size s
region eu-north-1
01

Describe

Services, ports, a TTL and where each one is reachable. One file, or the create form.

02

Allocate

A microVM is scheduled onto the tenant node pool and its guest kernel boots.

03

Run

Services start, routes attach, TLS is terminated at the gateway.

04

Reclaim

The TTL expires, you get a grace window, then the whole environment goes.


The URL

Ready before the build is.

The hostname is minted when you ask for the environment, not when it starts. It serves a holding page until the first deploy succeeds — so it can go on the pull request immediately.

Hostname

https://pr-482-acme-7f3a9c21.orkastor.cloud

pr-482
the environment's name, yours
acme
the workspace slug
7f3a9c21
32 bits of hash, so two environments never collide
access unlisted robots noindex, nofollow tls terminated at the gateway

Unlisted is the default; password, workspace SSO, an IP allowlist and internal-only are the alternatives. The hash makes the name unguessable, and unguessable is not an access control — if the environment holds anything you would mind a stranger seeing, pick one of the other four.


Lifecycle

Built to be thrown away, on purpose.

An environment that never expires becomes infrastructure, and infrastructure needs an owner. Every environment here has an end date from the moment it exists.

TTL

A visible countdown

Warnings at 24 hours, 1 hour and 10 minutes. Extend in one click, up to your plan's ceiling — the refusal names the ceiling.

UNDO

A grace window

Expiring is not deleted. Inside the grace window, undo puts the environment back to Running. After reclaim starts, it cannot.

SUSPEND

Stop without losing it

Suspend releases the microVM's memory and stops the compute charge. Resume is explicit — a request cannot wake a suspended environment.

SCHEDULE

Business hours

Up to fourteen start/stop windows per environment, so a test estate is not running all weekend for nobody.

Storage is ephemeral throughout. Reclaim takes the microVM and everything in it, including the datastore. Anything you need to keep, keep elsewhere.


Who it's for

Environments that shouldn't become infrastructure projects.

01

Pull request environments

Give every PR its own complete environment, with a URL you can paste into the description before CI has finished.

02

Integration testing

Frontend, API and a real database together, seeded and torn down per run, instead of one shared staging everybody queues for.

03

Agent-generated code

Somewhere for a coding agent to actually run what it wrote. The boundary matters more when nobody read the code first.

04

Development sandboxes

A temporary environment for a spike or a demo that does not leave anything behind in shared infrastructure.


Comparison

A different boundary.

Not a scorecard against a named competitor — a comparison of two architectures, either of which can be the right one.

Container environments compared with Orkastor environments, across six architectural properties.
PropertyContainer environmentOrkastor environment
IsolationNamespace on a shared kernelmicroVM
KernelShared with the hostIts own guest kernel
UnitA containerThe whole environment
DatastoreExternal, or an add-onA service inside the boundary
HTTPS URLUsually configuredMinted on request
LifetimePersistent, or variesEphemeral, on a TTL

Limits

Designed with boundaries.

These are decisions, not gaps waiting to be filled. Knowing them now is worth more than discovering them at the wrong moment.

Environments expire
A TTL, a grace window, then reclaim. That is the product, not a limitation of it.
Storage is ephemeral
Nothing survives reclaim, including the datastore. There are no backups to restore from.
Use synthetic data
Seed with fixtures or scrubbed extracts. Nothing here is scoped for personal or regulated records.
One region
eu-north-1. There is no region picker, and no multi-region replication.
No custom domains
Environments live on orkastor.cloud subdomains, with certificates we issue.
No GPU
Not in the first version. Nor multi-AZ HA per environment, nor cross-environment networking.
No privileged or host access
Refused at admission: no privileged, hostPath, hostNetwork or CAP_SYS_ADMIN. Instance metadata is unreachable, and tenant code carries no cloud identity.
A cold first start
The metal pool scales to zero, so the first environment after an idle period can take five to twenty minutes. Later ones do not.

Status

Being built in the open.

Orkastor Cloud eu-north-1
Access By invitation There is no self-serve sign-up. Sign in if you have an account.
Pricing Not published The measurements a rate depends on are not finished. The Console shows the exact cost of the environment you are about to create, before you create it.
Footprint One region, growing Capacity, regions and runtime are still moving. Nothing on this page is a service level commitment.

We would rather publish the right number once than publish one twice, so there is no rate card here yet. When there is, it will be because it was measured.


Give every environment
a real boundary.

Build it.
Test it.
Throw it away.