envex 0.4.1

A modern, cross-platform environment variable manager with TUI and CLI interfaces
envex-0.4.1 is not a library.

envx

License: MIT CI

A powerful and secure environment variable manager for developers, featuring an intuitive Terminal User Interface (TUI) and comprehensive command-line interface.

๐ŸŽฅ Introduction Video

Watch the video

๐Ÿ“ธ Screenshots

๐ŸŒŸ Features

  • ๐Ÿ–ฅ๏ธ Interactive TUI: Beautiful terminal interface for easy environment variable management
  • ๐Ÿ” Smart Search: Fast filtering and searching across all environment variables
  • ๐Ÿ“Š Source Tracking: Distinguish between System, User, Process, Shell, and Application variables
  • ๐Ÿ“ Multi-line Support: Edit complex environment variables with proper multi-line support
  • ๐Ÿ”„ Import/Export: Support for multiple formats (JSON, YAML, TOML, ENV)
  • ๐Ÿ“ธ Snapshots & Profiles Feature Implementation: Save and restore variable states
  • ๐Ÿ“ Project Configuration: Define required variables, defaults, and scripts for consistent team environments
  • ๐Ÿ‘€ Watch Mode & Monitor: Monitor file changes and sync automatically, track environment modifications in real-time
  • โšก Performance: Built with Rust for blazing-fast performance
  • ๐ŸŽจ Cross-platform: Works on Windows, macOS, and Linux

๐Ÿ“ฆ Installation

From Source

git clone https://github.com/yourusername/envx.git
cd envx
cargo install --path crates/envx

Using Cargo

cargo install envex

Pre-built Binaries

Download the latest release for your platform from the releases page.

๐Ÿš€ Quick Start

Launch the TUI

envx tui
# or
envx ui

List all environment variables

envx list

Set a variable

envx set MY_VAR "my value"

Get a variable

envx get MY_VAR

๐Ÿ“– Command Line Usage

Overview

System Environment Variable Manager

Usage: envx.exe <COMMAND>

Commands:
  list     List environment variables
  get      Get a specific environment variable
  set      Set an environment variable
  delete   Delete environment variable(s)
  analyze  Analyze environment variables
  tui      Launch the TUI [aliases: ui]
  path     Manage PATH variable
  export   Export environment variables to a file
  import   Import environment variables from a file
  help     Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version

Core Commands

list - List environment variables

List environment variables

Usage: envx.exe list [OPTIONS]

Options:
  -s, --source <SOURCE>  Filter by source (system, user, process, shell)
  -q, --query <QUERY>    Search query
  -f, --format <FORMAT>  Output format (json, table, simple, compact) [default: table]
      --sort <SORT>      Sort by (name, value, source) [default: name]
      --names-only       Show only variable names
  -l, --limit <LIMIT>    Limit output to N entries
      --stats            Show statistics summary
  -h, --help             Print help
# List all variables
envx list

# List with a pattern
envx list --format table --sort name --query RUST

# List from specific source
envx list --source system
envx list --source user

get - Get a specific variable

Get a specific environment variable

Usage: envx.exe get [OPTIONS] <PATTERN>

Arguments:
  <PATTERN>  Variable name or pattern (supports *, ?, and /regex/) 
  Examples:
    envx get PATH           - exact match
    envx get PATH*          - starts with PATH
    envx get *PATH          - ends with PATH
    envx get *PATH*         - contains PATH
    envx get P?TH           - P followed by any char, then TH
    envx get /^JAVA.*/      - regex pattern

Options:
  -f, --format <FORMAT>  Output format (simple, detailed, json) [default: simple]
  -h, --help             Print help
envx get PATH
envx get MY_CUSTOM_VAR
envx get RUST*

set - Set an environment variable

Set an environment variable

Usage: envx.exe set [OPTIONS] <NAME> <VALUE>

Arguments:
  <NAME>   Variable name
  <VALUE>  Variable value

Options:
  -p, --permanent  Make change permanent
  -h, --help       Print help
# Set for current session
envx set MY_VAR "value"

# Set persistently (survives reboot)
envx set MY_VAR "value" --permanent

delete - Remove an environment variable

Delete environment variable(s)

Usage: envx.exe delete [OPTIONS] <PATTERN>

