What's New
Changelog
All the latest updates, improvements, and fixes across the Redenv ecosystem.
38 releases
Last updated February 4, 2026
2 updates
JS SDKv1.2.1
Changed
init()now returnsSecrets: Previously returnedvoid. Now returns theSecretsobject.
Python SDKv0.4.1
Changed
init()now returnsSecrets: Previously returnedNone. Now returns theSecretsobject.
2 updates
CLIv1.8.0
Fixed
- Import New Project: The "New Project" option in
importcommand now properly creates project metadata (PEK, salt, etc.) instead of failing with "project not found".
Changed
- Extracted project creation logic into shared
createProject()function for better code reuse. - Simplified
registercommand to use the shared project creation utility.
CLIv1.7.0
Changed
- Config writer now updates TS/JS files in-place via targeted field replacement, preserving plugins and imports.
- Dropped JSON config file support.
Removed
switch projectcommand.
4 updates
CLIv1.6.0
Changed
- Updated
@redenv/coreto v1.2.0 to include include improved atomic writng logic. addcommand now forces interactive mode when inline value contains${...}references.editcommand is now fully interactive — removed inline[value]argument.
Corev1.2.0
Changed
- Atomic Secret Updates: Refactored
writeSecretto use a Lua script for atomic "read-modify-write" operations in Redis. This prevents race conditions and data loss during concurrent secret updates. - Cluster-Safe Architecture: Optimized the update flow to be Redis Cluster compatible by separating metadata retrieval from the atomic write operation, avoiding CROSSSLOT errors.
JS SDKv1.2.0
Changed
- Updated
@redenv/coreto v1.2.0 to include improved atomic writng logic
Python SDKv0.4.0
Changed
- Atomic Secret Updates: Refactored
client.set()(async and sync) to use a Lua script for atomic "read-modify-write" operations in Redis. This prevents race conditions and data loss during concurrent secret updates. - Cluster-Safe Architecture: Optimized the update flow to be Redis Cluster compatible by separating metadata retrieval from the atomic write operation, avoiding CROSSSLOT errors.
6 updates
CLIv1.5.1
Changed
- Updated
@redenv/coreto v1.1.1 to include improved secret expansion and escaping logic.
CLIv1.5.0
Added
- Secret Referencing: Full support for
${VAR_NAME}syntax in secret values. References are recursively resolved inlist,view, andexportcommands. - Improved UI: Introduced a clean, tree-style output format for
listandviewcommands to better display multi-line values and expansion details. - Reference Validation: The
addandeditcommands now interactively validate referenced keys and warn if they don't exist. - Command Arguments: The
addandeditcommands now accept an optional[value]argument for quicker, non-interactive secret updates. - Smart Edit: The
editcommand now pre-populates the prompt with the current secret value for easier modification. - Raw Export: Added
--rawflag toredenv exportto skip variable expansion.
Corev1.1.1
Changed
- Improved Secret Expansion: Refactored
expandSecretslogic to robustly handle complex backslash escaping (even/odd backslash patterns) and recursive resolution.
Corev1.1.0
Added
- Secret Expansion: Added
expandSecretsutility to recursively resolve${VAR_NAME}references within secret values, including cycle detection and escaping support.
JS SDKv1.1.0
Added
- Secrets Class Wrapper: Replaced the plain
Record<string, string>return type of.load()with a specializedSecretsclass. - Feature Parity with Python SDK: Secret Expansion: Automatic resolution of
${VAR_NAME}references within secrets. Smart Casting: New.get(key)method returning a wrapper with.toInt(),.toBool(),.toJSON(), and.toString()helpers. Scoping:.scope(prefix)method to create a view of secrets with a specific prefix stripped. Validation:.require(...keys)method for fail-fast checks of mandatory secrets. Raw Access:.rawproperty to access original values before expansion. Automatic Masking: Sensitive values are now automatically masked (********) when usingconsole.log(secrets),secrets.toString(), orJSON.stringify(secrets). Time Travel: Added.getVersion(key, version)to fetch historical secrets. Supports absolute version IDs and relative indexing (e.g., -1 for oldest). Environment Override: Addedenv.overrideoption (default:true) to control whetherprocess.env(orDeno.env) is overwritten. - Unmasked Access: Added
secrets.toObject()to retrieve the plain, unmasked secrets object when needed for debugging or specific integrations.
Python SDKv0.3.0
Added
- Secret Expansion: Support for
${VAR_NAME}syntax for referencing other secrets within values. - Raw Value Access: Added
.rawproperty toSecretsobject to access unexpanded values. - Recursive Resolution: Variable expansion supports multi-level recursion with circular dependency detection.
Changed
- Safe Access: Accessing a non-existent secret via
secrets["KEY"]now returnsNoneinstead of raising aKeyError. - Improved Scoping:
secrets.scope()now correctly preserves both expanded and raw values in the resulting subset.
2 updates
Python SDKv0.2.0
Added
- Synchronous Client: Added
RedenvSyncfor blocking contexts (scripts, legacy apps). - Write Support: Implemented
client.set(key, value)with full version history management. - Smart Secrets Object:
secrets.get(key, cast=int): Auto-convert types.secrets.scope("PREFIX_"): Create namespaced configuration subsets.secrets.require("KEY"): Fail-fast validation for missing keys. - Time Travel: Added
client.get_version(key, v)to fetch historical secrets. Supports both absolute IDs and relative indexing (0=Latest, 1=Previous). - Security Hardening:
Secretsobject now masks values (********) in logs/print statements to prevent accidental leakage. - Override Protection: Added
env.overrideoption to prevent overwriting existing environment variables.
Python SDKv0.1.0
Added
- Initial Release: First public beta release of the
redenvPython SDK. - Zero-Knowledge Security: All cryptographic operations (AES-256-GCM, PBKDF2) are performed locally.
- Async Support: Built on
asyncioandupstash-redisfor high-performance non-blocking operations. - SWR Caching: Implemented a robust
Stale-While-Revalidatecaching strategy usingcachetools.LRUCache. - Environment Injection: Automatically populates
os.environwith decrypted secrets onload().
1 update
CLIv1.4.2
Added
- Token Auditing: The
token createcommand now captures and stores the creator's identity (email or system username) in thecreatedByfield for better auditing.
2 updates
CLIv1.4.1
Added
- Plugin API Enhancements: Enhanced
getEphemeralTokento returnexpiresAtdate.
Corev1.0.5
Added
- Plugin API Enhancements: enhanced
getEphemeralTokento returnexpiresAtdate.
3 updates
CLIv1.4.0
Added
- Plugin Context Enhancements: The plugin context (
PluginContext) now providesredisUrlandredisTokenfor direct access to the configured Upstash Redis credentials. - Ephemeral Token Support: Introduced
getEphemeralToken()in thePluginContext, allowing plugins to securely obtain temporary, session-scoped Service Tokens for accessing project secrets. These tokens are automatically cleaned up on CLI exit.
Corev1.0.4
Added
- Plugin API Enhancements:
PluginContextnow includesredisUrlandredisTokenfor direct access to Redis connection details.PluginContextnow providesgetEphemeralToken()to allow plugins to securely obtain temporary, session-scoped Service Tokens.
JS SDKv1.0.7
Added
- Added support for ephemeral tokens for plugins.
3 updates
CLIv1.3.0
Added
- Plugin Architecture: Introduced a robust plugin system allowing users to extend CLI functionality. Plugins can now be defined in
redenv.config.jsorredenv.config.tsand are dynamically loaded at runtime. - Enhanced Configuration: Added support for JavaScript/TypeScript configuration files (
.js,.ts,.cjs,.mjs), enabling dynamic configuration and plugin integration.
Changed
- Configuration Strategy: Shifted the primary configuration format from static JSON to dynamic JavaScript/TypeScript files. While
redenv.config.jsonremains supported for backward compatibility, new projects are encouraged to use the script-based formats for greater flexibility.
Corev1.0.3
Added
- Added
createPluginfunction for plugin creation.
Corev1.0.2
Added
- Added Helper functions for configuration loading and plugin validation.
1 update
CLIv1.2.0
Added
syncCommand: Introduced a newredenv synccommand to interactively synchronize variables between any two environments. This powerful command allows for adding, updating, and removing keys to ensure two environments are perfectly aligned.
Changed
- Simplified Configuration: The
productionEnvironmentfield inredenv.config.jsonhas been deprecated and removed. Commands likesyncnow prompt for a destination environment directly, making the workflow more flexible and explicit.
Removed
promoteCommand: Thepromotecommand has been removed and replaced by the more powerful and intuitivesynccommand.
1 update
JS SDKv1.0.6
Fixed
- Fixed
package.jsondependencies.
1 update
CLIv1.1.4
Added
- Interactive Shell: Introduced a new
redenv shellcommand that launches a dedicated interactive REPL for a project environment. This provides a persistent session for running multiple commands without repeatedly entering the Master Password. The shell supports context switching, command history, and access to most Redenv commands.
Changed
- Major Internal Refactoring for Shell Compatibility: Refactored the internal command structure to support the new interactive shell. Commands now operate in a "shell-aware" mode, allowing for seamless context switching (e.g.,
switch env) and more robust error handling within a REPL environment.
5 updates
CLIv1.1.3
Changed
- Removed the
valueargument from theaddcommands. Now it prompts for the value interactively for multiline values.
CLIv1.1.2
Changed
tokencommand now usesrandomBytesfunction's base64 encoding to generate random strings.
Corev1.0.1
Changed
- enhanced
randomBytesfunction to support custom encodings.
JS SDKv1.0.5
Added
- Introduced a dedicated entry point for core utility functions:
@redenv/client/utils. These functions (e.g.,fetchAndDecrypt,setSecret) are now accessible for advanced use cases and building framework-specific clients.
Changed
- Back to 1.0.1 for the latest stable release.
JS SDKv1.0.1
Changed
- load() now returns a Record<string, string> instead of get() and getAll(). so from now on use load() to get secrets.
3 updates
CLIv1.1.1
Changed
- Moved the crypto logic to the
@redenv/corepackage.
Corev1.0.0
Added
- Initial Release: First public version of
@redenv/core. - Cryptographic Primitives:
encrypt: Encrypts data usingAES-256-GCM.decrypt: Decrypts data usingAES-256-GCM.deriveKey: Derives an encryption key from a password usingscrypt.generateSalt: Generates a cryptographically secure random salt. - Secret Writing Utility:
writeSecret: Provides a shared utility for performing the "read-modify-write" cycle for updating a secret's version history in Redis.
JS SDKv1.0.0
Added
- Initial Release: First public release of the
@redenv/client. - Zero-Knowledge Architecture: Implemented a secure client that performs all cryptographic operations locally, ensuring secrets are never exposed to the backend or any intermediaries.
- High-Performance Caching: Integrated an in-memory
stale-while-revalidatecaching strategy usingcachifiedto ensure fast and resilient secret retrieval with minimal impact on application performance. - Dual Access Patterns: Programmatic Access: Provides
.load()which returns aget()andgetAll()accessor for type-safe, explicit secret management. Environment Population: Supports populatingprocess.envfor easy integration with legacy applications. - Write-Back Functionality: Includes a
.set(key, value)method to allow applications with sufficient permissions to add or update secrets dynamically. - Configuration: The client is configurable via constructor options, including project details, environment, and cache settings (
ttl,swr).
2 updates
CLIv1.1.0
Changed
- BREAKING: The core crypto engine has been completely refactored from the Node.js-specific
cryptomodule (usingscrypt) to the universal Web Crypto API (usingPBKDF2). This makes the entire system compatible with all modern JavaScript runtimes, including serverless and edge environments. - All commands have been updated to work with the new asynchronous cryptographic functions.
Fixed
- Resolved a critical TypeScript type conflict between Node.js's
webcrypto.CryptoKeyand the globalCryptoKeytype, ensuring type safety across the project.
CLIv1.0.0
Added
- End-to-End Encryption: Implemented a full zero-knowledge, end-to-end encryption model using a per-project Master Password system. All secrets are encrypted/decrypted locally and are never stored in plaintext.
- Per-Secret Version History: Every change to a secret is now stored in a versioned history, providing a complete audit trail with user and timestamp information.
- Core Commands: Full suite of commands for secret management:
add,edit,view,list,remove. - Project Management Commands: Commands for project lifecycle:
register,drop,switch. - Advanced Workflow Commands: Powerful commands for team and CI/CD workflows:
import,export,clone,diff,promote. - History & Rollback Commands:
history view [key]: View the complete version history of a secret.history limit [value]: Configure the number of versions to keep per secret.rollback <key>: Instantly revert a secret to a previous version. - Security & Safety Commands:
change-password: Securely rotate a project's Master Password.backup&restore: Create and restore fully encrypted backups of your projects.doctor: A diagnostic tool to check your configuration and connectivity. - Application Access Management:
tokencommand suite (create,list,revoke) to manage secure, Service Tokens for applications. - Secure Password Caching: Implemented an optional, secure caching of unlocked project keys into the native OS keychain (
keytar) for a seamless, password-less workflow during a session. - Unit Testing Foundation: Introduced
vitestand created a foundational test suite for the critical crypto and utility modules. - Comprehensive Documentation: Created a detailed architectural
README.mdfor the project root and a practical quick-start guide for the CLI package.
Changed
- Improved
registerCommand: Theregistercommand is now idempotent and intelligently checks for remotely existing projects to prevent accidental overwrites, allowing it to also function as a "connect to existing project" command. - Data Model: Migrated secret storage from a simple key-value model to a versioned JSON structure to support auditing and rollbacks.
- Refactored Write Logic: Centralized all secret-writing logic into a single
writeSecretutility to improve maintainability and consistency.
Fixed
- UI Stability: Resolved multiple bugs where
oraspinner animations would conflict withinquirerprompts, causing display loops and crashes. - Cryptography: Fixed a critical bug in the
decryptfunction's error handling that was masking specific error types. - System Compatibility: Tuned
scryptmemory parameters to ensure compatibility with different environments, including thebunruntime. - Security: Fixed a security flaw where the
change-passwordcommand could incorrectly use a cached keychain entry instead of requiring re-authentication. - Data Parsing: Corrected a recurring
JSON.parseerror in multiple commands by properly handling the auto-parsing behavior of the@upstash/redisclient.
The beginning