id = "jrnl" name = "jrnl" homepage = "https://jrnl.sh" description = "Collect your thoughts and notes without leaving the command line." # The jrnl mark, the favicon the project's documentation theme carries. icon = "https://raw.githubusercontent.com/jrnl-org/jrnl/develop/docs_theme/img/favicon.svg" executables = ["jrnl"] [dotfiles] # https://jrnl.sh/en/stable/reference-config-file/ — the config file is # "$XDG_CONFIG_HOME/jrnl/jrnl.yaml", "~/.config/jrnl/jrnl.yaml" when the # variable is unset, and "%USERPROFILE%\.config\jrnl\jrnl.yaml" on Windows. # # Both spellings are listed because jrnl is one of the few tools where they are # not the same place: it reads $XDG_CONFIG_HOME on every platform, which is what # [configHome] means, but on Windows [configHome] resolves to %APPDATA% while # jrnl keeps the dotted path under the profile root. Naming only one of the two # would leave either XDG users or Windows users pointed at a file jrnl never # opens; on a default Unix machine they resolve to the same file, which costs # nothing. paths = [ "[configHome]/jrnl/jrnl.yaml", "~/.config/jrnl/jrnl.yaml", ] exclude = [] # The journals themselves are text (or encrypted) files elsewhere on disk, at # whatever path the user chose; this entry names only the config. secret = [] # https://jrnl.sh/en/stable/encryption/ — "when encrypting a journal, jrnl asks # whether you would like to store the password in your system's keychain", and # the config file's `encrypt` key "merely says whether or not your journal is # encrypted". So there is no password in jrnl.yaml and no secret_paths rule to # write. # The same reference page: "journals — Describes each journal used by jrnl. Each # indented key after this key is the name of a journal", and a journal's # `journal` key is the absolute path to the file or folder holding it on this # machine. jrnl also accepts a shorthand where the journal name maps straight to # the path instead of to a block; that form cannot be told apart from a nested # block by key path alone, so only the explicit key is named here. Everything # else in the file — timeformat, tagsymbols, colors, display_format, linewrap, # default_hour — is a preference the user wants everywhere. The journal path is # where the user's own writing sits, which is the one thing they would need # back after rebuilding this machine, so it is kept: backup. [[dotfiles.machine_lines]] file = ["[configHome]/jrnl/jrnl.yaml", "~/.config/jrnl/jrnl.yaml"] match = { key_path = ["journals.*.journal"] } scope = "backup" [commands] format = 1 label = "Write or search journal" description = "Add an entry with the text field, or read entries back in a chosen format. The single-dash date filters (-from, -to, -on) and encryption commands are left out." quality = "ai-draft" parser = { end_of_options = "--", interleave = "permute", long_equals = false, short_attached = false, short_bundles = false } [[commands.source]] id = "ref" kind = "manual" url = "https://jrnl.sh/en/stable/reference-command-line/" revision = "2026-10-27" evidence = """ usage: jrnl [--debug] [--help] [--version] [--list] [--encrypt] [--decrypt] [--import] [-on DATE] [-today-in-history] [-month DATE] [-n [NUMBER]] [-not [TAG]] [--edit] [--delete] [--format TYPE] [--tags] [--short] [--config-override CONFIG_KEY CONFIG_VALUE] [--config-file CONFIG_FILE_PATH] ### --edit Opens the selected entries in your configured editor. ### --delete Interactively deletes selected entries. You'll be asked to confirm deletion of each entry. ### --format TYPE Display selected entries in an alternate format. --file FILENAME Write output to file instead of STDOUT. ### --tags Alias for '--format tags'. Returns a list of all tags and the number of times they occur within the searched entries. ### --short Only shows the date and titles of the searched entries. ### --config-file CONFIG_FILE_PATH Use the config file at CONFIG_FILE_PATH for this command invocation only. ### --debug Prints information useful for troubleshooting while `jrnl` executes. | -n [NUMBER] | Show a maximum of NUMBER entries (note: '-n 3' and '-3' have the same effect) | """ [[commands.field]] id = "text" label = "Entry text or journal name" description = "Words after jrnl are written as a new entry; a leading journal name selects that journal." type = "string" position = 0 multiple = true sources = ["ref"] [[commands.field]] id = "limit" label = "Maximum entries to show" type = "integer" option = ["-n"] sources = ["ref"] [[commands.field]] id = "short" label = "Dates and titles only" type = "boolean" option = ["--short"] sources = ["ref"] [[commands.field]] id = "tags" label = "List tags with counts" type = "boolean" option = ["--tags"] sources = ["ref"] [[commands.field]] id = "format" label = "Output format" description = "Open set; see the jrnl formats page (for example json, markdown, text)." type = "string" option = ["--format"] sources = ["ref"] [[commands.field]] id = "file" label = "Write output to file" type = "path" path = { kind = "file", role = "output" } option = ["--file"] sources = ["ref"] [[commands.field]] id = "edit" label = "Edit in editor" type = "boolean" option = ["--edit"] sources = ["ref"] [[commands.field]] id = "delete" label = "Delete entries (interactive)" type = "boolean" option = ["--delete"] effect = "delete" sources = ["ref"] [[commands.field]] id = "config_file" label = "Config file" type = "path" path = { kind = "file", role = "input" } option = ["--config-file"] sources = ["ref"] [[commands.field]] id = "debug" label = "Debug output" type = "boolean" option = ["--debug"] sources = ["ref"] [[commands.task]] id = "write" label = "Write an entry" fields = ["text"] required = ["text"] [[commands.task]] id = "recent" label = "Show recent entries" fields = ["limit", "short"] required = ["limit"] [[commands.task]] id = "tag_list" label = "List tags" fields = ["tags"] required = ["tags"] set = { tags = [true] } [[commands.group]] id = "basic" label = "Basic" fields = ["text", "limit", "short", "tags", "format", "file"] [[commands.group]] id = "advanced" label = "Advanced" fields = ["edit", "delete", "config_file", "debug"]