Arguments:
  <PATTERN>  Variable name or pattern

Options:
  -f, --force  Force deletion without confirmation
  -h, --help   Print help
envx delete MY_VAR
envx delete TEMP_VAR
envx delete /JAVA.*/

analyze - Analyze environment variables

Analyze environment variables

Usage: envx.exe analyze [OPTIONS]

Options:
  -a, --analysis-type <ANALYSIS_TYPE>  Type of analysis (duplicates, invalid) [default: all]
  -h, --help                           Print help
envx analyze --analysis-type duplicates
envx analyze --analysis-type invalid

path - Manage PATH variable

Manage PATH variable

Usage: envx.exe path [OPTIONS] [COMMAND]

Commands:
  add     Add a directory to PATH
  remove  Remove a directory from PATH
  clean   Clean invalid/non-existent entries from PATH
  dedupe  Remove duplicate entries from PATH
  check   Check PATH for issues
  list    Show PATH entries in order
  move    Move a PATH entry to a different position
  help    Print this message or the help of the given subcommand(s)

Options:
  -c, --check      Check if all paths exist
  -v, --var <VAR>  Target PATH variable (PATH, Path, or custom like PYTHONPATH) [default: PATH]
  -p, --permanent  Apply changes permanently
  -h, --help       Print help

Import/Export Commands

export - Export variables to a file

Export environment variables to a file

Usage: envx.exe export [OPTIONS] <FILE>

Arguments:
  <FILE>  Output file path

Options:
  -v, --vars <VARS>      Variable names or patterns to export (exports all if not specified)
  -f, --format <FORMAT>  Export format (auto-detect from extension, or: env, json, yaml, txt)
  -s, --source <SOURCE>  Include only specific sources (system, user, process, shell)
  -m, --metadata         Include metadata (source, modified time)
      --force            Overwrite existing file without confirmation
  -h, --help             Print help
envx export --vars RUST* .env
envx export variables.json --format json --source user
envx export variables.yaml --format yaml --source system
envx export variables.toml --format toml --source process
envx export .env --format env --source shell

import - Import variables from a file

Import environment variables from a file

Usage: envx.exe import [OPTIONS] <FILE>

Arguments:
  <FILE>  Input file path

Options:
  -v, --vars <VARS>      Variable names or patterns to import (imports all if not specified)
  -f, --format <FORMAT>  Import format (auto-detect from extension, or: env, json, yaml, txt)
  -p, --permanent        Make imported variables permanent
      --prefix <PREFIX>  Prefix to add to all imported variable names
      --overwrite        Overwrite existing variables without confirmation
  -n, --dry-run          Dry run - show what would be imported without making changes
  -h, --help             Print help
# Import from JSON
envx import variables.json

# Import from YAML
envx import variables.yaml --format yaml

# Import from .env file
envx import .env --format env

profiles - Manage environment profiles

Manage environment profiles

Usage: envx.exe profile <COMMAND>

Commands:
  create  Create a new profile
  list    List all profiles
  show    Show current or specific profile
  switch  Switch to a profile
  add     Add a variable to a profile
  remove  Remove a variable from a profile
  delete  Delete a profile
  export  Export a profile
  import  Import a profile
  apply   Apply a profile to current environment
  help    Print this message or the help of the given subcommand(s)

Options:
  -h, --help  Print help
envx profile create dev
envx profile add dev NODE_ENV development
envx profile switch dev --apply

envx profile export dev > dev-profile.json

snapshots - Manage environment snapshots

Manage environment snapshots

Usage: envx.exe snapshot <COMMAND>

Commands:
  create   Create a new snapshot
  list     List all snapshots
  show     Show details of a snapshot
  restore  Restore from a snapshot
  delete   Delete a snapshot
  diff     Compare two snapshots
  help     Print this message or the help of the given subcommand(s)

Options:
  -h, --help  Print help
# Create a snapshot before deployment
envx snapshot create "pre-deployment-v1.2"

# Restore if something goes wrong
envx snapshot restore "pre-deployment-v1.2"

# Compare snapshots
envx snapshot diff "pre-deployment-v1.2" "current"

project - Manage project-specific configuration

Manage project-specific configuration

Usage: envx.exe project <COMMAND>

