Format syntax
Format syntax lets you put placeholders in anything QuickAdd creates. When a choice runs, each placeholder is replaced with a real value: today’s date, an answer you type, a link to the note you came from.
You can use placeholders anywhere QuickAdd asks for a format: file name fields, capture formats, folder paths, “Insert after” targets, and inside template files.
For example, a Capture with this format:
- {{DATE:HH:mm}} {{VALUE}}asks you for a value, and if you answer Standup moved to Wednesday, it inserts:
- 09:42 Standup moved to WednesdayYou describe the shape once; QuickAdd fills in the blanks every run.
Quick reference
Section titled “Quick reference”Ask for input
| Placeholder | What it does |
|---|---|
{{VALUE}} | Ask for text |
{{VALUE:title}} | Ask for text once, reuse the answer anywhere as title |
{{VALUE:Red,Green,Blue}} | Pick from a list |
{{VDATE:due,YYYY-MM-DD}} | Ask for a date (“tomorrow” works) |
{{FIELD:project}} | Suggest values that property already has in your vault |
{{FILE:People}} | Pick a note from a folder |
{{MVALUE}} | Write a math formula (LaTeX) |
Dates
| Placeholder | What you get |
|---|---|
{{DATE}} | Today, like 2026-07-08 |
{{DATE:MMMM Do}} | Today, formatted your way: July 8th |
{{DATE+7}} | Seven days from today |
{{DATE:YYYY-MM|startof:week}} | The week’s starting month, for weekly notes |
The note you ran QuickAdd from
| Placeholder | What you get |
|---|---|
{{LINKCURRENT}} | A link to it: [[That note]] |
{{LINKSECTION}} | A link to the section your cursor is in |
{{FILENAMECURRENT}} | Its file name |
{{FOLDERCURRENT}} | Its folder |
{{selected}} | The text you had selected |
The note being created
| Placeholder | What you get |
|---|---|
{{TITLE}} | The new note’s file name |
{{FOLDER}} | The folder the new note lands in |
Other content
| Placeholder | What it inserts |
|---|---|
{{CLIPBOARD}} | Whatever you copied last |
{{TEMPLATE:Templates/Meeting.md}} | The contents of a template file |
{{MACRO:My Macro}} | Whatever a macro returns |
{{GLOBAL_VAR:Header}} | A snippet you defined in settings |
{{RANDOM:6}} | A random ID like x7k2p9 |
Today’s date: {{DATE}}
Section titled “Today’s date: {{DATE}}”{{DATE}} becomes today’s date in YYYY-MM-DD format.
Add +N to move the date: {{DATE+3}} is three days from now, {{DATE+-3}}
is three days ago.
Daily/{{DATE}}.mdReview on {{DATE+7}}Daily/2026-07-08.mdReview on 2026-07-15Choose the date format: {{DATE:<format>}}
Section titled “Choose the date format: {{DATE:<format>}}”Put a Moment.js format after
the colon to control how the date looks. The +N day offset works here too:
{{DATE:YYYY-MM-DD+3}}.
| You write | You get |
|---|---|
{{DATE:MMMM Do, YYYY}} | July 8th, 2026 |
{{DATE:YYYY-MM-DD_HH-mm}} | 2026-07-08_09-42 |
{{DATE:[Week] w}} | Week 28 |
Snap to the start or end of a week, month, or year
Section titled “Snap to the start or end of a week, month, or year”Add |startof:<unit> or |endof:<unit> to move the date to the boundary of a
period before formatting. <unit> is one of year, quarter, month, week,
isoweek, or day (case-insensitive).
This matters when the formatted output should reflect the period rather than the exact day. The month of a week-snapped date is the month the week starts in, not today’s calendar month.
| You write (on Thursday 2023-06-01) | You get |
|---|---|
{{DATE:gggg.MM.[Wk]w|startof:week}} | 2023.05.Wk22 |
{{DATE:YYYY-MM|startof:month}} | 2023-06 |
{{DATE:YYYY-MM-DD|endof:month}} | 2023-06-30 |
{{DATE:YYYY-[Q]Q|startof:quarter}} | 2023-Q2 |
{{DATE:GGGG-[W]WW|startof:isoweek}} | ISO week, Monday-anchored |
weekstarts on your locale’s first day of the week (matching thew/ww/ggggtokens).isoweekstarts on Monday (matching theW/WW/GGGGtokens).
Example: weekly notes that cross months. A weekly note named
gggg.MM.[Wk]w should file the week of June 1 under May (2023.05.Wk22),
while the heading inside the note still shows the actual day. Snap only the
file name:
File name: {{DATE:gggg.MM.[Wk]w|startof:week}}In the note: {{DATE:M.DD dddd}}Snapping also works on {{VDATE}}, so one picked date can be
week-snapped in the file name and day-accurate in the body:
{{VDATE:d,gggg.MM.[Wk]w|startof:week}} and {{VDATE:d,M.DD dddd}} share the
same prompt. Combine freely with |default, |optional, and |time in any
order.
Good to know:
- The
+Nday offset is applied before the snap, so{{DATE:YYYY-MM-DD+7|startof:week}}means “the start of next week”. endof:snaps to the last moment of the period (23:59:59.999), so{{DATE:YYYY-MM-DD HH:mm|endof:day}}renders... 23:59.|startof:and|endof:are the only special pipe options in a date format. Any other literal|is kept as-is:{{DATE:YYYY|MM}}gives2023|06.- An unknown unit (like
|startof:fortnight) shows an error listing the valid units.
Introduced in QuickAdd 2.14.0.
Ask for a date: {{VDATE:<name>, <format>}}
Section titled “Ask for a date: {{VDATE:<name>, <format>}}”{{VDATE:due,YYYY-MM-DD}} opens a date prompt and inserts your answer in the
given format. You can type natural language: today, in two weeks,
next monday. Short aliases like t (today), tm (tomorrow), and yd
(yesterday) work too, and are configurable in settings.
The name (due above) makes it a variable: enter the date once, use it in as
many places and formats as you like.
Due: {{VDATE:due,YYYY-MM-DD}}Week: {{VDATE:due,gggg-[W]WW}}Due: 2026-07-10Week: 2026-W28Give the date prompt a default
Section titled “Give the date prompt a default”Add |<default> after the format. If you submit the prompt empty, the default
is used. Defaults can be natural language too: {{VDATE:date,YYYY-MM-DD|today}},
{{VDATE:due,YYYY-MM-DD|next monday}}, {{VDATE:d,YYYY-MM-DD|+7 days}}. The
short aliases (t, tm, yd) also work as defaults.
A default combines with the optional flag in any order:
{{VDATE:due,YYYY-MM-DD|tomorrow|optional}} and
{{VDATE:due,YYYY-MM-DD|optional|tomorrow}} are equivalent.
Ask for a time too: |time
Section titled “Ask for a time too: |time”Add |time (aliases: |datetime, |type:datetime) to put a time picker on
the date prompt - made for Date & time properties. The calendar gains an
HH:mm control, and picking a day keeps the time you set. If you omit the
date format, it defaults to YYYY-MM-DD HH:mm.
---start: {{VDATE:start,YYYY-MM-DDTHH:mm|time}}---Combines with a default and optional in any order:
{{VDATE:meeting,YYYY-MM-DD HH:mm|tomorrow at 3pm|time|optional}}. Without
|time, the picker stays date-only.
Introduced in QuickAdd 2.14.0.
Ask for input
Section titled “Ask for input”Ask for text: {{VALUE}}
Section titled “Ask for text: {{VALUE}}”{{VALUE}} opens a prompt and inserts whatever you type. {{NAME}} is the
same thing under another name.
- [ ] {{VALUE|label:Task}}- [ ] Buy milkIf text is selected in the editor when the choice runs, the selection is used as the value instead of prompting. For Capture choices you can turn selection-as-value off, globally or per capture.
Good to know:
- In macros,
{{VALUE}}/{{NAME}}ask again for each template step. Use a named value like{{VALUE:sharedName}}when one answer should be reused across the whole macro. - In
js quickaddblocks, don’t put{{VALUE}}inside JavaScript string literals. Use the QuickAdd API (this.quickAddApi.inputPrompt(...)) andthis.variablesinstead. See Inline scripts. - From the API, pass the value programmatically under the reserved variable name
value.
Name the answer so you can reuse it: {{VALUE:<name>}}
Section titled “Name the answer so you can reuse it: {{VALUE:<name>}}”Give the value a name and QuickAdd asks once, then inserts the same answer at every other place the name appears - even across the steps of a macro.
---title: {{VALUE:title}}---# {{VALUE:title}}---title: Project kickoff---# Project kickoffYou can create as many named values as you need.
Offer a list to pick from: {{VALUE:<option>,<option>}}
Section titled “Offer a list to pick from: {{VALUE:<option>,<option>}}”Two or more comma-separated options turn the prompt into a searchable picker.
status: {{VALUE:Backlog,In progress,Done}}status: In progressNeed a comma inside an option? Wrap the option in double quotes - the quotes are stripped from the inserted value:
{{VALUE:"One choice, with a comma",Second choice}}- Straight (
") and curly (“ ”) quotes both work, so pasting from a rich-text editor is fine. - For a literal double quote inside a quoted option, double it:
"say ""hi"""insertssay "hi". - Single quotes are never special:
Bob's,Alice'sworks unchanged. - The same quoting works in
|text:display labels and|default:values (e.g.|default:"a, b"). - Pipes (
|) inside an option are not supported. Whitespace inside quotes is trimmed.
Show friendlier labels: |text:
Section titled “Show friendlier labels: |text:”Decouple what the picker shows from what gets inserted:
priority: {{VALUE:🔽,🔼,⏫|text:Low,Normal,High}}You pick “High”, QuickAdd inserts ⏫.
items and text need the same number of entries, and each label must be
unique. A comma inside an entry needs double quotes (text:"High, urgent",Low);
pipes inside an entry are not supported. With |custom, text
you type yourself is inserted as-is.
Allow answers outside the list: |custom
Section titled “Allow answers outside the list: |custom”{{VALUE:Red,Green,Blue|custom}} suggests Red, Green, and Blue but also lets
you type anything else, like “Purple”. Useful when you have common options but
want an escape hatch.
Note: |custom can’t be combined with a shorthand default;
use |default: instead.
Pick several: |multi
Section titled “Pick several: |multi”|multi turns the picker into a multi-select, and the picks are written as a
YAML list. Requires an option list (2+ comma-separated values).
---tags: {{VALUE:work,home,urgent|multi}}---tags: - work - urgentVariants and combinations:
|multi:linklistwraps each pick as a wikilink, for list properties of links:{{VALUE:Alice,Bob,Carol|multi:linklist}}writes- "[[Alice]]"/- "[[Bob]]".|multi|customadds a text box to the picker for values not in the list.- Combines with
|name:,|label:,|text:,|optional, and|trim.|case:is ignored (a list isn’t case-transformed).
Good to know:
- The picks become a real YAML list inside front matter. In a note body they become comma-separated text.
- In a Capture, multi-select becomes a list only when capturing into a brand-new note’s front matter (Create file if it doesn’t exist, without a template). Other capture shapes write comma-separated text.
- With the one-page input form, avoid commas inside a single option (like
|text:"High, urgent") on a|multiplaceholder - the one-page picker can’t round-trip them. The default one-prompt-at-a-time picker handles them correctly.
Introduced in QuickAdd 2.14.0.
Reuse the pick elsewhere: |name:
Section titled “Reuse the pick elsewhere: |name:”|name: gives a picker a reusable name, so one pick can drive several places.
Define the options once, then reuse the answer anywhere with
{{VALUE:<name>}}:
{{VALUE:Personal,Work,Errand|name:category}} - {{VALUE:title}}tags: #{{VALUE:category}}You pick the category once; the file name and the tag both use it.
Good to know:
- Reuse is always
{{VALUE:category}}. A bare{{category}}is not QuickAdd syntax and is left untouched (it would collide with Templater and Dataview). |namecombines with the other options:{{VALUE:🔽,🔼,⏫|name:priority|text:Low,Normal,High|label:Pick a priority}}.- Within one field, definition and reuses can appear in any order. Across fields in the default one-prompt-at-a-time flow, define the named picker in the field that is resolved first (the file name comes before the body); a reuse that runs earlier than its definition falls back to a text prompt. The one-page input form removes this caveat.
valueandtitleare reserved and can’t be used as names.- Names match case-insensitively:
{{VALUE:Category}}reuses a pick namedcategory. - First definition wins. If the same
|nameappears twice with different options in one run, the first definition’s pick is reused and the second is never shown (a warning is logged to the developer console). Use distinct names for separate prompts.
Introduced in QuickAdd 2.14.0.
Fine-tune any prompt
Section titled “Fine-tune any prompt”These options work on text prompts and pickers alike. Combine them freely:
{{VALUE:title|label:Note title|default:Untitled}}.
Add helper text: |label:
Section titled “Add helper text: |label:”{{VALUE:project|label:Client or project name}} shows the helper text below
the prompt’s header - handy for instructions or reminders. On an option list,
the label titles the picker: {{VALUE:Red,Green,Blue|label:Pick a color}}.
Pre-fill a default: |<default>
Section titled “Pre-fill a default: |<default>”{{VALUE:name|Anonymous}} pre-fills the input with Anonymous - press Enter
to accept, or edit it.
Good to know:
- Pickers without
|customignore defaults - you have to pick one of the options. - If the placeholder also uses keyed options (
|label:,|default:,|type:,|case:), the shorthand form is ignored; write|default:Anonymousinstead. The bare|optionalflag is the exception:{{VALUE:name|Anonymous|optional}}keeps the shorthand default. optionalis a reserved word, so a literal default of “optional” needs the keyed form:|default:optional.
The keyed form: |default:
Section titled “The keyed form: |default:”Same as above, written {{VALUE:title|default:Untitled}}. Required whenever
you combine a default with other keyed options like |label:.
Ask for multiple lines: |type:multiline
Section titled “Ask for multiple lines: |type:multiline”{{VALUE:summary|type:multiline}} opens a textarea instead of a single-line
input. Works on single-value prompts only (no option lists or |custom), and
overrides the global “Use Multi-line Input Prompt” setting for that
placeholder.
Mix single-line and multi-line in one format:
- {{VALUE:Title|label:Title}}{{VALUE:Body|type:multiline|label:Body}}Keyboard: submit with Ctrl/Cmd+Enter; plain Enter adds a newline. Tab inserts a tab character (with a selection, it indents every touched line), and Shift+Tab moves focus out of the field. See Controlling Prompts for all prompt shortcuts.
If |type: is present, shorthand defaults like |Some value are ignored; use
|default:.
Match an Obsidian property type: |type:number, |type:slider, |type:checkbox, |type:text
Section titled “Match an Obsidian property type: |type:number, |type:slider, |type:checkbox, |type:text”These give the prompt the right input widget for a property, and write a value Obsidian reads as the right type:
---rating: {{VALUE:rating|type:number|min:1|max:10}}confidence: {{VALUE:confidence|type:slider|min:0|max:100|step:5|default:50}}done: {{VALUE:done|type:checkbox|label:Completed?}}id: {{VALUE:id|type:text}}---|type:numbershows a numeric input and writes the value unquoted (rating: 42), so Obsidian reads a Number. Constrain it with|min:,|max:, and/or|step:.|type:slidershows a slider plus numeric input.|min:and|max:are required;|step:defaults to1. If the range is missing or invalid, QuickAdd falls back to the plain numeric input instead of guessing.|type:checkbox(alias|type:boolean) shows a true / false picker for checkbox properties. The|label:becomes the picker’s title, and it writes a real boolean:done: true.|type:textkeeps the value a string by writing it as a quoted YAML value (id: "0042"). Without it, a text property given0042is read as the number42,truebecomes a boolean, and values starting with#or[are mis-parsed entirely.
Good to know:
- Plain numbers and booleans already round-trip without
|type:-count: {{VALUE:count}}answered42becomes a Number. The|type:options add the right widget and validation, and|type:textfixes the cases Obsidian would otherwise mis-read. - Dates like
2025-12-25are always kept as text by Obsidian, so they never need|type:text. |min:,|max:, and|step:are only treated as numeric options together with|type:numberor|type:slider. Without those, they keep their old meaning as ordinary text.
Introduced in QuickAdd 2.14.0.
Change the casing: |case:
Section titled “Change the casing: |case:”Transforms the answer’s casing. Styles: kebab, snake, camel, pascal,
title, lower, upper, slug.
{{DATE:YYYY-MM-DD}}-{{VALUE:title|case:slug}}.md2026-07-08-my-great-idea.mdTrim stray spaces: |trim
Section titled “Trim stray spaces: |trim”|trim removes leading and trailing whitespace from the answer for that one
placeholder - useful in file names, links, and properties where an accidental
space from a mobile keyboard would create a different note.
Raw: {{VALUE:title}}Link: [[{{VALUE:title|trim}}]]Trimming is per placeholder and doesn’t change the stored value, so the same
answer can be used raw in one place and trimmed in another. It composes with
other options ({{VALUE:title|trim|case:slug}}). For |multi values, each
entry is trimmed while the value stays a list. The keyed form |trim:false
turns trimming off when a shared snippet adds it.
Introduced in QuickAdd 2.14.0.
Make a prompt skippable: |optional
Section titled “Make a prompt skippable: |optional”|optional marks a prompt as fine to leave unanswered: skipping it resolves
to nothing instead of blocking the run. Works on {{VALUE}}/{{NAME}},
{{VALUE:<name>}}, option lists, {{VDATE:...}}, and {{FILE:...}}.
{{VALUE:reminder|optional}}{{VDATE:due,YYYY-MM-DD|optional}}{{VALUE:low,medium,high|optional}}What optional changes:
- Prompts gain a Skip button (and a hint line). Skipping - or submitting empty - counts as an answer: the placeholder becomes nothing, and you aren’t asked again for the same variable later in the run.
- Empty beats the default. With a default, the default is pre-filled; clearing it and submitting yields empty. (Required prompts keep the old behavior: empty falls back to the default.)
- Optional dates accept a blank instead of failing the run. A typo like “tomorow” still errors - only blank means “leave empty”.
- Option lists show a skip shortcut in the footer (Ctrl/Cmd+Shift+Enter) instead of forcing a pick.
- The one-page input form shows an “(optional)” badge; optional dropdowns get a “Skip (leave empty)” entry.
- Esc still cancels the whole run - skipping is an answer, cancelling is not.
Good to know:
- The keyed form
|optional:falseturns the flag off explicitly (useful when a shared snippet adds it). - The flag sits happily next to a shorthand default:
{{VALUE:reminder|call mom|optional}}. Becauseoptionalis reserved, a literal default of “optional” needs{{VALUE:x|default:optional}}. - Scripting: setting a variable to the empty string (
params.variables.myVar = "") counts as “answered, empty” for every placeholder type, including{{VDATE}}- it renders empty instead of prompting. To force a prompt, leave the variable unset (ordeleteit / set it toundefined). The old workaround of assigning a single space still works but is no longer needed.
The note you ran QuickAdd from
Section titled “The note you ran QuickAdd from”These placeholders read from the active note - the one that was focused when you triggered QuickAdd.
A link to the note: {{LINKCURRENT}}
Section titled “A link to the note: {{LINKCURRENT}}”Inserts a link to the active note, in [[link]] format.
Source: {{LINKCURRENT}}Source: [[Meeting with Alice]]When the append-link setting is Enabled (skip if no active file), this placeholder becomes empty instead of erroring when no note is focused.
A link to the current section: {{LINKSECTION}}
Section titled “A link to the current section: {{LINKSECTION}}”Like {{LINKCURRENT}}, but links to the heading your cursor is under, in
[[Note#Heading]] format - clicking the link jumps to that section instead of
the top of the file.
It picks the nearest heading at or above the cursor. With the cursor above the
first heading (or in a file without headings), it falls back to a plain
whole-file link. When a heading’s text repeats in the file, it uses the
disambiguating ancestor path ([[Note#Parent#Heading]]); if even that isn’t
unique, it falls back to a whole-file link rather than linking to the wrong
section. Honors the same required/optional behavior as {{LINKCURRENT}}.
Introduced in QuickAdd 2.14.0.
The note’s file name: {{FILENAMECURRENT}}
Section titled “The note’s file name: {{FILENAMECURRENT}}”The active note’s file name, without the extension: Notes from {{FILENAMECURRENT}}. Honors the same required/optional behavior as
{{LINKCURRENT}} - when optional and no note is active, it becomes empty.
The note’s folder: {{FOLDERCURRENT}}
Section titled “The note’s folder: {{FOLDERCURRENT}}”The active note’s folder, as a vault-relative path with no trailing slash
(Projects/Alpha). For a note at the vault root it becomes empty. Not to be
confused with {{FOLDER}}, which is the folder a new note is
being created in.
This makes per-project captures work without a macro. With Capture To set to:
{{FOLDERCURRENT}}/Project Tasks.mdrunning the capture from any note inside Projects/Alpha targets
Projects/Alpha/Project Tasks.md, from Projects/Beta it targets
Projects/Beta/Project Tasks.md, and so on. A trailing slash
({{FOLDERCURRENT}}/) instead opens a file picker confined to that folder.
Works in capture targets, file name formats, note bodies and capture formats,
and Template choice folder paths (like {{FOLDERCURRENT}}/Subnotes).
No active note: in paths (capture targets, file names, folder paths) a
missing active note always stops the run with a clear error - it never falls
back to the vault root. In note bodies it honors the same required/optional
behavior as {{LINKCURRENT}}.
Introduced in QuickAdd 2.18.0.
Just the folder’s name: {{FOLDERCURRENT|name}}
Section titled “Just the folder’s name: {{FOLDERCURRENT|name}}”|name keeps only the last path segment: for a note in Projects/Acme,
{{FOLDERCURRENT}} is Projects/Acme while {{FOLDERCURRENT|name}} is
Acme. Use it when you want the folder’s name in a file name or sentence
rather than a path: Tasks for {{FOLDERCURRENT|name}}.
The selected text: {{selected}}
Section titled “The selected text: {{selected}}”Whatever text is selected in the editor, or empty when nothing is: > {{selected}}.
The note being created
Section titled “The note being created”The new note’s folder: {{FOLDER}}
Section titled “The new note’s folder: {{FOLDER}}”The folder the note is being created in, as a vault-relative path with no
trailing slash. For a note created at the vault root it becomes empty. (For
the active note’s folder, use {{FOLDERCURRENT}}.)
Where it has a value:
- Template choices - in the file name format (the folder is resolved before the name is built) and in the template body.
- Capture - in the capture body, where it becomes the destination file’s folder.
- Apply template to a note - the target note’s folder.
Where it stays empty: the capture Capture to field (that field is what
chooses the folder, so there is nothing to reference yet), the format
JavaScript API, and macro file-path commands.
Introduced in QuickAdd 2.14.0.
Just the folder’s name: {{FOLDER|name}}
Section titled “Just the folder’s name: {{FOLDER|name}}”|name keeps only the last path segment: for a target folder Projects/Acme,
{{FOLDER}} is Projects/Acme while {{FOLDER|name}} is Acme. Use it to
put the folder’s name into a file name: {{FOLDER|name}} - {{VALUE}}.
The new note’s title: {{TITLE}}
Section titled “The new note’s title: {{TITLE}}”The final file name (without extension) of the note being created or captured to. Handy as the note’s top heading:
# {{TITLE}}Pull data from your vault
Section titled “Pull data from your vault”Suggest values a property already has: {{FIELD:<field name>}}
Section titled “Suggest values a property already has: {{FIELD:<field name>}}”{{FIELD:project}} scans your vault for every value the project property
has anywhere, and offers them as suggestions. If no values exist, you are
prompted to type one.
project: {{FIELD:project}}You get a picker listing every project name already used in your vault - no more typos creating a second “Websiet Redesign” project.
Pick several: |multi
Section titled “Pick several: |multi”{{FIELD:topic|multi}} turns the suggestions into a multi-select. Pick
several existing values, or add new ones in the picker.
---topics: {{FIELD:topic|multi}}---topics: - Alpha - BetaInside front matter, |multi writes a real YAML list when the placeholder is
the property’s whole value. In note bodies, file names, and other text
positions it writes comma-separated text. Combines with the same filters and
defaults as single-value FIELD prompts:
{{FIELD:topic|multi|folder:Projects|tag:active|default:Inbox}}.
Introduced in QuickAdd 2.14.0.
Default to the active note’s value: |default-from:active
Section titled “Default to the active note’s value: |default-from:active”{{FIELD:project|default-from:active}} pre-fills the prompt with the value
the active note already has for that property. This is metadata
inheritance: trigger a capture from a project note, and the new content
carries the project over as the default - accept it, pick another suggestion,
or type something else.
Active note:
---project: The Great Endeavor---Format:
project: {{FIELD:project|default-from:active}}The project prompt defaults to The Great Endeavor. The active note is
captured when the run starts, before any QuickAdd window can move focus.
Behavior:
- The suggestion list still comes from your whole vault (honoring
folder:/tag:/exclude-*/inlinefilters); the active note’s value is promoted to the top as the default and pre-filled in the one-page form. It is promoted even if it already exists in the suggestions. - If no Markdown note is active, the note lacks the property, or the value is empty, you get a normal
{{FIELD:...}}prompt with no default. - Plain string/number/boolean values are used as-is. A YAML list value applies only to
|multiprompts, where each item is pre-checked in the picker; single-select prompts skip list values. Objects and null are never used. - The property name matches case-insensitively:
{{FIELD:Project|default-from:active}}still reads aprojectproperty. - This differs from
|default:(a literal value), and is deliberately not spelled|default:current- that would clash with “current” as a real field value.
Combine with |multi to inherit a list property:
topics: {{FIELD:topics|multi|default-from:active}}Introduced in QuickAdd 2.14.0.
Filter where suggestions come from
Section titled “Filter where suggestions come from”| You write | Suggestions come from |
|---|---|
{{FIELD:status|folder:projects}} | Only files in projects |
{{FIELD:status|folder:goals|folder:projects}} | Files in either folder |
{{FIELD:status|tag:work}} | Only files with #work |
{{FIELD:status|tag:active|tag:project}} | Files with both tags |
{{FIELD:status|exclude-folder:templates}} | Everything except that folder |
{{FIELD:status|exclude-tag:deprecated}} | Everything except files with that tag |
{{FIELD:status|exclude-file:example.md}} | Everything except that file |
{{FIELD:id|inline:true}} | Also Dataview inline fields (id:: value) |
{{FIELD:id|inline:true|inline-code-blocks:ad-note}} | Also inline fields inside those fenced code blocks (opt-in) |
Repeated folder: filters are OR (either folder). Repeated tag: filters are
AND (all tags). Exclusions remove any matching file. Filters combine freely:
{{FIELD:status|folder:goals|folder:projects|tag:work|exclude-folder:templates}}Defaults work here too:
{{FIELD:status|default:To Do}}- put a default at the top of the suggestions; Enter accepts it.{{FIELD:status|default:Draft|default-empty:true}}- only add the default when no values were found.{{FIELD:status|default:Draft|default-always:true}}- keep the default first even when other suggestions exist.{{FIELD:project|default-from:active}}- default to the active note’s value (above).
Pick a note from a folder: {{FILE:<folder>}}
Section titled “Pick a note from a folder: {{FILE:<folder>}}”{{FILE:People}} opens a picker listing the Markdown files in your People
folder and inserts your pick. Where {{FIELD}} suggests the
values of a property, {{FILE}} suggests the notes themselves - made for
“metadata folders” like People/ or Research Topics/ where every note is an
option. Because the options are real files, the list always reflects what
currently exists.
The picker labels each note by its frontmatter title if present, then its
first level-1 heading, then its file name - but always inserts based on the
actual file, so friendly labels never change what you get.
Output modes:
| You write | You get |
|---|---|
{{FILE:People}} | The file name: Tom |
{{FILE:People|link}} | A resolved wikilink: [[Tom]] |
{{FILE:People|path}} | The vault path: People/Tom.md |
{{FILE:People|multi}} | Several picks |
|link follows your link settings (wikilink vs Markdown, shortest path). In a
capture it resolves relative to the capture target; in a template it resolves
like {{LINKCURRENT}}. Don’t wrap it in [[ ]] yourself - you’d get
[[[[Tom]]]].
Example - link a research topic in a frontmatter list (quote it so the YAML stays valid):
research-topics: - "{{FILE:Research Topics|link}}"Options:
|optional- allow skipping the pick (becomes nothing).|custom- also allow typing a value that isn’t in the folder.|multi- pick several files. In frontmatter/property positions QuickAdd writes a YAML list; in note bodies, file names, existing-note captures, and other text positions it writes comma-separated text. Combine with|linkor|pathto write links or paths for every pick.|label:Pick a person- set the picker’s placeholder text.|name:<id>- share one pick between placeholders. FILE placeholders are cached by their full definition: placeholders that differ (folder, filters, mode, or|label:) prompt independently, while identical ones reuse one pick. To pick two different people, give the placeholders different labels ({{FILE:People|label:Author}}and{{FILE:People|label:Reviewer}}). To reuse the same pick - say, a name in one place and a link in another - give them the same|name:. Placeholders sharing an id should target the same folder and filters; the shared pick is required if any occurrence omits|optional.- Filters reuse the FIELD syntax:
|tag:,|exclude-folder:,|exclude-tag:,|exclude-file:(each repeatable).
Good to know:
- The folder is the first part of the placeholder. A
|folder:option is FIELD syntax and is ignored here. - The folder matches recursively (subfolders included). Point at a leaf folder (like
{{FILE:fields/people}}) to scope tightly. - Repeated
|tag:filters are AND filters. Exclusions remove any matching file. - Markdown files only.
|linkand|pathinsert characters that aren’t valid in file names; in the file name field, use the default mode.- One-page input forms collect the other inputs first, then open the FILE multi-select, because file names and labels can contain commas.
Introduced in QuickAdd 2.14.0.
Insert other content
Section titled “Insert other content”Your clipboard: {{CLIPBOARD}}
Section titled “Your clipboard: {{CLIPBOARD}}”Inserts the current clipboard content: Copied: {{CLIPBOARD}}. Becomes empty
if clipboard access fails due to permissions or security restrictions.
In Capture content, if the clipboard has no text but holds a supported image, QuickAdd saves the image using Obsidian’s attachment settings and inserts an embedded link. Text wins when both are present. You can also paste an image straight into a value prompt while typing - no placeholder needed.
A template file: {{TEMPLATE:<path>}}
Section titled “A template file: {{TEMPLATE:<path>}}”{{TEMPLATE:Templates/Meeting.md}} inserts that file’s contents. Templater
syntax inside the file is supported.
In Capture choices this can be the entire capture format: keep the full
capture body in a template file and set the format to
{{TEMPLATE:Templates/Capture Format.md}}. QuickAdd inserts the file and then
runs the usual formatting passes on the result.
A macro’s result: {{MACRO:<macro name>}}
Section titled “A macro’s result: {{MACRO:<macro name>}}”{{MACRO:Generate summary}} runs that macro and inserts its return value.
Label the macro’s prompt: |label:
Section titled “Label the macro’s prompt: |label:”When the macro asks you to choose an export from a script,
{{MACRO:Choose project|label:Project}} shows “Project” as the placeholder -
helpful when several macro calls show similar lists.
A snippet from settings: {{GLOBAL_VAR:<name>}}
Section titled “A snippet from settings: {{GLOBAL_VAR:<name>}}”Inserts the value of a global variable defined in
QuickAdd settings: {{GLOBAL_VAR:Meeting Header}}. Snippets can contain other
placeholders (like {{VALUE:...}} or {{VDATE:...}}), which are processed as
usual. The GLOBAL_VAR keyword is case-insensitive; the snippet name must
match exactly as you defined it.
A math formula: {{MVALUE}}
Section titled “A math formula: {{MVALUE}}”Opens a math prompt for writing LaTeX, with a live preview. Submit with
Ctrl/Cmd+Enter: Equation: ${{MVALUE}}$.
A random ID: {{RANDOM:<length>}}
Section titled “A random ID: {{RANDOM:<length>}}”Generates a random alphanumeric string of the given length (1-100). Useful for
unique identifiers, like block references: ^{{RANDOM:6}}.