Loose Ends

by Jorrit van der Heide
5
4
3
2
1
Score: 50/100

Description

Write notes now and tag them later, with an inbox of the notes still waiting for tags.

Reviews

No reviews yet.

Stats

1
stars
62
downloads
0
forks
10
days
3
days
3
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
0
total issues
0
open issues
0
closed issues
36
commits

Latest Version

3 days ago

Changelog

Changes

  • Recently filed says when a note was filed without Obsidian's bundled moment library, and always in English, like the rest of the inbox block.
  • The README and FAQ now say that a note made any other way, such as with Obsidian's new note button, as a daily note, or with Templater or QuickAdd, gets the unfiled tag too, as long as it's in your notes folder.
  • How releases are built, and how to check the file you installed, is now under "Network and file disclosure" in the README.
  • The install step and the development docs are worded the same way as the other plugins.

README file from

Github

Loose Ends

Write notes now and tag them later, with an inbox of the notes still waiting for tags.

Works well with Tag Along, which shows your tags as a folder tree. See Works well with.

Obsidian Downloads Obsidian Compatibility Desktop and mobile Checks License: EUPL-1.2

The inbox block in a note, listing ten notes that still need tags, with the File note button on the first

You're in a meeting, or halfway through an article, and a thought comes up. Before you can write it down, you have to decide where it goes: which folder, which tags. That's the worst possible moment to decide, because you still have the thought. So either you stop to sort it and lose the thread, or you don't, and the note ends up in a pile that nobody will ever sort.

Loose Ends splits the two. You write the note now, and sort it later. Until you've sorted it, the note carries one tag saying so, and that tag keeps it in front of you. The moment you've given it every tag it needs, the extra tag goes away by itself.

1 Installation

Install Loose Ends in Obsidian: go to Settings → Community plugins → Browse, search for "Loose Ends", then install and enable it. You can also open its page in the plugin directory.

Loose Ends needs Obsidian 1.13 or later, and works on desktop and mobile.

2 Getting started

Loose Ends does nothing until you tell it what a note needs. So:

  1. Say what every note needs. In Settings → Loose Ends → Axes, click Add axis. Type domain in the first field and work, personal in the second. Add a second axis: source, with article, book, meeting. Every note now needs a domain/… tag and a source/… tag.

  2. Name the unfiled tag. Set Unfiled tag to inbox. That's the tag a note carries while it's missing something.

  3. Write a note. Run Add note, type a name, and press Enter. The note opens with the cursor ready, and gets the inbox tag, because it doesn't have a domain or source yet.

  4. See what's waiting. Put this block on a note of your own, like a dashboard:

    ```loose-ends
    ```
    

    It lists every note that's still missing something, newest first.

  5. File it. Click the tag button on a row, or run File note in the note itself. Loose Ends asks Which domain? and Which source?, and once you've answered both, the inbox tag is gone and the note moves to Recently filed.

File note asking which domain the note Book tip from Sam belongs to

3 Safety and quality

Loose Ends only writes two things in a note: the tag you pick when it asks you a question, and the unfiled tag. Every other tag, every other property and every word you wrote stay as they are. It only ever writes in your notes folder, so notes that belong to something else, like a literature folder, are left alone. Section 11 lists exactly what it writes and when.

It doesn't connect to the internet and doesn't run any programs.

Every push is tested, and every release is built in the open with a signed attestation, so you can check that the file you installed is the one that was built. Section 11.4 says how.

Table of contents

4 Documentation

If you want to work on the plugin:

  • Architecture - How the code is layered, and how the unfiled tag is kept up to date without the plugin triggering itself.
  • Filing model - What "filed" means, why values are compared exactly, and what the notes folder is for.
  • Templates - Placeholders, dates in names, prompts, and how a note is matched to its template.
  • Settings - How settings are stored and checked, and what to do when one changes.
  • Development - Setup, tests, checks and releases.

5 Features

5.1 Writing

  • Add note - One prompt for the name and the template, and nothing else.
  • Or any other way - A note made with Obsidian's new note button, as a daily note, or with Templater or QuickAdd gets the unfiled tag too, as long as it's in your notes folder.
  • Templates - Any note in your template folder, with {{title}}, {{date}} and {{cursor}}.
  • Dates in names - A template can put today's date in the note's name, or the date you type.
  • Prompts that stay out of your note - A question under a template's heading is drawn in the note, and never written to the file.

