esenonfossiio6 downloadsDate-tree journal in a single Org file: new entry, calendar, folder tree, tag search and a clean journal look. Requires the Orgmode (cm6) plugin.
Obsidian plugin for a date-tree journal kept in a single Org file. Works
alongside Org Reader,
which provides the .org editor view.
Requires Org Reader. Obsidian can't declare plugin dependencies, so install and enable it yourself (Settings → Community plugins, or with BRAT). Without it Org Journal shows a notice on startup and its commands can't open the journal. Org Reader replaces Orgmode (cm6), so disable that one: only one plugin can handle
.orgfiles. Org Journal opens the journal in Org Reader's editing mode.
File layout (same as the Emacs file+olp+datetree capture template):
* 2026
** 2026-08 August
*** 2026-08-29 Saturday
**** 23:02 Title :tag1:tag2:
Free-form text...
Journal look and calendar:

Tree view:

New entry:

Journal look, close up:

Run from the command palette (Ctrl+P, prefix "Org Journal: "). Assign hotkeys
in Settings → Hotkeys.
| Command | What it does | Ribbon |
|---|---|---|
| New entry | Asks for an optional title and tags, then adds **** HH:MM title :tags: under today's year/month/day headings (created in sorted position if missing) and puts the cursor on the body line. Optionally hides everything except today's path and the new entry; a "Show all entries" button then floats over the view. |
pencil |
| Show all entries | Undoes the hiding done by New entry (same as the floating button). | |
| Open today | Jumps to today's day heading (or says there is none yet). | |
| Open tags | Sidebar tag filter: every tag with its count; click tags to select them and the entries that have all of them are listed below. Click an entry to jump to it. | tags |
| Open calendar | Sidebar month view. Days with entries have a dot (hover for the count); click one to jump to it. | calendar |
| Open tree | Left-sidebar tree like the file explorer: years and months are folders (with entry counts), then days, then entries with their tags. Click a folder to expand/collapse, click an entry to jump to it, double-click a day to jump to its heading. Chronological (oldest first); the current year and month start open. | folder-tree |
| Search entries | Fuzzy search over date, title, tags and body text; Enter jumps to the entry. | |
| Filter entries by tag | Lists tags with counts, then the entries under the chosen tag. |
The journal file (and only that file) gets its own styling: year, month, day and
entry headings in a clear hierarchy, HH:MM as a badge, :tags: as pills (the
colons and alignment padding are hidden unless the cursor is on that line),
leading asterisks hidden (shown again on the line you're editing),
entry text indented under its heading, a readable column width, and the preamble
(#+TITLE / #+STARTUP lines before the first heading) hidden. Turn it off with the Journal look setting.
Colours come from your Obsidian theme (accent colour, text and muted text), so they follow light/dark mode.
journal.org).:tags: on entry headings (default 77, as in Emacs).MIT, see LICENSE.
Source is in src/: core.js (pure date-tree/Org logic, unit-tested),
calendar.js, modals.js, hide.js (CodeMirror line hiding), tree.js (sidebar tree), style.js (journal look decorations; CSS is in styles.css), settings.js and
main.js (the plugin). main.js at the repo root is the esbuild bundle Obsidian
loads; it is generated and gitignored.
npm install
npm test # unit tests for src/core.js
npm run build # bundle src/ -> main.js
npm run dev # rebuild on change
.deploy-target file, or set OBSIDIAN_PLUGIN_DIR:
echo "~/vault/.obsidian/plugins/org-journal" > .deploy-targetnpm run build (or npm run dev, which rebuilds whenever you save a file in
src/) now also copies main.js, manifest.json and styles.css there.Ctrl+Shift+I) to see errors.Don't symlink the checkout into the vault: Syncthing (and some other sync tools) don't follow symlinks, so the plugin would never reach your phone. The deploy target must be a real folder holding only the three built files.
Put logic that doesn't need Obsidian or CodeMirror in src/core.js and cover it
in test/core.test.js; keep the Obsidian-facing code in the other modules thin.
Bump version in manifest.json and package.json, add it to versions.json,
commit, then git tag <version> && git push origin main <version>. The tag must
equal the manifest version (no v prefix); the GitHub workflow builds, tests and
publishes a release with main.js, manifest.json and styles.css.
Copy main.js, manifest.json and styles.css into
<vault>/.obsidian/plugins/org-journal/ and enable it. Set the journal file
path in the plugin settings (default journal.org).