Changelog

Changelog

From CHANGELOG.md.

In development

Unreleased

  1. No notes.

Release

0.2.0

2026-09-01

  1. 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.
  2. 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`.
  3. Bug fixMultiline dotenv values now retain their embedded newlines.
  4. ChangedProject owners now control both adding and removing Recipients. Recipient removal re-encrypts the current file while clearly preserving the limits of revocation.
  5. ChangedThe landing page development banner and product layout now share one consistent treatment.

Release

0.1.2

2026-09-01

  1. 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.
  2. 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

  1. 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

  1. FeatureOpening a Managed File without Access shows a recovery panel instead of a raw decrypt error.
  2. FeatureJSON and YAML files open as a tree. Encrypt or leave plaintext per path, including after the file is already managed.
  3. FeatureAccount copies your Age public key and an Access request in the modal. The inspector no longer has a Request access button.
  4. FeatureClipboard prompts remember dismissed payloads so the same snippet does not keep interrupting.
  5. FeaturePublic docs are a user guide with a sidebar. Contributor pages (seams, features, assets, glossary, versioning) stay in the repo, not the site.
  6. FeatureThe site footer is a large lockup; the landing page has load animations.
  7. 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.
  8. FeatureProject owners in `.sopsdeck.toml`: only owners can add Recipients once owners are recorded.
  9. Feature`npx sopsdeck .` uses a single-Project sidebar without recents or extra folders.
  10. 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.
  11. 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.
  12. 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.
  13. FeatureNative Go runners for macOS, Windows, and Linux attach to GitHub Releases; the npm launcher downloads the matching runner.macOSWindowsLinux
  14. FeatureLanding install points at the npm package; the hero plays the catalog walkthrough.
  15. FeaturePublic site pages now render from Astro and deploy through the Cloudflare adapter, including the roadmap.
  16. FeaturePublic site deploys with Wrangler from `site/`.
  17. FeatureDemo seed opens several Projects with nested Managed Files.
  18. FeatureNotes show type tags, group by Added/Fixed/Changed, and platform when a bullet names macOS, Windows, or Linux.macOSWindowsLinux
  19. FeatureNested Project folders collapse; recents reopen a folder from this machine; long lists use Show more.
  20. FeatureInspector sections collapse; reveal/hide values sits on the Value heading. Add secret is gone (composer remains).
  21. FeatureFailed CLI commands append to `$SOPSDECK_STATE_DIR/errors.json`; repeats increment a count. Messages never include private keys or ciphertext.
  22. Feature`./scripts/dev` builds a fresh CLI and launches the browser app against it.
  23. Feature`./scripts/dev --team` shares one Git origin between Alice and Bob worktrees and prints those folders for the terminal.
  24. 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.
  25. FeatureEditor paste sniffs dotenv, JSON, or YAML and previews key names until Apply paste.
  26. FeatureLocal MCP (`sopsdeck mcp`) returns metadata by default; `get_value` needs approval; `run` returns exit status only.
  27. Feature`set` reads dotenv, JSON, or YAML from stdin as a paste preview; `--yes` writes. Lone values need a KEY.
  28. Feature`scan` blocks staged cloud keys, private key PEMs, and common tokens; SOPS ciphertext is ignored; `--install` writes an opt-in pre-commit hook.
  29. FeatureInspector Publish shows repo, environment, prefix, and opt-in prune from `.sopsdeck.toml`.
  30. FeaturePublish uses `GH_TOKEN`, `GITHUB_TOKEN`, or `gh auth token` as the GitHub Authorization bearer.
  31. FeaturePublish encrypts each value with GitHub's Libsodium public key before sending it.
  32. FeaturePublish reads `.sopsdeck.toml` for repo, environment, prefix, keys, and last-published names; prune deletes only names Sopsdeck previously published.
  33. 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.
  34. FeatureDocs, notes, and living pages share one public site under `site/` (landing, changelog, `site/docs/`).
  35. FeatureProduct clips hold for seconds with typed motion; `./scripts/demo --check` fails sub-second videos. CLI casts cover get, set, commit, and Sync.
  36. Feature`sopsdeck set -f FILE` with no KEY creates an empty encrypted Managed File.
  37. FeatureEditor key rows reveal, copy, rename, and delete from icons; a composer adds `KEY` or `KEY=value`.
  38. FeatureThe sidebar can add a Managed File; theme is an icon; panes scroll inside the window.
  39. FeatureInspector can Grant Access and dry-run or Publish to a Sync Target.
  40. Feature`recipient remove` drops Access, rotates the data key, and warns that Git history still decrypts.
  41. Feature`recipient request` opens a metadata-only access PR; `recipient grant` re-encrypts selected or all Managed Files and opens the Access PR.
  42. FeatureReview shows a plaintext semantic diff of uncommitted Managed File keys.
  43. FeatureSecret History lists commits on a Managed File; `get --at` decrypts a revision.
  44. FeatureRestore copies a revision’s values into the worktree and leaves them uncommitted.
  45. FeatureReview of a decryptable merge conflict shows base / ours / theirs for each key.
  46. FeatureInspector Review, History, and Restore call those CLI commands.
  47. FeatureProduct stills, clips, and a studio walkthrough are generated by `./scripts/demo`.
  48. Feature`sopsdeck --version` matches the npm launcher; What’s new is bundled from this file.
  49. 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.
  50. 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.
  51. 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.
  52. Bug fixAdding a Project path no longer depends on a native folder dialog.
  53. 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__`, …).
  54. Bug fixSync, get, and Publish print short recovery copy instead of raw Git or SOPS text.
  55. Bug fixThe browser shows Sync, commit, and save failures next to those controls, not as a toast.
  56. Bug fix`get` of encrypted `eas.json` warns that EAS CLI will not read SOPS ciphertext.
  57. Bug fixBrowser breadcrumb and inspector show `~/project/file` paths, not temp or `..` paths.
  58. ChangedSite nav says Changelog instead of Notes. The public roadmap page is gone.
  59. ChangedThe editor lock badge follows Locked / Unlocked instead of a static SOPS encrypted label.
  60. ChangedCipher seam mark is the site favicon, Open Graph image, and app icon master.
  61. ChangedChangelog and What’s new use the product layout; primary actions have icons.
  62. ChangedBrowser app is now the only supported UI; the Tauri/Rust shell and its separate setup are removed.
  63. ChangedEmpty Project / Managed File / key states, Sync and save loading, dark mode, and a commit message prefilled from dirty keys.