5.2 Filing

  • File note - Asks only what a note is still missing, one question at a time, with your most recent answers first.
  • Set an answer later - One Set command per axis, to change an answer at any time.
  • Right-click - File a note from its menu, in the file explorer or anywhere else Obsidian offers one.
  • Stop halfway - Close a question, and the answers you already gave are kept.

5.3 The inbox

  • Inbox block - A list of every note still missing something, on any note you like, with what each one is missing on hover.
  • One-click filing - File a note straight from its row.
  • Recently filed - The notes you filed in the last seven days.

5.4 Staying honest

  • A tag that can't go stale - The unfiled tag is worked out from the note's own tags every time. Delete it by hand and it comes back; answer the last question and it goes.
  • Exact answers - Only the values you listed count, so a typo or an old tag never quietly passes as filed.
  • Only your notes - Nothing outside your notes folder is ever tagged.

6 How it works

6.1 Axes

An axis is a question every note has to answer, and the answer is a tag. domain asks what a note is about, and accepts domain/work or domain/personal. source asks where it came from, and accepts source/article, source/book or source/meeting. You choose the axes and the answers they accept:

domain   work, personal
source   article, book, meeting

A note that has an answer for every axis is filed. A note that's missing one is unfiled, and gets the tag you named for that, such as inbox.

Only the tags in a note's tags property count as answers. Loose Ends writes them there too.

6.2 The unfiled tag is worked out, not stored

The unfiled tag isn't a record of anything. It's worked out from the note's own tags every time the note changes, and only written so that you can see it, for example as a folder in a tag tree. Your answers are the record.

That's why it can't go stale. Delete the tag by hand, and it comes back. Answer the last question, and it goes. Change the axes, and every note in the notes folder is checked again when you close the settings.

6.3 Values are compared exactly

domain/work/project-x doesn't answer the domain axis, and neither does a bare domain. Only domain/work and domain/personal do, because those are the values you listed. If you want work/project-x as an answer, add it to the list: a value can have a slash in it like any other.

When Loose Ends asks about an axis, the question names any tag under it that isn't one of its values, and picking a value replaces it. Nothing else ever touches it.

This is on purpose, and it's the bug this plugin was written after. Its predecessor accepted anything that started with domain/, so a nested tag passed as an answer while no picker would ever offer it. The only way to make one was typing it by hand, which made the first typo a matter of time, and one that didn't show up until the tag tree came apart.

6.4 The notes folder

The Notes folder does two jobs: it's where Add note makes new notes, and it's the only place Loose Ends ever writes the unfiled tag. Keep it narrow if other plugins own some of your notes, like a folder of literature notes: those will never answer your axes, so without the folder they'd stay unfiled forever.

7 Templates

Add note offers every Markdown file directly in your template folder. On a fresh install, Loose Ends puts a Default template there to start with.

Add note asking for a name and a template, with the templates that add the date to the name marked

Placeholder Becomes
{{title}} The name you typed
{{date}} Today's date, as YYYY-MM-DD
{{date:YYYY-MM}}, {{date:YYYY}} The same date, cut short, so it still sorts
{{cursor}} Where the cursor starts

Case and spaces inside the braces don't matter.

Dates in names. When the title heading has a date in it, like # {{title}} {{date}}, the note's name gets the date too: typing Hanna makes Hanna 2026-09-30. If you type a date yourself, that date is used instead of today's, so Hanna 2026-10-07 stays Hanna 2026-10-07, for a meeting you prepare before the day. A heading dated to the month also takes a typed month: # {{title}} {{date:YYYY-MM}} and Budget 2026-10 make Budget 2026-10.

Prompts. Put an HTML comment right under a heading, and it becomes that heading's prompt:

## Decisions

<!-- What did we agree on, and who does what? -->

Add note leaves the comment out of the note. Instead, the question is shown faintly on the empty line under the heading, until you write something there. Because it only lives in the template, rewording it rewords it in every note, and nothing stays behind under what you wrote.

