Format syntax
{{DATE}}β
Outputs the current date in YYYY-MM-DD format. You could write {{DATE+3}} to offset the date with 3 days. You can use +-3 to offset with -3 days.
Example: Daily/{{DATE}}.md or Review on {{DATE+7}}.
{{DATE:<DATEFORMAT>}}β
Replace <DATEFORMAT> with a Moment.js date format. You could write {{DATE<DATEFORMAT>+3}} to offset the date with 3 days.
Example: {{DATE:YYYY-MM-DD_HH-mm}} or {{DATE:YYYY-MM-DD+3}}.
{{VDATE:<variable name>, <date format>}}β
You'll get prompted to enter a date and it'll be parsed to the given date format. You could write 'today' or 'in two weeks' and it'll give you the date for that. Short aliases like t (today), tm (tomorrow), and yd (yesterday) are also supported and configurable in settings. Works like variables, so you can use the date in multiple places with different formats - enter once, format many times!
Example:
Due: {{VDATE:due,YYYY-MM-DD}}
Week: {{VDATE:due,gggg-[W]WW}}
{{VDATE:<variable name>, <date format>|<default>}}β
Same as above, but with a default value. If you leave the prompt empty, the default value will be used instead. Example: {{VDATE:date,YYYY-MM-DD|today}} will use "today" if no input is provided. Default values can be any natural language date like "tomorrow", "next monday", "+7 days", etc. Short aliases like t, tm, and yd work here too.
Example: {{VDATE:due,YYYY-MM-DD|next monday}}.
You can combine a default with the optional flag in any order: {{VDATE:due,YYYY-MM-DD|tomorrow|optional}} and {{VDATE:due,YYYY-MM-DD|optional|tomorrow}} are equivalent. See Optional fields.
Note: Pipe characters (|) cannot be used inside VDATE date formats β everything after the first pipe is treated as the default value (and flags). Use a different literal, e.g. wrap text in square brackets: {{VDATE:due,[Due ]YYYY-MM-DD}}.
{{VDATE:<variable name>, <date format>|time}}β
Adds a time picker to the date prompt (aliases: |datetime, |type:datetime), for Date & time properties. The calendar gains an HH:mm control, and picking a day keeps the time you set (it isn't reset to midnight). 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 and behaves exactly as before.
{{VALUE}} / {{NAME}}β
Interchangeable. Represents the value given in an input prompt. If text is selected in the current editor, it will be used as the value. For Capture choices, selection-as-value can be disabled globally or per-capture. When using the QuickAdd API, this can be passed programmatically using the reserved variable name 'value'.
Inline script note: For js quickadd blocks, prefer the QuickAdd API (this.quickAddApi.inputPrompt(...)) and this.variables for transformation flows. Do not rely on {{VALUE}} inside JavaScript string literals. See Inline scripts.
Macro note: {{VALUE}} / {{NAME}} are scoped per template step, so each template in a macro prompts independently. Use {{VALUE:sharedName}} when you want one prompt reused across the macro.
Example: - [ ] {{VALUE|label:Task}}.
{{VALUE:<variable name>}}β
You can now use variable names in values. They'll get saved and inserted just like values, but the difference is that you can have as many of them as you want. Use comma separation to get a suggester rather than a prompt.
Commas inside an option: wrap an option in double quotes to include a literal comma in it. The quotes are stripped from the inserted value.
{{VALUE:"This is a single choice, with a comma",Second choice}}
This shows two options: This is a single choice, with a comma and Second choice. Notes:
- Both straight (
") and curly (β β) double quotes work, so pasting from a rich-text editor is fine. - To include a literal double quote inside a quoted option, double it:
"say ""hi"""insertssay "hi". - Single quotes/apostrophes are never special, so
Bob's,Alice'skeeps working unchanged. - The same quoting applies to
|text:display labels and to|default:(e.g.|default:"a, b"). - Pipes (
|) inside an option are still not supported; whitespace inside quotes is trimmed.
If the same variable name appears in multiple macro steps, QuickAdd prompts once and reuses the value.
Example:
---
title: {{VALUE:title}}
---
# {{VALUE:title}}
{{VALUE:<variable name>|label:<helper text>}}β
Adds helper text to the prompt for a single-value input. The helper appears below the header and is useful for reminders or instructions. For multi-value lists, use the same syntax to label the suggester (e.g., {{VALUE:Red,Green,Blue|label:Pick a color}}).
Example: {{VALUE:project|label:Client or project name}}.
{{VALUE:<items>|text:<display items>}}β
For option lists, decouples what is shown in the suggester from what is inserted. items and text must have the same number of comma-separated entries, and each text entry must be unique. To put a comma inside one items or text entry, wrap that entry in double quotes (e.g. text:"High, urgent",Low). If you also use |custom, typed custom text is inserted as-is.
Example: priority: {{VALUE:π½,πΌ,β«|text:Low,Normal,High}}.
{{VALUE:<variable name>|<default>}}β
Same as above, but with a default value. For single-value prompts (e.g., {{VALUE:name|Anonymous}}), the default is pre-populated in the input field - press Enter to accept or clear/edit it. For multi-value suggesters without |custom, you must select one of the provided options (no default applies). If you combine keyed options like |label:, |default:, |type:, or |case:, shorthand defaults like |Anonymous are ignored; use |default:Anonymous instead. The bare |optional flag is the exception: {{VALUE:name|Anonymous|optional}} keeps the shorthand default. Because optional is now a reserved flag word, a literal default of "optional" needs the keyed form: |default:optional.
Example: status: {{VALUE:status|Draft}}.
{{VALUE:<variable name>|default:<value>}}β
Option-form default value, required when combining with other options like |label:.
Example: {{VALUE:title|label:Note title|default:Untitled}}.
{{VALUE|type:multiline}} / {{VALUE:<variable>|type:multiline}}β
Forces a multi-line input prompt/textarea for that VALUE token. Only supported for single-value prompts (no comma options / |custom). Overrides the global "Use Multi-line Input Prompt" setting. If |type: is present, shorthand defaults like |Some value are ignored; use |default: instead.
Example:
## Summary
{{VALUE:summary|type:multiline|label:Summary}}
Keyboard: In the multi-line prompt, pressing Tab inserts a tab character at the cursor (handy for nested Markdown lists) instead of moving focus; with text selected, Tab indents every line the selection touches. Shift+Tab is left unbound, so it still moves focus out of the field.
{{VALUE:<variable>|type:number}} / |type:checkbox / |type:textβ
Tailors the input to an Obsidian property type. These are single-value prompts (no comma options / |custom):
|type:numbershows a numeric input. The value is written unquoted (rating: 42), so Obsidian reads it as a Number.|type:checkbox(alias|type:boolean) shows a forced true / false picker β useful for acheckboxproperty. The|label:becomes the picker's title so you know which property you're setting. Writesdone: true(a boolean).|type:textkeeps the value a string. It writes the value as a quoted YAML scalar (id: "0042"), so Obsidian can't retype it β without it, a text property given0042is read as the number42,trueas a boolean, and a value like#todoor[a]is mis-parsed entirely.
---
rating: {{VALUE:rating|type:number}}
done: {{VALUE:done|type:checkbox|label:Completed?}}
id: {{VALUE:id|type:text}}
---
Good to know: plain number and checkbox values already round-trip correctly without |type: β count: {{VALUE:count}} typed 42 becomes a Number, and {{VALUE:true,false}} becomes a Boolean. The |type: options add the right input widget and validation, and |type:text closes the cases Obsidian gets "wrong" (a text value that looks like a number/boolean, or one that starts with a YAML character like # or [). Dates like 2025-12-25 are always kept as text by Obsidian, so they never need |type:text.
{{VALUE|case:<style>}} / {{NAME|case:<style>}} / {{VALUE:<variable>|case:<style>}}β
Transforms the resolved value into a casing style. Supported: kebab, snake, camel, pascal, title, lower, upper, slug.
Example: {{DATE:YYYY-MM-DD}}-{{VALUE:title|case:slug}}.md.
{{VALUE:<options>|custom}}β
Allows you to type custom values in addition to selecting from the provided options. Example: {{VALUE:Red,Green,Blue|custom}} will suggest Red, Green, and Blue, but also allows you to type any other value like "Purple". This is useful when you have common options but want flexibility for edge cases. Note: You cannot combine |custom with a shorthand default value - use |default: if you need both.
{{VALUE:<options>|multi}}β
Turns an option-list suggester into a multi-select: pick several values and they're written as a YAML List. Requires an option list (2+ comma-separated values).
---
tags: {{VALUE:work,home,urgent|multi}}
---
picks work and urgent β
tags:
- work
- urgent
Variants and combinations:
|multi:linklistwraps each pick as a wikilink, for List properties of links:{{VALUE:Alice,Bob,Carol|multi:linklist}}β- "[[Alice]]"/- "[[Bob]]".|multi|customlets you add values not in the list (a text box in the picker).- Combines with
|name:,|label:,|text:, and|optional.|case:is ignored with|multi(a list isn't case-transformed).
Notes:
- Multi-select writes a real List with no settings required. It produces a List inside front matter; used in the note body it renders as a comma-separated string.
- 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 a comma-separated string instead.
- With the one-page input form (Settings β QuickAdd), avoid commas inside an individual option (e.g.
|text:"High, urgent") on a|multitoken β the one-page picker can't round-trip a comma that lives inside a single option. The default one-prompt-at-a-time picker handles it correctly.
{{VALUE:<options>|name:<variable name>}}β
Gives a suggester a reusable name, so the value you pick can be inserted again elsewhere without prompting a second time. Pick from the options once at the definition, then reuse the choice anywhere with {{VALUE:<variable name>}}.
This is what makes a single choice drive multiple places β for example choosing a category in the file name and reusing it as a tag in the body:
File name: {{VALUE:Personal,Work,Errand|name:category}} - {{VALUE:title}}
tags: #{{VALUE:category}}
You choose category once from the suggester; both the file name and the tags line use that selection.
Notes:
- Reuse is always
{{VALUE:category}}. A bare{{category}}is not a QuickAdd token and is left untouched (it would collide with Templater/Dataview syntax). |namecombines with the other options, e.g.{{VALUE:π½,πΌ,β«|name:priority|text:Low,Normal,High|label:Pick a priority}}.- Within a single field the order is free β the definition and its
{{VALUE:category}}reuses can appear in any order, because the named suggester is resolved before the field's other prompts. Across fields in the default one-prompt-at-a-time flow, define the named suggester in the field that is resolved first (the file name is resolved before the body); a reuse in an earlier field than its definition falls back to a text prompt. The one-page input form (Settings β QuickAdd) removes this caveat entirely. valueandtitleare reserved and can't be used as a name.- Names match case-insensitively:
{{VALUE:Category}}reuses a value picked at{{VALUE:...|name:category}}. - First definition wins. If you reuse the same
|namewith a different definition (different options, or a different|custom/|text:setting) in one run, the first definition's chosen value is reused for the rest β the later definition is not shown (a warning is logged to the developer console). Use distinct names if you want separate prompts.
Optional fields: |optionalβ
Marks a prompt as optional, so it can be skipped and resolve to nothing. Works on {{VALUE}}/{{NAME}}, {{VALUE:<variable>}}, option lists, and {{VDATE:...}}.
{{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 an empty input β accepts "empty" as the answer: the placeholder resolves to nothing, and you are not re-prompted for the same variable later in the run.
- Empty beats the default. For optional tokens with a default, the default is pre-filled in the input box; clearing it and submitting yields empty. (Required tokens keep today's behavior: an empty submission falls back to the default.)
- Optional dates accept blank input instead of failing the whole choice. A typo like "tomorow" still errors β only a blank input means "leave empty".
- Option lists show a skip instruction in the suggester footer (Ctrl/Cmd+Shift+Enter) instead of forcing a pick.
- In the One-Page Input modal, optional fields show an "(optional)" badge and may be left empty; optional dropdowns get a "Skip (leave empty)" entry.
- Esc still cancels the whole choice β skipping is an answer, cancelling is not.
The keyed form |optional:false turns the flag off explicitly (useful when a shared snippet adds it). The flag can sit next to a shorthand default: {{VALUE:reminder|call mom|optional}}. Because optional is a reserved flag word, a literal default of "optional" needs the keyed form: {{VALUE:x|default:optional}}.
Tip β make decoration disappear with the date: put literal text inside the moment format using square brackets. With
- [ ] {{VALUE}} {{VDATE:due,[π
]YYYY-MM-DD|optional}}
an answered date renders π
2026-06-14, and a skipped date renders nothing at all β the emoji vanishes with it. The same works for prefixes like [Due: ]YYYY-MM-DD.
Scripting note: setting a variable to the empty string (params.variables.myVar = "") now counts as "answered, empty" for all token types, including {{VDATE}} β it renders empty instead of re-prompting. To force a prompt, leave the variable unset (or delete it / set it to undefined). The old workaround of assigning a single space (" ") still works but is no longer needed.
{{LINKCURRENT}}β
A link to the file from which the template or capture was triggered ([[link]] format). When the append-link setting is set to Enabled (skip if no active file), this token resolves to an empty string instead of throwing an error if no note is focused.
Example: Source: {{LINKCURRENT}}.
{{LINKSECTION}}β
Like {{LINKCURRENT}}, but links to the heading the cursor is currently under ([[Note#Heading]] format), so clicking the link scrolls to that section instead of the top of the file. Honors the same required/optional behavior as {{LINKCURRENT}}.
It picks the nearest heading at or above the cursor. When the cursor is above the first heading (or the file has no headings), it falls back to a plain whole-file link. When a heading's text is repeated in the file, it uses the disambiguating ancestor path ([[Note#Parent#Heading]]) so the link resolves to the right one; if even that can't uniquely identify the heading, it falls back to a whole-file link rather than linking to the wrong section.
Example: Source: {{LINKSECTION}}.
{{FILENAMECURRENT}}β
The basename (without extension) of the file from which the template or capture was triggered. Honors the same required/optional behavior as {{LINKCURRENT}} - when optional and no active file exists, resolves to an empty string.
Example: Notes from {{FILENAMECURRENT}}.
{{FOLDER}}β
The folder the note is being created in, as a vault-relative path (no trailing slash). For a note created at the vault root this resolves to an empty string.
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 resolves to the destination file's folder.
- Apply template to a note β the target note's folder.
Where it resolves to an empty string: 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.
{{FOLDER|name}} β just the folder nameβ
Add the |name modifier to get only the last path segment. For a target folder Projects/Acme, {{FOLDER}} is Projects/Acme while {{FOLDER|name}} is Acme. Use {{FOLDER|name}} when you want the folder's name reflected in a file name; use the bare {{FOLDER}} in note bodies where you want the full path.
Note: in a Template file name format, prefixing with the full path (e.g.
{{FOLDER}}/{{VALUE}}) is redundant β the note is already placed in the target folder, so the leading path is stripped. Use{{FOLDER|name}}to put the folder's name into the file name.
Examples: Filed under {{FOLDER}}, {{FOLDER|name}} - {{VALUE}}.
{{MACRO:<MACRONAME>}}β
Execute a macro and write the return value here.
Example: {{MACRO:Generate summary}}.
{{MACRO:<MACRONAME>|label:<label>}}β
Executes the macro but shows the label as the placeholder when the macro prompts you to choose an export from a script object. This is helpful when multiple macro calls show similar lists.
Example: {{MACRO:Choose project|label:Project}}.
{{TEMPLATE:<TEMPLATEPATH>}}β
Include templates in your format. Supports Templater syntax.
Example: {{TEMPLATE:Templates/Meeting.md}}.
{{GLOBAL_VAR:<name>}}β
Inserts the value of a globally defined snippet from QuickAdd settings. Snippet values can include other QuickAdd tokens (e.g., {{VALUE:...}}, {{VDATE:...}}) and are processed by the usual formatter passes. The GLOBAL_VAR keyword itself is caseβinsensitive, but the snippet name must match the name you defined (it is caseβsensitive).
Example: {{GLOBAL_VAR:Meeting Header}}.
{{MVALUE}}β
Math modal for writing LaTeX. Use CTRL + Enter to submit.
Example: Equation: ${{MVALUE}}$.
{{FIELD:<FIELDNAME>}}β
Suggest the values of FIELDNAME anywhere {{FIELD:FIELDNAME}} is used. Fields are YAML fields, and the values represent any value this field has in your vault. If there exists no such field or value, you are instead prompted to enter one.
Example: project: {{FIELD:project}}.
Enhanced Filtering Options:
{{FIELD:fieldname|folder:path/to/folder}}- Only suggest values from files in specific folder{{FIELD:fieldname|tag:tagname}}- Only suggest values from files with specific tag{{FIELD:fieldname|inline:true}}- Include Dataview inline fields (fieldname:: value){{FIELD:fieldname|inline:true|inline-code-blocks:ad-note}}- Include inline fields inside specific fenced code blocks (opt-in){{FIELD:fieldname|exclude-folder:templates}}- Exclude values from files in specific folder{{FIELD:fieldname|exclude-tag:deprecated}}- Exclude values from files with specific tag{{FIELD:fieldname|exclude-file:example.md}}- Exclude values from specific file{{FIELD:fieldname|default:Status - To Do}}- Prepend a default suggestion; the modal placeholder shows it and pressing Enter accepts it.{{FIELD:fieldname|default:Draft|default-empty:true}}- Only add the default when no matching values are found.{{FIELD:fieldname|default:Draft|default-always:true}}- Keep the default first even if other suggestions exist.- Combine filters:
{{FIELD:fieldname|folder:daily|tag:work|exclude-folder:templates|inline:true|inline-code-blocks:ad-note}} - Multiple exclusions:
{{FIELD:fieldname|exclude-folder:templates|exclude-folder:archive}}
Examples: status: {{FIELD:status|default:Draft|default-always:true}} or id: {{FIELD:Id|inline:true|inline-code-blocks:ad-note}}.
This is currently in beta, and the syntax can changeβleave your thoughts here.
{{FILE:<folder>}}β
Prompts you to pick a markdown file from <folder> and inserts the choice. Unlike {{FIELD:...}} (which suggests the values of a YAML field), this suggests the files themselves β handy for "metadata folders" such as a People/ or Research Topics/ folder where each note is an option. Because the options are real files, the list always reflects what currently exists, which keeps your links consistent.
By default the basename (just the file name, no folder or extension) is inserted. Output modes:
{{FILE:People}}β inserts the basename, e.g.Tom.{{FILE:People|link}}β inserts a resolved wikilink, e.g.[[Tom]], using your link settings (wikilink vs. Markdown, shortest path, etc.). In a capture it resolves relative to the capture target; in a template it resolves like{{LINKCURRENT}}. Do not wrap this in[[ ]]yourself β you'd get[[[[Tom]]]].{{FILE:People|path}}β inserts the vault-relative path, e.g.People/Tom.md.
Example β add a wikilink to a research-topics frontmatter list (quote it so the YAML stays a valid list item):
research-topics:
- "{{FILE:Research Topics|link}}"
Options:
{{FILE:<folder>|optional}}β allow skipping the pick (resolves to nothing).{{FILE:<folder>|custom}}β also allow typing a value that isn't in the folder.{{FILE:<folder>|label:Pick a person}}β set the picker's placeholder text.{{FILE:<folder>|name:<id>}}β give the pick a shared id. Like{{VALUE}}and{{FIELD}}, FILE tokens are cached by identity: tokens that differ (by folder, filters, mode, or|label:) prompt independently, while identical tokens reuse one pick. So to choose two different files from the same folder, give them distinct labels β e.g.{{FILE:People|label:Author}}and{{FILE:People|label:Reviewer}}prompt separately. To reuse the same pick across tokens β for example to insert both the name and a link to one chosen file β give them the same|name:. Tokens that share an id should target the same folder/filters; the shared pick is required if any occurrence omits|optional.- Filtering reuses the
{{FIELD}}grammar:|tag:,|exclude-folder:,|exclude-tag:,|exclude-file:(each repeatable).
Notes:
- The folder is the first part of the token; a
|folder:option is not used here (that's{{FIELD}}syntax) and is ignored. - The folder is matched recursively (its subfolders are included). Point at the leaf folder (e.g.
{{FILE:fields/people}}) to scope tightly. - Markdown files only.
|linkand|pathinsert characters that aren't valid in file names; in the file name field, use the default basename mode.
{{selected}}β
The selected text in the current editor. Will be empty if no active editor exists.
Example: > {{selected}}.
{{CLIPBOARD}}β
The current clipboard content. Will be empty if clipboard access fails due to permissions or security restrictions.
Example: Copied: {{CLIPBOARD}}.
{{RANDOM:<length>}}β
Generates a random alphanumeric string of the specified length (1-100). Useful for creating unique identifiers, block references, or temporary codes.
Example: ^{{RANDOM:6}}.
{{TITLE}}β
The final rendered filename (without extension) of the note being created or captured to.
Example: # {{TITLE}}.
|text: limitations (current): a comma inside an items/text entry needs double quotes (e.g. "a, b"); pipes (|) inside an entry are not supported.
Mixed-mode exampleβ
Use single-line for a title and multi-line for a body:
- {{VALUE:Title|label:Title}}
{{VALUE:Body|type:multiline|label:Body}}