Skip to content

Releases: NotePlan/plugins

🧹 Tidy Up

Choose a tag to compare

@jgclark jgclark released this 20 Jul 12:43

🧹 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. Optional folderToStart parameter 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, or Contains) 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.
Read more

🔬 Projects + Reviews

Choose a tag to compare

@jgclark jgclark released this 17 Jul 22:44

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 @Templates and @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 #area stayed 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 combined project: key for the project's tags.
  • New progressStr setting (default: progress) — customises the progress body-line prefix and frontmatter key, consistent with the other *MentionStr settings.
  • 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 & displayGroup 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.
Read more

🔬 Projects + Reviews

Choose a tag to compare

@jgclark jgclark released this 17 Jul 15:31

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 #area stayed 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 combined project: key for the project's tags.
  • New progressStr setting (default: progress) — customises the progress body-line prefix and frontmatter key, consistent with the other *MentionStr settings.
  • 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 & displayGroup 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.
Read more

🎛 Dashboard

Choose a tag to compare

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 >date markers 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 skips setPluginData so it cannot overwrite an in-flight refresh.
  • fix: Overdue / Tag sort order earliest, due date, and most recent now 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. treatTopPriorityAsWinsshowWinsSection) registered once in DASHBOARD_DERIVED_SETTING_RULES; applied via applyDerivedDashboardSettings (React reducer) and prepareDashboardSettingsForSave (plugin persistence).
  • dev: Circular import fix: getDashboardSettingsDefaults() moved to new dashboardSettingsDefaults.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.json is saved; fix completion timer rate calculation.
  • dev: tag/mention cache timestampsgenerateTagMentionCache now updates lastTimeThisWasRunPref in sync with cache.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.json was 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 example WINS) 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() to batchRefreshSomeSections() for naming consistency with the other *refreshSomeSections functions.

[2.4.0.b44] 2026-05-23

Fixed

  • Feature Flags (FFlag_*) — all flags from the menu are written to top-level dashboardSettings in settings.json; closing via the header icon no longer resets toggles before save; dashboard-global saves always run through doSaveDashboardSettingsFromBridge so setPluginData and 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: false is set in top-level dashboardSettings.
  • Feature Flags menu — shown only in DEV logging mode, or when hidden showFeatureFlagMenu: true is set in dashboardSettings (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": true in dashboardSettings in 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 and CLOSE_UNNEEDED_SECTIONS no longer keep old TAG rows (e.g. @father after 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 cleaningcleanDashboardSettingsInAPerspective() runs once per perspective def on save/repair (saveDashboardPluginSettings); removed redundant pre-save cleans in save/switch handlers. switchToPerspective returns 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 available errors 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 via getPlainPreferenceString() and passes it through notePlanSettings; 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 sets isModified again; CLOSE_UNNEEDED_SECTIONS no longer overwrites perspectiveSettings from a stale WebView snapshot. Shared isNamedPerspectiveModified() drives the * label, **S...
Read more

🎛 Dashboard

Choose a tag to compare

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 skips setPluginData so it cannot overwrite an in-flight refresh.
  • fix: Overdue / Tag sort order earliest, due date, and most recent now 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. treatTopPriorityAsWinsshowWinsSection) registered once in DASHBOARD_DERIVED_SETTING_RULES; applied via applyDerivedDashboardSettings (React reducer) and prepareDashboardSettingsForSave (plugin persistence).
  • dev: Circular import fix: getDashboardSettingsDefaults() moved to new dashboardSettingsDefaults.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.json is saved; fix completion timer rate calculation.
  • dev: tag/mention cache timestampsgenerateTagMentionCache now updates lastTimeThisWasRunPref in sync with cache.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.json was 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 example WINS) 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() to batchRefreshSomeSections() for naming consistency with the other *refreshSomeSections functions.

[2.4.0.b44] 2026-05-23

