Open Source · Apache 2.0

Authorization you can actually trust.

Cedar is a policy language built for one job — deciding who is allowed to do what, on which resources, and under what conditions. Expressive, auditable, and formally verified.

See How It Works
Trusted by teams at
Eval Speed
< 1ms
policy.cedar
// Allow document authors to read their own docs
permit (
  principal in Group::"editors",
  action    == Action::"read",
  resource  in Folder::"public-docs"
)
when {
  resource.owner == principal
  && context.mfa_verified == true
};

// Deny deletions for read-only resources
forbid (
  principal,
  action == Action::"delete",
  resource
)
when { resource.readOnly == true };
🔒
Formally VerifiedCore semantics proven via automated reasoning
0 Policy evaluations per second
0 Average evaluation latency
0 Open source, Apache 2.0
0 Languages supported

Authorization logic is silently breaking your security posture.

In most applications, access rules are scattered across codebases — an if-statement here, a permission flag there. Over time they drift, contradict, and become impossible to audit.

  • ⚠️
    Scattered permission checksAuthorization logic buried in application code — inconsistent, untestable, and invisible to security teams.
  • 🔍
    Impossible to auditWhen a security question arrives, answering it requires reading code rather than reading rules. Auditors want policies, not pull requests.
  • 🕳️
    Silent vulnerability gapsA single forgotten check becomes a vulnerability. Privileges that quietly outlive their purpose become the incidents you didn't see coming.
auth_service.js — line 847
if (user.role === 'admin') { // TODO: restrict this?
deleteRecord(id);
}
💥 Meanwhile, in user_controller.py…
user_controller.py — line 203
if user.is_staff or user.department == "eng":
# duplicated from auth_service
allow_delete = True
💥 And also in report_api.go…
report_api.go — line 91
// TODO: check this properly
if req.UserID != "" {
return reports, nil // no authz check
}

One language. One place. Complete confidence.

Cedar moves your authorization rules out of application logic and into a dedicated policy layer — a single, reviewable, testable, auditable source of truth for every access decision your system makes.

Explore Features →
📋
Policies as codeWrite rules in plain .cedar files, check them into version control, and review them in pull requests just like any other source artifact.
Schema validation before deployCedar's validator checks every policy against your schema before it ever reaches production, catching typos and impossible conditions early.
Millisecond decisions, always deny-by-defaultThe Rust-powered engine evaluates policies in microseconds. No access is ever granted by accident — the default is always deny.
🔬
Formally verified semanticsCedar is the first policy language mathematically modeled from day one — key correctness properties are machine-proven, not just tested.

Everything you need for
fine-grained authorization

Cedar is purpose-built — not a general-purpose rules engine, not a workflow tool. Just authorization, done with precision.

Rust-Powered Engine

Cedar's evaluation engine is written in Rust, indexed for fast retrieval, and capable of evaluating thousands of policies per request without becoming a bottleneck.

Rust<1ms latencyHigh throughput
🔒
Formally Verified

Cedar is the first policy language designed from the start to be formally verified. Its semantics are mathematically modeled and key correctness properties are machine-proven.

No surprisesProven correctness
📖
Human-Readable Policies

A well-written Cedar policy reads almost like an English sentence. Authorization rules are statements about what the organization considers acceptable — legible to engineers, security officers, and auditors alike.

AuditableReviewable
🧩
All Major Auth Models

RBAC via group membership. ABAC via attribute comparison. ReBAC via entity hierarchy traversal. All three patterns share the same syntax and the same evaluation engine.

RBACABACReBAC
🛡️
Schema Validation

Declare the shape of your entities in a Cedar schema. The validator checks every policy against it before deployment, catching typos, type mismatches, and impossible conditions.

Type-safePre-deploy checks
🔓
Truly Open Source

Full specification, engine, SDKs, and tooling available under Apache 2.0. No vendor lock-in, no licensing tiers, no proprietary extensions waiting to surprise you.

Apache 2.0No lock-in

A simple lifecycle.
Powerful outcomes.

1

Author policies in plain text

Write Cedar policies as .cedar files using a clean, readable syntax. Each policy describes a rule: who (principal), what (action), on what (resource), under what conditions.

2

Check into version control

Because policies are plain text, they live in Git like any other source artifact — reviewable in pull requests, diffable, and fully traceable.

3

Use the CLI for local testing

The Cedar CLI lets you evaluate policies against sample requests directly from the terminal — no servers, no signups, no SaaS accounts required.

