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.
penvandinstall.shverify a download against a key list compiled into the build. That list was first populated with this release.manifest.jsonships beside the binaries with every release, and this documentation is generated from it.
Coding agents
penv revealunder 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 runresolves a bare program name throughPATHEXT, so the.cmdshims a package manager installs start on Windows.
Typed access
- Every target option now declares its default and the values it allows.
penv gen --optionslists them with a line of description each, and bothinitandgensay where your remembered answers live.
1.0.0-alpha.2
9 September 2026. Release
Installing and upgrading
- Two installers shipped:
install.shfor macOS and Linux,install.ps1for Windows. Both compare a download against the release digest and install nothing that does not match. @penvhq/clibecame an npm package that runs the platform binary, for people who want npm to own it.- Windows arm64 joined the published builds.
penv.cloudbecame the one release address the binary reads.penv upgradearrived, along withpenv completionsfor your shell.
Adoption
- The one dotenv escape now round-trips, so a value written with
\ncomes back the way it went in. penv initasks 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_casesetting 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.schemareplaces every config file. penv initwrites that schema from an existing.env.penv checkreports what is wrong with it, andpenv lslists what is in it.penv runvalidates, then puts the values in the child process and nowhere else.
Cloud mode
penv loginsigns a person in through a device code, andpenv pushsends an environment up.penv pullwrites a plain.envback down.penv setandpenv unsetchange one key.penv revealprints one value.penv machine enrollgives 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 guardandpenv hookwrite 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.