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.
| Key | Value | What it does |
|---|---|---|
tags | comma list | Note tags. Render as pills, match in the note browser filter, and flow into export frontmatter or native tag fields. |
aliases | comma list | Alternate 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. |
source | URL or text | Where the note came from. Clickable in the chip when it is an http(s) link, plain text otherwise. |
status | text | A short state like active, blocked, or done. Renders with a colored dot. |
priority | p1 / p2 / p3 | Three levels. Also accepts 1 / 2 / 3 and high / medium / low. Drives the sort order inside a section in the note browser. |
due | date | Scheduled 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. |
archived | true / false | Hides the note from the browser by default. A toggle reveals archived notes. Accepts true, yes, 1, on and their negatives. |
whenalias: start | date | When to start working on this, distinct from the due date. |
deadline | date | A hard deadline, kept separate from due. Some task apps carry both at once. |
duration | duration | Estimated time, written as 30m, 1h 30min, or 2d. |
remindalias: alarm | offset or date | An alarm. Accepts an absolute time or a signed offset from the due date, like -1h or +30m. |
repeat | recurrence | A recurrence rule: daily, weekly, monthly, yearly, with optional every <n> and until <date>. |
location | text | A place. Free text, no geocoding. |
url | URL | A link tied to the note. Clickable in the chip when it is http(s). |
imagealias: cover | URL or path | A cover image for the note. |
icon | emoji or URL | A note icon, written as an emoji or an image link. |
description | text | A 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.