EnvChain
OverviewChangelogBuy · £9.50
AppsFeedbackDashboard
CoreTools
AppsFeedbackDashboard
EnvChainChangelog£9.50Buy
CoreTools

A software shop. Tools you pay for once, then keep using.

Shop

  • Apps
  • Dashboard

Support

  • Feedback
  • support@coretools.app

Legal

  • Terms of Service
  • Privacy Policy
  • Refund Policy
  • Cookies
  • Business info
© 2026 Zak Noble-Clarke. All rights reserved.coretools.app · Built in the UK · One-time purchases
← Back to EnvChain
EnvChain

Changelog for EnvChain.

Release history for all platforms.

  1. v1.2.0Latest
    2 November 2026
    darwin-aarch64darwin-x86_64

    [1.2.0] - 2026-11-02

    Added

    • Project sidebar replaces the title-bar project dropdown. Projects are grouped by path prefix, searchable with Cmd+K, and collapsible per group. The whole sidebar collapses to an icon rail with Cmd+B, and does so automatically in narrow windows. Rename a project in place with a double-click or F2.
    • Environment chips on every item and an environment filter, so the same variable name in dev and prod is no longer ambiguous. Type filters are a segmented control, and imports and export live in one menu.
    • Doppler integration: token-based discovery of projects and configs, one-click import of every Doppler project with config-to-environment mapping, two-way sync that auto-resolves one-sided edits, read-only or read-write links, service-token support, rate-limit handling, and optional background refresh while unlocked.
    • release.sh --arch arm64|x86_64|all builds, signs and publishes the Apple Silicon and Intel releases.
    • project.list_bindings daemon method reports the folders bound to a project and whether each still exists.
    • Headless UI renders: node scripts/render-ui.mjs.

    Changed

    • EnvChain has its own accent colour, flat sidebar and sentence-case headings. The About window is compact.
    • The app and the daemon now share one settings.json (~/Library/Application Support/envchain/). The newest existing settings file from an earlier install is migrated automatically and left in place.
    • A fresh Touch ID unlock counts as authentication for cache and session projects within their window, so unlocking and then reading a secret is one prompt. every_access projects always prompt.
    • Auth policy and cache TTL are now enforced per project: every_access always prompts, cache expires after its TTL, session lasts until lock. Tightening a policy evicts cached access immediately.

    Fixed

    • Intel Macs were offered the Apple Silicon update. The updater now sends the architecture.
    • envchain get, set, import-env, export-env and delete failed with "missing vault_id". The daemon now accepts camelCase and snake_case parameters.
    • The fish shell hook could run commands embedded in a secret value. Quoting is fixed for bash, zsh and fish. The hook also clears the previous project's secrets when the daemon is unreachable or locked, and no longer stalls each cd when the daemon is down.
    • envchain run reported success when the child was killed by a signal, and could hang on backgrounded children. It now exits 128+signal, and a second Ctrl-C exits immediately.
    • The bash hook installer no longer breaks ~/.profile setups, and exported .env files are created with owner-only permissions.
    • The JS and Python SDKs now default to the active vault, no longer time out long-running commands, decode multibyte output correctly, and report signals. A missing daemon socket raises DaemonUnavailableError.
    • Daemon: a lock-ordering deadlock between broadcast and disconnect, leaked connections on a malformed hello, unbounded frame and output buffering, children outliving their client, a stale pid file blocking startup, and a sleep detector that never fired on macOS.
    • Vault creation can no longer regenerate the master key and orphan an existing vault. Cleartext virtual env files are removed on expiry and after a crash, and a real .env is never overwritten.
    • Renaming or deleting a project now moves or removes its folder bindings. Rename is a single transaction that merges into an existing project, concurrent bind and unbind no longer lose updates, and fast project switching no longer shows the previous project's items.
    • .env import and export: the default environment export no longer includes other environments, repeated keys no longer create duplicates, imports are transactional and honour replace, and KEY="v" # note no longer keeps its quotes.
    • Plain variables no longer vanish while locked, migrations are crash-safe, a licence left running offline now expires correctly, and event listeners no longer leak.
    • Provider sync: Azure and GCP could never authenticate, Azure rejected names containing _, AWS JSON secrets did not round-trip, deletions were not propagated in two-way sync, and the sync panel hid per-key failures.

    Performance

    • Shell hooks resolve the bound project from a cached, canonicalised binding list instead of re-reading it on every cd.
    • The project list is a single query, and opening the vault no longer hashes every migration on every request.
  2. v1.1.1
    28 October 2026
    darwin-aarch64

    Changelog

    All notable changes to this project will be documented in this file.

    The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

    [1.1.1] - 2026-10-28

    Changed

    • New app icon, built as a layered macOS icon so it follows light, dark, tinted and clear appearances. Raster fallbacks are padded to the standard macOS icon size.

    [1.1.0] - 2026-05-15

    Added

    External secret-store providers

    • New envchain-providers crate with adapters for eight external secret stores: HashiCorp Vault (KV v1/v2, token + AppRole, namespace-aware), AWS Secrets Manager (IAM static credentials or default credential chain, JSON-object secret expansion), Azure Key Vault (OAuth2 client credentials with token caching and 429/Retry-After handling), GCP Secret Manager (service account JSON or Application Default Credentials with RS256 JWT exchange), 1Password (Connect server with op CLI fallback), Doppler (workspace > project > config), Infisical (project + environment slug), and Bitwarden Secrets Manager (machine-account access token exchange).
    • One provider per vault: linking a vault to a provider opens a scope picker for the provider's native project/path layer (Doppler project, Vault mount + path, 1Password vault, Infisical workspace, AWS path prefix, Azure vault URL, GCP project + prefix, Bitwarden project).
    • Live-proxy resolution: secrets resolved on-demand at injection time without local copies.
    • Two-way sync (pull, push, both) with diff computation, per-key continue-on-error semantics, and a per-key failure report.

    Environment-aware sync

    • Provider environments map to EnvChain environment tags via EnvironmentMapping. Doppler configs and Infisical environment slugs are first-class native environments; 1Password (tags), Bitwarden, AWS, GCP, Azure, and Vault use documented naming conventions to derive environments.
    • A single provider link can hydrate many environment-tagged variables in one vault, and mappings are reusable across vaults.
    • Provider environments are auto-mapped to same-named EnvChain environment tags by default when a link is created; the mapping remains fully editable.
    • Each link records an EnvChain project tag (envchain_project_tag) that determines which local project pulled secrets are filed under. This is kept distinct from the external provider's own project identifier and never conflated.

    Read-only links

    • A vault-to-provider link can be marked read-only, restricting it to PULL (cloud -> local) only. PUSH and BOTH sync directions are rejected, and user-initiated item mutations in that vault are blocked locally. The flag is switchable after link creation.

    Conflict resolution

    • Bidirectional sync detects per-key, per-environment conflicts using constant-time secret comparison (no value logging).
    • Per-conflict prompt-driven resolution with Local / Remote / Custom strategies, keyboard navigation (arrow keys, L/R/C shortcuts, Enter), masked value reveals, and an "N of M" live progress counter.

    Credential storage

    • Provider auth credentials are storable in either the OS keychain (macOS Security Framework; Windows / Linux backends scaffolded) or the encrypted SQLCipher database, user-selectable per provider link.
    • All in-memory secret material uses zeroize::Zeroizing wrappers; ProviderCredentials and SecretValue derive ZeroizeOnDrop.
    • Threat-model and per-provider storage-recommendation document at docs/providers/credential-storage.md.

    Tauri bridge

    • 13 new Tauri commands: providers_list_kinds, provider_authenticate, provider_save_creds, provider_load_creds, provider_delete_creds, provider_list_scopes, provider_list_environments, provider_link_vault, provider_get_link, provider_unlink_vault, provider_resolve_secret, provider_plan_sync, provider_apply_sync. All commands gated behind the existing master-unlock + license guards.
    • Strongly-typed TypeScript bindings and Zod schemas under src/lib/providers/.
    • Four new SQLite migrations: V002__provider_credentials.sql, V003__vault_provider_links.sql, V004__provider_link_read_only.sql, and V005__provider_link_envchain_project_tag.sql.

    Frontend

    • Four new React components under src/components/providers/: provider picker modal, four-step credentials and scope wizard, sync panel, and conflict resolution modal.
    • Two new Zustand stores: useProviderLinkStore (wizard state, link flow) and useSyncStore (plan, resolutions, conflict cursor).
    • Three new oklch design tokens (--color-conflict, --color-conflict-subtle, --color-conflict-fg) with light and dark variants.
    • UI specification document at docs/providers/ui-spec.md.
    • Accessibility: aria-checked on provider tiles, role="radiogroup", focus management on dialog open/close, aria-live="polite" on conflict progress, full keyboard navigation in the conflict modal.

    Testing and CI

    • 62 Rust unit tests (httpmock fixtures for all eight providers plus sync-engine coverage) and 28 integration tests gated behind ENVCHAIN_INTEGRATION=1.
    • New GitHub Actions workflow .github/workflows/provider-integration.yml boots Vault, LocalStack, and Infisical via docker-compose, runs the integration suite, and uploads logs on failure. Marked continue-on-error: true for the first iteration.
    • crates/providers/tests/docker-compose.yml and shared test helpers under crates/providers/tests/common/.
    • 299 vitest tests covering the new components, stores, and helpers (test files under src/tests/providers/).

    Changed

    • Workspace, package, and Tauri configuration versions bumped from 1.0.0 to 1.1.0 (envchain-license remains independently versioned at 0.1.0).
    • ConflictResolutionModal uses the Tauri-native ask() dialog from @tauri-apps/plugin-dialog instead of window.confirm for the unresolved-close prompt.

    ---

    [Unreleased]

    Added

    • Bootstrap repository structure with Tauri 2.10.x + Rust + React 19/Vite/TS
    • CI workflows for macOS builds, signing, notarization, and release publishing
    • Workspace structure with app, core, daemon, cli, and license crates
    • Frontend stubs for main, settings, onboarding, and license windows
    • Placeholder icons and entitlements configuration

    TODO

    • Core encryption and database implementation (rust-core-agent)
    • Frontend UI and window implementation (frontend-agent)
    • Daemon service for background sync (infra-agent)
    • CLI command-line interface (cli-agent)
    • License verification integration (license-agent)
    • JavaScript and Python SDKs (sdk-agent)

    ---

    > Add notes for each release in the [Unreleased] section above. > When releasing, move [Unreleased] changes to a new [X.Y.Z] section with today's date.

  3. v1.1.0
    2 June 2026
    darwin-aarch64

    Changelog

    All notable changes to this project will be documented in this file.

    The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

    [1.1.0] - 2026-05-15

    Added

    External secret-store providers

    • New envchain-providers crate with adapters for eight external secret stores: HashiCorp Vault (KV v1/v2, token + AppRole, namespace-aware), AWS Secrets Manager (IAM static credentials or default credential chain, JSON-object secret expansion), Azure Key Vault (OAuth2 client credentials with token caching and 429/Retry-After handling), GCP Secret Manager (service account JSON or Application Default Credentials with RS256 JWT exchange), 1Password (Connect server with op CLI fallback), Doppler (workspace > project > config), Infisical (project + environment slug), and Bitwarden Secrets Manager (machine-account access token exchange).
    • One provider per vault: linking a vault to a provider opens a scope picker for the provider's native project/path layer (Doppler project, Vault mount + path, 1Password vault, Infisical workspace, AWS path prefix, Azure vault URL, GCP project + prefix, Bitwarden project).
    • Live-proxy resolution: secrets resolved on-demand at injection time without local copies.
    • Two-way sync (pull, push, both) with diff computation, per-key continue-on-error semantics, and a per-key failure report.

    Environment-aware sync

    • Provider environments map to EnvChain environment tags via EnvironmentMapping. Doppler configs and Infisical environment slugs are first-class native environments; 1Password (tags), Bitwarden, AWS, GCP, Azure, and Vault use documented naming conventions to derive environments.
    • A single provider link can hydrate many environment-tagged variables in one vault, and mappings are reusable across vaults.
    • Provider environments are auto-mapped to same-named EnvChain environment tags by default when a link is created; the mapping remains fully editable.
    • Each link records an EnvChain project tag (envchain_project_tag) that determines which local project pulled secrets are filed under. This is kept distinct from the external provider's own project identifier and never conflated.

    Read-only links

    • A vault-to-provider link can be marked read-only, restricting it to PULL (cloud -> local) only. PUSH and BOTH sync directions are rejected, and user-initiated item mutations in that vault are blocked locally. The flag is switchable after link creation.

    Conflict resolution

    • Bidirectional sync detects per-key, per-environment conflicts using constant-time secret comparison (no value logging).
    • Per-conflict prompt-driven resolution with Local / Remote / Custom strategies, keyboard navigation (arrow keys, L/R/C shortcuts, Enter), masked value reveals, and an "N of M" live progress counter.

    Credential storage

    • Provider auth credentials are storable in either the OS keychain (macOS Security Framework; Windows / Linux backends scaffolded) or the encrypted SQLCipher database, user-selectable per provider link.
    • All in-memory secret material uses zeroize::Zeroizing wrappers; ProviderCredentials and SecretValue derive ZeroizeOnDrop.
    • Threat-model and per-provider storage-recommendation document at docs/providers/credential-storage.md.

    Tauri bridge

    • 13 new Tauri commands: providers_list_kinds, provider_authenticate, provider_save_creds, provider_load_creds, provider_delete_creds, provider_list_scopes, provider_list_environments, provider_link_vault, provider_get_link, provider_unlink_vault, provider_resolve_secret, provider_plan_sync, provider_apply_sync. All commands gated behind the existing master-unlock + license guards.
    • Strongly-typed TypeScript bindings and Zod schemas under src/lib/providers/.
    • Four new SQLite migrations: V002__provider_credentials.sql, V003__vault_provider_links.sql, V004__provider_link_read_only.sql, and V005__provider_link_envchain_project_tag.sql.

    Frontend

    • Four new React components under src/components/providers/: provider picker modal, four-step credentials and scope wizard, sync panel, and conflict resolution modal.
    • Two new Zustand stores: useProviderLinkStore (wizard state, link flow) and useSyncStore (plan, resolutions, conflict cursor).
    • Three new oklch design tokens (--color-conflict, --color-conflict-subtle, --color-conflict-fg) with light and dark variants.
    • UI specification document at docs/providers/ui-spec.md.
    • Accessibility: aria-checked on provider tiles, role="radiogroup", focus management on dialog open/close, aria-live="polite" on conflict progress, full keyboard navigation in the conflict modal.

    Testing and CI

    • 62 Rust unit tests (httpmock fixtures for all eight providers plus sync-engine coverage) and 28 integration tests gated behind ENVCHAIN_INTEGRATION=1.
    • New GitHub Actions workflow .github/workflows/provider-integration.yml boots Vault, LocalStack, and Infisical via docker-compose, runs the integration suite, and uploads logs on failure. Marked continue-on-error: true for the first iteration.
    • crates/providers/tests/docker-compose.yml and shared test helpers under crates/providers/tests/common/.
    • 299 vitest tests covering the new components, stores, and helpers (test files under src/tests/providers/).

    Changed

    • Workspace, package, and Tauri configuration versions bumped from 1.0.0 to 1.1.0 (envchain-license remains independently versioned at 0.1.0).
    • ConflictResolutionModal uses the Tauri-native ask() dialog from @tauri-apps/plugin-dialog instead of window.confirm for the unresolved-close prompt.

    ---

    [Unreleased]

    Added

    • Bootstrap repository structure with Tauri 2.10.x + Rust + React 19/Vite/TS
    • CI workflows for macOS builds, signing, notarization, and release publishing
    • Workspace structure with app, core, daemon, cli, and license crates
    • Frontend stubs for main, settings, onboarding, and license windows
    • Placeholder icons and entitlements configuration

    TODO

    • Core encryption and database implementation (rust-core-agent)
    • Frontend UI and window implementation (frontend-agent)
    • Daemon service for background sync (infra-agent)
    • CLI command-line interface (cli-agent)
    • License verification integration (license-agent)
    • JavaScript and Python SDKs (sdk-agent)

    ---

    > Add notes for each release in the [Unreleased] section above. > When releasing, move [Unreleased] changes to a new [X.Y.Z] section with today's date.

  4. v1.0.0
    14 May 2026
    darwin-aarch64

    Changelog

    All notable changes to this project will be documented in this file.

    The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

    [Unreleased]

    Added

    • Bootstrap repository structure with Tauri 2.10.x + Rust + React 19/Vite/TS
    • CI workflows for macOS builds, signing, notarization, and release publishing
    • Workspace structure with app, core, daemon, cli, and license crates
    • Frontend stubs for main, settings, onboarding, and license windows
    • Placeholder icons and entitlements configuration

    TODO

    • Core encryption and database implementation (rust-core-agent)
    • Frontend UI and window implementation (frontend-agent)
    • Daemon service for background sync (infra-agent)
    • CLI command-line interface (cli-agent)
    • License verification integration (license-agent)
    • JavaScript and Python SDKs (sdk-agent)

    ---

    > Add notes for each release in the [Unreleased] section above. > When releasing, move [Unreleased] changes to a new [X.Y.Z] section with today's date.