Skip to content
Checked

Phase secrets manager alternative: Crunu vs Phase

Crunu vs Phase: two client-side encryption models compared, from environment keys and server-side opt-ins to self-hosting, CI sign-in, offboarding and pricing.

First rows of the table further down, checked on the date shown.

The difference in brief

Phase and Crunu share the core model: secrets are encrypted on your devices, with a key per environment. Phase is open source and adds syncs and dynamic secrets for apps that opt into server-side encryption. Crunu has no such mode, offers serverless self-hosting on Enterprise, and rotates keys when someone leaves.

Phase is the better pick when

  • You want MIT-licensed code you can read and a free self-hosted plan.
  • Some apps need third-party syncs or dynamic AWS credentials, and opting them into server-side encryption is acceptable.
  • You need OIDC SSO, SCIM or a Kubernetes operator.

Crunu is the better pick when

  • No app should ever be able to switch on server-side decryption, even for syncs.
  • You want to self-host on Cloudflare Workers, Vercel or Cloud Run rather than containers, on the Enterprise plan.
  • CI should sign in with OIDC from GitHub Actions, GitLab CI or Bitbucket Pipelines.
  • Removing someone should rotate keys and produce a report of what they received.

Phase and Crunu, property by property

The same 14 questions we ask of every tool, answered from Phase’s own pages and from what Crunu does today. Yes is not always better: read the note.

All tools in one table
Yes
documented and available
Partial
with limits: on some plans, in preview or by hand
No
not offered
n/a
doesn’t apply, or isn’t documented publicly
Each cell links to the page it relies on, with the day we read it. Facts about Crunu link to the page of this site that describes them.
PropertyPhaseCrunuour productWhat it changes for you
Decrypted only on your devices
PhasePartial

On your devices by default. Apps opted into server-side encryption for syncs or the REST API store a key on the server.

phase.dev ·
CrunuYes

Values are encrypted and decrypted only in the browser and the crunu agent.

crunu.com/security ·
If values are decrypted only on devices you control, a breach of the vendor’s servers doesn’t expose them.
Server handles plaintext values
PhasePartial

Not in the default end-to-end mode; possible for apps that enable server-side encryption.

phase.dev ·
CrunuNo

The server holds no decryption key at any point. It still sees metadata such as names, emails and timestamps.

crunu.com/security ·
Whoever runs a server that handles plaintext, and anyone who breaks into it, could read what passes through.
Runs on your own infrastructure
PhaseYes

Self-host with Docker Compose, Kubernetes or major clouds; a free self-hosted plan exists.

phase.dev ·
CrunuPartial

Enterprise plan only, under a signed agreement: your own server on Docker, Cloudflare Workers, Vercel or Google Cloud Run.

crunu.com/self-hosting ·
You decide where the data lives and who operates the service. Several tools, Crunu included, offer this only on an enterprise plan.
Source code published
PhaseYes

MIT license outside ee/ directories; code there has its own license.

github.com ·
CrunuNo

Source code is not published.

crunu.com/security/threat-model ·
Published code can be read and audited by anyone, and kept running if the vendor changes course.
CI signs in with OIDC
PhasePartial

External identities cover AWS IAM and Azure; sign-in with a CI provider's OIDC token is not documented.

docs.phase.dev ·
CrunuYes

Service tokens bound by OIDC to repository, branch and environment on GitHub Actions, GitLab CI, Bitbucket or any issuer.

crunu.com/features/ci-cd ·
Pipelines get short-lived access tied to the repository, instead of a long-lived token stored in CI settings.
Keys change when someone leaves
Phasen/a

Not documented publicly.

docs.phase.dev ·
CrunuYes

Removing a member rotates the keys of every environment they could read and lists values to reissue.

crunu.com/features/offboarding ·
When people hold decryption keys, removing access is complete only once those keys are replaced.
Separate key per environment
PhaseYes

Every environment has its own key, wrapped to each account's public key to grant access.

phase.dev ·
CrunuYes

Each environment has its own key, sealed separately to each recipient's public key.

crunu.com/features/access-control ·
With a key per environment, access to development can’t turn into access to production.
Audit log
PhaseYes

90-day audit logs on Pro; log forwarding and SIEM integration on Enterprise.

phase.dev ·
CrunuYes

Hash-chained organization log with one-click verification and JSONL export, kept 365 days by default.

