The App Store for
Confidential Computing

Register your app. Publish measured versions. Deploy instantly to hardware-verified enclaves from warm capacity pools, at the clearing price.

Network Trust Policy

Staging network is untrusted. It exists for CI and integration testing only. Do not use staging for secrets, private production data, or trust-sensitive workloads.

Why use staging anyway? It runs the newest features from main first, and gives developers low-cost access to strong CPU/GPU capacity for build validation, load testing, and model/app experimentation before production.

Production network is trusted. Production rollout is release-gated: strict attestation/auth policy plus pinned trusted measurements, signatures, and GCP image descriptor for an explicit release tag.

How the App Store Works

Every deployment flows through a secure, auditable pipeline

Register App

Register your app once with its name and source repository. This creates an entry in the app catalog.

Publish Version

Each push creates a new version (timestamp + git SHA). Your docker-compose and source commit are recorded.

Automated Measurement

The control plane resolves each version to immutable SHA256 digests, applies signature policy, and records per-size trusted values before deploy.

Deploy to TDX

Attested versions deploy to verified TDX agents running dm-verity protected root filesystems. Hardware attestation proves your code runs in a secure enclave.

Version Tracking

Every deployment is tied to a specific version with full audit trail back to source.

Source Verification

Code is automatically inspected before deployment. Rejected versions never run.

No Direct Deploys

All deployments go through the catalog. No way to deploy untracked code — validated on every main rollout.

Instant Capacity at the Clearing Price

No picking servers. No waiting for VMs. The control plane schedules deployments onto verified warm capacity.

Warm Pools

Datacenters keep a buffer of attested, idle agents already running. Deploys are assigned immediately.

Clearing Price

Capacity is priced by supply and demand. If multiple datacenters can fill your request, you get the lowest price that clears.

Verified Scheduling

You request a size and constraints. The control plane chooses a verified agent. Users never “assign” to an agent except for upgrades.

Fast Fail

If there is no warm verified capacity, the request fails immediately (or can be queued if you opt in). No silent retry loops.

Important: Attestation proves what code is running. Availability comes from warm pools and competition between datacenters.

Network Architecture

One-way trust through a proxy: clients trust the control plane, the control plane trusts agents

Your Client

Verifies control plane attestation once, then trusts it to verify agents

HTTPS

Cloudflare Edge

TLS termination, DDoS protection

TRUST BARRIER
Tunnel

Control Plane (TDX)

Runs in TDX. Verifies agents. Routes traffic.

app.easyenclave.com
Proxy
Proxy

Agent 1 (TDX)

Your service runs here

agent-abc.easyenclave.com

Agent 2 (TDX)

Another service

agent-xyz.easyenclave.com

One-Way Trust Model

1. Client → Control Plane

Client verifies control plane's TDX attestation. Once verified, client trusts the control plane to make decisions about agents.

2. Control Plane → Agents

Control plane verifies each agent's attestation on registration. A nonce challenge prevents replay attacks, TCB enforcement rejects vulnerable firmware, and only agents with MRTD in the trusted list receive deployments.

3. Why This Works

Clients don't need to verify every agent. They verify the control plane once, then trust its proxy to only route traffic to attested agents. This is one-way trust through a proxy.

Cloudflare Trust Barrier

All nodes connect to the outside world through Cloudflare Tunnels. This creates a trust barrier:

  • Agents have no public IP - They connect outbound to Cloudflare, which routes inbound traffic to them
  • Control plane manages tunnels - When an agent registers, the CP creates a Cloudflare tunnel and DNS record
  • Cloudflare sees encrypted traffic - HTTPS terminates at Cloudflare edge, re-encrypted to the agent via tunnel
  • Tunnel deletion = instant revocation - If attestation fails, CP deletes the tunnel immediately cutting off access
Note: Cloudflare is trusted for availability (routing). The control plane continuously re-attests agents, and revokes tunnel access immediately if attestation fails.

Trusted Execution Environments

