LLM Skills
~/catalog/debugging & maintenance//SKILL

Tauri dotenv working directory

/SKILL

Fix for Tauri app not loading .env file with dotenvy. Use when: (1) Environment

// skill content

--- name: tauri-dotenv-working-directory description: | Fix for Tauri app not loading .env file with dotenvy. Use when: (1) Environment variables return "not set" errors in Tauri commands, (2) dotenvy::fromfilename() fails with relative paths like "../../.env", (3) API keys or config work locally but not in Tauri app, (4) GhostClient::fromenv() or similar fails with missing env vars. The fix is that cargo tauri dev runs with CWD at project root, not at ui/src-tauri, so use ".env" not "../../.env". author: Claude Code version: 1.0.0 date: 2025-01-23 --- # Tauri Dotenvy Working Directory Fix ## Problem When adding dotenvy to a Tauri app to load environment variables, relative paths like ../../.env fail because the working directory during cargo tauri dev is not what you'd expect from the file structure. ## Context / Trigger Conditions Error symptoms: - GHOST_URL not set or similar "env var not set" errors - GhostClient::from_env() or API clients fail to initialize - dotenvy::from_filename("../../.env") returns Err - App works when env vars are exported manually but not via .env Project structure: `` project-root/ ├── .env # Environment file here ├── Cargo.toml ├── crates/ └── ui/ ├── src/ └── src-tauri/ ├── Cargo.toml └── src/ └── main.rs # dotenvy loaded here ` **Assumption (wrong):** Since main.rs is in ui/src-tauri/src/, you might think CWD is ui/src-tauri/ and use ../../.env to reach the project root. **Reality:** When cargo tauri dev runs, the working directory is the **project root**, not ui/src-tauri/. So the path should just be .env. ## Solution Try multiple paths to handle different execution contexts: `rust fn main() { // Load .env file - try multiple locations // When running via cargo tauri dev, CWD is project root // When running the binary directly, CWD varies let env_paths = [ ".env", // Project root (cargo tauri dev) "../../.env", // From ui/src-tauri (if run directly) "../.env", // From ui/ (if run from there) ]; let mut loaded = false; for path in &env_paths { if dotenvy::from_filename(path).is_ok() { eprintln!("Loaded .env from: {}", path); loaded = true; break; } } if !loaded { eprintln!("Warning: Could not load .env file from any location"); } tauri::Builder::default() // ... rest of setup } ` **Cargo.toml dependency:** `toml [dependencies] dotenvy = "0.15" ` ## Verification 1. Add logging to see which path works: `rust eprintln!("Loaded .env from: {}", path); ` 2. Check the Tauri dev output for the message: ` Loaded .env from: .env ` 3. Verify env vars are available: `rust println!("GHOST_URL = {:?}", std::env::var("GHOST_URL")); ` ## Example **Before (fails):** `rust fn main() { // Wrong - assumes CWD is ui/src-tauri if let Err(e) = dotenvy::from_filename("../../.env") { eprintln!("Warning: Could not load .env: {}", e); } // ... } ` **After (works):** `rust fn main() { // Correct - CWD is project root during cargo tauri dev if let Err(e) = dotenvy::from_filename(".env") { eprintln!("Warning: Could not load .env: {}", e); } // ... } `` ## Notes - The working directory behavior is determined by how Tauri's dev command runs cargo - In production builds, the working directory may be different (app installation dir) - For production, consider embedding secrets differently or using a config file - The multi-path approach handles both dev and various execution scenarios - Always log which path was loaded to aid debugging ## Related - Tauri doesn't automatically load .env files - you must add dotenvy yourself - This issue is separate from Tauri IPC (which only works in the webview) - Environment variables set in the shell will override .env file values

// original public source
strataga/claude-setup
/skills/tauri-dotenv-working-directory/SKILL.md
License: License not specified. Review the repository before reusing it.
Independent project, not affiliated with Anthropic. This skill remains the property of its original author.
// install this skill
Paste this command in your terminal at the root of your project:
mkdir -p .claude/commands && curl -o ".claude/commands/SKILL.md" "https://raw.githubusercontent.com/strataga/claude-setup/master/skills/tauri-dotenv-working-directory/SKILL.md"
Then in Claude Code, type /SKILL to activate it.
open_in_newOpen original source
// save
Save available after sign in.
loginSign in to save
// information
Creatorstrataga
Format.md
AccessFree
// similar

Skills Debugging & maintenance

View allarrow_forward