A note is matched to its template by its headings. A template with no heading besides its title can't be recognised, so its prompts are never shown.

8 Commands

None of the commands has a hotkey, so you can choose your own in Settings → Hotkeys.

  • Loose Ends: Add note - Asks for a name and a template, and makes the note in your notes folder.
  • Loose Ends: File note - Asks for each answer the open note is still missing.
  • Loose Ends: Set <axis> - Changes one answer on the open note, whether or not it already had one. There's one for each axis, named after it.
  • Loose Ends: Refresh tags - Checks every note in your notes folder against the axes. This also runs by itself when the axes change.

File note and Set are also on the right-click menu of every note in the notes folder: File note while the note is still missing something, and Set always.

9 Settings

Setting Default
Notes folder Whole vault Where Add note makes new notes, and the only folder where Loose Ends adds tags. See The notes folder.
Template folder Templates The templates Add note offers. See Templates.
Remember the last template On Offer the template you picked last first. When it's off, Default comes first, then the rest by name, for when one template is the usual answer.
Unfiled tag Empty The tag written on a note that's still missing an answer, and the name of the inbox block's first group. Leave it empty for no tag.
Axes None What a note has to answer. Each axis is a top-level tag and the values it accepts. The pickers offer your most recent answers first, then the rest in the order you listed them.

Refresh tags is at the bottom of the settings too.

10 Works well with

These plugins are by the same author. Each does one thing, and Loose Ends doesn't need the other, but they fit together nicely.

10.1 Tag Along

Tag Along shows your vault as a folder tree built from your tags. Each axis becomes a tree, like domain and source, and the unfiled tag becomes a folder of everything still waiting.

Set Unfiled tag to inbox, and make inbox an exclusive folder in Tag Along: a new note then shows up in inbox only, and moves to its proper folders the moment you've finished filing it.

Tag Along with the inbox folder at the top, holding the notes that still need tags, and the domain tree below

11 Network and file disclosure

Loose Ends runs entirely on your device. It never connects to the internet and doesn't send anything anywhere.

11.1 What it reads

  • Notes: The tags property of the notes in your notes folder, which it gets from Obsidian's own index of your notes, and the headings of the note you're editing, to show its prompts.
  • Templates: The Markdown files in your template folder, for Add note and the prompts.

11.2 What it changes in your notes

Only in notes in your notes folder, and only these:

  • Answers: The tag you pick when it asks about an axis, in the note's tags property. Any other tag under that axis is replaced.
  • The unfiled tag: Added when a note is missing an answer, and taken off when it isn't.
  • New notes: Add note makes the note you ask for.

When it adds a tag, it keeps the tags list sorted, the way the Linter plugin does, so your next save doesn't show a change nobody made. The tags themselves stay as they are.

11.3 What it stores

  • Starter template: On a fresh install, Default.md in the template folder, unless a file with that name is already there. If you delete it, it isn't written again.
  • Settings: Its own data.json in the plugin folder.
  • Recent picks: The order you last picked templates in, and the answers for each axis, so your usual choice comes first.
  • Filing dates: When each note was filed, for Recently filed.

Recent picks and filing dates are habits rather than settings, so they're kept in Obsidian's local storage for this vault, and don't sync to your other devices.

11.4 How releases are built

Every push is built, linted with ESLint and the official Obsidian ESLint plugin, and tested with Vitest on Node 20, 22 and 24. Releases are built by GitHub Actions from the tagged source, with every action pinned to an exact version, and come with a signed build provenance attestation, so you can check that the file you installed is the one that was built:

gh attestation verify main.js --repo jorritvanderheide/obsidian-loose-ends

12 Questions or issues?

Have a look at the FAQ first: it covers the most common surprises, like an unfiled tag that keeps coming back. If something still doesn't work, or you have an idea, please open an issue. Found a security problem? Please report it privately, as described in the security policy.

The source lives on Codeberg and is mirrored to GitHub.

13 Support

Loose Ends is free. If you find it useful, you can support its development on Liberapay:

Donate

14 License

Copyright © 2026 Jorrit van der Heide. Licensed under the EUPL-1.2.