crunu.com/features/audit-log ·
A record of who changed or fetched what tells you what a person or machine could have seen.
Links for people without an account
PhaseYes

Lockbox links keep the decryption seed in the URL fragment, which is never sent to the server.

docs.phase.dev ·
CrunuYes

Links for people without an account; the key stays in the URL fragment. Expiry, view limit and password.

crunu.com/features/access-links ·
Contractors and one-off handovers get a value without it staying in chat history.
Free plan or free to use
PhaseYes

Free Cloud plan for up to 5 users or service accounts, and a free self-hosted plan.

phase.dev ·
CrunuYes

Free during early access.

crunu.com/pricing ·
A small team can start with real projects before anyone signs a contract.
Syncs values into other platforms
PhaseYes

Syncs to third-party platforms; the app must opt into server-side encryption.

phase.dev ·
CrunuNo

No built-in sync to other platforms. CI can push values with crunu run as a recipe.

crunu.com/integrations ·
Pushing values into clouds and CI saves copying by hand, but the syncing service has to read them.
Dynamic secrets
PhaseYes

AWS IAM credentials leased on demand; Enterprise plan, with server-side encryption on.

docs.phase.dev ·
CrunuNo

Not offered by design: generating credentials on demand needs a key on the server.

crunu.com/security/limitations ·
Credentials created on demand and revoked after a lease limit how long a leaked one works.
SSO and SCIM
PhaseYes

OIDC SSO with providers such as Entra ID and Okta, and SCIM provisioning, on Enterprise.

docs.phase.dev ·
CrunuNo

No SSO or SCIM. People sign in with a password, a Secret Key and an optional second factor.

crunu.com/features/access-control ·
Sign-in and provisioning from your identity provider make joining and leaving one step.
Kubernetes integration
PhaseYes

Phase Kubernetes Operator, installed with Helm.

docs.phase.dev ·
CrunuNo

No Kubernetes operator, Helm chart or CSI provider.

crunu.com/integrations ·
An operator or CSI driver delivers values into clusters without custom glue code.

Comparison in detail

On this page

Phase and Crunu both encrypt secrets on your devices and give every environment its own key; the differences are in the exceptions, the hosting and what happens around access. Phase is an open-source secrets manager with a cloud service and a self-hosted option, a CLI, syncs to other platforms and dynamic secrets. Crunu is a team vault for environment variables, cloud credentials and API keys, with an agent for machines and CI and a member removal flow that rotates keys.

If you are choosing between the two, you are already choosing a client-side model, and this page will not pretend one of them invented it. It shows where the designs diverge: Phase lets an app opt into server-side encryption to get integrations, while Crunu never does; Phase self-hosts as containers, while Crunu, on its Enterprise plan, also runs on serverless platforms; and they document different things about CI and offboarding.

Who each one fits

Phase fits teams that want an open-source, client-side encrypted secrets manager with a free self-hosted plan and a long list of integrations. It fits teams that are comfortable opting particular apps into server-side encryption to get syncs, the REST API or dynamic AWS credentials, and that need OIDC SSO, SCIM or a Kubernetes operator on an Enterprise plan.

Crunu fits teams that want no server-side decryption path at all, for any app. It fits teams that want to host the server on Cloudflare Workers, Vercel or Google Cloud Run on the Enterprise plan, sign CI in with OIDC from GitHub, GitLab or Bitbucket, and get an exposure report and reissue checklist when someone leaves.

Two client-side models

Based on Phase’s public documentation, checked Oct 30, 2026.

In their default modes, the two products answer the main question the same way. Phase says its servers store only ciphertext and cannot decrypt your secrets, with all encryption running on the client and an independent key for every environment. Granting access wraps an environment's keys to your account's public key. Crunu seals each environment key to the public key of every person and machine allowed to read it, and its server holds no decryption key at any point. If client-side encryption with per-environment keys is your requirement, both meet it.

The difference is the exception. Phase lets you opt an app into server-side encryption when you need third-party syncs or the REST API; the environment key is then stored encrypted on the server and used for those operations, and dynamic secrets require it too. That is a reasonable trade, made per app, and Phase is open about it. Crunu has no equivalent switch. The server cannot be given a key, so syncs and generated credentials are not available, and nobody in your organization can turn on server-side decryption for convenience.

What Crunu does differently

Example. Kiteline is a fictional company.

