Skip to content

Metadata

Start a line with $ to attach metadata to a note: tags, a source link, a due date, a priority, and more. Mudlark collects every $ line and shows them together as a block at the top of the rendered pane. On export, the keys it recognizes route to each destination’s native fields.

In the capture bar, typing the prefix and a space shows a faint key=value hint, so the shape is there without you having to remember it.

Two shapes

A metadata line is one of two things. With an = sign it is a key/value pair. Without one it is a free-form note.

$ tags=lisbon, trip a pair: key “tags”, value “lisbon, trip”

$ remember the shipping address no equals sign, so a free-form note kept as written

The first = splits the key from the value, so a value can contain its own = (a URL with a query string stays intact). Both sides are trimmed. If the same key appears twice, the last line wins.

Metadata lines do not form blocks. Each $ stands on its own line, and a doubled $$ is just plain text. Write as many $ lines as you need, anywhere in the note.

Several pairs on one line

One $ line can carry more than one pair. Separate them with semicolons, and each pair behaves as it would on a line of its own, down to the last-one-wins rule for a repeated key.

$ status=active; due=2026-07-30; priority=p1 three pairs, written on one line

A line splits only when every segment is a key=value. If one of them is not, the semicolon belongs to the value and the line stays a single pair, so a semicolon remains usable inside a URL or a sentence.

$ note=first; second one pair, because “second” is not a key/value on its own

Semicolons work the same way inside braces, so one task can carry its own dates: {$ due=friday; priority=p1}.

Reserved keys

Most keys carry meaning beyond a plain row. Mudlark gives the keys below a typed value, a styled chip, and a known slot at each export destination. Key names and aliases are case-insensitive. An alias behaves exactly like its canonical key.

KeyValueWhat it does
tagscomma listNote tags. Render as pills, match in the note browser filter, and flow into export frontmatter or native tag fields.
aliasescomma listAlternate names for the note. Each one is searched alongside the title, so a note titled “Roadmap” also turns up under an alias you give it.
sourceURL or textWhere the note came from. Clickable in the chip when it is an http(s) link, plain text otherwise.
statustextA short state like active, blocked, or done. Renders with a colored dot.
priorityp1 / p2 / p3Three levels. Also accepts 1 / 2 / 3 and high / medium / low. Drives the sort order inside a section in the note browser.
duedateScheduled work date. Accepts an ISO date, an ISO datetime, the words today / tomorrow / yesterday, or natural-language phrases like next Friday or in 3 days, read in your system language. Text that does not resolve to a date is kept as typed.
archivedtrue / falseHides the note from the browser by default. A toggle reveals archived notes. Accepts true, yes, 1, on and their negatives.
when
alias: start
dateWhen to start working on this, distinct from the due date.
deadlinedateA hard deadline, kept separate from due. Some task apps carry both at once.
durationdurationEstimated time, written as 30m, 1h 30min, or 2d.
remind
alias: alarm
offset or dateAn alarm. Accepts an absolute time or a signed offset from the due date, like -1h or +30m.
repeatrecurrenceA recurrence rule: daily, weekly, monthly, yearly, with optional every <n> and until <date>.
locationtextA place. Free text, no geocoding.
urlURLA link tied to the note. Clickable in the chip when it is http(s).
image
alias: cover
URL or pathA cover image for the note.
iconemoji or URLA note icon, written as an emoji or an image link.
descriptiontextA short summary of the note.

Dates keep what you typed even when they cannot be parsed, so $ due=whenever the audit clears survives a round-trip while a clean ISO date also gets a real calendar value. A few examples:

$ priority=p1 top priority, sorts to the front

$ due=2026-05-15 a scheduled date

$ due=next Friday parsed to the coming Friday

$ remind=-1h alarm one hour before the due date

$ repeat=every monday a weekly recurrence

How it renders

The metadata block sits at the top of the rendered pane and reads as part of the document rather than a floating card. A chevron on the title row hides or shows it. The block always shows when the note was created, then the metadata you wrote.

Reserved keys render as labeled rows in a consistent order, each with its own treatment: tags become pills, a source or url shows as a clickable link, a due date reads as “Due May 15, 2026”, priority and status carry a tint, archived dims the block. Keys that are not reserved render as plain key: value rows in the order you wrote them, and free-form lines render verbatim below.

Free-form notes

A $ line without an = is a free-form note. It shows in the metadata block as you wrote it, which makes it a good place for a reminder to yourself that belongs with the note but is not a real field. On export, free-form lines are kept only where the destination has room for them (Obsidian-style frontmatter, a Notion callout) and dropped elsewhere.

Any other key

You are not limited to the reserved set. Any key=value pair round-trips through the note and renders as a generic row. On export it is written wherever the destination carries arbitrary pairs, such as Obsidian, iA Writer, a custom folder, or a Notion page. Where a destination has nowhere to put it, the key shows up in that export’s drop summary so you can see what did not land.

$ project=Q3 launch an arbitrary pair, kept as a generic row

Destination-scoped pairs

Put a destination’s short name right after the prefix to send a pair to that destination only. The scope is matched against the destination name, so $bear, $obsidian, $ia, and $craft each target one app.

$bear pin=true

$obsidian publish=true

$ia author=Jane Doe

$craft daily=true

A scoped pair emits only at its destination. An unknown scope round-trips through the note but emits nowhere. The metadata block groups scoped pairs under their destination name so you can see which app will receive them. When a scoped pair and a universal pair set the same key, the scoped one wins at its destination and the universal one applies everywhere else.

Section and item metadata

A $ line at the top of a note sets metadata for the whole note. To scope a pair to one section or one item instead, wrap it in { } and put it on the line it belongs to: {$ due=friday}. The inner prefix and the key=value are both required. A brace group with no = renders as plain text.

Where the pair sits decides its scope. On a heading it applies to every item under that heading, down to the next heading, and renders as a chip below the heading. A status pair on a heading tints the whole section. On any other line the pair applies to that one item and renders as a pill.

The most specific value wins. An item pair overrides a section pair, which overrides the note-level $ block. On export to a task destination each task carries its own resolved metadata, so one note can send several tasks with different due dates or priorities.

# Trip {$ status=active} tints the whole section

+ Book hotel {$ due=friday} a due date for this task only

On export

Each destination has its own idea of where a key belongs: a Reminders alarm, a Things deadline, a Notion date column, a YAML key, a URL parameter. The export guide has the full per-destination map, plus how tags, dates, and the drop summary behave at each one.