Include Directive¶
The include directive imports another ledger file.
Syntax¶
include PATH
Examples¶
Basic Include¶
include accounts.ledger
Relative Path¶
include ./2024/january.ledger
include ../shared/commodities.ledger
Absolute Path¶
include /home/user/finances/accounts.ledger
Home Directory¶
include ~/finances/accounts.ledger
Glob Patterns¶
include 2024/*.ledger
include transactions/**/*.ledger
Path Resolution¶
Paths are resolved relative to the including file:
finances/
├── main.ledger # Contains: include accounts/checking.ledger
├── accounts/
│ └── checking.ledger # Resolved relative to main.ledger
└── 2024/
└── january.ledger
Glob Patterns¶
Single Directory¶
include 2024/*.ledger
.ledger files in 2024/ directory.
Recursive¶
include 2024/**/*.ledger
.ledger files in 2024/ and subdirectories.
Multiple Extensions¶
include data/*.{ledger,dat}
.ledger and .dat files.
Include Order¶
Files are processed in order:
; 1. First, account definitions
include accounts.ledger
; 2. Then, commodity formats
include commodities.ledger
; 3. Finally, transactions
include 2024/*.ledger
Glob matches are sorted alphabetically.
Circular Includes¶
Circular includes are detected and cause an error:
; a.ledger
include b.ledger
; b.ledger
include a.ledger ; ERROR: circular include
File Organization¶
By Year¶
finances/
├── main.ledger
├── 2023/
│ ├── q1.ledger
│ ├── q2.ledger
│ ├── q3.ledger
│ └── q4.ledger
└── 2024/
└── q1.ledger
; main.ledger
include 2023/*.ledger
include 2024/*.ledger
By Category¶
finances/
├── main.ledger
├── accounts.ledger
├── commodities.ledger
├── income/
│ └── salary.ledger
├── expenses/
│ ├── food.ledger
│ └── housing.ledger
└── investments/
└── brokerage.ledger
By Purpose¶
; main.ledger
; Configuration
include config/accounts.ledger
include config/commodities.ledger
include config/payees.ledger
; Automated rules
include rules/auto-categorize.ledger
; Transactions
include transactions/*.ledger
Environment Variables¶
Environment variables can be used:
include $LEDGER_HOME/accounts.ledger
include ${HOME}/finances/main.ledger
Conditional Include¶
Using Ledger's value expressions:
; Include based on conditions (advanced)
include =(format "%s/%s.ledger" (year today) (month today))
Error Handling¶
Missing File¶
include missing.ledger ; ERROR: file not found
Permission Denied¶
include /root/secret.ledger ; ERROR: permission denied
Command Line Include¶
Include from command line:
ledger -f main.ledger -f extra.ledger balance
Best Practices¶
- Use relative paths for portability
- Include configuration first (accounts, commodities)
- Use glob patterns for transaction files
- Organize by date for large journals
- Keep includes at top of main file
Example Structure¶
; main.ledger - Entry point
; === Configuration ===
include config/accounts.ledger
include config/commodities.ledger
include config/payees.ledger
; === Recurring/Automated ===
include rules/auto-postings.ledger
; === Historical Data ===
include archive/2022/*.ledger
include archive/2023/*.ledger
; === Current Year ===
include 2024/*.ledger