Data Location
Treeline follows the local-first philosophy. All your financial data stays on your computer in a single directory. No cloud accounts, no subscriptions, no data harvesting.
The Treeline Directory
Section titled “The Treeline Directory”All Treeline data lives in ~/.treeline/:
~/.treeline/├── treeline.duckdb # Main database (your financial data)├── treeline.duckdb.lock # Lock file for safe concurrent access├── settings.json # App and plugin settings├── imports/ # Watch folder for CSV imports├── backups/ # Database backups├── logs.duckdb # Troubleshooting logs├── logs.duckdb.lock # Lock file for logs database├── plugins/ # Installed plugins└── encryption.json # Encryption metadata (when enabled)Main Database
Section titled “Main Database”Location: ~/.treeline/treeline.duckdb
Your transactions, accounts, and balance snapshots all live in this single DuckDB file. This makes backups simple: copy the file and you have everything.
Lock file: The .duckdb.lock file coordinates access between the desktop app, CLI, and external tools. It uses filesystem advisory locks to prevent corruption from concurrent writes. You can safely delete lock files when Treeline is not running.
WAL files: You may occasionally see a .wal (write-ahead log) file. These are automatically merged into the main database after each write operation and should be short-lived.
Demo mode: When demo mode is enabled (tl demo on), Treeline uses a separate database at ~/.treeline/demo.duckdb. Your real data remains untouched.
Imports Folder
Section titled “Imports Folder”Location: ~/.treeline/imports/
Drop CSV files here for automatic import. Treeline watches this folder and processes new files when the desktop app is running.
After successful import, files are moved to imports/imported/.
imports/├── chase_transactions.csv # Waiting to be processed└── imported/ └── chase_transactions.csv # Successfully importedBackups
Section titled “Backups”Location: ~/.treeline/backups/
Treeline creates backups when requested via CLI or before potentially destructive operations.
# Create a backuptl backup create
# List available backupstl backup list
# Restore from a backup (use the backup name from `tl backup list`)tl backup restore treeline-20260115143022-123456.zipBackup files are ZIP archives named with timestamps: treeline-{timestamp}-{micros}.zip
Recommendation: Periodically copy backups to external storage or a cloud backup service. Backup archives contain the DuckDB database file.
Logs Database
Section titled “Logs Database”Location: ~/.treeline/logs.duckdb
Treeline maintains structured logs for troubleshooting. These logs stay on your computer and are never sent anywhere automatically. If you need help debugging an issue, you can choose to share relevant log entries, but collection is never automatic.
What gets logged:
- Event names (sync started, import completed, etc.)
- Integration names (SimpleFIN, Lunch Flow)
- Sanitized error messages
- Timestamps and durations
What never gets logged:
- Transaction descriptions or amounts
- Account names or numbers
- File paths containing usernames
- Any personally identifiable information
View logs for troubleshooting:
# Show recent log entriestl logs list
# Show only errorstl logs list --errors
# Show log statistics and database pathtl logs statsPlugins Directory
Section titled “Plugins Directory”Location: ~/.treeline/plugins/
Each installed plugin lives in its own subdirectory:
plugins/├── budget/│ ├── manifest.json│ └── dist/│ └── index.js├── goals/│ ├── manifest.json│ └── dist/│ └── index.js└── subscriptions/ ├── manifest.json └── dist/ └── index.jsInstall plugins with tl plugin install or via Settings > Plugins in the desktop app.
Configuration
Section titled “Configuration”Location: ~/.treeline/settings.json
App settings, plugin configurations, and import profiles are stored in settings.json. This file is automatically created when you first configure the app.
Encryption: When database encryption is enabled, encryption metadata is stored in ~/.treeline/encryption.json. The main database file is encrypted at rest. Use tl encrypt and tl decrypt to manage encryption.
Database Maintenance
Section titled “Database Maintenance”Compact the database:
tl compactRemoves deleted data and optimizes storage. Safe to run periodically.
Run health checks:
tl doctorChecks for common issues like orphaned records or corrupted indexes.
Check status:
tl statusShows account count, transaction count, and date range of your data.
External Access
Section titled “External Access”You can query your Treeline data from notebooks, Python scripts, or any DuckDB-compatible tool.
import duckdbconn = duckdb.connect('~/.treeline/treeline.duckdb', read_only=True)df = conn.execute("SELECT * FROM transactions LIMIT 10").df()See Database Schema for table documentation.