// team_policy.cedar
permit (
  principal in Team::"backend-eng",
  action    in ActionSet::"deploy-actions",
  resource  in Env::"staging"
)
when {
  context.is_business_hours
};

// $ cedar authorize --policies .
//   --principal 'User::"alice"'
//   --action 'Action::"deploy"'
//   --resource 'Env::"staging"'
// → ALLOW
1

Define your entity schema

Declare the types of principals, actions, and resources in your system — what attributes they carry, what relationships they participate in.

2

Run the Cedar validator

Before any policy reaches production, Cedar's validator checks it against the schema — catching type mismatches, missing attributes, and impossible conditions.

3

Integrate into CI/CD

Add schema validation to your deployment pipeline so that malformed or schema-violating policies are rejected before they ever affect production users.

// schema.cedarschema
entity User {
  department: String,
  mfa_verified: Boolean,
};

entity Document {
  owner: User,
  classification: String,
  readOnly: Boolean,
};

// $ cedar validate --schema schema.cedarschema
//                  --policies .
 All policies valid against schema
1

Send authorization requests

At runtime, your application sends a request to the Cedar engine — including the principal, action, resource, and any contextual data the policy needs.

2

Engine evaluates all relevant policies

Cedar's indexed engine evaluates every relevant policy in milliseconds and returns a single, deterministic decision: allow or deny.

3

Default deny — always

No access is ever granted by accident. If no policy explicitly permits an action, the result is deny. Period.

// Node.js SDK example
import { Authorizer } from '@cedar-policy/cedar-wasm';

const result = await authorizer.isAuthorized({
  principal: 'User::"alice"',
  action:    'Action::"read"',
  resource:  'Document::"report-q4"',
  context:   { mfa_verified: true },
});

console.log(result.decision);
// → "Allow"  ·  elapsed: 0.4ms
1

Policies are the audit artifact

Because Cedar policies are explicit, declarative, and stored as text, they answer security questions directly — no archaeology through application code required.

2

Change policies without redeploying apps

Access rules live outside application code. Update a policy and the change takes effect immediately — no application release required.

3

Version, diff, and rollback

Because policies are in Git, every change has an author, a timestamp, and a diff. Rolling back a policy is exactly like rolling back any other code change.

# git log --oneline policies/
a4f2c1e Restrict delete to doc owners only
b8e391a Add MFA requirement for finance folder
c120dff Allow contractors: read-only staging
d991ba3 Revoke legacy admin wildcard policy

# cedar analyze --diff HEAD~1 HEAD
 1 policy narrowed (no new permissions)
 Safe to deploy

Authorization that works for
every stakeholder

Cedar is designed to serve engineers, security teams, compliance officers, and auditors — all from the same policy files.

👨‍💻

Engineering Teams

Stop debating where to put the next permission check. Write it once in Cedar, version it, test it, and move on. Integration takes hours, not weeks — Cedar is designed to express the rules you already had.

🔐

Security Teams

Gain a single, reviewable artifact for every access decision in your system. Cedar policies are explicit, scannable, and testable as a complete set — not buried in a codebase no one fully understands.

📊

Compliance Teams

Show auditors real policies, not pull request archaeology. Cedar gives compliance teams a reviewable artifact they can present directly — answering the "who can access what and why" question in seconds.

🏗️

Platform Teams

Govern who can deploy, restart, or access sensitive data across hundreds of services using a single policy layer. Cedar scales from a single service to a complex internal platform without changing the model.

Built for the authorization
problems that matter most

Cedar fits any application that has outgrown simple ownership-and-role checks — without requiring you to build an entire authorization engine from scratch.

Multi-tenant SaaS

Tenant isolation with fine-grained sharing

Separate tenants cleanly while still allowing fine-grained sharing within a tenant — without duplicating logic for every customer variation.

  • Tenant-scoped resource policies
  • Cross-tenant collaboration rules
  • Per-customer permission overrides
  • Invitation and sharing workflows
Internal Platforms

Service-level authorization at scale

Govern who can deploy, restart, or read sensitive data across hundreds of services from a single policy layer.

  • Role and team-based deploy gates
  • Environment-scoped access (staging vs prod)
  • Sensitive data access controls
  • Audit trail for all privileged actions
Consumer Apps

Friendship graphs and content visibility

Express friendship graphs, group memberships, and content visibility rules in a single coherent model that scales with your user base.

  • Friend-of-friend resource access
  • Group and community membership gates
  • Content classification policies
  • Privacy control enforcement

Works wherever your team works

