Markup Language
Mudlark uses a simple system: start any line with a special character to tell it what that line is. The right side uses these to organize your notes. You can change which characters do what in Settings.
Prefix reference
| Prefix | Type | Set | Description | Example |
|---|---|---|---|---|
# | Heading | basic | Creates a section heading. Everything below it gets grouped under this heading. | # Project Notes |
+ | Task | basic | Adds a task to your todo list. Tasks show up at the top of their section. | + Buy groceries |
- | Done | basic | Checks off a task by name. You only need to type enough to identify it. | - buy gr |
! | Highlight | basic | Marks something important you want to stand out. | ! Ship by Friday |
? | Question | basic | An open question you haven’t answered yet. | ? Should we change the deadline? |
" | Quote | basic | A quotation or something someone said. | " The only way to do great work... |
* | Bullet | basic | A bullet point. Put several in a row to make a list. | * First point |
@ | Image | basic | Shows an image from a file path or web address. | @ /path/to/image.png |
- | Remove | advanced | Removes any item or section by name with a type prefix, e.g. - ?query, - !name, or - #section. | - !ship |
% | Numbered | advanced | A numbered list item. Numbers are assigned automatically. | % Step one |
` | Code | advanced | A line of code. You can add a language name for syntax coloring. | ` const x = 42 |
& | Table | advanced | Creates a table row. Use pipes to separate columns. The first row becomes the header. | & Name | Age | City |
= | Math | advanced | Calculates a math expression or converts between units. Supports variable assignment. | = 100 km to mi |
: | Timer | advanced | Starts a countdown timer. Supports named timer blocks. | : 25m |
; | Looping Timer | advanced | Like a timer, but restarts automatically when it reaches zero. | ; 25m |
> | Move | advanced | Moves content into the current section by name. | > +fix | Home |
/ | Comment | advanced | A private note that only shows in the editor, not the right side. | / reminder to self |
~ | Clean Slate | advanced | Everything above this line disappears. A fresh start without deleting anything. | ~ |
^ | Find | advanced | Highlights matching text. Add a pipe to replace it. Add a type prefix to search within a specific type. Use @ heading to scope to a section. | ^ search | replace |
Inline formatting
Within any line, you can add bold and italic formatting using asterisks. This works inside any prefix type.
*italic text*
**bold text**
***bold and italic***
Formatting markers are stripped in the rendered view and in fuzzy matching, so **bold** matches bold when checking off tasks or searching.
Smart matching
When you check off a task with - or move something with >, you don’t need to type the full name. Each word you type just needs to match the beginning of a word in the original, in order.
+ go get groceries
- go g ← matches (“go” → “go”, “g” → “get”)
+ go get groceries
- go gr ← matches (“go” → “go”, “gr” → “groceries”, skips “get”)
This also works with filenames and paths. A file like images/daisy-pants-stereo.jpg is broken up at slashes, dots, and dashes, so - @pants is enough to match it.
If nothing matches, or if multiple items match, nothing happens. The editor turns the line green when it finds a match, or red when it can’t.
Removing things
The - character does different things depending on what it matches. Checking off tasks is part of the basic set. Removing other items and sections is an advanced feature.
Checking off tasks
On its own, - looks for a matching task and marks it done. This is available in the basic set.
+ Buy groceries
- buy gr ← checks off “Buy groceries”
Removing other items advanced
With the advanced set unlocked, add a type prefix after the dash to remove a specific kind of item. This works with any type that produces visible content on the right side.
? Should we change the deadline?
- ?deadline ← removes the question
! Ship by Friday
- !ship ← removes the highlight
@ images/photo.jpg
- @photo ← removes the image
Removing sections advanced
Use - #name to remove an entire section and everything in it.
# Old Ideas
+ some task
! some highlight
- #old ← removes the section and all its contents
Multi-line blocks
Wrap several lines between two matching characters to group them. Each line inside becomes its own item of that type.
!
Ship the feature
Update the docs
Tell the team
!
Block-capable types: + ! ? " * % ` @ : ;
Named blocks
Give a block a title by writing the character followed by a name. Named blocks show up as groups on the right side, and you can check off, remove, or move the whole group at once.
+ Shopping List
milk
eggs
bread
+
- Shopping marks all items done. > +Shopping moves the entire block.
Tables
Start a line with & and use pipes to separate columns. The first row becomes the header; additional & rows form the body.
& Name | Age | City
& Alice | 30 | London
& Bob | 25 | Paris
Consecutive & rows are grouped into a single table on the right side. A heading above the table gives it a title.
Finding and replacing
The ^ character searches everything above it. Add a pipe to replace matches, a type prefix to target a specific type, or @ heading to scope the search to a specific section.
^ search ← highlights all matches
^ search | replace ← replaces all matches
^ +task | replacement ← only searches tasks
^ search | replace @ Notes ← scoped to the “Notes” section
Math
The = character evaluates math expressions, converts units, and supports variable assignment.
= 42 * 1.21 ← 50.82
= 100 km to mi ← 62.14
= x = 5 ← assigns 5 to x
= x * 2 ← 10
Variables persist within the note. Define them anywhere above and reference them in later expressions.
Moving things around
The > character moves content between sections. You can move a single item, everything under a heading, or send things to a specific section.
> +fix ← moves a task matching “fix” here
> Work ← moves everything from the “Work” section here
> +fix | Home ← moves a task to the “Home” section
Special characters
| Input | Behavior |
|---|---|
| ~ | Clean slate — everything above is hidden |
| \ | Escape — treats the next character as regular text |
| > +query | Moves a matching task into the current section |