Changelog
Changelog
From CHANGELOG.md.
In development
Unreleased
- No notes.
Release
0.2.0
2026-09-01
- FeatureProject setup now has loading and recovery states, file filtering, and per-field JSON/YAML selection. Managed files can be added or removed from a Project without deleting the underlying file, and encrypted paths can be edited after setup.
- FeatureAccount shows a copyable Age private-key backup and can remove the local identity. The CLI adds `identity remove --yes`, and identity creation/import no longer require `SOPSDECK_STATE_DIR`.
- Bug fixMultiline dotenv values now retain their embedded newlines.
- ChangedProject owners now control both adding and removing Recipients. Recipient removal re-encrypts the current file while clearly preserving the limits of revocation.
- ChangedThe landing page development banner and product layout now share one consistent treatment.
Release
0.1.2
2026-09-01
- Bug fixOpening `sd` in a project with a lockfile (e.g. `package-lock.json`) crashed the setup tree on the empty-string root key under `packages`. Lockfiles are now excluded from candidates and the key-path tree tolerates empty segments.
- Bug fixA freshly-created identity could encrypt a file but not decrypt it: the desktop stores the Age key in the OS keychain, but SOPS only reads `SOPS_AGE_KEY*` from the environment. The drive now bridges the keychain identity into `SOPS_AGE_KEY` so owners can open their own files.
Release
0.1.1
2026-09-01
- Bug fixGlobal and `npx` installs printed nothing for any command (including `-h` and `-v`) because the launcher's main-module check did not resolve the npm bin symlink.
Release
0.1.0
2026-09-01
- FeatureOpening a Managed File without Access shows a recovery panel instead of a raw decrypt error.
- FeatureJSON and YAML files open as a tree. Encrypt or leave plaintext per path, including after the file is already managed.
- FeatureAccount copies your Age public key and an Access request in the modal. The inspector no longer has a Request access button.
- FeatureClipboard prompts remember dismissed payloads so the same snippet does not keep interrupting.
- FeaturePublic docs are a user guide with a sidebar. Contributor pages (seams, features, assets, glossary, versioning) stay in the repo, not the site.
- FeatureThe site footer is a large lockup; the landing page has load animations.
- FeatureRecipient add accepts a name or git identity (`Name <email>`). Project init records your Git identity in `.sopsdeck.toml` so teammates can see who you are.
- FeatureProject owners in `.sopsdeck.toml`: only owners can add Recipients once owners are recorded.
- Feature`npx sopsdeck .` uses a single-Project sidebar without recents or extra folders.
- FeatureClipboard modal: on app focus, a sniffed secret, Age recipient, or absolute path opens a confirm modal — paste into the open Managed File, Grant Access, or open the folder as a Project.
- Feature`sopsdeck rename OLD NEW -f FILE` renames a key and rewrites whole-word references across the project; the editor offers the same cross-file rewrite on Encrypt & save.
- Feature`sopsdeck references -f FILE` lists each key with its reference count and files; `sopsdeck unused -f FILE` lists keys with zero references; the inspector shows an "unused" badge.
- FeatureNative Go runners for macOS, Windows, and Linux attach to GitHub Releases; the npm launcher downloads the matching runner.macOSWindowsLinux
- FeatureLanding install points at the npm package; the hero plays the catalog walkthrough.
- FeaturePublic site pages now render from Astro and deploy through the Cloudflare adapter, including the roadmap.
- FeaturePublic site deploys with Wrangler from `site/`.
- FeatureDemo seed opens several Projects with nested Managed Files.
- FeatureNotes show type tags, group by Added/Fixed/Changed, and platform when a bullet names macOS, Windows, or Linux.macOSWindowsLinux
- FeatureNested Project folders collapse; recents reopen a folder from this machine; long lists use Show more.
- FeatureInspector sections collapse; reveal/hide values sits on the Value heading. Add secret is gone (composer remains).
- FeatureFailed CLI commands append to `$SOPSDECK_STATE_DIR/errors.json`; repeats increment a count. Messages never include private keys or ciphertext.
- Feature`./scripts/dev` builds a fresh CLI and launches the browser app against it.
- Feature`./scripts/dev --team` shares one Git origin between Alice and Bob worktrees and prints those folders for the terminal.
- Feature`identity create` / `import` store the Age private key in the OS keychain; `SOPS_AGE_KEY_CMD='sopsdeck identity key'` decrypts. Existing `SOPS_AGE_KEY_FILE` still works.
- FeatureEditor paste sniffs dotenv, JSON, or YAML and previews key names until Apply paste.
- FeatureLocal MCP (`sopsdeck mcp`) returns metadata by default; `get_value` needs approval; `run` returns exit status only.
- Feature`set` reads dotenv, JSON, or YAML from stdin as a paste preview; `--yes` writes. Lone values need a KEY.
- Feature`scan` blocks staged cloud keys, private key PEMs, and common tokens; SOPS ciphertext is ignored; `--install` writes an opt-in pre-commit hook.
- FeatureInspector Publish shows repo, environment, prefix, and opt-in prune from `.sopsdeck.toml`.
- FeaturePublish uses `GH_TOKEN`, `GITHUB_TOKEN`, or `gh auth token` as the GitHub Authorization bearer.
- FeaturePublish encrypts each value with GitHub's Libsodium public key before sending it.
- FeaturePublish reads `.sopsdeck.toml` for repo, environment, prefix, keys, and last-published names; prune deletes only names Sopsdeck previously published.
- FeatureMarkdown in `docs/`, README, and CHANGELOG is linted; `./scripts/scan` runs govulncheck and bun audit. CI runs `./scripts/check`; opt-in hooks require a CHANGELOG bullet on user-facing commits.
- FeatureDocs, notes, and living pages share one public site under `site/` (landing, changelog, `site/docs/`).
- FeatureProduct clips hold for seconds with typed motion; `./scripts/demo --check` fails sub-second videos. CLI casts cover get, set, commit, and Sync.
- Feature`sopsdeck set -f FILE` with no KEY creates an empty encrypted Managed File.
- FeatureEditor key rows reveal, copy, rename, and delete from icons; a composer adds `KEY` or `KEY=value`.
- FeatureThe sidebar can add a Managed File; theme is an icon; panes scroll inside the window.
- FeatureInspector can Grant Access and dry-run or Publish to a Sync Target.
- Feature`recipient remove` drops Access, rotates the data key, and warns that Git history still decrypts.
- Feature`recipient request` opens a metadata-only access PR; `recipient grant` re-encrypts selected or all Managed Files and opens the Access PR.
- FeatureReview shows a plaintext semantic diff of uncommitted Managed File keys.
- FeatureSecret History lists commits on a Managed File; `get --at` decrypts a revision.
- FeatureRestore copies a revision’s values into the worktree and leaves them uncommitted.
- FeatureReview of a decryptable merge conflict shows base / ours / theirs for each key.
- FeatureInspector Review, History, and Restore call those CLI commands.
- FeatureProduct stills, clips, and a studio walkthrough are generated by `./scripts/demo`.
- Feature`sopsdeck --version` matches the npm launcher; What’s new is bundled from this file.
- Bug fixPlain dotenv files are no longer discovered as Managed Files (they failed to decrypt with parse errors); only SOPS-encrypted dotenv files are, matching the Project Manifest spec.
- Bug fixThe browser app logs failed CLI commands to `~/.config/sopsdeck/errors.json` and uses the keychain Age identity for decryption, so it works without a shell env.
- Bug fix`get` on a file without Access or on a non-SOPS file now says what to do instead of leaking a raw SOPS parse error.
- Bug fixAdding a Project path no longer depends on a native folder dialog.
- Bug fixOpening a large Project no longer blocks the browser: Managed File listing and decryption run in the Go runner, and the walker skips generated/build dirs (`.next`, `build`, `coverage`, `__pycache__`, …).
- Bug fixSync, get, and Publish print short recovery copy instead of raw Git or SOPS text.
- Bug fixThe browser shows Sync, commit, and save failures next to those controls, not as a toast.
- Bug fix`get` of encrypted `eas.json` warns that EAS CLI will not read SOPS ciphertext.
- Bug fixBrowser breadcrumb and inspector show `~/project/file` paths, not temp or `..` paths.
- ChangedSite nav says Changelog instead of Notes. The public roadmap page is gone.
- ChangedThe editor lock badge follows Locked / Unlocked instead of a static SOPS encrypted label.
- ChangedCipher seam mark is the site favicon, Open Graph image, and app icon master.
- ChangedChangelog and What’s new use the product layout; primary actions have icons.
- ChangedBrowser app is now the only supported UI; the Tauri/Rust shell and its separate setup are removed.
- ChangedEmpty Project / Managed File / key states, Sync and save loading, dark mode, and a commit message prefilled from dirty keys.