Cedar ships with SDKs, a CLI, a VS Code extension, a language server, and WebAssembly support for edge and browser environments.

Rust
Native crate — reference implementation
core
JavaScript
WebAssembly build for Node, browser, edge
wasm
Java
JVM bindings for backend services
sdk
Python
Python bindings via PyPI
sdk
Go
Go bindings for cloud-native services
sdk
CLI
Author, validate, and test from the terminal
tooling
VS Code
Extension with syntax highlighting + live validation
editor
AVP
Amazon Verified Permissions — hosted Cedar service
managed

Rigorous by design.
Auditable by default.

Cedar is purpose-built to support compliance requirements. Its policies are explicit, declarative, and reviewable — designed to answer auditor questions directly.

🔬
Formally Verified
Core semantics machine-proven
🔓
Apache 2.0
Zero proprietary lock-in
🏛️
Deny-First
No accidental access grants
📋
Auditable Policies
Git-native audit trail
No side effects, no recursion, no loopsCedar deliberately avoids general-purpose programming constructs. Every policy evaluation is bounded in time and fully predictable.
Policy validation before productionCedar's schema validator catches typos, type mismatches, and impossible conditions before a single policy ever reaches runtime.
Deterministic decisionsGiven the same input, Cedar always returns the same output. No hidden state, no probabilistic outcomes, no quiet edge cases.
Separation of authorization from application logicAccess rules live outside your codebase. A missed check in code can no longer become a silent authorization gap.
Automated reasoning supportCedar's mathematical model enables tooling that can answer questions like "can any policy grant access to this resource?" without exhaustive testing.

Authorization finally makes sense

We had authorization logic in six different services, all slightly different. Moving to Cedar took two weeks and gave our security team something they could actually audit. First time that's happened in four years.

SL
Senior Engineer
Multi-tenant B2B SaaS

The formally verified part isn't just marketing. When you're explaining access control to an auditor, being able to say "the semantics are machine-proven" changes the conversation significantly.

MP
Security Architect
Enterprise Platform Team

Cedar reads like English. My compliance team can actually review our policies without asking engineering to translate. That alone was worth the migration effort.

AT
VP of Engineering
Healthcare SaaS

Common questions

Cedar is purpose-built for authorization — not a general-purpose programming language, not a workflow engine. This restraint is a feature: with no loops, no recursion, and no side effects, every Cedar policy can be analyzed, validated, and reasoned about with complete confidence. General-purpose rules engines can technically express authorization logic, but they cannot make the same safety guarantees Cedar can because their evaluation is unbounded.
Cedar expresses multi-tenant isolation through entity hierarchies and attribute-based conditions. A tenant-scoped policy can restrict all resource access to entities within the same tenant namespace, while a separate sharing policy can allow explicit cross-tenant access when a resource's "shared_with" attribute includes the requesting principal. Both patterns use the same evaluation engine with no special multi-tenancy mode required.
Cedar is the policy language behind Amazon Verified Permissions, which runs at AWS production scale. The language was originally developed by AWS, formally verified, and released under Apache 2.0. Teams across SaaS, enterprise platform, and consumer application domains use Cedar in production. The engine has been designed from the start to handle thousands of policy evaluations per second as a first-class constraint.
Most teams find migration easier than expected. Cedar is designed to express the rules your application already has — just in a place where those rules can finally be seen and trusted. The typical migration pattern is to inventory your existing permission checks, express them as Cedar policies, validate them against a schema, and then route authorization calls through the Cedar engine. The SDK integration is usually a one-day task; the policy migration is where most of the real effort goes, and most teams treat it as an opportunity to clean up accumulated permission drift.
Cedar's semantics are described in a mathematical model, and key properties — including the safety and correctness of the evaluation engine — are proven using automated reasoning tools. That model is then tested rigorously against the actual Rust implementation. The result is a language whose behavior contains no hidden surprises and no quiet edge cases that only appear in production. It means when Cedar says "deny," it means deny — not "deny unless this obscure condition holds."
No. Cedar is fully open source and can be embedded directly into your application using the native Rust crate, the WebAssembly build for JavaScript environments, or bindings for Java, Python, and Go. Amazon Verified Permissions is a hosted service that uses Cedar under the hood — but the same policies and the same evaluation behavior work whether you embed Cedar directly or use AVP as a managed service. There is no vendor lock-in.

Ready to take authorization seriously?

Cedar gives you a language honest enough to describe your rules, a runtime fast enough to enforce them at scale, and a foundation rigorous enough to stop guessing.

See How It Works