Update dependency varlock to v1.14.1 - #23
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
renovate
Bot
force-pushed
the
renovate/varlock-1.x
branch
from
June 6, 2026 11:38
2abb8b0 to
be5c445
Compare
renovate
Bot
force-pushed
the
renovate/varlock-1.x
branch
from
June 12, 2026 14:08
be5c445 to
0bdf1e8
Compare
renovate
Bot
force-pushed
the
renovate/varlock-1.x
branch
from
June 20, 2026 11:31
0bdf1e8 to
6a41522
Compare
renovate
Bot
force-pushed
the
renovate/varlock-1.x
branch
from
June 24, 2026 08:09
6a41522 to
dde2fcd
Compare
renovate
Bot
force-pushed
the
renovate/varlock-1.x
branch
from
June 27, 2026 19:45
dde2fcd to
3b6308c
Compare
renovate
Bot
force-pushed
the
renovate/varlock-1.x
branch
from
July 8, 2026 00:14
3b6308c to
513707d
Compare
renovate
Bot
force-pushed
the
renovate/varlock-1.x
branch
from
July 16, 2026 07:17
513707d to
9d9b895
Compare
renovate
Bot
force-pushed
the
renovate/varlock-1.x
branch
from
July 25, 2026 07:12
9d9b895 to
c15a00b
Compare
renovate
Bot
force-pushed
the
renovate/varlock-1.x
branch
from
July 29, 2026 03:47
c15a00b to
8e502e3
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
1.2.0→1.14.1Release Notes
dmno-dev/varlock (varlock)
v1.14.1Compare Source
2026-07-29
v1.14.0Compare Source
2026-07-28
New
varlock flattencommand: collapses the @import graph into a self-contained directory (rewriting import paths, pinning plugin versions) so a single package can be deployed without the rest of the monorepo, e.g. in Docker buildsProxy: secrets are now substituted into request headers only by default (excluding common forward/log headers like cookie and x-forwarded-), and a placeholder may appear at most once per request. Widen with @proxy(substituteIn=[...]) using targets like header:authorization, path, query:api_key, or body:client_secret (body always needs a path; use body: for bodies that can't be parsed into one), and raise the cap with maxOccurrences. This prevents an injected secret from being swapped into a request body, query, or unintended header where it could be exfiltrated.
Add
@dynamicselector to the--filterlanguage (!@​dynamicselects static items). Decorator-based filters (@dynamic/@sensitive/@required) now scope resolution and validation to selected items, so e.g. a build-time--filter='!@​dynamic'skips runtime-only vars entirely, including their@requiredchecksvarlock auditignoring@auditIgnoreon schema itemsplugins now work in shell-less/distroless images: tarballs extract natively (no
tar/shell dependency), andvarlock flatten --vendor-pluginscopies plugins into the output for a fully self-contained artifactReduce published package size: build the proxy cert authority from low-level asn1 packages instead of @peculiar/x509, and strip bundled third-party source text from release sourcemaps
proxy client compatibility fixes: minted MITM certs now include subject/authority key identifiers so strict TLS verifiers (python 3.13+ urllib/httpx defaults) accept them; the injected env now sets NODE_USE_ENV_PROXY=1 so Node's built-in fetch (node 24+) routes through the proxy instead of silently bypassing it, and DENO_CERT so Deno trusts the proxy CA; Proxy-Authorization from clients is stripped instead of forwarded upstream
Root decorators (@initAws, etc) now resolve the full dependency chain of items referenced in their args, instead of only the directly referenced items
varlock/envinsteadCache locks left behind by an interrupted run are now reclaimed immediately instead of stalling later runs for several minutes and hiding the real error.
varlock cache clearalso clears locks.Fix proxy MITM certs that occasionally failed to load: roughly 1 in 512 minted certs got a non-minimal DER serial number, which strict TLS parsers reject
v1.13.0Compare Source
2026-07-21
Report load failures to error trackers.
varlock/auto-loadcan now throw the load error (instead of exiting silently) so a reporter like Sentry can capture it. Opt in with aglobalThis._varlockOnLoadErrorhook (called with the error and the values that did resolve), or set_VARLOCK_THROW_ON_LOAD_ERROR=1when a reporter is already initialized. Default behavior is unchanged.Add array and object value types:
@type=array(...)and@type=record(...)with per-element validation, native[a, b]/{k=v}literal values, JSON and separator string input, configurable serialization back to process.env, per-element redaction, and typed code generation across languagesFix refs in the
@cacheroot decorator value (e.g.@cache=if($USE_CACHE, "memory", "disabled")) silently resolving as undefinedResolve dynamic arguments in forEnv(); a forEnv() argument that resolves to undefined is now an error instead of silently comparing against "undefined"
install.sh now installs varlock-local-encrypt.exe on WSL so local encryption can use the Windows TPM/Hello backend (pass --skip-win-exe to opt out)
v1.12.0Compare Source
2026-07-20
#892 (minor) - Add
@generateJavaEnvand@generateCsharpEnvloadable env modules (typed Env, loader, sensitive keys)#780 (patch)
@encryptInjectedEnvis now honored whenvarlock run/varlock proxy runinject the env blob.Previously the setting only applied to the library auto-load path and build-time integrations; the CLI spawn paths injected a plaintext
__VARLOCK_ENVblob and merely forwarded a pre-existing key. In blob-only inject mode (--inject blob), the blob is now encrypted with an ephemeral key carried alongside it, so resolved values never sit in plaintext in the child's environment. This is leak resistance (crash reporters, env dumps, logs), not protection from an attacker who can read the full environment.#780 (patch)
Add
varlock proxy: a local credential proxy for AI agents (preview).Run an agent (or any untrusted tool) through a local MITM proxy so it only ever sees placeholder secrets: real values are injected at the wire (bound to a verified upstream TLS identity), responses are scrubbed back to placeholders, and every request is policy-checked and audited. Mark a secret with
@proxy(domain="api.example.com"); sensitive items are shown to the child as placeholders by default, with@proxy=passthrough/@proxy=omitescape hatches. Route with host/path/method rules (block,approval), set egress with@proxyConfig={egress="strict"}, and hot-reload live policy withvarlock proxy reload. Sessions are durable and auditable (varlock proxy status/rules/audit);proxy startruns a daemon with a live request log that otherproxy runinvocations attach to. Addproxy run --sandboxto run the agent in a sandbox whose only egress is the proxy: a built-in macOS credential + egress jail, or--sandbox=docker(=podman) to run it in a container while your secrets stay on the host. Preview: on its own the proxy is same-uid and raises the bar rather than being a boundary;--sandbox(or a container) is what makes it one. See the proxy guide.#907 (patch)
Fix nested
varlock run: a command-local override (FOO=bar varlock ...) inside a parentvarlock runnow wins over the parent's injected value again, instead of being clobbered by the re-injected env blob.v1.11.0Compare Source
2026-07-15
#873 (minor)
Add
--filterflag toload/runfor selecting env vars by key/glob,@sensitive/@required, or tags (new@tag()item decorator). Also add a matchingfilter=arg to@generate*code-generation decorators, so a single schema can emit multiple generated files scoped to different subsets.#871 (minor)
Add detection for Railway, AWS Amplify, Google Cloud Run, Deno Deploy, Zeabur, and Firebase App Hosting; detect dev sandboxes (CodeSandbox, StackBlitz, GitHub Codespaces, Gitpod, Replit) with isCI: false; add detectRuntime/detectOs and expose them as VARLOCK_RUNTIME/VARLOCK_OS builtin variables.
Also fixes several incorrect env var names found during a std-env doc audit: GitHub Actions PR number (was reading a non-existent variable), GitLab MR number (was using the instance-wide ID instead of the IID), Netlify build URL (double
https://), Semaphore PR number (Classic-only variable), Azure Pipelines PR number (prefers the GitHub-facing number), and Bitbucket repo owner (deprecated variable). Adds repo extraction for Bitrise.A second pass against std-env's actual detection logic found three more real gaps: Vercel and Netlify now report
isCI: falsewhen running their local dev servers (vercel dev,netlify dev) instead of always reporting CI; StackBlitz detection now also requires the WebContainer runtime marker (matching std-env) instead of a weak SHELL-only heuristic that could misfire; anddetectRuntime'sisNodeflag now matches std-env's semantics (staystrueunder Bun/Deno's Node-compat mode).#874 (patch)
Fix:
varlock load --format json-fullno longer includes@internalitems by default (pass--include-internalto opt in for local debugging). Framework integrations shell out to this exact command to get their injected config, so this closes a leak where an@internalsecret-zero credential could reach client/SSR runtime code.#882 (patch)
Docs: clarify that _VARLOCK_ENV_KEY encrypts the injected env blob (not an encrypted() resolver), and drop the stale plugin count from the package README
#884 (patch) - Refuse to write back encrypted values to non-regular source files (FIFO/pipe) with a clear error instead of blocking
v1.10.0Compare Source
2026-07-06
#849 (minor)
Generate code for Python, Rust, Go, and PHP with new per-language decorators (
@generatePythonEnv,@generateRustEnv,@generateGoEnv,@generatePhpEnv). Each emits a self-contained, idiomatic module — typed coerced values, a loader that parses the injected env, and aSENSITIVE_KEYSconstant — so it's usable out of the box. The TypeScript generator moves to@generateTsTypesand gains options to controlprocess.env/import.meta.envaugmentation and a monorepo-friendlyexposeEnv=localmode.@generateTypes(lang=ts)still works as a deprecated alias. Thevarlock typegencommand is renamed tovarlock codegen(withtypegenkept as a deprecated alias). Note:@disableProcessEnvInjectionnow requires a statictrue/falsevalue — env-dependent values likeforEnv(prod)are a schema error, since generated code must not differ per environment.#853 (patch) - Reject unknown or misspelled CLI flags with a did-you-mean suggestion instead of silently ignoring them
#861 (patch)
Runtime leak detection now catches secrets in compressed responses: gzipped responses that fit in a single chunk (i.e. most pages) were never scanned, so browsers — which always send
Accept-Encoding: gzip— could receive leaked sensitive values the scanner should have blocked. Brotli and zstd responses are now scanned too, and compressed chunks containing a leak fail closed (the response is killed) instead of passing through.Note: since most browser traffic previously bypassed the scanner, an app with an existing undetected leak will start seeing those responses blocked after upgrading — look for
DETECTED LEAKED SENSITIVE CONFIGin server logs, which names the offending config key.#861 (patch)
Runtime fixes: env state is now shared across bundled copies of
varlock/env(fixes stale values after env reloads when a bundler duplicates the module, including cleanup ofprocess.envkeys removed between reloads), andnode:cryptois loaded lazily — with encrypted env blobs decrypting via WebCrypto on edge runtimes that lack it entirely (e.g. Vercel Edge). Minimum supported Node version is now 22.3.#854 (patch)
Windows local encryption now uses TPM-sealed keys via NCrypt when available; existing DPAPI keys auto-upgrade on the next decrypt.
#865 (patch)
icon fetching during type generation now ignores failed responses, times out after 2s, and doesn't retry failed icons within a run
#866 (patch)
plugin-registered data types can now declare
coercedTypeso generated env modules type their fields correctly (previously they always emitted as strings)v1.9.0Compare Source
2026-06-25
#835 (minor) - Add
varlock keychaincommands to manage macOS Keychain-backed secrets.#830 (patch)
Improved
auditandinitenv var scanning in monorepos:package.jsonor.env.schemais treated as a separate package and skipped. This fixes spurious results and makes scanning much faster.PATH,HOME,SHELL,NODE_OPTIONS,npm_*, etc.) is no longer reported as "missing in schema" byaudit, nor added to inferred schemas byinit. App-meaningful vars likeNODE_ENVand CI variables are still reported.v1.8.0Compare Source
2026-06-23
varlock cache status/clearare now proper subcommands with scoped help and completion, andprintenv/explain/reveal/scan/auditnow declare their positional arguments so they appear in--helpand shell completion.v1.7.2Compare Source
2026-06-19
varlock typegennow also reports any such ignored keys.v1.7.1Compare Source
2026-06-17
#(like multi-line function calls), e.g. a long@import(./.env.shared, pick=[ ... ])key list; literals nested in item-value function calls use plain newlines. Single-line literals are unchanged.Multi-line literals and function calls also support
#comments — full-line entries can be commented out (# # OLD_KEY,) and individual entries annotated with trailing comments (# KEY, # note).The VSCode extension's syntax highlighting now understands object/array literals (single- and multi-line) and these inline comments.
v1.7.0Compare Source
2026-06-16
@sensitive={preventLeaks=false}. Secrets that legitimately leave the system (e.g. an API endpoint that returns a secret to another service) can be excluded from runtime leak detection while still being redacted in logs. The options form also acceptsenabledto toggle sensitivity (including dynamically, e.g.@sensitive={enabled=forEnv(production)}).Adds standalone object (
{key=value}) and array ([a, b, c]) literals to the env-spec grammar, usable as decorator values and function-call arguments (including nested).()remains reserved for function calls.@setValuesBulkand@importsupportpick/omitkey filters.Filter which keys are brought in with
pick(allowlist) oromit(denylist) array args — e.g.@setValuesBulk(opLoadEnvironment(env-id), pick=[API_KEY, DB_*])or@import(./.env.shared, omit=[LEGACY_TOKEN]). By default every key is included;pickandomitcan't be combined, and both accept simple globs (*,?).For
@import, listing keys as positional args (@import(./.env.shared, KEY1, KEY2)) is now deprecated in favor ofpick=[...]— it still works but warns.v1.6.1Compare Source
2026-06-11
varlock runno longer breaks interactive TTY tools (psql,claude, etc.). Previously redaction always piped stdout/stderr, which broke raw-TTY behavior unless you passed--no-redact-stdout.Redaction is now auto-detected per stream: output attached to an interactive terminal passes through directly (preserving raw TTY behavior), while piped or redirected output (CI logs, files, pipes) is still redacted — that's where leaked secrets actually persist. Detection is per stream, so
varlock run -- app | tee log.txtredacts stdout while stderr (still on the terminal) passes through.--redact-stdout/_VARLOCK_REDACT_STDOUTto override the auto-detection: force redaction of piped output (e.g. to override@redactLogs=false). Forcing redaction while attached to an interactive terminal errors, since it isn't possible without breaking TTY behavior. The flag takes precedence over the env var._VARLOCK_*keys from the injected env blob, generated types, and override provenance (previously only_VARLOCK_ENV_KEY/_VARLOCK_CACHE_KEYwere excluded), and scope override provenance to actual schema config keys instead of mirroring everyprocess.envkey. Warn when a user defines a config item using the reserved_VARLOCK_prefix.v1.6.0Compare Source
2026-06-10
cache()resolver, plugin cache API, encrypted JSON store (file mode0600),varlock cacheCLI with TTY-aware browser and--yesconfirm forclear."forever"caches until manually cleared (the default forcache()), setting a plugin'scacheTtltofalse(or an empty string) disables caching, and a TTL of0is rejected as ambiguous.--clear-cachealways clears the persistent disk cache, including when combined with--skip-cache;@cache=diskwarns when used in CI or with the file-based encryption fallback.node:crypto:randomNum()(integer by default, float whenprecisionis set),randomUuid(),randomHex()(string-length by default,bytes=truefor byte-length),randomString()(uses rejection sampling for unbiased output across any charset).durationdata type: accepts flexible string/number input ("1h","30m","500ms",2000,"2days") and coerces to a number in a configurable output unit (msdefault;seconds,minutes,hours,days,weeks). Only plain decimal number formats are accepted, and sub-millisecond durations are rejected. Same parser is used bycache(..., ttl=...)and the plugincacheTtloption._VARLOCK_CACHE_KEYis set (e.g. as a CI secret; same format as_VARLOCK_ENV_KEY, but a separate var since that one can be ephemeral),autocache mode uses a disk cache encrypted with that key instead of falling back to memory — enabling shared caching across CI processes without the key ever touching disk. Each key gets its own cache file, named by key fingerprint.@cachecan be set dynamically with functions (e.g.@cache=forEnv(dev, "disk")); invalid resolved values surface as schema errors.--data-stdinsupport); debug logging no longer includes encrypt/decrypt payloads.cacheTtlis documented per plugin — see the plugin packages' own changelogs.varlock run-injected resolved values are no longer treated as true overrides by innervarlockloads.Only real upstream overrides now propagate through nesting, while inner command-local overrides still win as expected.
Also fixes smoke-test CLI resolution to use the workspace-local varlock CLI instead of any globally installed binary.
Note:
__VARLOCK_ENVnow includes override provenance metadata (__varlockOverrideMeta). Tooling that strictly validates that blob shape should allow unknown/new fields.v1.5.1Compare Source
2026-06-05
v1.5.0Compare Source
2026-06-03
v1.4.0Compare Source
2026-05-29
varlock completeskills/varlock/SKILL.mdfor installation vianpx skills add dmno-dev/varlock.v1.3.0Compare Source
2026-05-24
varlock encrypton WSLConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.