Serverless hosting. Phase self-hosts on a container runtime or orchestrator. Crunu's server, self-hosted on the Enterprise plan, is one program with one database schema that also runs on Cloudflare Workers with D1, on Vercel with Postgres or on Google Cloud Run, as well as on a single Docker host. It moves between those platforms with one archive that holds no plaintext values, so the hosting decision is not final.

CI with the provider's OIDC token. Phase documents external identities for AWS IAM and Azure. Crunu service tokens can require the JWT that GitHub Actions, GitLab CI or Bitbucket Pipelines issue for a given repository, branch and deployment environment, and the agent picks that token up by itself in all three. A copied token without the JWT does not sign in.

People leaving. Phase does not publicly document what happens to keys when a member is removed, and we will not guess. Crunu's member removal flow rotates the keys of every environment the person could read, revokes their tokens and links, shows which versions they received, when and from where, and lists the values to reissue at providers.

Signed access and leases. In Crunu, the list of who may read an environment is a document signed by an administrator, and clients reject older states, so a compromised server cannot add a reader or roll access back. Machines hold secrets on a lease and keep working through an outage until it ends, 24 hours by default. The server still sees metadata such as names, email addresses and timestamps, and a web client served by a compromised server is the main remaining risk; the limitations page covers both.

Where Phase is stronger

  • Open source. The console is MIT-licensed outside its enterprise directories, with a free self-hosted plan. Crunu's source code is not published.
  • Integrations when you want them. Syncs to third-party platforms and dynamic AWS credentials, for apps you opt into server-side encryption. Crunu has neither.
  • Identity and Kubernetes. OIDC SSO and SCIM on Enterprise, and a Kubernetes Operator. Crunu has no SSO, SCIM or Kubernetes support.
  • Independent audit. Phase says it holds SOC 2 Type 2, independently audited by Oneleet, with audit reports in its trust center. Crunu has no external audit published yet.

Moving from Phase to Crunu

  1. Create an account and save your Emergency Kit.
  2. Create a project for each Phase app and an environment for each Phase environment, for example payments-api with development, staging and production.
  3. On a trusted computer, run phase secrets export --env prod --app payments-api > .env for each environment. The default output format is dotenv.
  4. Drag each file into the matching environment, then delete the plaintext copy.
  5. Replace phase run with crunu run --env payments-api/production -- npm start, enroll servers as machines, and give pipelines service tokens with OIDC binding.

Syncs, dynamic secrets and secret references that Phase resolves at run time do not carry over. Check that exported values hold the resolved text, not a reference, before you import them.

Other Phase alternatives

Infisical is the other open-source option to look at. It covers more ground, with separate certificate and privileged access products, but its server decrypts secrets before responding, so it is a different model from Phase's default. Doppler, the managed alternative, also encrypts on its own infrastructure.

If you want to stay client-side, Bitwarden Secrets Manager decrypts on the client with one organization key, and dotenvx keeps encrypted .env files next to your code. EnvKey used to fill this niche; its hosted cloud shut down on February 1, 2025, and its README still describes the open-source code as end-to-end encrypted.

For a wider view, the guide self-hosting a secrets vault compares what you actually run for each option, and who can decrypt your secrets covers the encryption models side by side.

More facts, row by row

Details beyond the 14 questions above, as this comparison states them.

PhaseCrunu
Where values are decryptedOn your devices by default. Apps opted into server-side encryption keep an environment key on the server for syncs and the REST API.Only in the browser and the crunu agent. There is no server-side mode.
Keys per environmentAn independent key pair per environment, wrapped to each account's public key to grant accessEach environment has its own key, sealed separately to the public key of each person and machine allowed to read it
Account keysDerived from a 24-word mnemonic phrase only you holdDerived from your password and a Secret Key, with an Emergency Kit and a recovery code
Self-hostingA container runtime or orchestrator such as Docker, Docker Compose, Nomad or Kubernetes; a free self-hosted planOn the Enterprise plan, under a signed agreement: Docker, Cloudflare Workers with D1, Vercel with Postgres or Google Cloud Run, moved between them with one archive
CI sign-inExternal identities for AWS IAM and Azure; sign-in with a CI provider's OIDC token is not documentedService tokens bound by OIDC to repository, branch and deployment environment on GitHub Actions, GitLab CI, Bitbucket Pipelines or any issuer
Removing a memberWhat happens to keys is not documented publiclyThe keys of every environment they could read are rotated, with an exposure report and a reissue checklist
Syncs to other platformsSyncs to third-party platforms; the app must opt into server-side encryptionNot built in. A CI step can push values with crunu run.
Dynamic secretsAWS IAM credentials leased on demand, on Enterprise, with server-side encryption onNo, by design. Generating credentials needs a key on the server.
Sharing with outsidersLockbox links keep the decryption seed in the URL fragment, which is never sent to the serverShare links to selected files with an expiry, a view limit and a password; the key stays in the link after #
SSO, SCIM and KubernetesEnterprise: OIDC SSO with providers such as Entra ID and Okta, and SCIM. A Kubernetes Operator installed with Helm.Not available
Source code and auditMIT outside ee/ directories; SOC 2 Type 2, independently audited by OneleetSource code not published; no external audit yet
Pricing modelFree Cloud plan for up to 5 users or service accounts, and a free self-hosted planFree during early access in the Crunu cloud; self-hosting on the Enterprise plan