Hardware-level isolation that protects your code and data from the cloud provider, OS, and hypervisor

Hardware Isolation

CPU enforces memory encryption with per-VM keys. No software — not even the hypervisor — can read TEE memory.

Remote Attestation

Cryptographic proof that your exact code is running in a genuine TEE, verified by Intel hardware.

Unmodified Apps

Run your existing Docker containers inside a TDX VM. No code changes, no special libraries required.

Protection Boundary

Untrusted
Cloud Provider Infrastructure
Hypervisor (KVM, VMware, Hyper-V)
Host Operating System
Encrypted Boundary
Trusted
Your Application + Data

What TDX Protects Against

Threat Protection Notes
Remote attacker Full Encrypted memory, network isolation
Malicious hypervisor Full Hardware-enforced memory encryption
Malicious OS Full TEE isolated from host OS
Physical memory dump Partial Memory encrypted, keys hardware-protected
Side channels Limited Add encrypted storage and app-level protocol hardening

Supported TEE Vendors

Intel TDX

Trust Domain Extensions with full VM isolation and remote attestation via Intel Trust Authority.

Production

AMD SEV-SNP

Secure Encrypted Virtualization with Secure Nested Paging for memory integrity.

Coming Soon

ARM CCA

Confidential Compute Architecture for ARM-based confidential VMs.

Planned

Learn more about TEE technologies, threat analysis, and defense-in-depth strategies in the README.

Defense in Depth

Multiple security layers protect agents from boot to runtime

Tamper-proof boot

dm-verity Rootfs

Read-only verified filesystem built with mkosi. The roothash is bound to boot measurements, so any tampering is detected before the VM starts.

Strict by default

TCB Enforcement

Firmware security is checked via Intel Trust Authority's TCB status before agent registration. Only platforms with up-to-date firmware are accepted.

Required by default

Nonce Challenge

One-time nonces embedded in TDX quote REPORTDATA with a 5-minute TTL. Prevents replay of old attestation quotes during registration.

Automated attestation

Measuring Enclave

Measurer apps run on verified tiny TDX capacity (bare metal or GCP), resolve tags to immutable digests, and submit node-size-specific measurements that deployment must match.

Simple CI policy

Two-Build Repro Check

Every push runs two clean builds. If TDX measurements drift or artifact hashes differ, deployment is blocked.

Admin access is secured with GitHub OAuth and CSRF-protected state tokens, alongside password authentication as fallback. Reproducibility mode details: docs/REPRODUCIBLE_BUILDS.md.

Run an Agent

Join the network - provide compute or deploy workloads

Earn Credits

Run workloads for others on your TDX hardware

  • Earn system credits based on uptime and reliability
  • No permission needed - pass attestation and join
  • Automatic workload assignment from the control plane

Use Credits

Deploy your apps on the distributed agent network

  • Pay credits to run on verified TDX enclaves
  • Automatic failover to healthy agents
  • No need to manage your own hardware

Set Up Your Agent

1

Get TDX Hardware

You need an Intel TDX-capable machine. Check with cloud providers (Azure, GCP) or use bare metal with 4th/5th Gen Xeon.

2

Clone and Configure

git clone https://github.com/easyenclave/easyenclave
cd easyenclave
cp .env.example .env  # Add your control plane URL
3

Launch Your Agent

# Build and launch a TDX agent VM
bash crates/ee-ops/assets/gcp-nodectl.sh vm new --size tiny --cp-url "$CP_URL" --ita-api-key "$ITA_API_KEY" --wait

# Your agent will register automatically with the control plane
4

Verify on Control Plane

Once attestation passes, your agent appears in the control plane dashboard. You'll start receiving workloads automatically.

Attestation Models

The key question: can your client do attestation?

A

Proxy Trust (Default)

For clients that cannot do TDX attestation: browsers, curl, REST clients. Traffic routes through the control plane, which verifies agents on your behalf.

