sagersmith875 downloadsMobile wikilink pickers for people, groups, and locations with automatic mention tracking in frontmatter.
Mobile Obsidian plugin for fast people, group, and location wikilinks while journaling. Built for the mind-palace vault workflow.
Community listing: This README is published on the Journal Utils plugin page. Edits here update what users see on community.obsidian.md (the directory syncs from the repo).
people: and locations: frontmatter lists on picker insert (deduped, append-only)members: to people: (not the group name)people/{Name}/{Name}.mdMobile-only: commands register on phone/tablet, not desktop.
Journal Utils is listed in the Obsidian Community directory.
Updates: Settings → Community plugins → Check for updates.
In-app search: After a plugin passes review, Obsidian typically indexes it for Browse/search within 24 hours. If it does not appear immediately, wait a day, then search again or use the plugin page link. You can also install via URI: obsidian://show-plugin?id=journal-utils.
Use BRAT to install from GitHub releases before they propagate, or to test unreleased builds:
sagersmith8/obsidian-journal-utilsBRAT pulls manifest.json, main.js, and styles.css from GitHub releases (tag must match manifest.json version).
Release assets include GitHub artifact attestations:
gh attestation verify main.js -R sagersmith8/obsidian-journal-utils
gh attestation verify styles.css -R sagersmith8/obsidian-journal-utils
New plugins are submitted at community.obsidian.md (not the old obsidian-releases PR flow). See CONTRIBUTING.md for development and release details.
| Command | Purpose |
|---|---|
| Insert person link | People, groups, ghosts, create person, convert to group |
| Insert location link | Locations, ghosts, create location |
| Migrate people folder to standard structure | Preview + run people/ consolidation |
When you insert a link via the picker commands, Journal Utils can append deduplicated wikilinks to frontmatter:
people:
- "[[Joy]]"
- "[[Matt]]"
locations:
- "[[Charleston]]"
| Behavior | Detail |
|---|---|
| Trigger | Picker insert only (not manual typing) |
| Scope | Any note where the command runs |
| Groups | Members expand into people:; body still gets [[GroupName]] |
| Ghost link-only | Body link only — no frontmatter |
| Ghost create | Creates profile and updates frontmatter |
| Removal | Append-only — deleting body links does not shrink lists |
| Toggle | Settings → Update people/locations frontmatter on insert (default on) |
| Feedback | Brief toast when list changes; error toast if note YAML is invalid |
Works with Obsidian Properties and Dataview (FLATTEN people, contains(people, [[Joy]]), etc.).
people/{Name}/{Name}.md # person
people/groups/{Name}/{Name}.md # group (members: frontmatter)
locations/{Name}/{Name}.md # location
Templates (created automatically if missing):
people/template.mdpeople/groups/template.mdlocations/template.mdTemplate variables: {{title}}, {{slug}}, {{date}}, {{members}} (groups only).
Journal section headings (Gratitude, Goals, etc.) are blocklisted by default. Tap a ghost to ignore, create a profile, convert to group, or create a location.
Run Migrate people folder once after committing your vault. Review the preview before confirming. Moves flat files like people/Graham.md → people/Graham/Graham.md and merges sub-notes into primary files.
Journal Utils reads and writes notes only in your configured folders (people, people/groups, locations) plus vault-root legacy person notes. It does not enumerate your entire vault.
| Access | Purpose |
|---|---|
| Entity folders | List people, groups, and locations for pickers |
Vault root .md files |
Resolve legacy flat person notes (e.g. Joy.md) |
| Active note | Insert wikilinks and update people: / locations: frontmatter |
metadataCache.unresolvedLinks |
Surface ghost mentions (no full-vault scan) |
| Migration command | Scan only the people folder for notes to consolidate |
All file access stays on your device; nothing is sent to external servers.
See CONTRIBUTING.md for setup, conventions, and how to open a PR.
npm install
npm run dev # watch build
npm run build # production build
npm test # vitest
Desktop mobile emulation (dev console): app.emulateMobile(true) then reload the plugin.
CI runs on every push/PR to main (test + build). Releases are tag-driven — details in CONTRIBUTING.md.
MIT