Templater for Obsidian: Setup and 10 Copy-Ready Examples
On this page
- Set up Templater in 3 steps
- The syntax in one minute
- 10 Templater examples
- 1. Daily note with yesterday and tomorrow links
- 2. Ask for a title, then rename the note
- 3. Meeting note that files itself
- 4. Pick a type from a list
- 5. Weekly note that links every day of the week
- 6. Book note that asks for the author and status
- 7. Paste the clipboard into a capture note
- 8. Reuse one block in many templates
- 9. Creation date and folder in the properties
- 10. Several cursor stops
- When to keep core Templates instead
- Let AI write a Templater template for you
- Questions
- Sources
Templater is a free community plugin that turns Obsidian templates into small programs. A core template only pastes text with {{date}} and {{title}} filled in. A Templater template can link to yesterday's note, ask you a question, rename and move the new note, and apply itself to every note created in a folder.
Install it from Settings → Community plugins, point it at your Templates folder, and copy any of the 10 examples below. Each one is a complete template file.
Checked on November 3, 2026 against Templater 2.26.0 and its documentation.
Set up Templater in 3 steps
- Open Settings → Community plugins, select Browse, search for Templater, then select Install and Enable.
- Open Settings → Templater and set Template folder location to
Templates. If you already use the core Templates plugin, both can share that folder. - To insert a template, run Templater: Open insert template modal from the command palette and pick a template. Templater: Create new note from template makes a new note from one instead.
To apply templates on their own, turn on Trigger Templater on new file creation. Then set Template matching mode to Folder templates and add rules, such as Meetings → Templates/Meeting. The deepest matching folder wins, and a rule for / catches everything else. This setting also lets Templater run inside notes made by the core Daily notes plugin.
The syntax in one minute
Templater commands sit between <% and %>.
| Tag | What it does |
|---|---|
<% ... %> | Inserts the result, such as <% tp.file.title %> |
<%* ... %> | Runs JavaScript and inserts nothing, unless you add to tR |
-%> or <%- | Removes the line break after or before the tag |
The tp object holds everything you need: tp.date for dates, tp.file for the note itself, tp.system for prompts and pickers. Date formats use Moment.js tokens, such as YYYY-MM-DD or dddd, MMMM D.
Functions that wait for you, like tp.system.prompt, and functions that change the file, like tp.file.rename, need await.
10 Templater examples
1. Daily note with yesterday and tomorrow links
The dates come from the note's title, so a note you create for a past day still links to the right neighbours. Name daily notes YYYY-MM-DD, the Daily notes default.
---
tags:
- daily
date: "<% tp.file.title %>"
---
# <% tp.date.now("dddd, MMMM D, YYYY", 0, tp.file.title, "YYYY-MM-DD") %>
← [[<% tp.date.now("YYYY-MM-DD", -1, tp.file.title, "YYYY-MM-DD") %>]] | [[<% tp.date.now("YYYY-MM-DD", 1, tp.file.title, "YYYY-MM-DD") %>]] →
## Top priorities
- [ ] <% tp.file.cursor() %>
## Notes
-
To use it for every daily note, set Settings → Daily notes → Template file location to this file and turn on Trigger Templater on new file creation.
2. Ask for a title, then rename the note
New notes start as "Untitled". This asks for a real name first.
<%*
if (tp.file.title.startsWith("Untitled")) {
const title = await tp.system.prompt("Note title");
if (title) await tp.file.rename(title);
}
-%>
# <% tp.file.title %>
<% tp.file.cursor() %>
3. Meeting note that files itself
It asks who the meeting is with, names the note with today's date, and moves it to Meetings. Create the Meetings folder first.
<%*
const who = await tp.system.prompt("Meeting with");
const date = tp.date.now("YYYY-MM-DD");
await tp.file.move("Meetings/" + date + " " + who);
-%>
---
tags:
- meeting
date: "<% date %>"
attendees:
- "[[<% who %>]]"
---
# Meeting with <% who %>
## Agenda
- <% tp.file.cursor() %>
## Decisions
-
## Action items
- [ ]
Variables made in a <%* %> block can be used later in the same template, as <% who %> does here.
4. Pick a type from a list
tp.system.suggester shows a picker. The first list is what you see; the second is what gets saved.
<%* const type = await tp.system.suggester(["Article", "Video", "Podcast", "Book"], ["article", "video", "podcast", "book"]) -%>
---
tags:
- source
type: <% type %>
url:
captured: "<% tp.date.now("YYYY-MM-DD") %>"
---
# <% tp.file.title %>
## In one line
- <% tp.file.cursor() %>
## Worth keeping
-
5. Weekly note that links every day of the week
Name the note with the ISO week, such as 2026-W45. The loop writes a link to each day, Monday to Sunday.
---
tags:
- weekly
week: "<% tp.file.title %>"
---
# Week <% tp.file.title %>
## Days
<%*
const monday = moment(tp.file.title, "GGGG-[W]WW");
for (let i = 0; i < 7; i++) {
tR += "- [[" + monday.clone().add(i, "days").format("YYYY-MM-DD") + "]]\n";
}
-%>
## Wins
-
## Next week
- [ ]
moment is available in every execution command, because Obsidian ships it.
6. Book note that asks for the author and status
<%*
const author = await tp.system.prompt("Author");
const status = await tp.system.suggester(["To read", "Reading", "Finished"], ["To read", "Reading", "Finished"]);
-%>
---
tags:
- book
author: "<% author %>"
status: <% status %>
started: "<% status === "To read" ? "" : tp.date.now("YYYY-MM-DD") %>"
---
# <% tp.file.title %>
## Why I'm reading it
- <% tp.file.cursor() %>
## Key ideas
-
## Quotes
>
7. Paste the clipboard into a capture note
Copy a link or a passage, then create the note. The clipboard lands under Captured.
---
tags:
- inbox
captured: "<% tp.date.now("YYYY-MM-DD HH:mm") %>"
---
# <% tp.file.title %>
## Captured
<% await tp.system.clipboard() %>
## Why it matters
- <% tp.file.cursor() %>
8. Reuse one block in many templates
Keep a shared footer, checklist or properties block in its own note and include it. Change it once and every template that includes it changes.
# <% tp.file.title %>
<% tp.file.cursor() %>
<% await tp.file.include("[[Templates/Footer]]") %>
tp.file.include also takes a heading or block: [[Templates/Footer#Review]].
9. Creation date and folder in the properties
Handy for notes made by other plugins, such as Web Clipper or a quick-capture command.
---
created: "<% tp.file.creation_date("YYYY-MM-DD HH:mm") %>"
folder: "<% tp.file.folder(true) %>"
---
# <% tp.file.title %>
<% tp.file.cursor() %>
10. Several cursor stops
Number the cursors and press the Templater: Jump to next cursor location hotkey to move between them. Set the hotkey under Settings → Hotkeys.
# <% tp.file.title %>
**Problem:** <% tp.file.cursor(1) %>
**What I tried:** <% tp.file.cursor(2) %>
**What worked:** <% tp.file.cursor(3) %>
When to keep core Templates instead
Templater adds power, and with it risk: an execution command can run any JavaScript, and with system commands turned on, programs on your computer. Only use Templater templates you wrote or have read.
If a template only needs fixed headings, today's date and the title, the built-in Templates plugin is enough and works the same everywhere. Our 10 free Obsidian templates use only core variables, and the daily note template shows one that works with no plugin at all. Templater runs on mobile too, except system commands.
Let AI write a Templater template for you
You don't need to learn the whole tp API. Describe the template you want, and an AI that can see your vault writes the file.
SystemSculpt is a free Obsidian plugin that puts an AI chat in a side pane of your vault. On desktop it can run your own signed-in Claude Code or Codex, with no SystemSculpt account.
- Install SystemSculpt AI from Obsidian's community plugins and run Open SystemSculpt Chat.
- Type
@and attach an existing template or a note that shows the layout you want. - Ask for the template. For example:
Write a Templater template in Templates/ called "Client call".
Ask me for the client's name, file the note in Clients/<name>/
with today's date in the title, and add properties for client,
date and next_step. Use the headings from @meeting-note.
The template is a plain Markdown file in your vault, so you can read every command before you use it. Pick Ask mode in the run line (Ask before edits with Claude Code) to approve the file before it is written.
AI can also fill a template once a note exists: attach the note and a transcript or rough notes and ask for each heading to be filled.
Questions
Is Templater free? Yes. Templater is a free, open-source community plugin. It needs no account.
What is the difference between Templater and core Templates? Core Templates pastes text and replaces {{title}}, {{date}} and {{time}}. Templater adds dates relative to the note, prompts, pickers, renaming and moving files, JavaScript, and templates that apply themselves by folder.
How do I make Templater run on new daily notes? Set the Daily notes template to your Templater file and turn on Trigger Templater on new file creation in Templater's settings. Without that setting, the <% %> commands stay as text.
Why do I see <% tp.file.title %> instead of the title? The template was inserted by core Templates or pasted by hand. Insert it with Templater: Open insert template modal, or run Templater: Replace templates in the active file on the note.
Does Templater work on iPhone and Android? Yes. Templater runs in Obsidian's mobile apps. System commands are desktop only.
Is Templater safe? Your own templates are. Execution commands can run any JavaScript, so read a template from someone else before you use it, and leave system commands off unless you need them.
Install SystemSculpt free from the Obsidian plugin directory, or compare its plans for hosted AI on your phone. Eligible new accounts can claim 500 one-time starter credits with no card; paid plans are $9 a month or $90 a year.
Sources
Checked November 3, 2026.
- Templater: documentation, settings, GitHub and release 2.26.0
- Obsidian: Templates, Daily notes
- Moment.js format tokens