A Git-backed CLI developer diary
dvlg is a lightweight, open-source CLI tool that helps developers track daily work, decisions, and progress directly inside a Git repository.
No cloud. No database. No UI. Just structured files + Git history.
Most developers struggle to answer questions like:
- What did I work on last week?
- Why did we make this architectural decision?
- What changed during this sprint?
dvlg solves this by turning your daily work into structured, versioned, searchable logs that live alongside your code.
- 📁 Files, not a database — logs are plain YAML
- 🌱 Git is the storage engine — history, diffs, blame come for free
- ⚡ CLI-first — log work in seconds
- 🔍 Searchable & exportable
- 📴 Works offline
- 🦀 Written in Rust
git clone https://github.com/yourname/dvlg
cd dvlg
cargo install --path .Download from GitHub Releases and place the binary in your PATH.
cd my-project
dvlg initCreates:
.dvlg/
└── 2026/
If dvlg is not initialized, commands like today, list, search, export, and decisions will exit with an error and prompt you to run dvlg init.
dvlg add "Investigated Service Bus retry behavior"This will:
- Append an entry to today’s log
- Capture Git context (repo, branch, commit)
- Optionally auto-commit the log
dvlg todayExample output:
2026-02-09
- Investigated Service Bus retry behavior
- Added exponential backoff to worker
- Updated architecture.yaml
dvlg add "Fixed retry logic in worker"dvlg list --week
dvlg list --monthdvlg search "service bus"If you configured log_repo_path, push its commits:
dvlg pushdvlg is designed to embrace Git, not replace it.
By default:
- Logs are written to
.dvlg/YYYY/MM/DD.yaml - Each entry can auto-commit to Git
- Logs are branch-aware
You get:
- Full history
- Diffs over time
- Blame and attribution
- Easy backups via any Git remote
Generate summaries for standups, reports, or reviews.
dvlg export --week --format markdown
dvlg export --month --format textExample use cases:
- Sprint summaries
- Status updates
- Performance reviews
Log decisions without ceremony:
dvlg add --decision \
"Chose Service Bus over Event Grid due to ordering guarantees"Later:
dvlg decisionsThis gives you decision history without heavyweight ADR processes.
Logs are stored as YAML arrays at:
.dvlg/YYYY/MM/DD.yaml
Each entry has the following required fields:
timestamp(RFC 3339)messagetags(array, can be empty)decision(bool)gitobject:repo,branch,commit
Example entry:
- timestamp: "2026-02-10T09:14:22Z"
message: "Investigated Service Bus retry behavior"
tags: ["service-bus", "retries"]
decision: false
git:
repo: "/home/nhk/projects/order-platform"
branch: "main"
commit: "a1b2c3d"Global config file:
# ~/.config/dvlg/config.yaml
auto_commit: true
default_project: order-platform
editor: vim
log_repo_path: /path/to/dvlg-logs
log_repo_remote: https://github.com/yourname/dvlg-logs.gitUse log_repo_path to store logs (and auto-commit) in a separate Git repo. If omitted, dvlg writes to the current repo. Use log_repo_remote to configure the remote URL used by dvlg push.
Show current config:
dvlg config showSet values:
dvlg config set --log-repo-path /path/to/dvlg-logs
dvlg config set --log-repo-remote https://github.com/yourname/dvlg-logs.git
dvlg config set --auto-commit true- ❌ Not a task manager
- ❌ Not a note-taking app
- ❌ Not a cloud service
- ❌ Not AI-dependent
It’s a developer logbook, optimized for real engineering work.
- Architecture file linking
- Git hook integration
- Weekly summaries
- Optional LLM-based summarization (opt-in)
- Plugin system
If Git disappears tomorrow, dvlg still makes sense. If AI disappears tomorrow, dvlg still works.
The tool is designed to be:
- deterministic
- inspectable
- boring in the best way
MIT
Contributions, ideas, and feedback are welcome. Open an issue or submit a PR.