| name | Dodder Usage |
| description | Guides day-to-day dodder and der operations including creating zettels, querying and filtering objects, checking out working copies, organizing content, syncing with remotes, and managing tags, types, and dormant objects. Activated by requests to create, edit, organize, query, show, checkout, checkin, push, pull, sync, tag, or otherwise operate on dodder repositories.
|
| triggers | ["create a zettel","organize zettels","dodder checkout","dodder push","dodder pull","query dodder","find zettels","sync dodder","tag a zettel","edit a zettel","dodder commands","der","dodder status","dodder show"] |
Dodder Usage
dodder and der
dodder and der are the same tool. der is a shortname alias that behaves
identically. Every command and flag documented here works with either binary.
madder is a separate low-level tool for internal repository operations and is
not covered by this skill.
Creating Content
Create new zettels with dodder new. By default, the command creates one empty
zettel and opens it in the configured editor ($EDITOR or $VISUAL).
dodder new
dodder new -edit=false
dodder new -edit=false file.txt
dodder new -tags project -type md
dodder new -count=5 -edit=false
dodder new -shas
dodder new -organize
dodder new -delete
The -filter flag accepts a script path that transforms each input file into
the standard zettel triple-hyphen format before import.
When creating from files, pass one or more file paths as positional arguments.
Each file becomes a separate zettel with its content as the blob. Combine with
-description, -tags, and -type to set metadata on all created zettels.
Viewing and Querying
Use dodder show to query and display objects. The default output format is
log (one-line summary per object). Query syntax uses positional arguments with
genre, sigil, tag, and type selectors.
dodder show :z
dodder show one/uno
dodder show -format text one/uno
dodder show -format json one/uno
dodder show tag-name:z
dodder show !md:z
dodder show :?z
dodder show :t
dodder show :e
dodder show :z,t
dodder show :r
dodder show -before 2024-01-01 :z
dodder show -after 2024-01-01 :z
dodder show -repo remote-id :z
The -format flag supports log (default, one-line), text (detailed
multi-line), and json (machine-readable).
Use dodder cat for raw blob output, and dodder last to display the most
recently changed objects from the latest inventory list.
Configuration
Repository configuration is not a queryable object. It cannot be selected with
show or any genre filter; a query naming konfig or config errors with
config is no longer an object; use show-config / edit-config. Use the
dedicated commands instead.
dodder show-config
dodder show-config <digest>
dodder show-config -history
dodder edit-config
edit-config opens the bare config TOML in $EDITOR; on save it records the
new state in a repo-local config log. Configuration is repo-local and is not
transferred by push or pull. A clone seeds the new repository's config
from the source.
Editing
Open a zettel for editing in the configured editor with dodder edit. The
-mode flag controls what to edit.
dodder edit one/uno
dodder edit -mode metadata-only one/uno
dodder edit -mode blob-only one/uno
dodder edit -delete one/uno
dodder edit -organize one/uno
After external edits (outside the editor), use dodder checkin to commit
changes back to the store. checkin has two aliases: add and save.
dodder checkin one/uno
dodder checkin -ignore-blob one/uno
dodder checkin -each-blob "cmd" :z
dodder checkin -tags project :z
dodder checkin -type md :z
dodder checkin -delete :z
dodder checkin -organize :z
Checkout and Working Copy
The checkout system syncs objects from the store to the filesystem. Use
dodder checkout to materialize objects as files.
dodder checkout :z
dodder checkout one/uno
dodder checkout -organize :z
dodder checkout :?z
View the current state of checked-out objects with dodder status.
dodder status
dodder status one/uno
Remove checked-out files from the working directory with dodder clean.
dodder clean
dodder clean -force
dodder clean -organize
dodder clean -recognized-blobs
View differences between the store and working copy with dodder diff.
dodder diff
dodder diff one/uno
Organizing
dodder organize opens a text-based bulk editing interface. It generates a
structured text file listing objects, which can be edited to rename, retag,
retype, or reorganize objects. Changes are committed when the editor closes.
dodder organize :z
dodder organize -mode output-only :z
dodder organize -mode commit-directly :z
dodder organize -mode interactive :z
dodder organize -filter script.lua :z
dodder organize tag-name:z
dodder organize !md:z
The organize interface represents objects as a hierarchical text document. Move
lines to change tag assignments, edit descriptions, and retype objects. Deleting
a line from the organize file does not delete the object from the store.
Remote Sync
Dodder supports push/pull synchronization with remote repositories. Remotes are
registered objects within the local store.
Add a remote
dodder remote-add remote:///path/to/repo remote-id
The first argument is the remote URI and the second is the local name. The
-tags and -description flags set metadata on the remote object.
Clone a repository
dodder clone backup remote:///path/to/source
dodder clone .backup remote:///path/to/source
dodder clone -organize backup remote:///path/to/source !md:z
Clone creates a new local repository and pulls all inventory lists from the
remote. Additional query arguments filter what to clone. -organize opens an
editable outline of the matched objects before pulling — delete an entry to
exclude it (not supported over the websocket transport).
Push and pull
dodder push remote-id
dodder pull remote-id
dodder pull-blob-store path config
Push and pull transfer inventory lists and their referenced objects. Both
commands accept query arguments to limit what to transfer.
Workspaces
A workspace is a directory linked to a dodder repository. It provides default
tags, type, and query for operations within that directory.
dodder init-workspace
dodder init-workspace subdir
dodder init-workspace -tags work
dodder init-workspace -type md
dodder init-workspace -query "project:z"
dodder init-workspace -organize -parent /path/to/parent workspace-id
dodder info-workspace
dodder info-workspace query
dodder info-workspace defaults.tags
dodder info-workspace defaults.type
When a workspace exists, checkin, new, and organize automatically apply
the workspace's default tags. show uses the workspace's default query when no
arguments are given. -organize on init-workspace opens an editable outline
of the objects that would be pulled from the parent repo before initializing
(requires -experimental-repo, the default).
Query Syntax
Queries are positional arguments passed to commands like show, checkout,
organize, edit, and checkin. The syntax combines object IDs, genre
selectors, sigils, tag filters, and type filters.
| Syntax | Meaning |
|---|
:z | All zettels (latest) |
:t | All types |
:e | All tags |
:r | All repos |
:b | All inventory lists |
:z,t | Zettels and types |
one/uno | Specific object by ID |
tag-name:z | Zettels with a specific tag |
!md:z | Zettels of a specific type |
:?z | Including dormant/hidden |
Sigil characters modify selection scope:
| Sigil | Character | Scope |
|---|
| Latest | : | Current versions only (default) |
| Hidden | ? | Include dormant objects |
| History | + | Include historical versions |
| External | . | Include checked-out/external objects |
Refer to references/querying.md for the complete query syntax reference with
compound queries, time filtering, and practical examples.
Working Copy vs Store
The .dodder/ directory (or XDG-based equivalent) is the store. It contains all
blobs, inventory lists, indices, and configuration. The filesystem outside
.dodder/ is the working copy.
checkout syncs store to filesystem (read from store, write to working copy).
checkin syncs filesystem to store (read from working copy, write to store).
status shows the relationship between store and working copy.
diff shows differences between the two.
clean removes working copy files.
The store is always the source of truth. The working copy is ephemeral and can be
fully recreated from the store at any time.
Tags and Types
Tags and types are first-class objects in dodder, each with their own IDs and
metadata stored in the repository.
Tags organize and categorize objects, similar to labels. A zettel can carry
any number of tags. Tags are referenced in queries by name (e.g.,
project:z matches all zettels tagged project).
Tag prefixes carry special meaning:
| Prefix | Meaning |
|---|
| (none) | Regular tag |
- | Dependent tag (implicit, derived from parent) |
% | Virtual tag (computed, not stored directly) |
Types define the format of a zettel's blob content, similar to file
extensions. A zettel has at most one type. Types are referenced in queries
with the ! prefix (e.g., !md:z matches all markdown zettels).
A zettel's type is supplied by the repo's default type when you omit one
on new (or checkin). A standard init repo sets a default type (commonly
!md). Workspace repos and clones have no default type, so new and
checkin there require an explicit -type; omitting it errors with
no type given and repo has no default type; pass -type. (Older data may also
be typeless — it displays as a bare ! — and typeless objects break
push/import, so always give a new zettel a type.) Set or change a
workspace's default with init-workspace -type <type>.
Both tags and types can be viewed with dodder show :t (types) and
dodder show :e (tags).
Dormant Objects
Dormant objects are hidden from default queries. Mark objects as dormant to
archive or suppress them without deleting.
dodder dormant-add tag-name
dodder dormant-remove tag-name
dodder dormant-edit
Dormant objects reappear in queries that use the ? sigil:
dodder show :?z
dodder checkout :?z
The dormant index is part of the repository configuration. Use dormant-edit to
directly edit the configuration blob that controls which tags trigger dormancy.
Maintenance
dodder reindex
dodder fsck
dodder fsck -skip-blobs
dodder fsck -skip-probes
dodder repo-fsck
dodder find-missing sha1 sha2
dodder revert one/uno
dodder revert -last
dodder info store-version
dodder info compression-type
dodder info age-encryption
dodder info env
dodder info xdg
dodder deinit
dodder deinit -force
reindex rebuilds the stream index and other derived data structures from the
authoritative inventory lists. Run it after a suspected corruption or after
manual edits to the store.
fsck verifies that every object's metadata, digest, and blob content are
consistent. It reports errors but does not modify data.
Repository Initialization
dodder init my-repo
dodder init .my-repo
dodder init -yin words.txt my-repo
dodder init -yang words.txt my-repo
The required positional is the new repo's location handle; its scope comes
from the spelling. A handle that starts with . (e.g. .my-repo) creates a
.dodder/ directory in the current working directory instead of using XDG
base directories. This is useful for self-contained repositories. (-repo_id
/ DODDER_REPO_ID address an existing repo and are rejected on init /
clone.)
Global Flags
These flags apply to all commands:
| Flag | Purpose |
|---|
-dir-dodder | Override the dodder directory path |
-ignore-workspace | Ignore workspace defaults |
-ignore-hook-errors | Continue despite hook failures |
-hooks | Path to hooks configuration |
-checkout-cache-enabled | Enable checkout caching |
-predictable-zettel-ids | Generate IDs in order (testing) |
-comment | Attach a comment to the inventory list |
-debug | Enable debug output |
-dry-run | Preview changes without applying |
-verbose | Increase output verbosity |
Reference Documents
references/commands.md -- Complete command reference organized by workflow,
with flags and one-line examples.
references/querying.md -- Full query syntax reference with genres, sigils,
filters, compound queries, and practical examples.