Releases: NotePlan/plugins
Release list
🧹 Tidy Up
🧹 Tidy Up Changelog
See Plugin README for full details on the available commands and use from callbacks and templates.
[1.19.4] - 2026-07-20 @jgclark
- fix /Move top-level tasks in Editor to heading when called from the CommandBar when the heading argument was empty (incorrectly treated as a template invocation). Now uses the settings heading, or prompts with chooseHeading if that is also blank. (Closes #747; thanks to Ian Soper.)
[1.19.3] - 2026-04-28 @jgclark
- fix to '/Generate @repeats in recent notes' command, which could cause crashes (Editor and onAsyncThread incompatibility)
[1.19.2] - 2026-04-22 @jgclark
- fix to '/Generate @repeats in recent notes' command, which was failing on invalid lines from the API.
[1.19.1] - 2026-04-14 @jgclark
- fix to '/Remove empty lines' command (thanks, @Grdn)
[1.19.0] - 2026-03-26 @jgclark
New
- new /Cancel incomplete tasks in a past year command that, for a year of your choice, counts and logs incomplete tasks and checklists in past calendar notes (daily, weekly, monthly, quarterly and yearly), shows per-note-type and per-Teamspace counts with a strong warning, and then (if confirmed) bulk-cancels those items.
[1.18.1] - 2026-03-20 @jgclark
- small tweaks to /find duplicated content command
[1.18.0] - 2026-03-14 @jgclark
New
- new /Clean up note filenames command: cleans encoded characters (e.g.
'—) and invalid path characters (e.g.\\/:) from note filenames in a chosen folder and its subfolders. OptionalfolderToStartparameter for template/callback; if omitted, prompts for folder. Teamspace notes are skipped.
[1.17.0] - 2025-11-22 @jgclark
New
- new /Remove empty lines command, that removes all empty lines from the open note. This is useful when trying to tidy up content copied into NP from other sources.
Changes
- /Remove empty elements will now work again on a regular (non-calendar) note.
- /Remove section from all notes now uses the 'Ignore future calendar notes?' setting, and now logs the notes that will be changed before running.
[1.16.0] - 2025-11-17 @jgclark
New
- new /Remove empty elements from recent notes command, that uses the same settings as the existing '/Remove empty elements' command, but applies over all recent Calendar notes. (Optionally you can include regular notes as well, if you turn on the new setting.) (For @dwertheimer)
Changes
- The name of the existing /Remove empty blocks command has been changed to /Remove empty elements to better reflect what it does.
- This now also removes empty tasks and checklists.
[1.15.2] - 2025-11-01 @jgclark
- updates /List duplicated content command to refer to the related (but simpler) new feature added to NotePlan in v3.19.2.
- to align with that, the name of the command here is changed to /List duplicated content. (Note: this remains different to /List duplicate notes.)
- the command is now less sensitive, and includes a note if the content duplication is >80% (was 90% before).
- add note icons for notes generated by the /List conflicted notes, /List duplicated content and /List duplicate notes commands.
[1.15.1] - 2025-10-14 @jgclark
- update /File root notes to improve menu display, particularly for Teamspace folders
- remove '/Remove section from recent notes' command from being available in the general "/Tidy Up" command, as it requires user input, and so can't run silently.
[1.15.0] - 2025-10-12 @jgclark + @dwertheimer
- rather arbitrarily promoting this to v1.x, after 2.5 years :-)
- New command /Remove empty blocks which in the open note removes empty list items, quotations and headings, and reduces multiple empty lines to a single empty line.
- New command /List missing daily notes in last year
- new setting 'Ignore future calendar notes?' for /Remove section from all notes command
- improvements to /List Doubled Notes command
[0.14.12] - 2025-10-12 @jgclark (unreleased)
- '/List duplicates' command now has better display of Teamspace notes, and checks against the special Archive and Template folders.
- '/List stubs' now doesn't check the special Archive and Template folders.
[0.14.11] - 2025-09-09 @jgclark
- '/List stubs' command now has better display of Teamspace notes.
[0.14.10] - 2025-09-03 @jgclark
- fix regression in '/Generate @repeats from recent notes' command.
[0.14.9] - 2025-08-30 @jgclark
- rebuild to use updated code from Repeat Extensions plugin in /Generate @repeats in recent notes command
- update /Remove blank notes to gracefully handle Teamspace notes, which can't be removed (at this time).
[0.14.8] - 2025-06-24 @jgclark
- updated /Remove section from all notes command to show how many sections it will remove, and also to use the 'Type of match for section headings' (
Exact,Starts with, orContains) and 'Folders to exclude' settings - code refactoring
[0.14.7] - 2025-02-18 @jgclark
- Stop lots of popups appearing when running /Generate @repeats in recent notes command (thanks, @KanerA).
- The /List stubs command now understands line links (and so ignores the part of the link after the
^character) (thanks, @chrismetcalf). - Improved descriptions of some settings.
🔬 Projects + Reviews
What's changed in 🔬 Projects + Reviews plugin?
See website documentation for more details, and how to configure it to suit your workflow.
[2.0.3] - 2026-07-17
- Fix: Project lists no longer include notes from
@Archive(also always excludes@Templatesand@Trash, as documented for Folders to Exclude). - Fix: Pausing/resuming a project when its note is not open in an Editor no longer fails to write frontmatter.
- Fix: Progress comment form (used when pausing/resuming, and for Add Progress) now allows submitting with no comment.
- Change: update set of available icons. dev: Use FA 7.0.1 instead of FA 6.0.0.b3.
[2.0.2] - 2026-07-17
- When the Rich project list has no items, show help text explaining how to include notes, including significant settings, and a gear control that opens the plugin's settings pane. (Thanks for suggestion, @MarkW555).
- Fix: Filter + Order hashtag toggles now hide projects unless they have at least one currently-ON tag (previously multi-tag notes e.g.
#project #areastayed visible when those tags were both off). - Fix: Filter + Order hashtag toggles are now saved and restored after Refresh.
[2.0.1] - 2026-05-23
- New setting: 'Project progress string' that allows user to override the 'progress' string in project note body and frontmatter key
- Change: convert to project command now also asks user for optional starting comment and %, and will update the project list view to include it (if it's in scope).
- dev: Fix: project list now reads progress from the configured frontmatter key as well as from body progress lines.
[2.0.0] - 2026-05-20
Summary of New features
- Modernised Rich project list — denser layout with more metadata visible; status lozenges for review/due; optional multi-column layout; Order by control in the top bar (including sort by first project tag in your configured display order).
- Much faster generation — uses caching between runs.
- Convert to project — form-driven command to turn a regular note into a project (NotePlan v3.21+).
- Complete / cancel project workflow — form for archive, quarterly/yearly log entry, and final progress comment.
- Add progress update — single Command Bar Form step on newer NotePlan versions.
- Automatic Rich list refresh — optional interval (minutes) to refresh the open Rich window.
- Rich list interactions — clickable next-action lines (open project note and highlight task where possible); project title links prefer an existing split view; scroll position kept on refresh.
- Dashboard integration — respects Dashboard perspectives and folder filters; list stays in sync when completing tasks from Dashboard or when filters change.
Changed features
- Metadata model: this now lives by default in the note's Frontmatter. So, the dates and tags are now separate keys (
start,due,reviewed,completed,cancelled,nextReview,progress). This allows for use in folder views. Plus a combinedproject:key for the project's tags. - New
progressStrsetting (default:progress) — customises the progress body-line prefix and frontmatter key, consistent with the other*MentionStrsettings. - New
formatProgressCommentString()helper — canonical formatter for progress comment values (N@YYYYMMDD comment). - Migrate all projects — batch migration command with log file for legacy metadata. Body metadata is migrated automatically when commands update a note.
- Review lifecycle — finish review uses the focused editor; works when metadata is YAML-only; split-window and race-condition fixes for pause/complete/cancel.
- Next actions — sequential projects skip future-dated tasks unless explicitly tagged as next action; completed/cancelled projects no longer show next actions in Rich or Markdown lists.
- Defaults & display — Group by folder off by default; mention-string settings no longer include a leading
@; paused projects shown with reduced opacity; demo list mode removed. - Markdown project lists — fully aligned with Rich list behaviour.
- Upgrade path — on first run at v2.0.0, optional offer to migrate all project metadata, with instructions to run migration later if skipped.
🔬 Projects + Reviews
What's changed in 🔬 Projects + Reviews plugin?
See website documentation for more details, and how to configure it to suit your workflow.
[2.0.2] - 2026-07-17
- When the Rich project list has no items, show help text explaining how to include notes, including significant settings, and a gear control that opens the plugin's settings pane. (Thanks for suggestion, @MarkW555).
- Fix: Filter + Order hashtag toggles now hide projects unless they have at least one currently-ON tag (previously multi-tag notes e.g.
#project #areastayed visible when those tags were both off). - Fix: Filter + Order hashtag toggles are now saved and restored after Refresh.
[2.0.1] - 2026-05-23
- New setting: 'Project progress string' that allows user to override the 'progress' string in project note body and frontmatter key
- Change: convert to project command now also asks user for optional starting comment and %, and will update the project list view to include it (if it's in scope).
- dev: Fix: project list now reads progress from the configured frontmatter key as well as from body progress lines.
[2.0.0] - 2026-05-20
Summary of New features
- Modernised Rich project list — denser layout with more metadata visible; status lozenges for review/due; optional multi-column layout; Order by control in the top bar (including sort by first project tag in your configured display order).
- Much faster generation — uses caching between runs.
- Convert to project — form-driven command to turn a regular note into a project (NotePlan v3.21+).
- Complete / cancel project workflow — form for archive, quarterly/yearly log entry, and final progress comment.
- Add progress update — single Command Bar Form step on newer NotePlan versions.
- Automatic Rich list refresh — optional interval (minutes) to refresh the open Rich window.
- Rich list interactions — clickable next-action lines (open project note and highlight task where possible); project title links prefer an existing split view; scroll position kept on refresh.
- Dashboard integration — respects Dashboard perspectives and folder filters; list stays in sync when completing tasks from Dashboard or when filters change.
Changed features
- Metadata model: this now lives by default in the note's Frontmatter. So, the dates and tags are now separate keys (
start,due,reviewed,completed,cancelled,nextReview,progress). This allows for use in folder views. Plus a combinedproject:key for the project's tags. - New
progressStrsetting (default:progress) — customises the progress body-line prefix and frontmatter key, consistent with the other*MentionStrsettings. - New
formatProgressCommentString()helper — canonical formatter for progress comment values (N@YYYYMMDD comment). - Migrate all projects — batch migration command with log file for legacy metadata. Body metadata is migrated automatically when commands update a note.
- Review lifecycle — finish review uses the focused editor; works when metadata is YAML-only; split-window and race-condition fixes for pause/complete/cancel.
- Next actions — sequential projects skip future-dated tasks unless explicitly tagged as next action; completed/cancelled projects no longer show next actions in Rich or Markdown lists.
- Defaults & display — Group by folder off by default; mention-string settings no longer include a leading
@; paused projects shown with reduced opacity; demo list mode removed. - Markdown project lists — fully aligned with Rich list behaviour.
- Upgrade path — on first run at v2.0.0, optional offer to migrate all project metadata, with instructions to run migration later if skipped.
🎛 Dashboard
What's changed in 🎛 Dashboard plugin?
For more details see the plugin's documentation.
[2.4.0.b50] 2026-07-14
- TB section title is Timed Reminders when Reminders are on and the section has timed reminders but no NotePlan timeblocks; still Timed Items when both are present, and Time Blocks when Reminders are off.
- Reminders section is no longer behind feature flag FFlag_Reminders; turn it on from the Filter menu / Settings like any other section.
- Can now click reminder item to open it in the Apple Reminders app (requires NP 3.21.2+ / build 1524).
- fix: Adding a Reminder with blank date/time fields uses Unix epoch as the API stand-in for "no date" (matched by the Reminders mapper), instead of assigning today/now.
- fix: Show the add-Reminder heading button in demo mode (was missing because demo data had no list options for the dialog).
- fix: ⌘-hover on a reminder status icon now shows "Delete reminder" (and ⌘-click deletes), matching ctrl.
[2.4.0.b49] 2026-07-13
- New Reminders section (Apple Reminders), gated by feature flag FFlag_Reminders. Shows open reminders from the Apple Reminders lists that the user has selected in NotePlan's settings.
- Click the circle icon on a reminder row to complete it; ctrl-click to delete it; the section that showed the reminder is then refreshed.
- Add button on the Reminders section heading that opens a dialog prompting for Reminder text, Reminder List, and optional date/time.
- Added workarounds for newly-discovered NP API bugs/quirks for reading/writing Reminders.
- When Reminders section is enabled, the Current time block section is titled Timed Items, and timed reminders only appear there once their due time has been reached.
- The "Current Time block" section is now titled just "Time Block" when Reminders are turned off.
- Time displays on timeblock and reminder items now use a neater lozenge with a clock icon, always placed at the start of the line (original mid-line timeblock and NotePlan "Text must contain" marker are stripped from the remaining text).
- Scheduled
>datemarkers on items are now shown in a neater lozenge with a calendar icon at the start. - Note context links (
ItemNoteLink) now use a tint-colored lozenge with border and smaller text, wrapping teamspace, folder, and note title while keeping their existing icons and colors. - Removed beta feature flag item "Show Banner Test Buttons".
[2.4.0.b48] 2026-07-11
- When setting Do "Move all items" buttons only move shown items when filtering? is off, the Interactive Processing (">> N") button count and dialog include lower-priority items that are hidden by filtering (not just the items currently shown).
[2.4.0.b47] 2026-07-10
- New Display setting Hide sections with nothing left to do?: when on, enabled sections with no open items are hidden after a refresh (or on first load). Completing the last item in a section still shows the usual "all done" message until the next refresh. (Suggested by @garba.)
- When there are no sections to display (after load/refresh, settings change, or completing the last item), show an INFO toast: "Your current settings and filters mean there are no items to show."
- fix: Changing Overdue settings now refreshes the Overdue section. dev: Settings save no longer double-fires
dashboardSettingsChanged; no-op echo skipssetPluginDataso it cannot overwrite an in-flight refresh. - fix: Overdue / Tag sort order
earliest,due date, andmost recentnow stick. Dev: useSectionSortAndFilter no longer re-sorts those sections by priority after the plugin has ordered them. - fix: The 'Last Week' section wasn't being handled properly when "Hide duplicates" setting was enabled.
- Fix: Overdue (and Priority) now respect "Calendar note Sections to Include" setting.
- Perf: Current Time Block ~1-minute refresh pauses while the Dashboard window is hidden, and restarts when it becomes visible again.
[2.4.0.b46] 2026-06-13
- Turning "Show chosen 'Wins' priority marker as a separate section?" off or on now also turns the Wins section visibility off or on, so the Wins section is removed or generated immediately.
- dev: Derived dashboard settings — coupled settings (e.g.
treatTopPriorityAsWins→showWinsSection) registered once inDASHBOARD_DERIVED_SETTING_RULES; applied viaapplyDerivedDashboardSettings(React reducer) andprepareDashboardSettingsForSave(plugin persistence). - dev: Circular import fix:
getDashboardSettingsDefaults()moved to newdashboardSettingsDefaults.js.
[2.4.0.b45] 2026-05-29
- speed up tag/mention cache build performance. dev: new pre-filter notes before full scan; single-pass extraction on open/checklist/scheduled paragraphs; O(1) wanted-item lookup via precomputed Sets. Removed unused
TAG_CACHE_FOR_ALL_TAGS/ blacklist code. - dev: tag/mention cache generation — run full rebuild on the main thread (not async thread) so external commands complete and
tagMentionCache.jsonis saved; fix completion timer rate calculation. - dev: tag/mention cache timestamps —
generateTagMentionCachenow updateslastTimeThisWasRunPrefin sync withcache.lastUpdated; incremental update uses the newer of file vs pref; timestamps stored as ISO UTC in JSON. - Fix to TAG sections after saving perspective. dev: the tagMentionsCache's joint
wantedTagMentionsList.jsonwas not getting updated correctly when a Perspective was saved. - Fix edge case where TAG/WINS section could be shown twice during refresh/close flows. dev: TAG rows are now synced by current settings (
tagsToShow+showTagSection_*), deduped by tag name, and synthetic sections (for exampleWINS) are stripped from pluginData before merge/close to prevent client-only duplicates from persisting. - dev: Added calling info to the tagMentionCache log file
- dev: Renamed
refreshSectionsBatch()tobatchRefreshSomeSections()for naming consistency with the other*refreshSomeSectionsfunctions.
[2.4.0.b44] 2026-05-23
Fixed
- Feature Flags (
FFlag_*) — all flags from the menu are written to top-leveldashboardSettingsinsettings.json; closing via the header icon no longer resets toggles before save; dashboard-global saves always run throughdoSaveDashboardSettingsFromBridgesosetPluginDataand the plugin cache match React immediately. - Tag/mention cache progress banner — "Generating tag/mention cache …" banner is now dismissed on success or failure (was left visible because progress messages had no timeout and the completion banner was sent from the async thread).
Changed
- Tag/Mention cache on by default — tag cache is used unless
FFlag_UseTagCache: falseis set in top-leveldashboardSettings. - Feature Flags menu — shown only in DEV logging mode, or when hidden
showFeatureFlagMenu: trueis set indashboardSettings(not when individual FFlags are on). - Updating Dashboard settings will now not refresh the display unless it needs to. dev: Added more settings to DASHBOARD_SETTING_KEYS_NOT_REQUIRING_DISPLAY_OR_CONTENT_REFRESH
Dev
- Dashboard-global settings (
FFlag_*,showFeatureFlagMenu) are stripped from perspective defs on save and no longer override live globals on perspective switch. - Set
"showFeatureFlagMenu": trueindashboardSettingsin settings.json to expose the FF menu outside DEV mode.
[2.4.0.b43] 2026-05-23
- dev: improvements to Diagnostics note — title as H1 after frontmatter; 🔄 Refresh pseudo-button at top; new Tag/Mention Cache section (settings, definitions, cache stats) before Current Perspective.
- fix: Stale tag sections after changing
tagsToShow— refresh andCLOSE_UNNEEDED_SECTIONSno longer keep old TAG rows (e.g.@fatherafter switching a perspective to@friend); Save Perspective now syncs live dashboard settings to disk and triggers section cleanup/refresh. (Thanks, @ryan.)
[2.4.0.b42] 2026-05-23
- dev: Perspective settings cleaning —
cleanDashboardSettingsInAPerspective()runs once per perspective def on save/repair (saveDashboardPluginSettings); removed redundant pre-save cleans in save/switch handlers.switchToPerspectivereturns sanitized defs from cache after save so React matches disk.
[2.4.0.b41] 2026-05-23
- dev: fix: Spaces to Include setting — when no Team Spaces are enabled, Settings no longer logs repeated
MultiSelectSpaces :: No teamspaces availableerrors or hides the field; shows "You are not a member of any Spaces." instead (Private space remains the implicit default). - fix: Timeblock must-contain preference (emoji marker) — React item rendering no longer calls
DataStore.preference('timeblockTextMustContainString')from the WebView (which returned a non-JSON-serializable bridged String and could halt Dashboard load). Plugin reads the preference once viagetPlainPreferenceString()and passes it throughnotePlanSettings;isTimeBlockLine()only reads the preference when the arg is omitted, not when''is passed explicitly. (Thanks, @dwertheimer for the PR.)
[2.4.0.b40] 2026-05-23
- fix: Modified perspective asterisk — toggling section visibility (e.g.
showQuarterSection) on a named perspective setsisModifiedagain;CLOSE_UNNEEDED_SECTIONSno longer overwritesperspectiveSettingsfrom a stale WebView snapshot. SharedisNamedPerspectiveModified()drives the*label, **S...
🎛 Dashboard
What's changed in 🎛 Dashboard plugin?
For more details see the plugin's documentation.
[2.4.0.b47] 2026-07-10
- New Display setting Hide sections with nothing left to do?: when on, enabled sections with no open items are hidden after a refresh (or on first load). Completing the last item in a section still shows the usual "all done" message until the next refresh. (Suggested by @garba.)
- When there are no sections to display (after load/refresh, settings change, or completing the last item), show an INFO toast: "Your current settings and filters mean there are no items to show."
- fix: Changing Overdue settings now refreshes the Overdue section. dev: Settings save no longer double-fires
dashboardSettingsChanged; no-op echo skipssetPluginDataso it cannot overwrite an in-flight refresh. - fix: Overdue / Tag sort order
earliest,due date, andmost recentnow stick. Dev: useSectionSortAndFilter no longer re-sorts those sections by priority after the plugin has ordered them. - fix: The 'Last Week' section wasn't being handled properly when "Hide duplicates" setting was enabled.
- Fix: Overdue (and Priority) now respect "Calendar note Sections to Include" setting.
- Perf: Current Time Block ~1-minute refresh pauses while the Dashboard window is hidden, and restarts when it becomes visible again.
[2.4.0.b46] 2026-06-13
- Turning "Show chosen 'Wins' priority marker as a separate section?" off or on now also turns the Wins section visibility off or on, so the Wins section is removed or generated immediately.
- dev: Derived dashboard settings — coupled settings (e.g.
treatTopPriorityAsWins→showWinsSection) registered once inDASHBOARD_DERIVED_SETTING_RULES; applied viaapplyDerivedDashboardSettings(React reducer) andprepareDashboardSettingsForSave(plugin persistence). - dev: Circular import fix:
getDashboardSettingsDefaults()moved to newdashboardSettingsDefaults.js.
[2.4.0.b45] 2026-05-29
- speed up tag/mention cache build performance. dev: new pre-filter notes before full scan; single-pass extraction on open/checklist/scheduled paragraphs; O(1) wanted-item lookup via precomputed Sets. Removed unused
TAG_CACHE_FOR_ALL_TAGS/ blacklist code. - dev: tag/mention cache generation — run full rebuild on the main thread (not async thread) so external commands complete and
tagMentionCache.jsonis saved; fix completion timer rate calculation. - dev: tag/mention cache timestamps —
generateTagMentionCachenow updateslastTimeThisWasRunPrefin sync withcache.lastUpdated; incremental update uses the newer of file vs pref; timestamps stored as ISO UTC in JSON. - Fix to TAG sections after saving perspective. dev: the tagMentionsCache's joint
wantedTagMentionsList.jsonwas not getting updated correctly when a Perspective was saved. - Fix edge case where TAG/WINS section could be shown twice during refresh/close flows. dev: TAG rows are now synced by current settings (
tagsToShow+showTagSection_*), deduped by tag name, and synthetic sections (for exampleWINS) are stripped from pluginData before merge/close to prevent client-only duplicates from persisting. - dev: Added calling info to the tagMentionCache log file
- dev: Renamed
refreshSectionsBatch()tobatchRefreshSomeSections()for naming consistency with the other*refreshSomeSectionsfunctions.
[2.4.0.b44] 2026-05-23
Fixed
- Feature Flags (
FFlag_*) — all flags from the menu are written to top-leveldashboardSettingsinsettings.json; closing via the header icon no longer resets toggles before save; dashboard-global saves always run throughdoSaveDashboardSettingsFromBridgesosetPluginDataand the plugin cache match React immediately. - Tag/mention cache progress banner — "Generating tag/mention cache …" banner is now dismissed on success or failure (was left visible because progress messages had no timeout and the completion banner was sent from the async thread).
Changed
- Tag/Mention cache on by default — tag cache is used unless
FFlag_UseTagCache: falseis set in top-leveldashboardSettings. - Feature Flags menu — shown only in DEV logging mode, or when hidden
showFeatureFlagMenu: trueis set indashboardSettings(not when individual FFlags are on). - Updating Dashboard settings will now not refresh the display unless it needs to. dev: Added more settings to DASHBOARD_SETTING_KEYS_NOT_REQUIRING_DISPLAY_OR_CONTENT_REFRESH
Dev
- Dashboard-global settings (
FFlag_*,showFeatureFlagMenu) are stripped from perspective defs on save and no longer override live globals on perspective switch. - Set
"showFeatureFlagMenu": trueindashboardSettingsin settings.json to expose the FF menu outside DEV mode.
[2.4.0.b43] 2026-05-23
- dev: improvements to Diagnostics note — title as H1 after frontmatter; 🔄 Refresh pseudo-button at top; new Tag/Mention Cache section (settings, definitions, cache stats) before Current Perspective.
- fix: Stale tag sections after changing
tagsToShow— refresh andCLOSE_UNNEEDED_SECTIONSno longer keep old TAG rows (e.g.@fatherafter switching a perspective to@friend); Save Perspective now syncs live dashboard settings to disk and triggers section cleanup/refresh. (Thanks, @ryan.)
[2.4.0.b42] 2026-05-23
- dev: Perspective settings cleaning —
cleanDashboardSettingsInAPerspective()runs once per perspective def on save/repair (saveDashboardPluginSettings); removed redundant pre-save cleans in save/switch handlers.switchToPerspectivereturns sanitized defs from cache after save so React matches disk.
[2.4.0.b41] 2026-05-23
- dev: fix: Spaces to Include setting — when no Team Spaces are enabled, Settings no longer logs repeated
MultiSelectSpaces :: No teamspaces availableerrors or hides the field; shows "You are not a member of any Spaces." instead (Private space remains the implicit default). - fix: Timeblock must-contain preference (emoji marker) — React item rendering no longer calls
DataStore.preference('timeblockTextMustContainString')from the WebView (which returned a non-JSON-serializable bridged String and could halt Dashboard load). Plugin reads the preference once viagetPlainPreferenceString()and passes it throughnotePlanSettings;isTimeBlockLine()only reads the preference when the arg is omitted, not when''is passed explicitly. (Thanks, @dwertheimer for the PR.)
[2.4.0.b40] 2026-05-23
- fix: Modified perspective asterisk — toggling section visibility (e.g.
showQuarterSection) on a named perspective setsisModifiedagain;CLOSE_UNNEEDED_SECTIONSno longer overwritesperspectiveSettingsfrom a stale WebView snapshot. SharedisNamedPerspectiveModified()drives the*label, Save Perspective, anddoSavePerspectivewhen live settings differ from the saved def (not only theisModifiedflag). After switching perspectives,*uses adashboardSettingsBaselinesnapshot so merge carryover from the previous perspective does not show as modified whenisModifiedis false on disk. Save Perspective usesforSave(live-vs-def OR live-vs-baseline), WebViewdashboardSettings, and optionalsettingsfrom React so save is not blocked when carryover matches baseline but the saved def is still stale. (Thanks, @ryan for help debugging this.)
Summary from [2.4.0.b19] (through [2.4.0.b39])
New
- New Wins section - optional section for top-priority tasks (default
>>) drawn from enabled Calendar sections; turn on via "Show '>>' priority marker as a separate section"; configurable "Wins priority marker" (>>,!!!, or!!). - Active Projects section has new setting "Show only projects with next actions" (includes Sequential projects); section de-duplicates projects when the Projects plugin returns duplicates; ordering method described in the section header.
- Added "Start review" button and latest progress comment to Project dialog.
- Next actions in project sections: items in Projects to Review and Active Projects can be completed or cancelled like other Dashboard rows; completing a next action in Active Projects round-trips to the Projects plugin for an updated next action.
- Added link to new
repairDashboardSettingscommand at the end of the generated Diagnostics file.
Improved
- Better two-way sync with Projects + Reviews plugin
- Add Task to note from Today/Week section headings
- Current time block in headings will now be shown
- Search Extensions - searches work with V2 or V3 (beta) of that plugin.
- Default Dashboard Window Type - moved from the NP plugin settings pane into the main Dashboard settings dialog.
- Note title links - folder segment de-emphasised (grey); link icons use the light weight.
- Active Projects display - next actions and progress comments use the same rich-text rendering as other task rows (hashtags, mentions, links, dates, hide-scheduled/hide-priority settings).
- Calendar note Sections to Include - heading match is case-insensitive prefix (e.g.
WinsmatchesWins for 2026-04-13). - Auto-refresh timers stopped/restarted when Dashboard view is hidden. Now always fires at just after midnight, if open.
- Perspective switch - sections refresh in one batch (no optimistic per-section redraw).
- Will only now **refresh display after changin...
📦 Filer
What's changed in 📦 Filer plugin?
Please see the Readme for this plugin for more details, including the available settings.
[1.6.1] - 2026-06-26
- fixes and improvements to /move completed items to done section:
- recreated/moved section headings are now nested one level deeper inside the Done section (e.g. an active
## Sectionbecomes### Sectionunder## Done), so they sit inside Done rather than as a sibling of it. This also lets completed items correctly merge into matching existing sub-headings in the Done section. - no longer introduces stray blank lines when merging a completed section into an existing Done sub-section.
- in "move when any are complete" mode: when a whole section ends up being moved, its now-empty section heading is removed from the active part, and completed items correctly re-use an existing matching sub-heading in the Done section (previously a new, wrongly-deeper heading could be created).
- no longer creates a duplicate
## Doneheading if the existing one was folded. - when a whole section has been completed, remove its heading as well as the tasks lines, from the active section.
- if a section has no task/checklist paragraphs at all, then don't move it to the archive.
- moved tasks, bullets and quotes no longer get duplicated markers (e.g.
* [x] * [x],- -,> >) when written to the Done/Completed section.
- recreated/moved section headings are now nested one level deeper inside the Done section (e.g. an active
[1.6.0] - 2026-05-01
- new /unarchive note keeping folder structure command that reverses /archive note keeping folder structure by moving a note from
@Archiveback to its original folder path.
[1.5.3] - 2025-03-16
- fix: improvements to the /move completed items to done section command
- dev: added tests for its helper functions
- change: for the /move completed items to done section command, replaced the boolean setting "Only move completed items when whole section is complete?" with a new string setting "When to move completed items to Done". This offers three options: ask each time (default), move when whole section complete, and move when any are complete.
[1.5.2] - 2025-02-18
- Improvements to the /move completed items to done section command:
- allow customising the "Done" section heading name. This defaults to
Donebut can be set to something else (for exampleCompleted). (for @jose) - add option to skip done subtasks that are indented under open parent tasks, so that these subtasks remain visually grouped with their parent until the parent is complete. (for @jose)
- if there are no lines/blocks to move, then a message is shown to the user, confirming what settings it has used.
- allow customising the "Done" section heading name. This defaults to
- Reorganised the plugin's settings screen.
[1.5.1] - 2025-02-18
- fix "Add date reference?" option so that when moving from a non-today daily (calendar) note the added date now correctly points to the source note's date, not always to today. (Thanks for the report, @vlow)
- added
linkas an option for the "Date reference style" setting.
[1.5.0] - 2025-12-26
- new /move completed items to done section command that extends NP's built-in 'Move Completed to Bottom' menu action. This is a more powerful version of NotePlan's built-in 'Move Completed to Bottom' menu action. It has two settings, which reveal its additional powers:
- Recreate existing section structure in Done section? (default: true)
- Only move completed items when whole section is complete? (default: false)
[1.4.1] - 2025-12-15
- fix /move paragraph... commands when moving to a heading with trailing spaces (thanks, @stacey)
[1.4.0] - 2025-11-25
New
- /add sync'd copy to note now can work on a block of lines. They will go to consecutive lines in the same destination note and section.
Fixed
- trying a different way to fix recent NP API change when using "/move..." and "/add sync..." commands on notes with frontmatter. (Addresses #704)
- "/quick move to today's note" not honouring "Where to add in the note" setting as 'start' (thanks, @anom)
[1.3.3] - 2025-11-07
- fix duplication in /move block (thanks for the tip, @bido_1977)
- improved the heading picker used in some of these commands
[1.3.2] - 2025-09-06
- suppress notes in the special Archive and Template folders from the note chooser in /add sync'd copy to note and /move ... commands (for @chrismetcalf)
- fix for /archive note keeping folder structure command
- fix for /add sync'd copy to note command
[1.3.1] - 2025-08-23
- further fix when trying to work around NP bug when using /move paragraph block on notes with frontmatter.
[1.3.0] - 2025-08-15
Added
- can now access notes from Teamspaces
- improved display of note picker (when running NP 3.18+)
- note picker now includes '+ new note' option for /move paragraphs (for @oldielajolla)
- improved display of heading picker (when running NP 3.18+)
Fixed
- worked around NP bug when using /move paragraph block on notes with frontmatter. (Thanks for report by @Bono2007.)
[1.2.0] - 2025-01-07
- the /add sync'd copy to note command will now work on multiple lines -- and there's a new setting that allows you to set a default heading to sync all lines under. (for @chrismetcalf, closes #610). And fixed regression with it.
- New /quick move ... commands for monthly and quarterly notes, not just daily and weekly notes.
[1.1.6] - 2024-12-31
- the new note from clipboard and new note from selection commands have moved to the NoteHelpers plugin.
- workaround for move ... commands not working properly, which stem from trailing whitespace on Headings in the destination notes. (Thanks to @trmax + @magicnemo for help diagnosing the problem and suggesting a workaround.)
[1.1.5] - 2023-10-20
Changed
- hopefully a fix for "/move paras" sometimes not removing the lines from the original note
[1.1.4] - 2023-09-01
Changed
- hopefully a fix for "/add sync'd copy to note" sometimes failing to add the sync in one of the two notes, because of a race condition. Please give feedback if you still find this happens.
[1.1.3] - 2023-08-29
- fix bug that prevented moving/filing items to a note in the root folder
[1.1.2] - 2023-08-15
Changed
- improved the Heading selector to allow to add at the top of the note (under the title but before the first heading)
- under-the-hood changes to use newer library versions
[1.1.1] - 2023-06-10
Added
- now /new note from clipboard and /new note from selection commands offer option to create a new folder when selecting a folder (suggested by @dwertheimer)
[1.1.0-beta5] - 2023-04-18
Added
- new /archive note keeping folder structure command (suggested by @antony-sklyar)
[1.1.0-beta4] - 2023-04-10
Added
- can now run the copy/move recent notelink commands via x-callback or as template functions
Changed
- turned off feedback dialogs for each note, instead having a single feedback dialog at the end
[1.1.0-beta3] - 2023-04-09
Added
- command to edit settings, even on iOS
- setting "Allow preamble before first heading?" If set, some 'preamble' lines are allowed directly after the title. When filing/moving/inserting items with these commands, this preamble will be left in place, up to and including the first blank line, heading or separator. Otherwise the first heading will be directly after the note's title line (or frontmatter if used).
[1.1.0-beta2] - 2023-03-19
Added
- new setting "Types of lines to file" for the /...note link... commands to choose what sorts of lines to move/copy:
- all lines
- all but incomplete task/checklist items
- only completed task/checklist items
- only non-task/checklist items
- new setting "Where to add in the note" for the /...note link... commands. If the [[note link]] doesn't include a heading, then this controls whether filed lines get inserted at the start or end of the note.
[1.1.0-beta1] - 2023-03-19
Added
- 4 new related commands that move or copy lines in calendar notes that include a
[[note link]]to the project note with that title:- /move note links
- /move note links (recently changed)
- /copy note links
- /copy note links (recently changed)
- There are a number of settings to make it useful for a variety of ways of organising your notes -- please see the README.
- new /filer:update plugin settings command, that allows settings to be changed on iOS/iPadOS (thanks to @dwertheimer for this feature).
[1.0.0-beta3] - 2022-11-28
Changed
- polished the heading picker, particularly for Calendar notes
[1.0.0-beta2] - 2022-10-28
Fixed
- fix where trailing spaces on headings could cause data loss when using /move commands
[1.0.0-beta1] - 2022-08-18
Changed
- existing command /move paragraphs renamed to /move paragraph or selection. This moves this paragraph (or selected paragraphs) to a different note
- added command /move paragraph block moves all paragraphs in the current block to a different note. Use the settings to determine how far before and after the current paragraph the block will extend.
- retired the command alias /file paragraphs, as /move paragraphs is clearer
[0.9.2] - 2022-08-16
Fixed
- was failing to offer the last heading in a note to move/copy lines to
[0.9.1] - 2022-08-15
Added
- where the command is working out which lines to include in the block, it will now show them highlighted while it's asking which note to move them to. This provides a useful way of checking it's going to do what you intend. (Though it's unlikely to be very visible on small screen devices.) (This won't work on versions of NotePlan before v3.6.2.)
- more logging available when needed
[0.9.0] - 2022-08-05
Changed
- Split a setting into two: 'Include lines from start of Section in the Block?' and 'Use a tighter...
🕓 Event Helpers
What's changed in 🕓 Event Helpers?
See website README for more details, and how to configure.
[0.23.5] - 2026-07-09 @jgclark
- fix to
events()andmatchingEvents()" template commands soincludeHeadings: falsenow also suppresses the per-day headings that were previously always added whendaysToCover> 1. (Thanks, @akrabat.)
[0.23.4] - 2026-07-09 @jgclark
- /process date offsets command changes:
- the 'add computed final date' setting now only appends to section headings (not task lines)
- now outputs week/month/quarter/year dates when the offset unit is
w,m,q, ory(e.g.{2w}now produces>2026-W32instead of a day date).
[0.23.3] - 2026-04-21 @jgclark
- New optional
startDayparameter that can be used in Event List and Matching Event Lists template and x-callback calls. This takes a date in the formatYYYY-MM-DDto set the first day of the range; if omitted, behaviour is unchanged, which is to start from the open calendar note’s period.
[0.23.2] - 2025-11-22 @jgclark
- add some missing PLACEHOLDERS in the setting descriptions
- dev: refactor code for improved maintainability
[0.23.1] - 2025-10-20 @jgclark
- fix regression in '/shift dates' command on tasks scheduled to weeks
[0.23.0] - 2025-08-22 @jgclark
New
- new command /insert week's events as list, which inserts this week's calendar events in the current note (for @scottc)
- new equivalent
insertWeeksEventsandlistWeeksEventsfunctions for use in automation (templating or x-callbacks)
Changed
- changed setting 'Processed tag name' to 'Processed indicator string' to clarify that you can use any string, not just hashtags. And added a note that if this string contains an emoji then it sometimes triggers a bug in NotePlan where you get some repeated characters at the end of the line.
Fixed
- regression on "/time blocks to calendar" (thanks, @WalterMusings)
- stopped timeblocks being falsely generated from
@done(...)strings under some settings
[0.22.2] - 2025-08-19 @jgclark
- add 'add computed final date' setting for '/process date offsets' command. (Previously it always added a final computed date to the relevant section heading. Now this can be turned off.)
[0.22.1] - 2025-01-03
- improve setting defaults and documentation.
[0.22.0] - 2024-09-06 @jgclark
- can now use
events()andmatchingEvents()calls from Templates running on Weekly notes and other non-daily Calendar notes (for @gdrn). - refactored documentation.
[0.21.3] - 2024-06-04 @jgclark
- fix bug when adding time blocks to calendar
- better handle template
<%- events() %>, which has no formatter string
[0.21.2] - 2024-02-13 @jgclark
- /shiftDates now shifts dates in brackets and multiples dates on a single line (to suit Project metadata).
[0.21.1] - 2024-02-06 @jgclark
New
- added 'Yes to all' as an option to the dialog when creating time blocks in "time blocks to calendar" and "process date offsets" commands
- extended 'shift dates' command to work on week dates (
>YYYY-Wnn) as well as day dates - extended 'process date offsets' and 'shift dates' commands to remove any blockIDs from lines before they change
[0.21.0] - 2023-09-29 @jgclark
New
- "/shift dates" and "/process date offsets" now unhook sync'd lines (blockIDs) from others before changing them, to preserve the other copies
- "/shift dates" now deals with checklists as well as tasks, and cancelled items too.
- "/shift dates" can now remove any 'processed tag name' (as set in the "/time blocks to calendar" command) from tasks or checklists. This is controlled by new setting "Remove any 'processed tag name' on tasks or checklists?"
- new "/Events: update plugin settings" command to allow updating settings on iOS/iPadOS devices
Changed
- "/time blocks to calendar" now more sensibly handles time blocks that contain a week reference (
>YYYY-Wnn) as well as day references - "/process date offsets" now will only offer to run "/time blocks to calendar" if there are any time blocks in the note
[0.20.3] - 2023-06-12 @jgclark
Changed
- added 'STOPMATCHING' as a possible placeholder for "/insert matching events". If present it will not process a given event further, so only the first match in the "Events match list" list will be used. (This does not stop remaining events in the day being matched.)
[0.20.2] - 2023-02-13 @jgclark
Added
- the date offset intervals (e.g.
{3d}can now use upper-case letters B,D,W,M,Q,Y as well as the existing lower-case letters - more helpful text in a dialog box
[0.20.1] - 2022-12-30 @jgclark
Added
- added support for time blocks in Checklists (available from NotePlan 3.8)
[0.20.0] - 2022-12-08 @dwertheimer, @jgclark
Added
- added 'MEETINGNOTE' link as a format option, which adds a button to create a meeting note to events in event listings. There's also a new setting 'Meeting Note Template title' which you can use to set which template to pick if you have several; if it isn't set then a list will be presented. (Note: this requires at least v1.1.2 of the separate Meeting Notes plugin.)
[0.19.4] - 2022-12-04
Added
- can now send
calendarsparameter to the commands via Templates. E.g.calendars:"list,of,calendar,names"(for @joepindell)
[0.19.3] - 2022-11-30
Changed
- "/insert events" commands now de-duplicates 'ATTENDEES' and 'ATTENDEENAMES' before writing to notes (for @CDP54321)
- "/process date offsets" command now ignores tasks which have been completed.
[0.19.2] - 2022-10-21
Added
- new setting "Include time blocks from completed tasks?" for the "/time blocks to calendar" command.
[0.19.1] - 2022-10-05
Added
- new setting "Set any completed tasks to not complete?" for the "/shift dates" command.
[0.19.0] - 2022-09-27
Added
- new setting "Remove @done dates?" for the "/shift dates" command.
- "/shift dates" command now also works for weekly dates (e.g.
2022-W34), leaving the date written as a weekly date.
[0.18.0] - 2022-08-31
Added
- new
includeAllDayEventsparameter for theevents()andmatchingEvents()template functions.
[0.17.1] - 2022-08-31
Changed
- the format of
*|DATE|*can now be overridden with the 'Shared Settings > Locale' setting.
[0.17.0] - 2022-08-10
Added
- the location of an event is now available in the output of "/insert day's event as list" and "/insert matching events" commands. It's formatting code is
*|LOCATION|*.
Changed
- the 'Add event ID?' option for "/time blocks to calendar" command now inserts one of the nicely-formatted event links rather than the underlying eventID. The setting has been renamed 'Add event link?' to reflect this.
[0.16.6] - 2022-07-22
Changed
- updated to newer logging framework. No functional changes.
[0.16.5] - 2022-06-17
Fixed
- work around a bug in NP's 'Timeblock text must contain string' setting (tracked down with help by @Stuw)
- code tidy up
[0.16.4] - 2022-06-12
Changed
- now uses NP's 'Timeblock text must contain string' setting (if set) when detecting whether a line has a valid Time block in it.
- improved user messaging when running '/shift dates'
[0.16.3] - 2022-05-26
New
- in /process date offsets, if a controlling date can't be found, then it will now ask the user for one instead
Changed
- removed some whitespace stripping which was useful to me, but not to others.
[0.16.2] - 2022-05-25
Added
*|ATTENDEENAMES|*placeholder, which gives either name or email address of event attendees, but no other details
Fixed
- issue with
*|URL|*placeholder
[0.16.1] - 2022-05-20
Fixed
- bug in calculation of offsets with 'b'usiness days
[0.16.0] - 2022-05-13
Added
- new /shift dates command that takes dates in the selected lines and shifts them forwards or backwards by a given date interval. (It doesn't change dates in `@done(...) mentions, or that are in brackets.)
[0.15.1] - 2022-05-06
Fixed
- typo in default configuration of '' setting
- restored 'template' parameter option
[0.15.0] - 2022-05-03
Added
- Added new 'Events List display format' and 'Events List display format for all-day events' settings to allow user to customise the event lists when run as /commands. This uses the same format as can already be passed as a parameter in the
events()template functions. Defaults are given. - Added support for including the date of an event in the output for calendar events. You can include it in format strings as placeholder
*|DATE|*. - Added more flexibility in the formatting of event lists. So now instead of including (for example)
*|ATTENDEES|*you can now include other text (including line breaks) within the placeholder, for example*|\nwith ATTENDEES|*. If the ATTENDEES is not empty, then it will output the list after a newline and the text 'with '. Here is a fuller example to use in a Template.
<%- events( {format:"### (*|CAL, |**|START|*) *|EVENTLINK|**|\nwith ATTENDEES|**|\nNOTES|**|\nURL|*", allday_format:"- (*|CAL|*) *|EVENTLINK|**|\nNOTES|**|\nURL|*", includeHeadings:true} ) %>- In date offsets, added ability to specify offset dates that work relative to each subsequent line [requested by @george65]
Changed
- Under-the-hood change to register its functions ready for NP 3.5.2. (Means minimum version that it will run with is v3.5.2.)
[0.14.1] - 2022-04-26
Changed
- Improved messaging if a Templating user tries to use this Plugin's functions, without the plugin being installed.
- Removed the version of /insert day's events that simply wrote to the Plugin Console for testing
Fixed
- Fixed events() in a template returning events for the previous day (thanks @dwertheimer for PR)
[0.14.0] - 2022-04-23
Added
- Added support for including list of Attendees in output for calendar ...
🔗 Link Creator
"🧩 Link Creator Change Log
About np.CallbackURLs Plugin
See Plugin README for details on available commands and use cases.
[1.11.1] - 2026-05-27 @dwertheimer
- Fix addNote wizard: use
textparameter for note content (wasnoteText, which NotePlan's/addNotex-callback-url does not recognize)
[1.11.0] - 2025-01-30 @dwertheimer
- Fix addNote wizard: was returning addText URL; now correctly returns addNote URL
- Open note wizard: add timeframe (week/month/quarter/year) for calendar notes; add optional highlightStart/highlightLength (cursor/selection after open)
- Add text wizard: add openType (subWindow, splitView, reuseSplitView, useExistingSubWindow) when openNote=yes
- Add note wizard: add optional highlightStart/highlightLength when openNote=yes
- Add selectTag wizard: create x-callback URL to select a tag in the sidebar
- Add installPlugin wizard: create x-callback URL to install a plugin by ID
- Add toggleSidebar wizard: create x-callback URL to toggle/show/hide sidebar (forceCollapse, forceOpen, animated)
- Helpers/general: createOpenOrDeleteNoteCallbackUrl now accepts timeframe, highlightStart, highlightLength; createAddTextCallbackUrl now accepts openType in options; useExistingSubWindow URLs now include subWindow=yes
- Tests: add tests for timeframe, highlight, openType (addText), reuseSplitView, selectTag, installPlugin, toggleSidebar; add NPXCallbackWizard.test.js for selectTag, installPlugin, toggleSidebar wizard functions
[1.10.1] - 2025-01-30 @dwertheimer
- Open note wizard: add openType options (subWindow, splitView, reuseSplitView, useExistingSubWindow) so generated openNote x-callback-urls can open in floating window, split view, reuse split view, or existing sub-window
[1.10.0] - 2025-09-23 @dwertheimer
- Add lineLink command
- Fix bug in line+headingLink where the URL was being written to clipboard even if u don't want it
[1.9.2] - 2025-08-29 @dwertheimer
- Fix chooseNote bug in TemplateRunner
[1.9.1] - 2025-08-19 @dwertheimer
- Fix bug in wizard when using showOptions()
[1.9.0] - 2025-08-18 @dwertheimer
- Fix template runner wizard bug
- Add link to run template to frontmatter of template note
- Add open a named folder view to wizard
[1.8.0] - 2025-06-09 @dwertheimer
- Added templating specific commands to wizard to reduce confusion
[1.7.0] - 2025-04-02 @dwertheimer
- Added open a folder selection to wizard
[1.6.2] - 2024-05-28 @dwertheimer
- Bump version to re-release it
[1.6.1] - 2023-09-12 @dwertheimer
- Bug fix for calling np.Templating (can't pull plugin.json)
[1.6.0] - 2023-08-27 @dwertheimer
- Adding passpack for /favorite commands (see Favorites Plugin)
[1.5.0] - 2023-06-10 (@dwertheimer)
- Adding ability to open links in a note for open tasks (under the hood uses new helpers/urls functions for consistency)
[1.4.1] - 2022-01-19 (@dwertheimer)
- Make default pretty link the title
[1.4.0] - 2022-01-19 (@dwertheimer)
- Add dialog box on URL creation for creating pretty links (thx @stacey)
[1.3.0] - 2022-12-21 (@dwertheimer)
- Fix bug when selecting self-running template
- Include ability to create self-running template
- Hide x-success behind a preference field
[1.2.1] - 2022-12-08 (@dwertheimer)
- @jgclark changed self-running templates to use semicolons to separate variables. Updated the URL maker to match
[1.2.0] - 2022-12-04 (@dwertheimer)
- Added links to lines
- Updated the way hashtags in titles are encoded (which changed in NotePlan) -- strip out hashtags in headings
[1.1.2] - 2022-10-02 (@dwertheimer)
- Renamed plugin to Link Creator
[1.1.1] - 2022-09-20 (@dwertheimer)
- Fix bug with parentheses in URL which were not urlencoded
[1.1.0] - 2022-07-16 (@dwertheimer)
- Added TemplateRunner code to run templates from links
[1.0.0] - 2022-07-11 (@dwertheimer)
- Changed plugin Name to: "🧩 External Links, X-Callback-URLs, RunPlugin Creator"
- Added command "Create Link to Current Note+Heading" with direct access from command bar
[0.6.0] = 2022-07-02 (@dwertheimer)
- Added noteInfo command
- Added deleteNote command
- Addex x-success return capability on all commands
- Added DataStore.installOrUpdatePluginsByID to init
[0.5.0] - 2022-07-01 (@dwertheimer)
-
Added addNote command
-
[0.4.0] - 2022-06-28 (@dwertheimer)
-
Added callback URLs for Shortcuts
[0.3.0] - 2022-06-25 (@dwertheimer)
- Add callbacks for FILTER and SEARCH
[0.2.0] - 2022-06-22 (@dwertheimer)
- Add Templating invokePlugin output type
[0.1.2] - 2022-06-05 (@dwertheimer)
Added
- Open documentation URL
[0.1.1] - 2022-06-05 (@dwertheimer)
Fixed
- Endless loop on cancel
- Cancel stops flow
- Improved messaging on arguments dialog
[0.1.0] - 2022-06-05 (@dwertheimer)
- Initial release, includes openNote, addText and runPlugin
📒 Templating
Templating Changelog
About Templating Plugin
See Plugin Documentation for details on available commands and use case.
DBW: REMEMBER THAT IF YOU ADDED ANY HELPERS IMPORTS, ADD THEM TO THE HELPER MODULE TO GIVE SCRIPTS ACCESS TO THEM ALSO
[2.4.5] 2026-05-17 @dwertheimer
Fixed
- Prompt cancel aborts the whole template run: When the user cancels a Command Bar prompt (including batched
showForm),render/renderFrontmatterprocessing now returnsnullinstead of an empty string.templateNewand related commands stop beforeDataStore.newNote;checkAndProcessFolderAndNewNoteTitledoes not trash the empty starter note whentemplateNewreturns no filename.insertNoteTemplate(Meeting Notes) and FormsprocessCreateNewbail out whenrenderis cancelled.
Changed
- API:
NPTemplating.render, exportedrender/renderTemplate, and Template RunnerrenderTemplatemay resolve tonullon user cancel (callers should treatnullas abort, distinct from'').
Edited in this release
np.Templating/lib/rendering/templateProcessor.js,np.Templating/lib/NPTemplating.js,np.Templating/src/Templating.js,np.Templating/src/NPTemplateRunner.jshelpers/NPEditor.js,np.MeetingNotes/src/NPMeetingNotes.js,dwertheimer.Forms/src/formSubmission.jsnp.Templating/__tests__/prompt-cancellation.test.jsnp.Templating/CHANGELOG.md,np.Templating/plugin.json— version 2.4.5-notreleased
[2.4.4] 2026-05-17 @dwertheimer
Fixed
- Command Bar batched
prompt('Question?', […])fields:parseParameterstreats the question asvarNameand the choice list aspromptMessage, soshowFormused Answer fortitle/label. Batch field labels now take the first quoted argument whenpromptMessageis an array or when it equals the comma-joined choice list (the same mis-parse as a string). The first-argument scanner reads quoted strings properly so labels include apostrophes inside double-quoted text (e.g."What's the priority?") and commas inside the question.
Added
- Tests (
promptFormBatch.test.js): Batched form labels forprompt(varName, 'Message?', […]), double-quoted questions,<%execution tags, apostrophes inside"…", and commas inside the question string.
Edited in this release
np.Templating/lib/support/modules/prompts/promptFormBatch.js,np.Templating/__tests__/promptFormBatch.test.jsnp.Templating/CHANGELOG.md,np.Templating/plugin.json— version 2.4.4
[2.4.3] 2026-05-14 @dwertheimer
Fixed
- templateNew /
renderwith--output blocks: Leading--…--in the body (after the template’s---frontmatter) is new-note output frontmatter only. It must not be peeled byFrontmatterModule.isFrontmatterTemplate/getSanitizedFmPartsduringfrontmatterProcessedrender, or the note loses that block and only trailing lines are written. Only---…---opens template-processing frontmatter on a fragment. isValidYamlContentvs markdown headings: Headings such as## Event:**include a colon and were counted as YAML key lines. A template body framed with---horizontal rules (start and end) was then misclassified as a frontmatter block,parsereturned an empty body, and Meeting Notes / renders produced no output. Markdown ATX heading lines (#…######followed by whitespace) are ignored for YAML detection so---around normal note text is not treated as frontmatter.
Changed
- New-note / output frontmatter (
--…--on first body line): Detected only inanalyzeTemplateStructure/templateNewflows. It is not parsed as template peel frontmatter inFrontmatterModule.isFrontmatterTemplateorgetSanitizedFmParts, so bodies like--\nfoo: bar\n--\nsurvive render and are written into the new note.---…---pairing still uses delimiter-awarefindSeparatorPositionsso a---body block does not close at a stray--line.
Added
- Regression tests (templateNew /
frontmatterProcessedpath):np.Templating/__tests__/templating.test.js—processFrontmatterTagsthenrender(..., { frontmatterProcessed: true })must preserve leading--…--output blocks, non-YAML---…---body starts (markdown / HR), and invalid--…--inner lines; plus EJS after the preserved block. Lower-level coverage:helpers/__tests__/NPFrontMatter/*,np.Templating/__tests__/frontmatter-module.test.js.
Edited in this release
helpers/NPFrontMatter.js,helpers/__tests__/NPFrontMatter/NPFrontMatterMisc.test.js,helpers/__tests__/NPFrontMatter/NPFrontMatter.analyzeTemplateStructure.test.jsnp.Templating/lib/support/modules/FrontmatterModule.jsnp.Templating/__tests__/frontmatter-module.test.js,np.Templating/__tests__/templating.test.jsnp.Templating/CHANGELOG.md,np.Templating/plugin.json— version 2.4.3
[2.4.1] 2026-05-03 @dwertheimer
Fixed
- TemplateRunner
replaceHeadingwith<current>: Replaced the heading section in one operation on the same note/editor object instead of inserting under the heading and then removing a paragraph from the attached note object. This fixes templates withlocation: replaceandreplaceHeading: trueleaving the original heading in place. - TemplateRunner debug logging: Summarized large template bodies, rendered results, and passed variable objects in debug logs so real-world self-test runs are easier to inspect.
Edited in this release
np.Templating/src/NPTemplateRunner.js,np.Templating/src/Templating.js,np.Templating/lib/rendering/templateProcessor.js,np.Templating/__tests__/NPTemplateRunner.test.jsnp.Templating/CHANGELOG.md,np.Templating/plugin.json— version 2.4.1
[2.4.0] 2026-04-16 @dwertheimer
Added
- TemplateRunner calendar targets:
getNoteTitlednow treats rendered calendar dates (YYYY-MM-DD,YYYY-MM,YYYY-Qn,YYYY, including values rendered from tags like<%- date.tomorrow('YYYY-MM-DD') %>) as calendar notes, and supports<tomorrow>/<yesterday>/<thismonth>/<nextmonth>/<thisquarter>/<nextquarter>/<thisyear>/<nextyear>tokens alongside<today>.
Fixed
- Frontmatter booleans and zero:
FrontmatterModule.parse/.attributesno longer replace YAMLfalseor numeric0with an empty string. That bug brokebatchPrompts: false(and any other falsey-but-valid frontmatter), so consecutiveprompt/promptDatestill batched. Onlynull/undefinedare coerced to''now.
Edited in this release
np.Templating/src/NPTemplateRunner.js,np.Templating/__tests__/NPTemplateRunner.test.jsnp.Templating/lib/support/modules/FrontmatterModule.js,np.Templating/__tests__/frontmatter-module.test.jsnp.Templating/plugin.json— version 2.4.0
[2.3.2] 2026-04-14 @dwertheimer
Added
- Opt out of automatic prompt batching per template: frontmatter
onePromptAtATime: true(orbatchPrompts: false) disables merging consecutiveprompt/promptDateinto oneCommandBar.showForm; each prompt uses its normal UI. Read from session root orsession.data. Does not affect explicitpromptForm({ ... }).
Edited in this release
np.Templating/lib/support/modules/prompts/promptFormBatch.js,PromptRegistry.js,promptFormBatch.test.jsnp.Templating/docs/PromptCommandBarForms.md,PromptCommands.mdnp.Templating/plugin.json— version 2.3.2
[2.3.1] 2026-04-14 @dwertheimer
Fixed
- macOS 12 (Monterey) / older JavaScriptCore: Removed RegExp negative lookbehind from
convertEJSClosingTagsintemplateUtils.js(replaced with a replace callback) so template rendering no longer throwsInvalid regular expression: invalid group specifier name. Templating now importsescapeRegExpfrom@helpers/regexEscapeinstead of@helpers/regexso the plugin bundle does not need to evaluatehelpers/regex.jsliterals that use the same class of syntax.
Added
promptForm({ ... }): Explicit single-tag Command Bar multi-field form. Pass a JSON5 object withtitle,submitText, andfields(string,number,bool,date,hidden); each fieldkeyis written to session for use as<%- key %>. UsesCommandBar.showFormwhenusersVersionHas('commandBarForms'); otherwise asks fields sequentially (text / choices / date). Cancel returnsfalselike other prompts; invalid config yields an HTML error comment.
Edited in this release
np.Templating/lib/support/modules/prompts/PromptFormHandler.js,index.jsnp.Templating/__tests__/promptFormTag.test.js,isCode.test.jsnp.Templating/docs/PromptCommands.md,PromptCommandBarForms.mdnp.Templating/plugin.json— version 2.3.1
[2.3.0] 2026-04-13 @dwertheimer
Requirements
noteplan.minAppVersionis now3.21. This matches Command Bar plugin forms (CommandBar.showForm), which the plugin uses to combine multiple independentprompt/promptDatetags into one form. Older NotePlan builds cannot use that API; keeping the minimum at 3.21 avoids implying full support on earlier app versions.- User-facing documentation for commands, prompts, and examples remains at NotePlan Templating docs (
plugin.url— the canonical docs URL for this plugin, not a version string).
Added
- Command Bar multi-prompt forms: When rendering templates, consecutive
promptandpromptDatetags that are independent (later prompts do not need a variable that an earlier tag in the same batch will set) are shown in a singleCommandBar.showForminstead of chainingtextPrompt,showOptions, or the legacy date picker flow for each field. - **When batching does not...
🕓 Event Helpers
What's changed in 🕓 Event Helpers?
See website README for more details, and how to configure.
[0.23.4] - 2026-06-08 @MichaelKrause
- When events come from 'Calendars by Readdle' or 'Calendar 366' apps, the plugin will now pick up their given colors. (PR#750 by @MichaelKrause.)
[0.23.3] - 2026-04-21 @jgclark
- New optional
startDayparameter that can be used in Event List and Matching Event Lists template and x-callback calls. This takes a date in the formatYYYY-MM-DDto set the first day of the range; if omitted, behaviour is unchanged, which is to start from the open calendar note’s period.
[0.23.2] - 2025-11-22 @jgclark
- add some missing PLACEHOLDERS in the setting descriptions
- dev: refactor code for improved maintainability
[0.23.1] - 2025-10-20 @jgclark
- fix regression in '/shift dates' command on tasks scheduled to weeks
[0.23.0] - 2025-08-22 @jgclark
New
- new command /insert week's events as list, which inserts this week's calendar events in the current note (for @scottc)
- new equivalent
insertWeeksEventsandlistWeeksEventsfunctions for use in automation (templating or x-callbacks)
Changed
- changed setting 'Processed tag name' to 'Processed indicator string' to clarify that you can use any string, not just hashtags. And added a note that if this string contains an emoji then it sometimes triggers a bug in NotePlan where you get some repeated characters at the end of the line.
Fixed
- regression on "/time blocks to calendar" (thanks, @WalterMusings)
- stopped timeblocks being falsely generated from
@done(...)strings under some settings
[0.22.2] - 2025-08-19 @jgclark
- add 'add computed final date' setting for '/process date offsets' command. (Previously it always added a final computed date to the relevant section heading. Now this can be turned off.)
[0.22.1] - 2025-01-03
- improve setting defaults and documentation.
[0.22.0] - 2024-09-06 @jgclark
- can now use
events()andmatchingEvents()calls from Templates running on Weekly notes and other non-daily Calendar notes (for @gdrn). - refactored documentation.
[0.21.3] - 2024-06-04 @jgclark
- fix bug when adding time blocks to calendar
- better handle template
<%- events() %>, which has no formatter string
[0.21.2] - 2024-02-13 @jgclark
- /shiftDates now shifts dates in brackets and multiples dates on a single line (to suit Project metadata).
[0.21.1] - 2024-02-06 @jgclark
New
- added 'Yes to all' as an option to the dialog when creating time blocks in "time blocks to calendar" and "process date offsets" commands
- extended 'shift dates' command to work on week dates (
>YYYY-Wnn) as well as day dates - extended 'process date offsets' and 'shift dates' commands to remove any blockIDs from lines before they change
[0.21.0] - 2023-09-29 @jgclark
New
- "/shift dates" and "/process date offsets" now unhook sync'd lines (blockIDs) from others before changing them, to preserve the other copies
- "/shift dates" now deals with checklists as well as tasks, and cancelled items too.
- "/shift dates" can now remove any 'processed tag name' (as set in the "/time blocks to calendar" command) from tasks or checklists. This is controlled by new setting "Remove any 'processed tag name' on tasks or checklists?"
- new "/Events: update plugin settings" command to allow updating settings on iOS/iPadOS devices
Changed
- "/time blocks to calendar" now more sensibly handles time blocks that contain a week reference (
>YYYY-Wnn) as well as day references - "/process date offsets" now will only offer to run "/time blocks to calendar" if there are any time blocks in the note
[0.20.3] - 2023-06-12 @jgclark
Changed
- added 'STOPMATCHING' as a possible placeholder for "/insert matching events". If present it will not process a given event further, so only the first match in the "Events match list" list will be used. (This does not stop remaining events in the day being matched.)
[0.20.2] - 2023-02-13 @jgclark
Added
- the date offset intervals (e.g.
{3d}can now use upper-case letters B,D,W,M,Q,Y as well as the existing lower-case letters - more helpful text in a dialog box
[0.20.1] - 2022-12-30 @jgclark
Added
- added support for time blocks in Checklists (available from NotePlan 3.8)
[0.20.0] - 2022-12-08 @dwertheimer, @jgclark
Added
- added 'MEETINGNOTE' link as a format option, which adds a button to create a meeting note to events in event listings. There's also a new setting 'Meeting Note Template title' which you can use to set which template to pick if you have several; if it isn't set then a list will be presented. (Note: this requires at least v1.1.2 of the separate Meeting Notes plugin.)
[0.19.4] - 2022-12-04
Added
- can now send
calendarsparameter to the commands via Templates. E.g.calendars:"list,of,calendar,names"(for @joepindell)
[0.19.3] - 2022-11-30
Changed
- "/insert events" commands now de-duplicates 'ATTENDEES' and 'ATTENDEENAMES' before writing to notes (for @CDP54321)
- "/process date offsets" command now ignores tasks which have been completed.
[0.19.2] - 2022-10-21
Added
- new setting "Include time blocks from completed tasks?" for the "/time blocks to calendar" command.
[0.19.1] - 2022-10-05
Added
- new setting "Set any completed tasks to not complete?" for the "/shift dates" command.
[0.19.0] - 2022-09-27
Added
- new setting "Remove @done dates?" for the "/shift dates" command.
- "/shift dates" command now also works for weekly dates (e.g.
2022-W34), leaving the date written as a weekly date.
[0.18.0] - 2022-08-31
Added
- new
includeAllDayEventsparameter for theevents()andmatchingEvents()template functions.
[0.17.1] - 2022-08-31
Changed
- the format of
*|DATE|*can now be overridden with the 'Shared Settings > Locale' setting.
[0.17.0] - 2022-08-10
Added
- the location of an event is now available in the output of "/insert day's event as list" and "/insert matching events" commands. It's formatting code is
*|LOCATION|*.
Changed
- the 'Add event ID?' option for "/time blocks to calendar" command now inserts one of the nicely-formatted event links rather than the underlying eventID. The setting has been renamed 'Add event link?' to reflect this.
[0.16.6] - 2022-07-22
Changed
- updated to newer logging framework. No functional changes.
[0.16.5] - 2022-06-17
Fixed
- work around a bug in NP's 'Timeblock text must contain string' setting (tracked down with help by @Stuw)
- code tidy up
[0.16.4] - 2022-06-12
Changed
- now uses NP's 'Timeblock text must contain string' setting (if set) when detecting whether a line has a valid Time block in it.
- improved user messaging when running '/shift dates'
[0.16.3] - 2022-05-26
New
- in /process date offsets, if a controlling date can't be found, then it will now ask the user for one instead
Changed
- removed some whitespace stripping which was useful to me, but not to others.
[0.16.2] - 2022-05-25
Added
*|ATTENDEENAMES|*placeholder, which gives either name or email address of event attendees, but no other details
Fixed
- issue with
*|URL|*placeholder
[0.16.1] - 2022-05-20
Fixed
- bug in calculation of offsets with 'b'usiness days
[0.16.0] - 2022-05-13
Added
- new /shift dates command that takes dates in the selected lines and shifts them forwards or backwards by a given date interval. (It doesn't change dates in `@done(...) mentions, or that are in brackets.)
[0.15.1] - 2022-05-06
Fixed
- typo in default configuration of '' setting
- restored 'template' parameter option
[0.15.0] - 2022-05-03
Added
- Added new 'Events List display format' and 'Events List display format for all-day events' settings to allow user to customise the event lists when run as /commands. This uses the same format as can already be passed as a parameter in the
events()template functions. Defaults are given. - Added support for including the date of an event in the output for calendar events. You can include it in format strings as placeholder
*|DATE|*. - Added more flexibility in the formatting of event lists. So now instead of including (for example)
*|ATTENDEES|*you can now include other text (including line breaks) within the placeholder, for example*|\nwith ATTENDEES|*. If the ATTENDEES is not empty, then it will output the list after a newline and the text 'with '. Here is a fuller example to use in a Template.
<%- events( {format:"### (*|CAL, |**|START|*) *|EVENTLINK|**|\nwith ATTENDEES|**|\nNOTES|**|\nURL|*", allday_format:"- (*|CAL|*) *|EVENTLINK|**|\nNOTES|**|\nURL|*", includeHeadings:true} ) %>- In date offsets, added ability to specify offset dates that work relative to each subsequent line [requested by @george65]
Changed
- Under-the-hood change to register its functions ready for NP 3.5.2. (Means minimum version that it will run with is v3.5.2.)
[0.14.1] - 2022-04-26
Changed
- Improved messaging if a Templating user tries to use this Plugin's functions, without the plugin being installed.
- Removed the version of /insert day's events that simply wrote to the Plugin Console for testing
Fixed
- Fixed events() in a template returning events for the previous day (thanks @dwertheimer for PR)
[0.14.0] - 2022-04-23
Added
- Added support for including list of Attendees in output for calendar events. You can include it in format strings as
*|ATTENDEES|*. This produces a comma-separated list of names or emails (where name isn't given). - Added new
daysToCoverparameter that allows multiple days to be output for the/insert day's events as listand/insert matching eventscommands (request #251 by @Stuw). For example: includedaysToCover: 3to the parameter string...