Skip to content

Changelog

All notable changes to this project will be documented in this file.

[0.8.0] - 2026-05-17

Added

  • --theme CLI flag overrides the theme setting from the config file. Pass lazyenv --theme=dracula to apply a theme for one run without editing your .lazyenvrc. Unknown theme names produce a warning on stderr.
  • Config validation now rejects malformed [colors] values. Each color must be a hex literal (#RGB, #RGBA, #RRGGBB, #RRGGBBAA) or an ANSI 256 number (0-255). Previously, typos like primary = "blue" silently shipped to lipgloss and rendered as blank.

Fixed

  • parser.Marshal no longer injects a trailing newline that wasn't there. Files saved by scripts or editors that don't end with \n (e.g. echo "X=1" > .env) now round-trip faithfully, removing the spurious one-byte git diff lazyenv used to produce on first save. Files that did have a trailing newline still keep one.
  • parser.WriteFile now fsyncs the temp file before renaming it over the target. Without the sync, a crash between rename and the filesystem journal flush could leave a zero-byte file on ext4 and similar filesystems.
  • --no-theme-bg=false now correctly restores the theme background when the config file already had no-theme-bg = true. The theme + background precedence is now resolved in a single late step after CLI overrides, so any combination of config and CLI flags lands on the expected color.

Changed

  • Source-default version is now "dev" instead of a stale release number. Local go run . / just build binaries print lazyenv version dev (...) so they can't be mistaken for an official release. GoReleaser overrides this via ldflags for tagged builds.
  • CLI-flag warnings (unknown --theme, out-of-range --file-list-width) now surface in the TUI's config-warning alert at startup instead of being written to stderr, which the TUI screen would obscure until exit.
  • --check-config no longer exits with status 1 when no configuration file is found. Lazyenv works fine on defaults, so the absence of a file is now reported on stdout and the process exits 0. Exit 1 is reserved for configs that are present but invalid, so CI pipelines using lazyenv --check-config && work as expected even on repos without a .lazyenvrc.

[0.7.1] - 2026-05-06

Changed

  • Variable grouping: when sort is alphabetical (o), groups are now ordered alphabetically by prefix instead of by file position. The Ungrouped bucket remains pinned last. Pressing o also keeps the cursor on the same var (or same group header) when groups shift. This also affects startup behavior when both sort = "alphabetical" and group = true are set in the config — groups now appear in alphabetical order from the first render.

[0.7.0] - 2026-05-03

Added

  • Variable grouping by prefix in the var list. Toggle with g: variables sharing a prefix (DB_*, REDIS_*, ...) are grouped under collapsible headers (▾ DB (4) / ▸ DB (4)). Variables with a unique prefix or no _ collect under a trailing UNGROUPED header (shown only when at least one named group exists). Press enter or space on any header to collapse/expand it; click a header with the mouse for the same effect. Groups appear in file order; alphabetical sort applies inside each group. Search disables grouping in rendering and restores it on clear. Set group = true in config or pass -g / --group to start with grouping enabled.

Fixed

  • Help screen: aligned n/N and Space/Enter action rows under the actions column.

[0.6.0] - 2026-04-19

Added

  • Session summary on exit: prints a per-file recap of disk-level changes (added/changed/deleted vars, created/deleted/renamed files, duplicates with post-create diff, templates) to stdout when you quit. Silent if nothing changed. Disable with session-summary = false in config or --no-session-summary CLI flag; --read-only forces it off.

[0.5.4] - 2026-04-11

Added

  • Control characters in values (\n, \t, \r) render as width-1 glyphs (, , ) in the variable list and compare view, keeping multiline values on a single row.

Fixed

  • Multiline single-quoted values (KEY='line1\nline2') were truncated at the first line on parse. Compare between two files whose values shared a first line falsely reported equality.
  • Copying a multiline value in compare mode and saving corrupted the target file — the writer emitted raw control bytes for unquoted values, breaking the .env format on re-read.
  • Values containing newlines or tabs broke the variable panel row layout and pushed status indicators off their row.
  • Masked secrets showed replacement character glyphs at narrow column widths because the column truncator sliced mid-UTF-8 sequence.
  • truncate panicked on negative column widths.

[0.5.3] - 2026-04-06

Added

  • Rename variable key inline (E key) with validation and duplicate detection
  • Variable count shown right-aligned in file list panel
  • File and variable counts in panel titles (Files (5), .env (12 vars), filtered 3/12 vars)

Changed

  • Variable panel status bar hints: removed compare/matrix/help (discoverable via ?), added E rename

[0.5.2] - 2026-04-05

Added

  • Create template from selected file (T key) — preserves comments and structure, strips values

Changed

  • File management keys now all uppercase: N (create), C (duplicate), D (delete), R (rename), T (template)

[0.5.1] - 2026-04-05

Added

  • Rename .env files from the TUI (R key in file list)

[0.5.0] - 2026-04-05

Added

  • Create new .env files from the TUI (n key in file list)
  • Duplicate selected file with a new name (C key), preserving comments and formatting
  • Delete files from disk with confirmation (D key), blocks if unsaved changes exist

[0.4.3] - 2026-03-22

Added

  • Homebrew tap for macOS and Linux (brew install lazynop/tap/lazyenv)
  • Scoop bucket for Windows (scoop install lazyenv)
  • AUR package for Arch Linux (yay -S lazyenv-bin)

[0.4.2] - 2026-03-19

Added

  • Secret masking in compare view with Ctrl+S toggle, synced with main view
  • ^S secrets hint in compare view status bar
  • Demo GIF and VHS tape source in README

Fixed

  • Masked values no longer show truncation artifacts (..) in narrow terminals

[0.4.1] - 2026-03-19

Added

  • Configurable secret detection via [secrets] config section with safe_patterns, extra_patterns, and value_heuristic options
  • Shannon entropy-based value heuristic replacing the simple length+alphanumeric check, reducing false positives on hostnames and URLs
  • Built-in detection rules documented in configuration docs

Fixed

  • False positive in secret detection for long hostnames/URLs (e.g. db-prod-ap-03.internal)
  • Diff view not refreshing visually after copy operations due to stale method value in Go value semantics
  • Missing (missing) placeholder in compare view for added/removed keys
  • AddVar not setting IsSecret on newly added variables

Improved

  • Deduplicated missing placeholder computation in diff entry rendering

[0.4.0] - 2026-03-18

Added

  • Interactive theme preview with --themes flag and 56 built-in themes
  • Mouse support: click and scroll wheel handling across all modes
  • Configurable mouse scroll lines via config
  • --no-mouse flag and config option to disable mouse
  • --check-config flag to validate configuration
  • --config flag to specify a custom config file path
  • --file-list-width flag to control file list panel width

Fixed

  • Enforce minimum file-list-width of 20
  • Show sort hint (o) in status bar for all normal mode panels

Improved

  • Truncate long file names in file list panel

[0.3.1] - 2026-03-07

Added

  • Configurable marker colors for variable indicators (new, modified, deleted, duplicate, empty, placeholder)

Fixed

  • Next/prev diff navigation (n/N) not working in compare mode

Improved

  • Split monolithic app.go into focused files for better maintainability

[0.3.0] - 2026-03-07

Added

  • Configuration file support (.lazyenvrc in project root or ~/.config/lazyenv/config.toml)
  • 15 built-in color themes (catppuccin, dracula, gruvbox, nord, tokyo-night, and more)
  • Theme background color support via Bubble Tea v2 View.BackgroundColor
  • --list-themes flag to list available built-in themes
  • --no-theme-bg flag and no-theme-bg config option to disable theme background
  • --show-config flag to display effective configuration
  • -s / --sort flag for sort order (position or alphabetical)
  • Configurable file detection patterns ([files] section in config)
  • Configurable layout dimensions ([layout] section in config)
  • Configurable color overrides ([colors] section in config)
  • Blocking error alert for invalid configuration (e.g. unknown theme)

Fixed

  • Config file search now uses current working directory instead of scan directory
  • ANSI color reset leaking in file list when using styled themes
  • Status bar text now uses theme colors for visibility on all backgrounds
  • Exclude .bak files from env file detection

Improved

  • Centralized configuration constants into dedicated config package
  • Extracted file detection patterns into configurable FileConfig
  • Themes organized in dedicated subpackage with one file per theme

[0.2.0] - 2026-03-01

Added

  • Completeness matrix view for multi-file variable comparison with inline add (m)
  • Yank to clipboard: copy value (y) or KEY=value (Y)
  • Peek original value for modified/new variables (p)
  • Per-variable indicators: modified (*), new (+), deleted (-), duplicate (D), empty (), placeholder ()
  • Combined modified and issue indicators on the same variable

Fixed

  • Preserve GitWarning flag across save, reset, and compare save operations
  • Restore cursor position when exiting compare mode
  • Show save/reset hints in file panel status bar
  • Show matrix hotkey in status bar hints
  • Reset peek state when switching files
  • Set meaningful default version for source builds

Improved

  • Organize imports into stdlib, external, internal groups
  • Rewrite README with updated features, install instructions, and keybindings
  • Update help panel with all current keybindings and indicators

Testing

  • Increase parser test coverage from 82% to 93%
  • Increase TUI test coverage from 44% to 79%

[0.1.4] - 2026-03-01

Added

  • Automatic .bak backup before the first save of each session
  • -B/--no-backup flag to disable backup

[0.1.3] - 2026-03-01

Added

  • Visual warning (!) in file list for .env files not covered by .gitignore
  • -G/--no-git-check flag to disable gitignore check
  • Silent fallback when git is not installed or not in a git repo

Improved

  • Modernize codebase for Go 1.26 (SplitSeq, range over int, etc.)

[0.1.2] - 2026-02-28

Added

  • Reset command (r) in normal mode to discard changes and reload from disk

Fixed

  • Recursive scan (-r) without explicit path now correctly defaults to current directory

Improved

  • Replaced flag with Kong for CLI argument parsing
  • Kong existingdir type for path validation

Testing

  • Test for ScanDir with dot path in recursive mode

[0.1.1] - 2026-02-28

First public release of LazyEnv.

  • Two-panel TUI layout with file list and variable viewer
  • .env file scanner: finds .env, .env.*, *.env patterns
  • Parser with round-trip fidelity (preserves comments, blank lines, quoting, ordering)
  • Secret masking: auto-detects keys like *_PASSWORD, *_TOKEN, *_API_KEY
  • Inline validation: warns on empty values, placeholders, and duplicate keys
  • Side-by-side diff/compare between two env files
  • Inline editing: edit, add, and delete variables
  • Write-back with format preservation
  • Keyboard navigation with vim-style bindings (hjkl)
  • CLI flags: -r (recursive scan), -a (show secrets), -v (version), -h (help)
  • Adaptive light/dark theme via terminal background detection
  • Test suites with testify for parser, model, util, and scanner packages
  • Bubble Tea v2, Lipgloss v2, Bubbles v2
  • GoReleaser for automated multi-platform releases
  • justfile as task runner