README.md

dotman

A command-line tool for managing environment variables securely with password managers. Store, sync, and share environment variables across your team using your preferred secrets provider.

Features

  • Secure Storage – Store environment variables in your password manager vault
  • Bi-directional Sync – Push local changes to vault and pull updates from it
  • Multi-environment Support – Manage dev, staging, production, and custom environments
  • Password Manager Integration – Currently supports 1Password and Bitwarden, with an extensible provider system
  • Load & Run – Load env vars and execute commands in one step

Installation

bash
1npm install -g dotman-cli

Or with your preferred package manager:

bash
1# pnpm
2pnpm add -g dotman-cli
3
4# yarn
5yarn global add dotman-cli
6
7# bun
8bun add -g dotman-cli

Quick Start

1. Initialize a Project

Run the initialization wizard to set up your project with a password manager:

bash
1dotman init

This will:

  • Prompt you to select a storage provider (currenlty 1Password or Bitwarden)
  • Guide you through entering required credentials
  • Create or update your .env file
  • Create a project in your vault to store environment variables

2. Push Environment Variables

Push your local environment variables to the vault:

bash
1# Preview changes first
2dotman push
3
4# Apply changes to vault
5dotman push --apply

3. Pull Environment Variables

Sync environment variables from the vault to your local .env file:

bash
1# Preview changes first
2dotman pull
3
4# Apply changes locally
5dotman pull --apply

4. Run Commands with Loaded Environment

Load environment variables and run a command:

bash
1dotman load -- npm run dev
2dotman load -- node server.js

Commands

dotman init

Initialize a new project with a password manager integration.

bash
1dotman init

The wizard will guide you through:

  • Selecting a storage provider
  • Configuring vault/project settings
  • Setting up authentication tokens

dotman push

Push local environment variables to the vault.

bash
1# Preview what will be pushed
2dotman push
3
4# Push changes (for a specific environment)
5dotman push -e dev --apply

Options:

  • -e, --env <ENV> – Target environment (e.g., dev, stag, prod)
  • -a, --apply – Apply the changes (without this flag, only shows a preview)

dotman pull

Pull environment variables from the vault to local .env file.

bash
1# Preview what will be pulled
2dotman pull
3
4# Pull changes (for a specific environment)
5dotman pull -e prod --apply

Options:

  • -e, --env <ENV> – Target environment
  • -a, --apply – Apply the changes locally

dotman load

Load environment variables from .env files and run a command.

bash
1dotman load -- <command>
2
3# Examples
4dotman load -- npm run dev
5dotman load -- python app.py
6dotman load -e prod -- node server.js

Options:

  • -e, --env <ENV> – Environment to load, default to "master"

dotman env

Manage environments.

dotman env list

List all available environments:

bash
1dotman env list

Output:

1Available Environments:
2 ★ master (.env) (current)
3 • dev
4 • prod
5
63 environments found

dotman env new <name>

Create a new environment:

bash
1dotman env new staging

This creates:

  • A new .env.staging file with placeholders
  • A corresponding project/section in your vault

dotman env use <name>

Switch to a different environment:

bash
1dotman env use production

Provider Setup

1Password

📖 Complete 1Password Setup Guide – Follow this step-by-step guide to set up 1Password Service Accounts.

Bitwarden

📖 Complete Bitwarden Setup Guide – Follow this step-by-step guide to set up Bitwarden Secrets Manager (Cloud or Self-hosted).

Environment Files

dotman uses a simple naming convention:

FileDescription
.envMaster environment with provider config
.env.<name>Any environment name you choose

The part after .env. becomes the environment name. For example:

  • .env → environment name is master
  • .env.dev → environment name is dev
  • .env.staging → environment name is staging
  • .env.production → environment name is production
  • .env.local-test → environment name is local-test

About the Master .env File

The master .env file primarily stores the configuration keys needed to connect to your secrets provider (like OP_SERVICE_ACCOUNT_TOKEN for 1Password or BWS_ACCESS_TOKEN for Bitwarden).

While you can add application-specific variables to the master .env file and they will be loaded alongside your environment-specific variables, it's recommended to create a separate environment (e.g., .env.dev, .env.local) for your application variables. This keeps things cleaner and makes it easier to:

  • Manage different configurations per environment
  • Share environment-specific secrets with your team via the vault
  • Avoid confusion between provider config and app variables

Note: All .env* files should be added to .gitignore and never committed to version control.

Workflow Example

Here's a typical team workflow:

bash
1# Initial setup (one-time)
2dotman init
3
4# Create and switch to development environment
5dotman env new dev
6dotman env use dev
7
8# During development
9dotman pull --apply # Get latest env vars
10dotman load -- npm run dev # Run with loaded env
11
12# Add new variables
13echo "NEW_API_KEY=abc123" >> .env.dev
14dotman push --apply # Share with team
15
16# Setup production (one-time)
17dotman env new prod
18
19# Deploy to production
20dotman env use prod
21dotman pull --apply
22dotman load -- npm start

Security Notes

Note

Credential Security: The configuration variables (like OP_SERVICE_ACCOUNT_TOKEN, BWS_ACCESS_TOKEN, DOTMAN_PROJECT_NAME) stored in your .env file are never pushed to your secret vault. They remain local to your machine only. These credentials are automatically filtered out during dotman push operations.

  • Never commit environment files – Add .env* to your .gitignore to exclude all env files (.env, .env.dev, .env.prod, etc.)
  • Use service accounts – Create dedicated tokens with minimal permissions
  • Rotate tokens regularly – Update your service account tokens periodically
  • The provider tokens (like OP_SERVICE_ACCOUNT_TOKEN) are stored locally in your .env file

Development

bash
1# Install dependencies
2pnpm install
3
4# Run in development
5pnpm dev
6
7# Build
8pnpm build
9
10# Run tests
11pnpm test
12
13# Format code
14pnpm format
15
16# Lint and fix
17pnpm check:write

License

MIT