All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Environment Secret Storage: Reverted to file-based storage for environment secrets
- Secrets are now stored in
.initiat/environments/<env>/secrets.envfiles - The
activesymlink points to the currently active environment directory - Direnv automatically loads secrets from
.initiat/active/secrets.env - Removed in-memory loading approach that required
evalcommands - Improved reliability and compatibility with direnv integration
- Secrets are stored in plaintext locally (for direnv compatibility) but remain encrypted on Initiat servers
- Files are protected with restrictive permissions (600) and automatically gitignored
- Secrets are now stored in
- Direnv Integration: Fixed environment variable loading with direnv
.envrcnow usesdotenvto load secrets from the active environment'ssecrets.envfile- Environment variables now load automatically when switching environments
- No longer requires manual
evalcommands or shell function wrappers
- Device Management Enhancements: New commands for viewing and managing local device information
initiat device view- View local device details including device ID, name, API environment, and key statusinitiat device set-name <name>- Set or update the device name stored locally- Device name is now stored locally during registration (no API call needed to view it)
- Enhanced Device Unregistration: Improved
initiat device unregistercommand- Now displays device details before unregistering
- Requires user confirmation before clearing credentials
- Helps prevent accidental device unregistration
- Device Name Storage: Device name is now stored locally in the keychain
- Eliminates need for API calls when viewing device information
- Works offline and faster than fetching from server
- Allows backfilling device names for devices registered before this feature
- Test Reliability: Improved storage tests to properly handle keyring operations
- Tests now fail on actual errors instead of skipping
- Better error detection and reporting
- BREAKING: Simplified setup scripts to explicit command-based approach
- Removed declarative action types:
ensure_package_manager,ensure_tool,ensure_runtime,ensure_database,assert_command,assert_http - Setup scripts now use explicit
run:commands similar to GitHub Actions - Commands are now explicit shell commands rather than high-level declarations
- Significantly reduced codebase complexity and maintenance burden
- Removed declarative action types:
- Setup Scripts Condition DSL: Updated condition syntax to use function calls
- Changed from variable comparison (
os == "macos") to function calls (os("macos")) - Added
cmd_ok()function for checking command availability - Improved condition evaluation with proper function registration
- Fixed YAML parsing for conditions starting with
!by requiring quotes
- Changed from variable comparison (
- Project Initialization: Updated
initiat project initbehavior- Project initialization now creates the project if it does not exist remotely.
- Setup scripts: Added setup script
- Added script to set up InitiatCLI locally
- Setup scripts: Fixed package managers
- Separated package managers into system managers and runtime managers
- System managers install base level system tools, like git
- Runtime managers install versioned language runtimes
- Runtime managers can fall back to using asdf
- Package managers now know how to install themselves
- Setup Scripts System: Complete declarative development environment setup feature
- New
initiat project setupcommand to execute setup scripts from.initiat/setup.yml - New
initiat setup validatecommand to validate setup script syntax and schema - New
initiat setup schemacommand to generate JSON Schema for IDE support - Support for 5 execution phases: bootstrap, provision, setup, verify, and post
- 8 action types:
run,print,ensure_package_manager,ensure_tool,ensure_runtime,ensure_database,assert_command,assert_http - Conditions DSL with OS/arch detection, file existence checks, and command validation
- Matrix gating to restrict execution to specific OS/architecture combinations
- Secret injection from Initiat directly into setup scripts as environment variables
- Cross-platform support (macOS, Linux, Windows) with automatic package manager detection
- Idempotent execution - safe to run multiple times
- Timeout and retry support for all steps
- Comprehensive validation with detailed error messages
- New
- Project Initialization: Updated
initiat project initbehavior- Now requires being inside a git repository to create
.initiatdirectory - Creates
.initiat/config.ymlinstead of.initiatfile - Idempotent operation - skips creation if already initialized
- Remote project key initialization is also idempotent
- Now requires being inside a git repository to create
- Environment Unset Command: New
initiat env unsetcommand to clear active environment- Clears currently active environment and reloads direnv
- Cross-platform support (removes symlinks on Unix, clears file content on Windows)
- Automatic direnv reload after unsetting environment
- Graceful handling when no environment is currently set
- Environment Initialization: Improved
initiat env initcommand with enhanced setup- Automatic direnv hook setup with shell type detection (zsh/bash)
- Interactive shell configuration with user prompts
- Automatic
.envrcfile creation anddirenv allowexecution - Enhanced init completion verification (checks both directory and gitignore setup)
- Environment Sync Validation: Added init completion check to
initiat env sync- Prevents sync operations before proper environment initialization
- Clear error messages guiding users to run
initiat env initfirst
- Gitignore Management: Updated to ignore entire environments folder
- Changed from
.initiat/environments/*/secrets.envto.initiat/environments/ - More comprehensive environment file protection
- Changed from
- Error Message Formatting: Standardized error message capitalization throughout CLI
- All error messages now use lowercase formatting for consistency
- Improved readability and adherence to Go error message conventions
- Environment Management System: New
initiat envcommand suite for local environment managementinitiat env init- Initialize environment management in current projectinitiat env list- List available environments with sync statusinitiat env switch <env>- Switch active environmentinitiat env current- Show currently active environmentinitiat env sync- Sync secrets from remote to local environment
- Local Environment Storage: Secure local environment management
- Environment-specific secret storage in
.initiat/environments/ - Active environment tracking with symlinks (Unix) or files (Windows)
- Automatic
.gitignoremanagement for environment files
- Environment-specific secret storage in
- Direnv Integration: Automatic environment loading with direnv
initiat env initgenerates.envrcfiles for automatic environment loading- Cross-platform direnv detection and installation guidance
- Automatic environment variable loading when entering project directories
- Build Tag Separation: Fixed dev and production builds to use separate storage keys
- Dev builds (
make build-dev) now use isolated storage from production builds - Prevents accidental device unregistration when using dev builds
- Dev builds always point to localhost:4000 regardless of configuration
- Production builds continue to use configured API endpoints
- Dev builds (
- API URL Resolution: Updated all components to use build-tag-aware API URL resolution
- Client, storage, and config commands now respect build tags
- Ensures consistent API endpoint usage across all components
- Local Configuration Structure: Updated local config from
.initiatfile to.initiat/config.ymldirectory structure- Improved scalability for future local configuration options
- Maintains same functionality with better organization
- Project setup now creates
.initiat/config.ymlinstead of.initiat
- Local Configuration Support: New
.initiatfile for project-specific overrides- Create
.initiatfiles in project directories to override global config - Supports organization and project context overrides
- Automatic detection and priority handling (command flags > local config > global config)
- Enhanced project context resolution with local config support
- Create
- Guided Project Setup: New
initiat project setupcommand- Interactive project setup with smart defaults
- Prompts for organization (uses default if configured)
- Auto-detects project name from current directory
- Creates
.initiatfile with project context - Handles remote project existence and key initialization
- Comprehensive error handling and user guidance
- Enhanced Project Management: Improved project initialization workflow
- Better separation of concerns between command logic and business logic
- Comprehensive test coverage for project setup functionality
- Refactored code structure for better maintainability
- Configuration Priority: Updated configuration resolution order
- Command-line flags take highest priority
- Local
.initiatfile takes second priority - Global config defaults take third priority
- Environment variables take lowest priority
- Project Context Resolution: Enhanced to support local configuration
- Improved error messages mentioning
.initiatfile option - Better fallback handling when project context is missing
- Improved error messages mentioning
- Flag Aliases: Updated short flags for better project terminology alignment
-w→-p(for--project)-W→-P(for--project-path)- Updated all documentation and examples to use new flag aliases
- BREAKING: Renamed "workspace" terminology to "project" throughout the CLI
- All commands now use "project" instead of "workspace" for consistency
initiat workspacecommands are nowinitiat projectcommands- Updated all documentation, help text, and examples
- Maintained backwards compatibility for existing encrypted data
- Enhanced Error Handling: Improved error messages for API communication issues
- Better debugging information when API endpoints return non-JSON responses
- More descriptive error messages for authentication and device registration issues
- Configuration Management: New
initiat config resetcommand- Reset configuration to default values
- Clear all stored settings and return to initial state
- Useful for troubleshooting configuration issues
- Interactive Project Selection: When no project is specified, the CLI now intelligently prompts users to select from available projects
- Shows numbered list of available projects for easy selection
- Option to enter custom project path manually
- Graceful fallback when project fetching fails
- Improved user experience with clear guidance and helpful error messages
- Secret Export Functionality: New
initiat secret exportcommand to export secrets to files- Export secrets to
.envfiles with proper formatting - Automatic directory creation for nested paths
- Git integration with automatic
.gitignoremanagement - Overwrite protection with user confirmation prompts
- Export secrets to
- Clipboard Integration: Enhanced secret retrieval with clipboard support
--copyflag to copy secret values directly to clipboard--copy-kvflag to copy secrets in KEY=VALUE format- Cross-platform clipboard support using
golang.design/x/clipboard
- Trigger homebrew publish on release
- BREAKING: Updated CLI command structure for better consistency
initiat device register <name>- Now uses positional argument for device nameinitiat device approve <id>- Now uses positional argument for approval IDinitiat device reject <id>- Now uses positional argument for approval IDinitiat secret get <key>- Now uses positional argument for secret keyinitiat secret delete <key>- Now uses positional argument for secret keyinitiat secret set <key>- Now uses positional argument for secret keyinitiat project init <project-path>- Now uses positional argument for project path
- Updated all documentation to reflect new command structure
- Improved command examples and help text
0.1.0 - 2025-10-03
-
Development build system with
make build-devfor localhost API URL -
GitHub Actions workflow for manual releases
-
Multi-platform binary builds (macOS Intel/ARM, Linux AMD64/ARM64, Windows)
-
SHA256 checksums for release verification
-
Comprehensive release documentation
-
Initial CLI implementation
-
Authentication system with email/password login
-
Device registration and management
-
Project initialization and key management
-
Secret management (set, get, list, delete)
-
Configuration management with YAML config files
-
Cross-platform support (macOS, Linux, Windows)
-
Comprehensive test suite
-
Documentation and examples
- Ed25519 signing keys for device authentication
- X25519 encryption keys for secret encryption
- Secure key storage using OS keychain/credential store
- Project key wrapping for secret access control