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.

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, or today / tomorrow / yesterday. Unrecognized text 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=next Tuesday 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

$ 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.

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.