Commands:
  init     Initialize a new project configuration
  apply    Apply project configuration
  check    Validate project configuration
  edit     Edit project configuration
  info     Show project information
  run      Run a project script
  require  Add a required variable
  help     Print this message or the help of the given subcommand(s)

Options:
  -h, --help  Print help
Usage Example
# Initialize a new project
cd my-project
envx init --name "My Web App"

# Add required variables
envx project require DATABASE_URL --description "PostgreSQL connection" --pattern "^postgresql://.*"
envx project require API_KEY --description "API authentication key"

# Edit configuration
envx project edit

# Check if all required variables are set
envx project check

# Apply configuration
envx project apply

# Run a project script
envx project run dev
Example Configuration File

Here's what a typical .envx/config.yaml would look like:

name: my-web-app
description: Production web application

# Required environment variables
required:
  - name: DATABASE_URL
    description: PostgreSQL connection string
    pattern: "^postgresql://.*"
    example: "postgresql://user:pass@localhost/dbname"
  
  - name: API_KEY
    description: External API authentication key
    
  - name: PORT
    description: Server port number
    pattern: "^[0-9]+$"
    example: "3000"

# Default values (if not already set)
defaults:
  NODE_ENV: development
  LOG_LEVEL: info
  PORT: "3000"

# Files to auto-load (in order)
auto_load:
  - .env
  - .env.local
  - .env.${NODE_ENV}

# Profile to activate
profile: dev

# Scripts for common tasks
scripts:
  dev:
    description: Start development server
    run: npm run dev
    env:
      NODE_ENV: development
      DEBUG: "true"
  
  test:
    description: Run tests
    run: npm test
    env:
      NODE_ENV: test
  
  migrate:
    description: Run database migrations
    run: npm run migrate

# Validation rules
validation:
  warn_unused: true
  strict_names: true
  patterns:
    "*_URL": "^https?://.*"
    "*_PORT": "^[0-9]{1,5}$"
# Create a snapshot before deployment
envx snapshot create "pre-deployment-v1.2"

# Restore if something goes wrong
envx snapshot restore "pre-deployment-v1.2"

# Compare snapshots
envx snapshot diff "pre-deployment-v1.2" "current"

rename - Rename environment variables (supports wildcards)

Rename environment variables (supports wildcards)

Usage: envx.exe rename [OPTIONS] <PATTERN> <REPLACEMENT>

Arguments:
  <PATTERN>      Pattern to match (supports wildcards with *)
  <REPLACEMENT>  New name or pattern

Options:
      --dry-run  Dry run - show what would be renamed without making changes
  -h, --help     Print help
Example Usage
# Rename single variable
envx rename MY_API MY_API2

# Rename with wildcards
envx rename APP_* MY_APP_*
envx rename *_OLD *_NEW
envx rename TEST_* PROD_*

# Dry run to preview changes
envx rename APP_* MY_APP_* --dry-run

replace - Replace environment variable values

Replace environment variable values

Usage: envx.exe replace [OPTIONS] <PATTERN> <VALUE>

Arguments:
  <PATTERN>  Variable name or pattern (supports wildcards with *)
  <VALUE>    New value to set

Options:
      --dry-run  Dry run - show what would be replaced without making changes
  -h, --help     Print help
Example Usage
envx replace MY_VAR "new value"
envx replace API_* REDACTED

find-replace - Find and replace text within environment variable values

Find and replace text within environment variable values

Usage: envx.exe find-replace [OPTIONS] <SEARCH> <REPLACEMENT>

Arguments:
  <SEARCH>       Text to search for in values
  <REPLACEMENT>  Text to replace with

Options:
  -p, --pattern <PATTERN>  Only search in variables matching this pattern (supports wildcards)
      --dry-run            Dry run - show what would be replaced without making changes
  -h, --help               Print help
Example Usage
# Find and replace text within values
envx find-replace localhost production.server.com
envx find-replace "C:\old\path" "C:\new\path" --pattern "*_PATH"

# Preview changes
envx find-replace localhost prod.com --dry-run

watch - Watch files for changes and auto-sync

Watch files for changes and auto-sync

Usage: envx.exe watch [OPTIONS] [PATH]...

