Cipherleaf is a native macOS editor for existing SOPS documents encrypted with native age recipients.
It gives operators a focused GUI without turning plaintext into a working file:
- decrypted content moves through pipes and stays in app memory;
- private age identities remain at the path selected by the user;
- secret values are concealed by default and never appear in change reviews;
- edits are applied to a same-directory ciphertext staging file with
sops set --value-stdinandsops unset; - the staging file is decrypted and compared with the intended document before an atomic replacement;
- the installed encrypted file has mode
0600; - the existing recipient set is checked before and after every save.
Cipherleaf supports encrypted YAML, JSON, and dotenv files. It edits scalar values in JSON-compatible document trees: strings, numbers, Booleans, and nulls. It does not create identities, create a new encrypted document, rotate recipients, or replace SOPS policy management.
Native age recipients include classic X25519 (age1…) and post-quantum hybrid
(age1pq1…) identities when the installed age and SOPS versions support them.
Plugin recipients are intentionally outside the current scope.
The workspace keeps the encrypted document and selected identity on the left, scalar paths and change markers in the middle, and a concealed value editor beside the Security Inspector. The inspector confirms the public recipient match without displaying identity contents or secret values. The screenshot uses synthetic names and values only.
Download the signed and notarized app from the latest GitHub release.
- Install the required command-line tools with
brew install age sops. - Download
Cipherleaf-<version>-macos.zipand open it. - Move
Cipherleaf.appto Applications and launch it normally.
The release is a universal macOS app for Apple silicon and Intel Macs. GitHub also provides a SHA-256 checksum beside the archive.
- macOS 15 or newer
- SOPS and age installed locally
Install the command-line tools with Homebrew:
brew install age sopsgit clone https://github.com/luzanovdm/cipherleaf.git
cd cipherleaf
brew bundle
xcodegen generate
open Cipherleaf.xcodeprojRun the Cipherleaf scheme from Xcode.
- Choose the private native age identity file created by
age-keygen, with permissions0600. Do not choose the SOPS document or.sops.yaml. - Open an existing SOPS-encrypted YAML, JSON, or dotenv document.
- Check that the selected identity matches a public recipient in the Security inspector.
- Add, edit, rename, or remove scalar values.
- Save and review the redacted list of changed paths.
YAML and JSON use dotted paths for nested object keys. Dotenv documents are
flat: a dot in SERVICE.TOKEN is part of that single key, not a nesting
separator. Cipherleaf rejects paths reserved for SOPS metadata before an edit
can reach the save step.
Cipherleaf shows the nearest .sops.yaml when one exists, but saving does not
require it. Existing SOPS metadata remains authoritative, and Cipherleaf
refuses a save if the recipient set changes unexpectedly.
SOPS can remove comments from YAML and dotenv documents while applying
set/unset. Cipherleaf detects comment lines in the encrypted source and
shows a warning in the save review.
Read the user guide before the first production edit and the security model before deciding whether the application fits your threat model.
brew bundle
Scripts/test.sh
shellcheck Scripts/*.sh
actionlint .github/workflows/*.ymlThe repository Brewfile is the source of truth for command-line development
and CI dependencies. Run brew bundle check to verify an existing setup.
Scripts/test.sh runs architecture and security guardrails, strict
swift-format linting, unit tests, and synthetic SOPS/age integration tests.
CI also lints shell scripts and workflows, builds an unsigned review package,
and verifies the Icon Composer resources in the app bundle.
Building from source requires Xcode 26 or newer. The generated
Cipherleaf.xcodeproj is intentionally ignored; project.yml is the source
of truth.
See architecture, contributing, and distribution for more detail.
Cipherleaf has no analytics, network client, or account system. It never writes secret values to the clipboard automatically and has no dedicated copy-secret action; standard macOS editing commands remain available while a value is explicitly revealed. Its privacy manifest declares no collected data and no tracking.
MIT