Your app doesn't change:

  • Write a normal Docker app - no TDX-specific code
  • Deploy with a standard docker-compose.yml
  • Your app doesn't know it's running in an enclave
  • Control plane verifies agents using MRTD allowlist
  • Clients call the proxy URL - that's it
# Your app is just a normal FastAPI/Flask/Express app
# No attestation code, no special libraries
curl https://app.easyenclave.com/proxy/my-app/api/data

# Or from a browser - same URL
fetch("https://app.easyenclave.com/proxy/my-app/api/data")

See it in action: The private-llm example runs Ollama (completely unmodified) inside a TDX enclave. Its test script queries the LLM through the proxy on every push — tested docs, not just words.

B

Client Verification (SDK)

For clients that want to independently verify attestation: use the EasyEnclave SDK to verify the control plane's TDX quote and check service attestation status directly.

How it works:

  • SDK connects to control plane and requests its TDX quote with a nonce
  • SDK verifies the quote locally (MRTD, nonce freshness)
  • SDK calls services through the verified proxy
  • Control plane continuously re-attests agents every 5 minutes
from easyenclave import EasyEnclaveClient

client = EasyEnclaveClient("https://app.easyenclave.com", verify=True)

# Control plane TDX attestation verified on connect.
# All services routed through the attested proxy.
my_service = client.service("my-app")
response = my_service.post("/api/data", json={"input": "secret"})

Key insight: The SDK verifies the control plane is running in a genuine TDX enclave, then trusts its proxy to only route to attested agents. No special code needed in your service.

Which Model Should You Use?

Client Type Attestation Model Trust Model
Browser / Web App Proxy Trust Trust control plane to verify agents
curl / REST client Proxy Trust Trust control plane to verify agents
SDK client Client Verification Independently verify CP attestation + proxy through verified CP

Most users should use Proxy Trust - it requires no special code and works with any HTTP client. Use Client Verification when you want your application to independently verify the control plane's TDX attestation.

GitHub OIDC Deploy (No API Key Secret)

Use GitHub's built-in OIDC token to call /api/deploy directly.

1

Minimal Workflow

This deploy path prefers GitHub Actions OIDC and falls back to API keys only when needed.

permissions:
  id-token: write
  contents: read

steps:
  - uses: actions/checkout@v4
  - name: Mint OIDC token
    run: |
      TOKEN=$(curl -sS -H "Authorization: bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
        "${ACTIONS_ID_TOKEN_REQUEST_URL}&audience=easyenclave" | jq -r '.value')
      echo "token=$TOKEN" >> "$GITHUB_OUTPUT"

  - name: Deploy
    run: |
      curl -sS -X POST https://app.easyenclave.com/api/deploy \
        -H "Authorization: Bearer ${{ steps.oidc.outputs.token }}" \
        -H "Content-Type: application/json" \
        -d '{"compose":"services: {}","app_name":"hello-tdx","agent_name":"my-app-123","dry_run":true}'

Full copy/paste workflow: examples/deploy-with-github-oidc.yml

Your EasyEnclave account must be linked with github_org or github_login matching github.repository_owner.

Quick Start

1

Register Your App

Create an entry in the app catalog. This is a one-time setup.

curl -X POST https://app.easyenclave.com/api/apps \
  -H "Content-Type: application/json" \
  -d '{"name": "my-app", "source_repo": "myorg/myrepo"}'
2

Add the GitHub Action

Every push publishes a version and deploys it.

- uses: easyenclave/easyenclave/.github/actions/deploy@main
  with:
    app_name: my-app
    compose_file: docker-compose.yml
    service_name: my-app
3

Connect to Your App

Use any HTTP client, or the SDK for attestation verification.

from easyenclave import EasyEnclaveClient

client = EasyEnclaveClient("https://app.easyenclave.com")
response = client.service("my-app").get("/api/data")
print(response.json())

This pattern is tested end-to-end on every push. See examples/private-llm/test.py for a working example.

Browse existing apps, register your own, or check the API documentation.