Sources

Every page this comparison relies on, and the day we last verified it.

  1. Phase security · checked October 30, 2026
  2. Phase docs: Security architecture · checked October 30, 2026
  3. Phase pricing · checked October 30, 2026
  4. Phase docs: Self-hosting · checked October 30, 2026
  5. Phase console license · checked October 30, 2026
  6. Phase docs: External identities · checked October 30, 2026
  7. Phase docs: Users · checked October 30, 2026
  8. Phase docs: Dynamic secrets · checked October 30, 2026
  9. Phase docs: SCIM provisioning · checked October 30, 2026
  10. Phase docs: Single sign-on · checked October 30, 2026
  11. Phase docs: Kubernetes · checked October 30, 2026
  12. Phase docs: CLI commands · checked October 30, 2026
  13. Infisical security internals · checked October 30, 2026
  14. Doppler security fact sheet · checked October 30, 2026
  15. Bitwarden Help: Secret decryption · checked October 30, 2026
  16. EnvKey on GitHub · checked October 30, 2026
  17. dotenvx on GitHub · checked October 30, 2026
  18. Infisical home page · checked October 30, 2026

Questions about Crunu and Phase

Something else? Write to support@crunu.com

Is Crunu an alternative to Phase?

Yes. Both encrypt on your devices with a key per environment, so you keep that model. Crunu adds serverless self-hosting on its Enterprise plan, CI sign-in with OIDC from GitHub, GitLab and Bitbucket, and a removal flow that rotates keys. Phase keeps open-source code, syncs, dynamic secrets, SSO and Kubernetes.

How do I move from Phase to Crunu?

Export each environment with phase secrets export --env prod --app <APP> > .env on a trusted computer, drag the file into the matching Crunu environment and delete the plaintext copy. Then replace phase run with crunu run and give pipelines OIDC-bound service tokens.

Do Phase and Crunu both encrypt end to end?

By default, yes: Phase says its servers store only ciphertext and cannot decrypt secrets in its default mode, and Crunu's server never holds a decryption key. The difference is that a Phase app can opt into server-side encryption for syncs and the REST API. Crunu has no such option.

Can I self-host Phase and Crunu?

Yes. Phase has a free self-hosted plan and runs on a container runtime or orchestrator such as Docker Compose or Kubernetes. Crunu offers self-hosting on its Enterprise plan, under a signed agreement, on Docker, Cloudflare Workers, Vercel or Google Cloud Run, and moves between them with one archive that holds no plaintext values; see self-hosting.

Which one supports GitHub Actions OIDC?

Crunu does: service tokens can require the GitHub Actions OIDC token for a repository, branch and deployment environment, and the same works for GitLab CI and Bitbucket Pipelines. Phase documents external identities for AWS IAM and Azure, and sign-in with a CI provider's OIDC token is not described in its docs.

Example. Kiteline is a fictional company.

When someone leaves, you see what they received

Removing a member is one guided flow, and the server stops serving them at once.

  • Keys change

    Every environment they could read gets a new key they never had. When an admin leaves, the organization’s signing and recovery keys are replaced too.

  • An exposure report

    It lists which versions of which environments the person fetched, when and from which address.

  • Seen values stay seen

    Values they already saw stay valid until you reissue them. A checklist names each one to replace at its provider, without showing the values.

More comparisons

All comparisons

Try Crunu with one project

Free during early access. Sign up with your email; your account keys and Secret Key are created in your browser, and the server never sees them.