Configure multiple Obsidian environments for development, testing, and production.
Use when managing separate vaults, testing plugin versions,
or establishing a proper development workflow with isolated environments.
Trigger with phrases like "obsidian environments", "obsidian dev vault",
"obsidian testing setup", "multiple obsidian vaults".
Configure separate development, testing, and production vaults for Obsidian plugin work. Covers vault templates for team onboarding, environment-specific plugin settings, sync strategies, and .obsidian/ directory management across environments.
Prerequisites
Obsidian desktop app installed
Node.js 18+ and npm/pnpm for plugin builds
Git for version control (recommended)
Basic understanding of symlinks and file system operations
Instructions
Step 1: Create the Environment Structure
Set up three isolated vaults -- dev, test, and prod:
# Base directory for all environments
mkdir -p ~/obsidian-envs/{dev,test,prod}
# Dev vault: your working vault with symlinked plugin source
mkdir -p ~/obsidian-envs/dev/.obsidian/plugins/your-plugin
mkdir -p ~/obsidian-envs/dev/sandbox # scratch notes for testing
# Test vault: clean environment for QA
mkdir -p ~/obsidian-envs/test/.obsidian/plugins/your-plugin
mkdir -p ~/obsidian-envs/test/test-data
# Prod vault: mirrors real user setup
mkdir -p ~/obsidian-envs/prod/.obsidian/plugins/your-plugin
Step 2: Symlink Plugin Source for Development
In the dev vault, symlink your plugin's build output so changes appear immediately:
# Remove the empty plugin directory in dev
rm -rf ~/obsidian-envs/dev/.obsidian/plugins/your-plugin
# Symlink to your plugin's repo (contains manifest.json, main.js, styles.css)
ln -s /path/to/your-plugin ~/obsidian-envs/dev/.obsidian/plugins/your-plugin
Obsidian Sync (best for non-technical teams): Configure in Settings > Sync. Selective sync lets you exclude .obsidian/plugins/ on certain devices to prevent config conflicts.
iCloud/Dropbox (simplest, most fragile): Place the vault inside the sync folder. Avoid editing on multiple devices simultaneously. .obsidian/ conflicts are common -- keep a backup.
Step 6: Managing .obsidian/ Across Environments
The .obsidian/ directory holds all configuration. Key files and their sync behavior:
File
Sync across envs?
Why
app.json
Yes
Core settings should be consistent
appearance.json
Yes
Theme consistency
community-plugins.json
Per-env
Dev may have debug plugins
hotkeys.json
Yes
Muscle memory matters
workspace.json
Never
Layout is per-device
plugins/*/data.json
Per-env
Settings differ by environment
Script to sync safe configs from prod to other environments:
#!/bin/bash
# sync-config.sh -- copy safe configs from prod to dev/test
SAFE_FILES="app.json appearance.json hotkeys.json"
SRC=~/obsidian-envs/prod/.obsidian
for env in dev test; do
DST=~/obsidian-envs/$env/.obsidian
for f in $SAFE_FILES; do
cp "$SRC/$f" "$DST/$f" 2>/dev/null && echo "Synced $f to $env"
done
done
Output
Three isolated vaults (dev/test/prod) with independent plugin configurations
Symlinked plugin source in dev vault with hot reload
Environment detection and config switching in plugin code
Vault template and provisioning script for team onboarding
Sync strategy configured (Git, Obsidian Sync, or cloud)
.obsidian/ management scripts for consistent cross-env config
Solo developer workflow: Dev vault symlinked to plugin repo with hot reload. Test vault gets npm run build output copied in manually for final QA. Prod vault is your daily-driver vault with the released version from BRAT or community plugins.
Team onboarding: Run provision-vault.sh alice editor to create Alice's vault from the team template. She opens it in Obsidian, and all approved plugins with team-standard settings are pre-configured.
CI testing across Obsidian versions: Create a headless test vault with your plugin installed. Use obsidian-cli or Electron automation to open the vault, run plugin commands, and verify output. Repeat for each Obsidian version in your support matrix.