Read in your language: English · 简体中文 · 日本語 · 繁體中文
| List View | Calendar View | Editor Gallery |
|---|---|---|
![]() |
![]() |
![]() |
Organize Markdown files by calendar and create a journal-style view. List, calendar, On This Day, journal image layouts — all in one place.
If Objournal helps you, consider supporting me on Ko-fi ☕️
- Calendar View: Browse entries by month with thumbnails in date cells
- List View: Timeline-style list grouped by date (Today, Yesterday, Previous years)
- On This Day: Show entries from the same date in past years
- Journal Cards: Title, date, excerpt, images (1–5+ layout support)
- Stats Bar: Consecutive days, word count, days with entries (hidden by default)
- Journal-style Image Layout (optional, off by default): In Live Preview, images in notes from the default folder use the same layout as journal cards
- Auto-split: Over 5 consecutive images are split into multiple galleries
- Live Update: Add/remove images and layout updates instantly
- Image Delete: Delete button on each image
- Multi-language: English, 简体中文, 日本語, 繁體中文
- Virtualized List: @tanstack/react-virtual for smooth scrolling
- File Watchers: Auto-refresh on create, edit, delete, rename
- Configurable Date Field: "No selection" (creation time) or frontmatter field (
date,Date,created, etc.)
- Install the BRAT plugin
- In BRAT settings, click "Add Beta plugin"
- Enter this plugin’s GitHub repo URL
- Install and enable in Obsidian
Tip: BRAT checks for updates and notifies you of new versions.
- Download
main.js,manifest.json,styles.cssfrom Releases - Put them in
{vault}/.obsidian/plugins/objournal/ - Enable the plugin in Obsidian
cd .obsidian/plugins/objournal
npm install
npm run build- Command:
Ctrl/Cmd + P→ type "Open Objournal" → Enter - First time: You must select a default folder (or "Scan entire Vault") in Settings before opening. If not set, the settings panel will open automatically.
- Click the + button in the top-right to create today’s note with the default template
- Click the calendar/list icon to switch between calendar and list views
| Setting | Description |
|---|---|
| Default Folder | Required before opening. Choose a folder or "Scan entire Vault". Editor image layout applies only to notes in the selected folder. |
| Date Field | "No selection" = use file creation time only; or choose a frontmatter field (date, created, etc.) |
| Template | Template file for new notes. |
| Editor Image Layout | Enable journal-style image layout in Live Preview (off by default). |
| Open Note Mode | New tab / Current tab |
| IndexedDB Storage | View usage and clear cache in Maintenance section. Thumbnail quota: 200 MB, LRU eviction when exceeded. |
- No selection: Use file creation time only.
- Field selected: Read from frontmatter; fallback to file creation time if missing.
| Images | Layout |
|---|---|
| 1 | Single column 2:1 |
| 2 | Left & right 2:1 each |
| 3 | Large left + 2 small right |
| 4 | Large left + 3 small right |
| 5+ | Large left + 4 small right; overflow into multiple galleries |
Editor: Same as home; images beyond 5 split into multiple galleries; delete button on each image.
Home cards use WebP thumbnails for faster scrolling.
When are they generated?
| Your Action | System Behavior |
|---|---|
| Open Objournal | Read existing cache only; no generation |
| Scroll to an image | Show cache if present; otherwise show original, then generate in background |
| Return after new note | New note images generate on demand when shown |
| Edit an image | Treated as new; regenerated on next view |
| Long-unused images | LRU eviction when over quota |
| Clear cache | Remove all thumbnails; regenerate on next view |
Storage Quota & Eviction
- IndexedDB: ~200 MB cap; LRU eviction when over
- Memory: Up to 200 thumbnails; LRU eviction
- View usage and clear in Settings → Maintenance
- Local Only: IndexedDB caches entries and thumbnails locally; nothing is uploaded
- Quota: Thumbnail cache capped at ~200 MB; oldest entries evicted (see 5.3)
- Clear: View usage and clear cache in Settings → Maintenance
- No Network: No requests to external servers
npm install
npm run dev # watch mode
npm run build # production buildStack: React 18, @tanstack/react-virtual, TypeScript, esbuild
MIT License
Questions or feedback? Open an issue on GitHub.


