How Calethia Compares

Most comparisons in this category are about getting to SOC 2, and on that everyone is roughly the same. The useful question is what happens in year three, when you need something the tool was never designed to express.

The real three-way choice

In practice most mature programs end up running two of these at once: a platform for what it covers, and a spreadsheet for everything else.

Question
Calethia
Config-based platform
In-house
Time to first SOC 2 reportWeeksWeeksMonths
Write a control the vendor never anticipatedPython function in your repoYes, but you maintain everything
Connect a homegrown or internal systemConnector SDKFile a feature request, then waitYes, but you maintain everything
Add a framework nobody has productizedMap onto the common control spineYes, by hand
Cost of adding your Nth frameworkMapping work, coverage starts highRe-tag everything, if supported at allFull re-derivation
Handling a long list of control exceptionsOne-line import per exception, versioned in GitPer-control exception UI, doesn't scaleTracked by hand, easy to lose
Can you read the logic behind a passing control?
Evidence signed and independently verifiableRSA-SHA256, RFC 3161 timestampsVendor-attested
Keep policy documents where your team already reads themLink a Google Doc or Confluence page; drift checked against live control resultsAuthored and kept in their appYes, but nothing reconciles them
Continuous monitoring without you maintaining it
Self-hosted optionYes, on GCP

Calethia is an early-stage platform and some of the above is still being built. Where that's true we have said so in the cell rather than in a footnote.

Detailed Comparisons

Where each approach is strong, and where it runs out of room.

Calethia vs Vanta and Drata

The Config-Based Platforms

The category leaders, and they're genuinely good at what they're built for. If your goal is a SOC 2 report on a deadline and you don't expect your requirements to get unusual, they will serve you well and you should not switch just to switch.

Where it runs out of room

  • You get a fixed menu of checks, and anything not on the menu has nowhere to go
  • You can't read the logic behind a control, so a check that never fails looks like a check that passes
  • Anything they haven't built is a feature request, so your audit date depends on their roadmap
  • Exceptions are managed one control at a time in their UI, so a long exception list becomes its own maintenance project
  • Vanta ships a Claude Code plugin that opens remediation pull requests, so treat AI-assisted fixes as table stakes rather than a differentiator

What Calethia does instead

  • Controls are Python you own, so there's no requirement you can't express
  • Every check is readable, so you can tell detection from decoration
  • A common control spine means your Nth framework is mapping work, not a rewrite
  • If you're carrying an extensive list of custom exceptions, that's a one-line import, not a per-control UI workflow
  • You can write what you need yourself, so our roadmap is never your blocker
Calethia vs Spreadsheets and In-House

Where Programs Actually End Up

Not a product anyone chooses, but the most common thing a mature compliance program is actually running. It shows up as the overflow: the controls the platform couldn't express, tracked by hand alongside it. The sophisticated version is a warehouse table, which is still a spreadsheet.

Where it runs out of room

  • Infinitely flexible, and entirely unmonitored
  • Every check is a person remembering to look
  • No evidence trail an auditor can independently verify
  • The maintenance burden lands on the person who built it, and leaves when they do

What Calethia does instead

  • The same flexibility, but the checks run on a schedule
  • Evidence is signed and timestamped, not a screenshot in a folder
  • It lives in Git, so it survives the person who wrote it
  • One system for the standard 80 percent and the bespoke 20 percent
Calethia vs OSCAL

The NIST Specification

OSCAL (Open Security Controls Assessment Language) is a government-backed data format for describing security controls, assessments, and compliance documentation. It's a specification, not a product, and it isn't really a competitor so much as a thing people ask about.

Where it runs out of room

  • OSCAL defines how to describe controls in XML or JSON
  • It requires tooling to be useful, since OSCAL itself doesn't run anything
  • Designed for documentation and data exchange, not enforcement
  • Calethia could export to OSCAL format in the future

What Calethia does instead

  • Policies execute and produce evidence, they don't just describe
  • Python with IDE support instead of verbose XML or JSON
  • Automated evidence collection and cryptographic signing
  • A running platform rather than a format you still have to build against

When you should not pick Calethia

We would rather say this here than three weeks into an evaluation.

You need the report and nothing else

If compliance is a gate to clear on the way to a deal and you have no intention of doing anything more with it, an incumbent will serve you well and the switching cost here is pure downside.

One tag, many frameworks

This is what keeps the Nth framework cheap. The policy is mapped to a control, and the control is already mapped to every framework that asks for it.

Example: MFA Enforcement Policy

Tagged once against the common control spine

from calethia import ResourceTypes, Result, Severity, policy
from calethia.ccf import CCF
from calethia.github import organization

@policy(
    id="github.org.admin_mfa_required",
    name="Organization Admins Have MFA Enabled",
    severity=Severity.CRITICAL,
    resource_types=[ResourceTypes.GitHub.ORGS_MEMBER],
    frameworks=[CCF("access-mfa")],
)
def check_admin_mfa(ctx: organization.Context) -> Result:
    """Verify every org admin has 2FA enabled."""
    for member in ctx.list_members():
        if not member.is_admin:
            continue
        if member.two_factor_enabled:
            ctx.pass_(member.to_resource(), "MFA enabled")
        else:
            ctx.fail(member.to_resource(), "No MFA")
    return ctx.result()

Test it with your hardest control

Take one requirement to whoever else you're evaluating, and then bring it to us. Whichever tool can express it wins, and that's a shorter evaluation than a feature matrix.