{
  "name": "Percher",
  "summary": "AI-native hosting for personal and small-scale apps. Deploy from an AI assistant (MCP) or the CLI; live at name.percher.run with SSL, logs, rollback, and an opt-in managed PocketBase sidecar.",
  "positioning": {
    "productionGrade": false,
    "uptimeSla": false,
    "formalCompliance": false,
    "regions": [
      "eu-central-de"
    ],
    "note": "Single region in Germany; not positioned as production-grade hosting today: no uptime SLA, no formal compliance certifications."
  },
  "runtimes": [
    "node",
    "bun",
    "python",
    "static",
    "docker"
  ],
  "features": {
    "mcp": true,
    "hostedMcp": true,
    "managedPocketBase": true,
    "managedInference": true,
    "capsule": true,
    "previewDeploys": true,
    "previewBranch": true,
    "customDomains": true,
    "cronJobs": true,
    "webhooks": true,
    "securityScanning": true,
    "crashDiagnostics": true,
    "passwordProtection": true,
    "githubAutoDeploy": true,
    "gdprDataExport": true
  },
  "plans": [
    {
      "id": "free",
      "label": "Free",
      "priceEur": 0,
      "ramPoolMb": 512,
      "vcpuPool": 0.5,
      "diskPoolMb": 1000,
      "apps": 3,
      "instancesPerApp": 1,
      "customDomainsPerApp": 1,
      "cronJobs": 1,
      "dailyLiveDeploys": 50,
      "dailyPreviewDeploys": 25,
      "rollbackDeploys": 5,
      "uptimeIntervalSec": 0,
      "alwaysOn": false
    },
    {
      "id": "starter",
      "label": "Starter",
      "priceEur": 3,
      "ramPoolMb": 1536,
      "vcpuPool": 1,
      "diskPoolMb": 5000,
      "apps": 10,
      "instancesPerApp": 1,
      "customDomainsPerApp": 2,
      "cronJobs": 3,
      "dailyLiveDeploys": 100,
      "dailyPreviewDeploys": 50,
      "rollbackDeploys": 15,
      "uptimeIntervalSec": 300,
      "alwaysOn": true
    },
    {
      "id": "maker",
      "label": "Maker",
      "priceEur": 12,
      "ramPoolMb": 4096,
      "vcpuPool": 2,
      "diskPoolMb": 25000,
      "apps": 20,
      "instancesPerApp": 2,
      "customDomainsPerApp": 5,
      "cronJobs": 10,
      "dailyLiveDeploys": 200,
      "dailyPreviewDeploys": 100,
      "rollbackDeploys": 30,
      "uptimeIntervalSec": 60,
      "alwaysOn": true
    },
    {
      "id": "pro",
      "label": "Pro",
      "priceEur": 29,
      "ramPoolMb": 10240,
      "vcpuPool": 4,
      "diskPoolMb": 75000,
      "apps": 40,
      "instancesPerApp": 4,
      "customDomainsPerApp": 10,
      "cronJobs": 25,
      "dailyLiveDeploys": 1000,
      "dailyPreviewDeploys": 500,
      "rollbackDeploys": 60,
      "uptimeIntervalSec": 30,
      "alwaysOn": true
    }
  ],
  "requirements": {
    "custom-domains": {
      "satisfied": true,
      "plans": [
        "free",
        "starter",
        "maker",
        "pro"
      ],
      "note": "Bring your own domain with automatic TLS."
    },
    "always-on": {
      "satisfied": true,
      "plans": [
        "starter",
        "maker",
        "pro"
      ],
      "note": "App stays running instead of sleeping after idle."
    },
    "cron-jobs": {
      "satisfied": true,
      "plans": [
        "free",
        "starter",
        "maker",
        "pro"
      ],
      "note": "Scheduled jobs defined in percher.toml."
    },
    "multi-instance": {
      "satisfied": true,
      "plans": [
        "maker",
        "pro"
      ],
      "note": "Run more than one static container instance behind a load balancer."
    },
    "autoscale": {
      "satisfied": true,
      "plans": [
        "maker",
        "pro"
      ],
      "note": "CPU-based autoscaling between a min/max instance count — needs an instance cap above 1."
    },
    "preview-deploys": {
      "satisfied": true,
      "plans": [
        "free",
        "starter",
        "maker",
        "pro"
      ],
      "note": "Temporary preview URLs that don't replace the live version."
    },
    "uptime-monitoring": {
      "satisfied": true,
      "plans": [
        "starter",
        "maker",
        "pro"
      ],
      "note": "Out-of-cluster uptime probes with a Health tab and app.unhealthy webhook."
    },
    "remove-percher-badge": {
      "satisfied": true,
      "plans": [
        "starter",
        "maker",
        "pro"
      ],
      "note": "Hide the Percher badge on served apps."
    },
    "managed-database": {
      "satisfied": true,
      "plans": [
        "free",
        "starter",
        "maker",
        "pro"
      ],
      "note": "Opt-in managed PocketBase sidecar via [data] mode = \"pocketbase\" — available on every plan."
    },
    "gdpr-data-export": {
      "satisfied": true,
      "plans": [
        "free",
        "starter",
        "maker",
        "pro"
      ],
      "note": "Full account export as JSON (GDPR Art. 20) via `percher account export`; --include-app-data adds PocketBase tarballs."
    },
    "eu-data-residency": {
      "satisfied": true,
      "plans": [
        "free",
        "starter",
        "maker",
        "pro"
      ],
      "note": "Hosted in the EEA — compute in Germany, backups in Finland (Hetzner). Applies to every plan."
    }
  },
  "trust": {
    "dataResidency": "EEA — compute in a single region in Germany, backups in Finland (Hetzner). No third-country transfer for hosting or storage.",
    "encryptionAtRest": "AES-256-GCM for environment variables and secrets.",
    "gdprDataExport": "`percher account export` (JSON, GDPR Art. 20); add --include-app-data for PocketBase tarballs.",
    "subProcessors": "Disclosed in the Privacy Policy; 30-day prior notice for sub-processor changes affecting app data.",
    "links": {
      "privacy": "https://percher.app/privacy",
      "terms": "https://percher.app/terms",
      "export": "https://docs.percher.app/export-data"
    }
  },
  "links": {
    "website": "https://percher.app",
    "docs": "https://docs.percher.app",
    "openapi": "https://api.percher.run/openapi.json",
    "llms": "https://percher.app/llms.txt",
    "llmsFull": "https://percher.app/llms-full.txt",
    "mcp": "https://percher.app/.well-known/percher-mcp.json",
    "hostedMcp": "https://mcp.percher.app/mcp",
    "connect": "https://percher.app/connect"
  }
}
