{
  "slug": "ionscale",
  "category": "mesh-vpns",
  "name": "ionscale",
  "description": "Open-source, self-hosted Tailscale control server with support for multiple tailnets, OIDC login, ACLs and DNS, used with the official Tailscale clients.",
  "website": "https://jsiebens.github.io/ionscale/",
  "source": "https://github.com/jsiebens/ionscale",
  "license": "BSD-3-Clause",
  "platforms": [
    "linux"
  ],
  "jurisdiction": null,
  "pick": false,
  "pick_reason": null,
  "disclosure": null,
  "grade": "B",
  "score": 76,
  "coverage": 88,
  "summary": "ionscale scores 76 out of 100 (grade B) on the mesh VPNs and private networks criteria. It meets 5 of 7 criteria: open source, no trackers or telemetry, no ads or data sales, keys stay on devices and self-hosted coordination server. It does not meet independent audit. Still needing evidence: no connection logs by default.",
  "url": "https://privacyratings.com/mesh-vpns/ionscale/",
  "markdown": "https://privacyratings.com/mesh-vpns/ionscale/index.md",
  "answers": {
    "open_source": {
      "title": "Open source",
      "weight": 3,
      "answer": "yes",
      "evidence": "https://github.com/jsiebens/ionscale/blob/main/LICENSE",
      "note": "BSD-3-Clause."
    },
    "no_trackers": {
      "title": "No trackers or telemetry",
      "weight": 3,
      "answer": "yes",
      "evidence": "https://jsiebens.github.io/ionscale/",
      "note": "No third-party trackers. The documentation site's Plausible analytics are cookieless and aggregate-only."
    },
    "no_ads": {
      "title": "No ads or data sales",
      "weight": 2,
      "answer": "yes",
      "evidence": "https://github.com/jsiebens/ionscale",
      "note": "Free community project with no ads or data sales."
    },
    "independent_audit": {
      "title": "Independent audit",
      "weight": 2,
      "answer": "no",
      "evidence": null,
      "note": "No independent audit is published."
    },
    "transparency_report": {
      "title": "Transparency report",
      "weight": 2,
      "answer": "n/a",
      "evidence": null,
      "note": "Only applies to hosted services with a website to test."
    },
    "user_notice": {
      "title": "Tells users about requests",
      "weight": 1,
      "answer": "n/a",
      "evidence": null,
      "note": "Only applies to hosted services with a website to test."
    },
    "tls": {
      "title": "TLS configuration",
      "weight": 2,
      "answer": "n/a",
      "evidence": null,
      "note": "Only applies to hosted services with a website to test."
    },
    "security_headers": {
      "title": "Security headers",
      "weight": 1,
      "answer": "n/a",
      "evidence": null,
      "note": "Only applies to hosted services with a website to test."
    },
    "web_standards": {
      "title": "Modern web standards",
      "weight": 1,
      "answer": "n/a",
      "evidence": null,
      "note": "Only applies to hosted services with a website to test."
    },
    "device_keys": {
      "title": "Keys stay on devices",
      "weight": 3,
      "answer": "yes",
      "evidence": "https://tailscale.com/blog/how-tailscale-works",
      "note": "Works with the official Tailscale clients, which create WireGuard keys on each device. The control server only exchanges public keys."
    },
    "self_hosted_control": {
      "title": "Self-hosted coordination server",
      "weight": 2,
      "answer": "yes",
      "evidence": "https://jsiebens.github.io/ionscale/",
      "note": "The whole control server is open source and self-hosted."
    },
    "no_connection_logs": {
      "title": "No connection logs by default",
      "weight": 2,
      "answer": "unknown",
      "evidence": null,
      "note": null
    }
  },
  "tests": {
    "ssllabs": null,
    "observatory": null,
    "internetnl_web": null,
    "internetnl_mail": null,
    "trackers": [
      {
        "name": "Google Fonts",
        "host": "fonts.gstatic.com",
        "effect": "none"
      },
      {
        "name": "Plausible",
        "host": "plausible.io",
        "effect": "partial"
      }
    ],
    "tested_at": "2026-10-01T07:02:25.309Z"
  },
  "last_modified": "2026-10-01T07:44:20Z"
}