Docs
Changelogsince 1.0.0-alpha.3

Command line changelog

Every user-facing change to the penv binary, newest first, with the release each one shipped in.

This page records every user-facing change to the penv binary, newest first, with the release each one shipped in. Everything below is the 1.0 line. The 0.16 line and what replaced each part of it is on upgrade from 0.16.

1.0 is a prerelease, so read penv --version before you quote a flag from any page here. See upgrade penv for how a release reaches your machine.

1.0.0-alpha.3

10 September 2026. Release notes

Signed releases

  • Release checksums are signed by a penv release key, and a release stays a draft until it is signed.
  • penv and install.sh verify a download against a key list compiled into the build. That list was first populated with this release.
  • manifest.json ships beside the binaries with every release, and this documentation is generated from it.

Coding agents

  • penv reveal under an agent session now files an approval in the console and exits 4 rather than printing anything.
  • --approval <key> redeems that approval once, bound to the person who granted it and to the agent session that asked. A wrong key never spends an approval.

Windows

  • penv run resolves a bare program name through PATHEXT, so the .cmd shims a package manager installs start on Windows.

Typed access

  • Every target option now declares its default and the values it allows.
  • penv gen --options lists them with a line of description each, and both init and gen say where your remembered answers live.

1.0.0-alpha.2

9 September 2026. Release

Installing and upgrading

  • Two installers shipped: install.sh for macOS and Linux, install.ps1 for Windows. Both compare a download against the release digest and install nothing that does not match.
  • @penvhq/cli became an npm package that runs the platform binary, for people who want npm to own it.
  • Windows arm64 joined the published builds.
  • penv.cloud became the one release address the binary reads.
  • penv upgrade arrived, along with penv completions for your shell.

Adoption

  • The one dotenv escape now round-trips, so a value written with \n comes back the way it went in.
  • penv init asks where generated files should go instead of guessing.
  • Guards and language targets work in any repository layout rather than only the shapes penv shipped with.

Typed access

  • The TypeScript target applies the defaults declared in your schema.
  • A [options] key_case setting gives you camelCase property names.

1.0.0-alpha.1

8 September 2026. Release

The first release of the Rust rewrite. Everything in it is new.

The binary and local mode

  • One committed .env.schema replaces every config file.
  • penv init writes that schema from an existing .env. penv check reports what is wrong with it, and penv ls lists what is in it.
  • penv run validates, then puts the values in the child process and nowhere else.

Cloud mode

  • penv login signs a person in through a device code, and penv push sends an environment up.
  • penv pull writes a plain .env back down. penv set and penv unset change one key.
  • penv reveal prints one value.
  • penv machine enroll gives a host that can prove nothing a key of its own.
  • Four credential kinds: a platform token, an AWS signature, a bound keypair, and a plain pck_ bearer.
  • An encrypted local copy of each environment, sealed under a key in the operating system keychain and bound to the credential that fetched it.

Coding agents

  • penv detects an agent session. Its own output becomes JSON, and every sensitive value in the child's output is masked.
  • penv guard and penv hook write the rules that keep an agent's tools away from .env.

Typed access

  • Language targets for TypeScript and Python, generated from the schema rather than read at runtime.

Releases

  • One archive per target with a checksum in the release.

Next: upgrade from 0.16.