Arguments:
  [PATH]...
          Files or directories to watch (defaults to current directory)

Options:
  -d, --direction <DIRECTION>
          Sync direction

          Possible values:
          - file-to-system: Sync from files to system (default)
          - system-to-file: Sync from system to files
          - bidirectional:  Bidirectional synchronization

          [default: file-to-system]

  -o, --output <OUTPUT>
          Output file for system-to-file sync

  -p, --pattern <PATTERN>
          File patterns to watch

      --debounce <DEBOUNCE>
          Debounce duration in milliseconds

          [default: 300]

  -l, --log <LOG>
          Log changes to file

  -v, --vars <VARS>
          Variables to sync (sync all if not specified)

  -q, --quiet
          Quiet mode - less output

  -h, --help
          Print help (see a summary with '-h')
Example Usage
# Watch .env file and apply changes to system
envx watch .env

# Watch and sync system changes back to file
envx watch --direction system-to-file --output backup.env

# Bidirectional sync
envx watch --direction bidirectional .env

# Watch multiple files with patterns
envx watch --pattern "*.env" --pattern "config/*.yaml"

# Watch with custom settings
envx watch .env --debounce 500ms --log changes.log

monitor - Monitor environment variable changes (read-only)

Monitor environment variable changes (read-only)

Usage: envx.exe monitor [OPTIONS] [VARIABLE]...

Arguments:
  [VARIABLE]...
          Variables to monitor (monitor all if not specified)

Options:
  -l, --log <LOG>
          Log file path

      --changes-only
          Show only changes (hide unchanged variables)

  -s, --source <SOURCE>
          Filter by source

          [possible values: system, user, process, shell]

  -f, --format <FORMAT>
          Output format

          Possible values:
          - live:       Live terminal output
          - compact:    Compact output
          - json-lines: JSON lines format

          [default: live]

      --interval <INTERVAL>
          Check interval in seconds

          [default: 2]

      --show-initial
          Show initial state

      --export-report <EXPORT_REPORT>
          Export report on exit

  -h, --help
          Print help (see a summary with '-h')
Example Usage
# Monitor all environment variables
envx monitor

# Monitor specific variables
envx monitor PATH JAVA_HOME NODE_ENV

# Show only changes (hide static vars)
envx monitor --changes-only

# Monitor with logging
envx monitor --log audit.log

# Monitor variables from specific source
envx monitor --source system

๐ŸŽฎ TUI Keyboard Shortcuts

Normal Mode

  • โ†‘/โ†“ or j/k - Navigate up/down
  • PageUp/PageDown - Navigate by page
  • Home/End - Jump to first/last item
  • Enter or v - View variable details
  • / - Enter search mode
  • a - Add new variable
  • e - Edit selected variable
  • d - Delete selected variable
  • r - Refresh list
  • q - Quit

Search Mode

  • Esc - Cancel search
  • Enter - Apply search

Edit Mode

  • Tab - Switch between name and value fields
  • Ctrl+Enter - Save changes
  • Esc - Cancel editing

๐Ÿ”ง Configuration

envx stores its configuration in platform-specific locations:

  • Windows: %APPDATA%\envx\config.toml
  • macOS: ~/Library/Application Support/envx/config.toml
  • Linux: ~/.config/envx/config.toml

Example Configuration

[general]
default_export_format = "json"
auto_backup = true
history_limit = 100

[ui]
theme = "dark"
highlight_system_vars = true

๐Ÿ—๏ธ Architecture

envx is built with a modular architecture:

  • envx-core: Core functionality for environment variable management
  • envx-cli: Command-line interface implementation
  • envx-tui: Terminal User Interface
  • envx: Main binary that ties everything together

๐Ÿค Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Development Setup

# Clone the repository
git clone https://github.com/yourusername/envx.git
cd envx

# Build the project
cargo build

# Run tests
cargo test

# Run with debug logging
RUST_LOG=debug cargo run -- tui

๐Ÿ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

๐Ÿ“Š Benchmarks

envx is designed for performance:

  • List 1000+ variables: < 10ms
  • Search through variables: < 5ms
  • Import/Export operations: < 50ms for typical workloads

Debug Mode

Run with debug logging enabled:

RUST_LOG=debug envx list

๐Ÿ“ง Contact