Fixed

  • Feature Flags (FFlag_*) — all flags from the menu are written to top-level dashboardSettings in settings.json; closing via the header icon no longer resets toggles before save; dashboard-global saves always run through doSaveDashboardSettingsFromBridge so setPluginData and 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: false is set in top-level dashboardSettings.
  • Feature Flags menu — shown only in DEV logging mode, or when hidden showFeatureFlagMenu: true is set in dashboardSettings (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": true in dashboardSettings in 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 and CLOSE_UNNEEDED_SECTIONS no longer keep old TAG rows (e.g. @father after 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 cleaningcleanDashboardSettingsInAPerspective() runs once per perspective def on save/repair (saveDashboardPluginSettings); removed redundant pre-save cleans in save/switch handlers. switchToPerspective returns 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 available errors 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 via getPlainPreferenceString() and passes it through notePlanSettings; 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 sets isModified again; CLOSE_UNNEEDED_SECTIONS no longer overwrites perspectiveSettings from a stale WebView snapshot. Shared isNamedPerspectiveModified() drives the * label, Save Perspective, and doSavePerspective when live settings differ from the saved def (not only the isModified flag). After switching perspectives, * uses a dashboardSettingsBaseline snapshot so merge carryover from the previous perspective does not show as modified when isModified is false on disk. Save Perspective uses forSave (live-vs-def OR live-vs-baseline), WebView dashboardSettings, and optional settings from 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 repairDashboardSettings command 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. Wins matches Wins 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...
Read more

📦 Filer

Choose a tag to compare

@jgclark jgclark released this 26 Jun 19:43

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 ## Section becomes ### Section under ## 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 ## Done heading 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.

[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 @Archive back 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 Done but can be set to something else (for example Completed). (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.
  • 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 link as 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...
Read more

🕓 Event Helpers

Choose a tag to compare

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()and matchingEvents()" template commands so includeHeadings: false now also suppresses the per-day headings that were previously always added when daysToCover > 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, or y (e.g. {2w} now produces >2026-W32 instead of a day date).

[0.23.3] - 2026-04-21 @jgclark

  • New optional startDay parameter that can be used in Event List and Matching Event Lists template and x-callback calls. This takes a date in the format YYYY-MM-DD to 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 insertWeeksEvents and listWeeksEvents functions 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() and matchingEvents() 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 calendars parameter 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 includeAllDayEvents parameter for the events() and matchingEvents() 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 ...
Read more

🔗 Link Creator

Choose a tag to compare

"🧩 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 text parameter for note content (was noteText, which NotePlan's /addNote x-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

Choose a tag to compare

@dwertheimer dwertheimer released this 12 Jun 16:01
d536252

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 / renderFrontmatter processing now returns null instead of an empty string. templateNew and related commands stop before DataStore.newNote; checkAndProcessFolderAndNewNoteTitle does not trash the empty starter note when templateNew returns no filename. insertNoteTemplate (Meeting Notes) and Forms processCreateNew bail out when render is cancelled.

Changed

  • API: NPTemplating.render, exported render / renderTemplate, and Template Runner renderTemplate may resolve to null on user cancel (callers should treat null as 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.js
  • helpers/NPEditor.js, np.MeetingNotes/src/NPMeetingNotes.js, dwertheimer.Forms/src/formSubmission.js
  • np.Templating/__tests__/prompt-cancellation.test.js
  • np.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: parseParameters treats the question as varName and the choice list as promptMessage, so showForm used Answer for title/label. Batch field labels now take the first quoted argument when promptMessage is 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 for prompt(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.js
  • np.Templating/CHANGELOG.md, np.Templating/plugin.json — version 2.4.4

[2.4.3] 2026-05-14 @dwertheimer

Fixed

  • templateNew / render with -- output blocks: Leading ---- in the body (after the template’s --- frontmatter) is new-note output frontmatter only. It must not be peeled by FrontmatterModule.isFrontmatterTemplate / getSanitizedFmParts during frontmatterProcessed render, or the note loses that block and only trailing lines are written. Only ------ opens template-processing frontmatter on a fragment.
  • isValidYamlContent vs 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, parse returned 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 in analyzeTemplateStructure / templateNew flows. It is not parsed as template peel frontmatter in FrontmatterModule.isFrontmatterTemplate or getSanitizedFmParts, so bodies like --\nfoo: bar\n--\n survive render and are written into the new note. ------ pairing still uses delimiter-aware findSeparatorPositions so a --- body block does not close at a stray -- line.

Added

  • Regression tests (templateNew / frontmatterProcessed path): np.Templating/__tests__/templating.test.jsprocessFrontmatterTags then render(..., { 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.js
  • np.Templating/lib/support/modules/FrontmatterModule.js
  • np.Templating/__tests__/frontmatter-module.test.js, np.Templating/__tests__/templating.test.js
  • np.Templating/CHANGELOG.md, np.Templating/plugin.json — version 2.4.3

[2.4.1] 2026-05-03 @dwertheimer

Fixed

  • TemplateRunner replaceHeading with <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 with location: replace and replaceHeading: true leaving 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.js
  • np.Templating/CHANGELOG.md, np.Templating/plugin.json — version 2.4.1

[2.4.0] 2026-04-16 @dwertheimer

Added

  • TemplateRunner calendar targets: getNoteTitled now 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 / .attributes no longer replace YAML false or numeric 0 with an empty string. That bug broke batchPrompts: false (and any other falsey-but-valid frontmatter), so consecutive prompt / promptDate still batched. Only null / undefined are coerced to '' now.

Edited in this release

  • np.Templating/src/NPTemplateRunner.js, np.Templating/__tests__/NPTemplateRunner.test.js
  • np.Templating/lib/support/modules/FrontmatterModule.js, np.Templating/__tests__/frontmatter-module.test.js
  • np.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 (or batchPrompts: false) disables merging consecutive prompt / promptDate into one CommandBar.showForm; each prompt uses its normal UI. Read from session root or session.data. Does not affect explicit promptForm({ ... }).

Edited in this release

  • np.Templating/lib/support/modules/prompts/promptFormBatch.js, PromptRegistry.js, promptFormBatch.test.js
  • np.Templating/docs/PromptCommandBarForms.md, PromptCommands.md
  • np.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 convertEJSClosingTags in templateUtils.js (replaced with a replace callback) so template rendering no longer throws Invalid regular expression: invalid group specifier name. Templating now imports escapeRegExp from @helpers/regexEscape instead of @helpers/regex so the plugin bundle does not need to evaluate helpers/regex.js literals that use the same class of syntax.

Added

  • promptForm({ ... }): Explicit single-tag Command Bar multi-field form. Pass a JSON5 object with title, submitText, and fields (string, number, bool, date, hidden); each field key is written to session for use as <%- key %>. Uses CommandBar.showForm when usersVersionHas('commandBarForms'); otherwise asks fields sequentially (text / choices / date). Cancel returns false like other prompts; invalid config yields an HTML error comment.

Edited in this release

  • np.Templating/lib/support/modules/prompts/PromptFormHandler.js, index.js
  • np.Templating/__tests__/promptFormTag.test.js, isCode.test.js
  • np.Templating/docs/PromptCommands.md, PromptCommandBarForms.md
  • np.Templating/plugin.json — version 2.3.1

[2.3.0] 2026-04-13 @dwertheimer

Requirements

  • noteplan.minAppVersion is now 3.21. This matches Command Bar plugin forms (CommandBar.showForm), which the plugin uses to combine multiple independent prompt / promptDate tags 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 prompt and promptDate tags that are independent (later prompts do not need a variable that an earlier tag in the same batch will set) are shown in a single CommandBar.showForm instead of chaining textPrompt, showOptions, or the legacy date picker flow for each field.
  • **When batching does not...
Read more

🕓 Event Helpers

Choose a tag to compare

@jgclark jgclark released this 08 Jun 20:20
d536252

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 startDay parameter that can be used in Event List and Matching Event Lists template and x-callback calls. This takes a date in the format YYYY-MM-DD to 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 insertWeeksEvents and listWeeksEvents functions 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() and matchingEvents() 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 calendars parameter 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 includeAllDayEvents parameter for the events() and matchingEvents() 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 daysToCover parameter that allows multiple days to be output for the /insert day's events as list and /insert matching events commands (request #251 by @Stuw). For example: include daysToCover: 3 to the parameter string...
Read more