d3vlog 0.2.0

A tiny developer journal that lives in your terminal
d3vlog-0.2.0 is not a library.

Capture what you did, when you did it โ€” without ever leaving the shell.

Contents

Why devlog?

Standups, retros, performance reviews, and "wait, what did I actually ship last Tuesday?" all want the same thing: a timestamped trail of your work. devlog gives you that with two commands and zero ceremony. It is local-first, has no network calls, and keeps everything in a single SQLite file you own.

$ devlog add "Refactored the store layer"
Added item "Refactored the store layer"!

That is the whole ritual. Type the note, hit enter, get back to work.

Features

๐Ÿ““ Frictionless capture One short command โ€” devlog add "โ€ฆ" โ€” and the thought is saved.
๐Ÿ“œ Full history at a glance devlog list replays every entry, oldest to newest.
๐Ÿ—ƒ๏ธ Local-first SQLite Your journal lives in ~/.devlog/entries.sqlite. No cloud, no account.
๐Ÿ†” Time-ordered UUID v7 IDs encode creation time, so entries sort naturally by when they happened.
๐Ÿ•“ Honest timestamps Stored in UTC (RFC 3339) and shown as YYYY-MM-DD HH:MM UTC.
๐Ÿฆ€ One small binary SQLite is bundled at build time โ€” nothing to install alongside it.
๐Ÿ”’ Quiet by design No telemetry, no background process, no network.

Install

From crates.io

cargo install d3vlog

The crate is published as d3vlog, but it installs a binary named devlog.

From source

git clone https://github.com/w3lt/devlog
cd devlog
cargo install --path .

Requirements: a Rust toolchain new enough for the 2024 edition (Rust 1.85+) and a C compiler โ€” rusqlite compiles a bundled copy of SQLite, so you do not need SQLite installed on your system.

Usage

$ devlog --help
A tiny developer journal for the terminal

Usage: devlog <COMMAND>

Commands:
  add   Add a new journal entry
  list  List journal entries
  help  Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version
Command What it does Example
devlog add <message> Append a new entry, stamped with the current UTC time. devlog add "Cut the v0.2 release"
devlog list Print every entry in creation order. devlog list
devlog --version Show the installed version. devlog --version
devlog --help Show help (works on subcommands too). devlog add --help

A typical session

$ devlog add "Ship the new auth flow"
Added item "Ship the new auth flow"!

$ devlog add "Fix flaky test in store.rs"
Added item "Fix flaky test in store.rs"!

$ devlog list
[2026-06-23 09:14 UTC] 0190a1b2 Ship the new auth flow
[2026-06-23 11:02 UTC] 0190a3c4 Fix flaky test in store.rs

Each list line is [<created_at> UTC] <short-id> <message>, where the short id is the first 8 characters of the entry's UUID v7.

How your data is stored

Everything lives in one SQLite database, created on first run:

~/.devlog/entries.sqlite

The schema is a single table:

CREATE TABLE IF NOT EXISTS devlog_entries (
    id          TEXT PRIMARY KEY NOT NULL,
    created_at  TEXT NOT NULL CHECK (datetime(created_at) IS NOT NULL),
    message     TEXT NOT NULL CHECK (length(trim(message)) > 0)
);
Column Type Notes
id TEXT UUID v7 โ€” time-ordered, generated per entry.
created_at TEXT UTC timestamp in RFC 3339; the CHECK rejects anything SQLite can't parse as a datetime.
message TEXT The note. Must be non-empty after trimming whitespace.

Because it is plain SQLite, you can always inspect or back up your journal with ordinary tools:

sqlite3 ~/.devlog/entries.sqlite "SELECT created_at, message FROM devlog_entries;"

Project layout

devlog/
โ”œโ”€โ”€ Cargo.toml          # crate: d3vlog ยท binary: devlog
โ””โ”€โ”€ src/
    โ”œโ”€โ”€ main.rs         # entry point โ€” parse args, dispatch commands
    โ”œโ”€โ”€ cli.rs          # clap definitions for `add` and `list`
    โ”œโ”€โ”€ store.rs        # SQLite connection, schema, reads & writes
    โ”œโ”€โ”€ data.rs         # data module root
    โ””โ”€โ”€ data/
        โ””โ”€โ”€ entry.rs    # DevLogEntry model + display formatting

The dependencies are intentionally few:

  • clap โ€” argument parsing (derive API)
  • rusqlite โ€” SQLite access (bundled)
  • chrono โ€” UTC timestamps
  • uuid โ€” UUID v7 identifiers

Building from source

# Run without installing
cargo run -- add "Trying devlog from a checkout"
cargo run -- list

# Optimized build
cargo build --release   # binary at target/release/devlog

Roadmap

Ideas under consideration โ€” not yet implemented:

  • devlog search <term> โ€” filter entries by text
  • devlog rm / devlog edit โ€” remove or amend entries
  • Date filters (--since, --today, --week)
  • Tags / projects per entry
  • Export to Markdown or JSON
  • A scrollable TUI view

Have a different itch? Open an issue.

Contributing

Issues and pull requests are welcome.

git clone https://github.com/w3lt/devlog
cd devlog
cargo build
cargo run -- list

Please keep changes small and focused, and run cargo fmt and cargo clippy before opening a PR.

License

Licensed under the Apache License, Version 2.0. See LICENSE or https://www.apache.org/licenses/LICENSE-2.0 for the full text.