Skip to content

Troubleshooting ​

This guide helps you resolve common issues when running TaskTrove.

⚠️ Permission Error ​

Error Message:

Unable to access data directory. Check volume mounts and permissions.

Root Cause ​

TaskTrove cannot access the /app/data directory inside the container, typically due to missing host directory or lacking read/write permissions.

Your data is stored in the mounted data directory (e.g. ./data) on your host system, and mounted to /app/data inside the container.

This file is automatically created when TaskTrove starts successfully, unless the container does not have read/write permissions to the mounted data directory.

Quick Fix ​

Step 1: Create the data directory

bash
mkdir -p ./data

Step 2: Run TaskTrove with proper volume mounting

bash
docker run -p 3000:3000 -v ./data:/app/data -d --restart=always --name tasktrove ghcr.io/dohsimpson/tasktrove

Note the -v flag, which mounts the ./data directory from your host system to the /app/data directory inside the container.

Step 3: Check Permissions If the directory exists but TaskTrove still can't access it:

bash
# Set proper permissions
chmod 755 ./data

# For persistent permission issues, match container user
sudo chown -R 1000:1000 ./data

Verify Setup ​

Check that TaskTrove can access the data directory:

bash
# View container logs
docker logs tasktrove

# Test data directory access
docker exec tasktrove ls -la /app/data
docker exec tasktrove cat /app/data/data.json

🔄 Data Migration Issues ​

TaskTrove automatically detects when your data needs to be migrated to support new features. Here's how to handle migration-related issues:

Migration Prompt Appears on Startup ​

What you'll see:

Data Migration Available
Your data needs to be migrated from version vX.X.X to vY.Y.Y.

Solution ​

  1. Optional but recommended: Manually back up your data first - See our Backup Guide
  2. Click "Migrate Now" to start the automatic migration
  3. The migration will:
    • Create a timestamped backup file (data.json.backup-[timestamp])
    • Convert data structures to support new features
    • Preserve all your existing tasks, projects, and labels

Migration Failed ​

If migration fails, your original data remains unchanged. The system creates an automatic backup before attempting migration, but doesn't automatically restore it. Common causes:

Corrupted data file:

bash
# Check if data.json is valid JSON
docker exec tasktrove cat /app/data/data.json | python -m json.tool

Insufficient permissions:

bash
# Ensure write permissions
chmod 755 ./data
docker exec tasktrove touch /app/data/test.txt

Rollback After Failed Migration ​

If you need to rollback after a failed migration attempt:

bash
# List backup files
docker exec tasktrove ls -la /app/data/*.backup-*

# Restore from a backup (replace timestamp with actual backup file)
docker exec tasktrove cp /app/data/data.json.backup-1234567890 /app/data/data.json

# Restart the container
docker restart tasktrove

Note: After rollback, you'll be running the old data format with the new TaskTrove version. For full compatibility, downgrade TaskTrove to the previous version:

bash
# Stop and remove current container
docker stop tasktrove
docker rm tasktrove

# Run with specific version tag (e.g., v0.2.0)
docker run -p 3000:3000 -v ./data:/app/data -d --restart=always --name tasktrove ghcr.io/dohsimpson/tasktrove:v0.2.0

🔐 Blocked by Authentication Screen After Upgrade ​

What you'll see:

After upgrading to v0.7.0+, you're unable to access TaskTrove and are stuck at the login screen, creating a password fails with error.

Root Cause ​

This happens when you set the AUTH_SECRET environment variable before completing the data migration. The authentication system is enabled, but there's no password configured yet because migration wasn't completed first.

Solution ​

Step 1: Remove the AUTH_SECRET environment variable

bash
# Stop the container
docker stop tasktrove

# Remove the container
docker rm tasktrove

# Restart WITHOUT AUTH_SECRET
docker run -p 3000:3000 -v ./data:/app/data -d --restart=always --name tasktrove ghcr.io/dohsimpson/tasktrove

Step 2: Complete the data migration

  1. Access TaskTrove Web UI without authentication
  2. Follow the migration prompts in the web UI
  3. Wait for migration to complete successfully

Step 3: Add authentication (optional)

Once migration is complete, you can now safely enable password protection:

bash
# Stop the container
docker stop tasktrove
docker rm tasktrove

# Restart WITH AUTH_SECRET
docker run -p 3000:3000 -v ./data:/app/data -e AUTH_SECRET=your-secret-key -d --restart=always --name tasktrove ghcr.io/dohsimpson/tasktrove

See the Installation Guide for details on generating a secure AUTH_SECRET.

Step 4: Create your password

  1. Access TaskTrove at http://localhost:3000
  2. Create your password in the web UI

Prevention ​

When upgrading to v0.7.0+ with password protection, always follow this order:

  1. ✅ Upgrade to v0.7.0+ without AUTH_SECRET
  2. ✅ Complete data migration in web UI
  3. ✅ Set AUTH_SECRET environment variable
  4. ✅ Restart container
  5. ✅ Create password in web UI