{"id":45447697,"url":"https://github.com/matipojo/envister","last_synced_at":"2026-02-22T04:06:07.017Z","repository":{"id":334763388,"uuid":"1142674623","full_name":"matipojo/envister","owner":"matipojo","description":"🔐 CLI for managing cloud secrets (GCP, AWS) with smart change detection, conflict resolution, and team collaboration","archived":false,"fork":false,"pushed_at":"2026-01-26T21:11:36.000Z","size":269,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-27T06:06:59.313Z","etag":null,"topics":["dotenv","env","environment-variables","secrets-manager"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/envister","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/matipojo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-26T18:02:19.000Z","updated_at":"2026-01-26T18:18:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"cf1d8f4b-a8f2-4d1f-b578-7800caa47576","html_url":"https://github.com/matipojo/envister","commit_stats":null,"previous_names":["matipojo/envister"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/matipojo/envister","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matipojo%2Fenvister","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matipojo%2Fenvister/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matipojo%2Fenvister/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matipojo%2Fenvister/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/matipojo","download_url":"https://codeload.github.com/matipojo/envister/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matipojo%2Fenvister/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29704420,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T03:17:42.375Z","status":"ssl_error","status_checked_at":"2026-02-22T03:17:31.622Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotenv","env","environment-variables","secrets-manager"],"created_at":"2026-02-22T04:06:06.895Z","updated_at":"2026-02-22T04:06:07.009Z","avatar_url":"https://github.com/matipojo.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/🔐-Envister-blue?style=for-the-badge\" alt=\"Envister Logo\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eEnvister\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eYour Environment Variable Minister\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  A powerful CLI for managing cloud secrets with intelligent change detection, conflict resolution, and team collaboration support.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/envister\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/envister.svg?style=flat-square\" alt=\"npm version\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/matipojo/envister/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/matipojo/envister/ci.yml?branch=main\u0026style=flat-square\" alt=\"CI Status\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/envister\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/envister.svg?style=flat-square\" alt=\"npm downloads\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/matipojo/envister/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/npm/l/envister.svg?style=flat-square\" alt=\"license\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://nodejs.org/\"\u003e\u003cimg src=\"https://img.shields.io/node/v/envister.svg?style=flat-square\" alt=\"node version\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#-quick-start\"\u003eQuick Start\u003c/a\u003e •\n  \u003ca href=\"#-features\"\u003eFeatures\u003c/a\u003e •\n  \u003ca href=\"#-installation\"\u003eInstallation\u003c/a\u003e •\n  \u003ca href=\"#-usage\"\u003eUsage\u003c/a\u003e •\n  \u003ca href=\"#-providers\"\u003eProviders\u003c/a\u003e •\n  \u003ca href=\"#-conflict-resolution\"\u003eConflict Resolution\u003c/a\u003e •\n  \u003ca href=\"#-contributing\"\u003eContributing\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## Why Envister?\n\nManaging environment variables across teams is painful. Secrets get out of sync, changes get overwritten, and there's no easy way to see what changed. Envister solves this by treating your cloud secrets like code—with version tracking, change detection, and merge conflict resolution.\n\n| Without Envister | With Envister |\n|-----------------|---------------|\n| ❌ Manual copy-paste from cloud console | ✅ One command to sync |\n| ❌ No visibility into what changed | ✅ Clear diff before any change |\n| ❌ Overwrites without warning | ✅ Confirmation prompts for safety |\n| ❌ Team conflicts go unnoticed | ✅ Three-way merge with conflict detection |\n| ❌ Switch between cloud UIs | ✅ Unified CLI for GCP \u0026 AWS |\n\n---\n\n## 📖 Table of Contents\n\n- [Quick Start](#-quick-start)\n- [Features](#-features)\n- [Installation](#-installation)\n- [Usage](#-usage)\n  - [Commands](#commands)\n  - [Options](#options)\n  - [Examples](#examples)\n- [Providers](#-providers)\n  - [GCP Secret Manager](#gcp-secret-manager)\n  - [AWS Secrets Manager](#aws-secrets-manager)\n- [How It Works](#-how-it-works)\n- [Configuration](#-configuration)\n- [Conflict Resolution](#-conflict-resolution)\n- [Safety Features](#️-safety-features)\n- [Troubleshooting](#-troubleshooting)\n- [Comparison with Alternatives](#-comparison-with-alternatives)\n- [Roadmap](#-roadmap)\n- [Contributing](#-contributing)\n- [License](#-license)\n\n---\n\n## 🚀 Quick Start\n\n### GCP Secret Manager\n\n```bash\n# 1. Authenticate with Google Cloud\ngcloud auth login\n\n# 2. Pull a secret to your local .env file\nenvister pull my-project my-secret --provider gcp\n\n# 3. Make changes to your .env file, then push\nenvister push\n```\n\n### AWS Secrets Manager\n\n```bash\n# 1. Configure AWS credentials\naws configure\n\n# 2. Pull a secret to your local .env file\nenvister pull my-app my-secret --provider aws --region us-east-1\n\n# 3. Make changes to your .env file, then push\nenvister push\n```\n\n**That's it!** Configuration is saved to `.envister.status.json`. Subsequent commands use your saved settings automatically.\n\n---\n\n## ✨ Features\n\n### Core Capabilities\n\n| Feature | Description |\n|---------|-------------|\n| **🔐 Multi-Cloud Support** | Works with both GCP Secret Manager and AWS Secrets Manager |\n| **📥 Smart Pull** | Downloads secrets with overwrite protection and change preview |\n| **📤 Smart Push** | Uploads with automatic change detection and confirmation |\n| **🔥 Conflict Resolution** | Git-style three-way merge for team collaboration |\n| **📋 Secret Discovery** | List and browse secrets in your projects |\n| **🔍 Change Detection** | Visual diff showing exactly what will change |\n| **⚠️ Safety First** | Always confirms before destructive operations |\n| **🌍 Cross-Platform** | Works on macOS, Linux, and Windows |\n\n### What Sets Envister Apart\n\n- **Version Tracking**: Remembers which version you pulled, enabling conflict detection\n- **Three-Way Merge**: When conflicts occur, shows base, remote, and local versions\n- **Patch Files**: Generates Git-style conflict markers for manual resolution\n- **Native Security**: Uses your existing cloud CLI credentials—no new auth to manage\n\n---\n\n## 📦 Installation\n\n### Using npm (Recommended)\n\n```bash\nnpm install -g envister\n```\n\n### Using npx (No Installation)\n\n```bash\nnpx envister help\n```\n\n### Using yarn\n\n```bash\nyarn global add envister\n```\n\n### Verify Installation\n\n```bash\nenvister --version\nenvister help\n```\n\n### Prerequisites\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eProvider\u003c/th\u003e\n\u003cth\u003eRequirements\u003c/th\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eGCP\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\n\n- [Google Cloud CLI](https://cloud.google.com/sdk/docs/install) installed\n- Authenticated via `gcloud auth login`\n- `Secret Manager Secret Accessor` role (read)\n- `Secret Manager Secret Version Adder` role (write)\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eAWS\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\n\n- [AWS CLI](https://aws.amazon.com/cli/) installed\n- Configured via `aws configure`\n- `secretsmanager:GetSecretValue` permission (read)\n- `secretsmanager:PutSecretValue` permission (write)\n- `secretsmanager:ListSecrets` permission (list)\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n## 📖 Usage\n\n### Commands\n\n| Command | Description | Example |\n|---------|-------------|---------|\n| `envister init` | Interactive setup wizard | `envister init` |\n| `envister pull [secret]` | Download secret to local `.env` file | `envister pull my-secret` |\n| `envister push [secret]` | Upload local `.env` to cloud secret | `envister push my-secret` |\n| `envister list` | List all secrets in project | `envister list` |\n| `envister config` | Show current configuration | `envister config` |\n| `envister help` | Display help information | `envister help` |\n\n### Options\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `--provider \u003cgcp\\|aws\u003e` | Cloud provider to use | From config |\n| `--project \u003cid\u003e` | Project ID (GCP) or app name (AWS) | From config |\n| `--region \u003cname\u003e` | AWS region | `us-east-1` |\n| `--file \u003cpath\u003e` | Target file path | `.env` |\n\n### Examples\n\n#### Basic Workflow\n\n```bash\n# Initialize (first time only)\nenvister init --provider gcp --project my-project\n\n# Pull latest secrets\nenvister pull my-secret\n\n# Edit your .env file locally\n# ...\n\n# Push changes back\nenvister push my-secret\n```\n\n#### Working with Multiple Secrets\n\n```bash\n# Pull different secrets to different files\nenvister pull production-config --file .env.production\nenvister pull staging-config --file .env.staging\nenvister pull development-config --file .env.development\n```\n\n#### Project Override\n\n```bash\n# Use a different project for one command\nenvister pull other-project other-secret\nenvister pull --project other-project other-secret  # Same result\n```\n\n---\n\n## 🌐 Providers\n\n### GCP Secret Manager\n\nEnvister uses the `gcloud` CLI under the hood, inheriting your existing authentication and permissions.\n\n#### Setup\n\n```bash\n# Install Google Cloud CLI\n# https://cloud.google.com/sdk/docs/install\n\n# Authenticate\ngcloud auth login\n\n# Set default project (optional)\ngcloud config set project my-project\n```\n\n#### Required Permissions\n\n| Permission | Required For |\n|------------|--------------|\n| `secretmanager.secrets.list` | `envister list` |\n| `secretmanager.versions.access` | `envister pull` |\n| `secretmanager.versions.add` | `envister push` |\n\n#### Example IAM Role\n\n```bash\n# Grant Secret Manager Secret Accessor role\ngcloud projects add-iam-policy-binding my-project \\\n  --member=\"user:you@example.com\" \\\n  --role=\"roles/secretmanager.secretAccessor\"\n```\n\n### AWS Secrets Manager\n\nEnvister uses the AWS SDK, inheriting credentials from the AWS CLI or environment variables.\n\n#### Setup\n\n```bash\n# Install AWS CLI\n# https://aws.amazon.com/cli/\n\n# Configure credentials\naws configure\n\n# Or use environment variables\nexport AWS_ACCESS_KEY_ID=your-key\nexport AWS_SECRET_ACCESS_KEY=your-secret\nexport AWS_REGION=us-east-1\n```\n\n#### Required Permissions\n\n| Permission | Required For |\n|------------|--------------|\n| `secretsmanager:ListSecrets` | `envister list` |\n| `secretsmanager:GetSecretValue` | `envister pull` |\n| `secretsmanager:PutSecretValue` | `envister push` |\n\n#### Example IAM Policy\n\n```json\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"secretsmanager:ListSecrets\",\n        \"secretsmanager:GetSecretValue\",\n        \"secretsmanager:PutSecretValue\"\n      ],\n      \"Resource\": \"*\"\n    }\n  ]\n}\n```\n\n---\n\n## ⚙️ How It Works\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│                        Envister Workflow                         │\n└─────────────────────────────────────────────────────────────────┘\n\n  ┌──────────┐         ┌──────────────┐         ┌──────────────┐\n  │  Cloud   │         │   Envister   │         │    Local     │\n  │  Secret  │◄───────►│     CLI      │◄───────►│   .env File  │\n  │ Manager  │         │              │         │              │\n  └──────────┘         └──────────────┘         └──────────────┘\n       │                      │                        │\n       │                      ▼                        │\n       │               ┌──────────────┐                │\n       │               │   Version    │                │\n       │               │   Tracker    │                │\n       │               │  (.status)   │                │\n       │               └──────────────┘                │\n       │                      │                        │\n       ▼                      ▼                        ▼\n  ┌─────────────────────────────────────────────────────────────┐\n  │                                                             │\n  │  PULL: Cloud → Compare → Confirm → Write .env + Track       │\n  │                                                             │\n  │  PUSH: .env → Detect Changes → Check Conflicts → Upload     │\n  │                                                             │\n  └─────────────────────────────────────────────────────────────┘\n```\n\n### Pull Flow\n\n1. **Fetch** secret content from cloud provider\n2. **Compare** with existing local file (if any)\n3. **Display** changes as a visual diff\n4. **Confirm** with user before overwriting\n5. **Write** to local file\n6. **Track** version metadata for conflict detection\n\n### Push Flow\n\n1. **Read** local `.env` file\n2. **Fetch** current remote version\n3. **Detect** changes between local and remote\n4. **Check** for conflicts (if version changed since pull)\n5. **Confirm** with user showing exact changes\n6. **Upload** new version\n\n---\n\n## 🔧 Configuration\n\nEnvister stores configuration in `.envister.status.json` in your working directory.\n\n### Configuration File Structure\n\n```json\n{\n  \"provider\": \"gcp\",\n  \"projectId\": \"my-project\",\n  \"secretId\": \"my-secret\",\n  \"lastPull\": {\n    \"timestamp\": \"2024-01-15T10:30:00.000Z\",\n    \"secretVersion\": \"projects/my-project/secrets/my-secret/versions/5\",\n    \"contentHash\": \"abc123...\"\n  }\n}\n```\n\n### Configuration Options\n\n| Field | Description | Required |\n|-------|-------------|----------|\n| `provider` | Cloud provider (`gcp` or `aws`) | Yes |\n| `projectId` | GCP project ID or AWS app identifier | Yes |\n| `secretId` | Name of the secret | No (can be passed as argument) |\n| `region` | AWS region (AWS only) | No (defaults to `us-east-1`) |\n| `lastPull` | Metadata from last pull (auto-managed) | Auto |\n\n### Git Integration\n\nAdd to your `.gitignore`:\n\n```gitignore\n# Envister\n.envister.status.json\n.env\n*.conflict-patch\n```\n\n\u003e **Note**: The status file contains version metadata, not secrets. However, it's recommended to gitignore it to avoid confusion.\n\n---\n\n## 🔥 Conflict Resolution\n\nWhen multiple team members modify the same secret, Envister detects and helps resolve conflicts.\n\n### How Conflict Detection Works\n\n```\nTimeline:\n─────────────────────────────────────────────────────────►\n\n  You pull v3         Alice pushes v4      You try to push\n      │                     │                    │\n      ▼                     ▼                    ▼\n  ┌───────┐            ┌───────┐            ┌───────┐\n  │  v3   │            │  v4   │            │ Your  │\n  │ (base)│            │(remote)│           │changes│\n  └───────┘            └───────┘            └───────┘\n                                                 │\n                                                 ▼\n                                        🔥 CONFLICT DETECTED!\n```\n\n### Three-Way Merge Analysis\n\nWhen a conflict is detected, Envister analyzes all three versions:\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│                    Three-Way Merge Analysis                      │\n├─────────────────────────────────────────────────────────────────┤\n│                                                                 │\n│  BASE (v3)              REMOTE (v4)           LOCAL (yours)     │\n│  ──────────             ────────────          ─────────────     │\n│  API_KEY=abc            API_KEY=abc           API_KEY=abc       │\n│  DB_HOST=old            DB_HOST=new  ◄─────   DB_HOST=mine      │\n│  TIMEOUT=30             TIMEOUT=60   ◄─────   TIMEOUT=30        │\n│                         NEW_VAR=xyz  ◄─────                     │\n│  OLD_VAR=123                                  OLD_VAR=123       │\n│                                                                 │\n├─────────────────────────────────────────────────────────────────┤\n│  ✅ Auto-mergeable:                                             │\n│     + NEW_VAR (added remotely)                                  │\n│     ~ TIMEOUT (modified remotely, no local change)              │\n│     - OLD_VAR (deleted remotely)                                │\n│                                                                 │\n│  ❌ Conflicts:                                                  │\n│     🔥 DB_HOST (both modified differently)                      │\n│                                                                 │\n└─────────────────────────────────────────────────────────────────┘\n```\n\n### Conflict Resolution Workflow\n\n1. **Detection**: Envister alerts you to the conflict\n\n```bash\nenvister push my-secret\n\n# Output:\n# ⚠️  🔥 CONFLICT DETECTED!\n# 📝 The secret has been modified since your last pull.\n#\n# Base version: projects/my-project/secrets/my-secret/versions/3\n# Remote version: projects/my-project/secrets/my-secret/versions/4\n```\n\n2. **Analysis**: Review the three-way merge summary\n\n3. **Patch Generation**: A patch file is created with Git-style markers\n\n```bash\n# Generated: .env.conflict-patch\n\n# Conflict for: DB_HOST\n\u003c\u003c\u003c\u003c\u003c\u003c\u003c LOCAL\nDB_HOST=my-local-value\n||||||| BASE\nDB_HOST=original-value\n=======\nDB_HOST=remote-value\n\u003e\u003e\u003e\u003e\u003e\u003e\u003e REMOTE\n```\n\n4. **Resolution**: Edit the patch file to resolve conflicts\n\n5. **Push**: Upload the resolved configuration\n\n```bash\nenvister push my-secret .env.conflict-patch\n```\n\n---\n\n## 🛡️ Safety Features\n\n### Confirmation Prompts\n\nEvery destructive operation requires confirmation:\n\n```bash\nenvister push my-secret\n\n# 📋 Changes Summary:\n# ==================\n# 🆕 New keys (1):\n#    + NEW_FEATURE_FLAG=enabled\n#\n# 🔄 Updated keys (1):\n#    ~ DATABASE_URL\n#      - postgres://old-host/db\n#      + postgres://new-host/db\n#\n# ❓ Do you want to continue with these changes? (y/N):\n```\n\n### Change Preview\n\nSee exactly what will change before any operation:\n\n```bash\nenvister pull my-secret\n\n# ⚠️  File .env already exists with different content.\n#\n# 📋 Pulling will make the following changes to your local file:\n# ==================\n# 🆕 New keys (2):\n#    + API_KEY=secret_value_123\n#    + ANOTHER_VAR=another_value\n#\n# 🔄 Updated keys (1):\n#    ~ EXISTING_KEY\n#      - old_value\n#      + new_value\n#\n# 🗑️ Deleted keys (1):\n#    - REMOVED_KEY\n```\n\n### Value Protection\n\nSensitive values are truncated in output:\n\n```bash\n# Long values are truncated for safety\nDATABASE_URL=postgres://user:pass@host:5432/...\nAPI_KEY=sk-proj-abc123...\n```\n\n### Native Security Model\n\n\u003e **Important**: Envister does not implement its own authentication or authorization. It uses your existing cloud CLI credentials (`gcloud` for GCP, `aws` for AWS), inheriting their security model, permissions, and audit logging.\n\n---\n\n## 🆘 Troubleshooting\n\n### GCP Issues\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e\"Failed to get access token\"\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# Re-authenticate with Google Cloud\ngcloud auth login\n\n# Also set application default credentials (for SDK)\ngcloud auth application-default login\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e\"Permission denied\" or \"403 Forbidden\"\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# Check your current identity\ngcloud config get-value account\n\n# Verify project access\ngcloud projects describe your-project-id\n\n# Check your IAM roles\ngcloud projects get-iam-policy your-project-id \\\n  --flatten=\"bindings[].members\" \\\n  --filter=\"bindings.members:$(gcloud config get-value account)\"\n\n# Request the necessary role\n# Ask your admin to grant: roles/secretmanager.secretAccessor\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e\"Secret not found\"\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# List all secrets in the project\ngcloud secrets list --project=your-project-id\n\n# Check if the secret exists\ngcloud secrets describe your-secret-id --project=your-project-id\n```\n\n\u003c/details\u003e\n\n### AWS Issues\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e\"Unable to locate credentials\"\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# Configure AWS CLI\naws configure\n\n# Verify credentials are set\naws sts get-caller-identity\n\n# Or use environment variables\nexport AWS_ACCESS_KEY_ID=your-key\nexport AWS_SECRET_ACCESS_KEY=your-secret\nexport AWS_REGION=us-east-1\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e\"Access Denied\" or \"UnauthorizedAccess\"\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# Check your identity\naws sts get-caller-identity\n\n# Verify you have the required permissions\n# Required: secretsmanager:GetSecretValue, secretsmanager:PutSecretValue\n\n# Test with AWS CLI\naws secretsmanager list-secrets --region us-east-1\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e\"Secret not found\" (AWS)\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# List all secrets\naws secretsmanager list-secrets --region us-east-1\n\n# Check specific secret\naws secretsmanager describe-secret --secret-id your-secret-id --region us-east-1\n```\n\n\u003c/details\u003e\n\n### General Issues\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e\"Command not found: envister\"\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# Check if installed\nnpm list -g envister\n\n# Reinstall globally\nnpm install -g envister\n\n# Or use npx\nnpx envister help\n\n# Check npm global bin path\nnpm config get prefix\n# Add {prefix}/bin to your PATH if needed\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eConflict patch file issues\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# If the patch file has syntax errors, ensure you:\n# 1. Removed all lines starting with #\n# 2. Removed all conflict markers (\u003c\u003c\u003c\u003c\u003c\u003c\u003c ======= \u003e\u003e\u003e\u003e\u003e\u003e\u003e)\n# 3. Each line follows KEY=value format\n\n# Validate your file\ncat your-file.env | grep -E '^[A-Z_]+=.+$'\n```\n\n\u003c/details\u003e\n\n---\n\n## 📊 Comparison with Alternatives\n\n| Feature | Envister | dotenv-vault | chamber | Manual |\n|---------|----------|--------------|---------|--------|\n| GCP Support | ✅ | ❌ | ❌ | ✅ |\n| AWS Support | ✅ | ✅ | ✅ | ✅ |\n| Change Detection | ✅ | ❌ | ❌ | ❌ |\n| Conflict Resolution | ✅ | ❌ | ❌ | ❌ |\n| Version Tracking | ✅ | ✅ | ❌ | ❌ |\n| Native Auth | ✅ | ❌ | ✅ | ✅ |\n| No Account Required | ✅ | ❌ | ✅ | ✅ |\n| Team Collaboration | ✅ | ✅ | ❌ | ❌ |\n| Visual Diff | ✅ | ❌ | ❌ | ❌ |\n| Free \u0026 Open Source | ✅ | Freemium | ✅ | ✅ |\n\n---\n\n## 🗺️ Roadmap\n\n### Planned Features\n\n- [ ] **Azure Key Vault support** - Third major cloud provider\n- [ ] **HashiCorp Vault support** - Self-hosted secrets management\n- [ ] **Secret rotation helpers** - Automated rotation workflows\n- [ ] **Team sharing** - Share configurations across team members\n- [ ] **CI/CD integration** - GitHub Actions, GitLab CI templates\n- [ ] **Secret templates** - Generate secrets from templates\n- [ ] **Audit log viewing** - View who changed what and when\n\n### Recently Completed\n\n- [x] AWS Secrets Manager support\n- [x] Three-way merge conflict resolution\n- [x] Version tracking for conflict detection\n- [x] Interactive confirmation prompts\n\nHave a feature request? [Open an issue](https://github.com/matipojo/envister/issues/new?template=feature_request.md)!\n\n---\n\n## 🤝 Contributing\n\nWe welcome contributions! See our [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Quick Start for Contributors\n\n```bash\n# Clone the repository\ngit clone https://github.com/matipojo/envister.git\ncd envister\n\n# Install dependencies\nnpm install\n\n# Run tests\nnpm test\n\n# Build\nnpm run build\n\n# Link for local testing\nnpm link\nenvister help\n```\n\n### Development Commands\n\n| Command | Description |\n|---------|-------------|\n| `npm test` | Run all tests |\n| `npm run test:watch` | Run tests in watch mode |\n| `npm run test:coverage` | Run tests with coverage report |\n| `npm run lint` | Check for linting errors |\n| `npm run lint:fix` | Auto-fix linting errors |\n| `npm run format` | Format code with Prettier |\n| `npm run build` | Compile TypeScript |\n\n---\n\n## 📄 License\n\nMIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n## 🔗 Links\n\n- [npm Package](https://www.npmjs.com/package/envister)\n- [GitHub Repository](https://github.com/matipojo/envister)\n- [Issue Tracker](https://github.com/matipojo/envister/issues)\n- [Contributing Guide](CONTRIBUTING.md)\n\n### Cloud Provider Documentation\n\n- [GCP Secret Manager](https://cloud.google.com/secret-manager/docs)\n- [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/)\n- [Google Cloud CLI](https://cloud.google.com/sdk/docs/install)\n- [AWS CLI](https://aws.amazon.com/cli/)\n\n---\n\n\u003cp align=\"center\"\u003e\n  Made with ❤️ by the \u003ca href=\"https://github.com/matipojo\"\u003eElementor AI Team\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/matipojo/envister/stargazers\"\u003e⭐ Star us on GitHub\u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatipojo%2Fenvister","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatipojo%2Fenvister","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatipojo%2Fenvister/lists"}