Releases: NotePlan/plugins
🧹 Tidy Up
🧹 Tidy Up Changelog
See Plugin README for full details on the available commands and use from callbacks and templates.
[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.
🎨 Theme Chooser
np.ThemeChooser Changelog
[1.10.0] 2026-03-26 @dwertheimer
- Add Refresh Current Theme command: re-applies the active theme (
Editor.setThemewith the current file) to reload theme CSS after editing a theme
[1.9.1] 2025-02-20 @dwertheimer
- Add support for Eduard's hex colors in frontmatter (do not quote the hex color even though it's illegal YAML)
[1.9.0] 2025-02-20 @dwertheimer
- Add color picker to choose colors and write to frontmatter
[1.7.2] 2023-08-24 @dwertheimer
- Fix presets bug where presets were empty - found by @clayrussell
[1.7.1] 2023-08-22 @dwertheimer
- Add theme choosing to frontmatter-based theme setting
[1.7.0] 2023-08-22 @dwertheimer
- Added frontmatter setting of theme on a per-note basis
[1.6.2] 2023-07-09 @dwertheimer
- Remove background color from code blocks which was causing selections to fail.
[1.6.1] 2023-03-31 @dwertheimer
- Adding fancier version of inline comment hide
[1.6.0] 2023-03-31 @dwertheimer
- Adding end-of-line-comment-hide
[1.5.10] 2023-03-27 @dwertheimer
- Added messaging about shouldOverwriteFont
[1.5.9] 2023-03-27 @dwertheimer
- Fix bug with boolean settings
[1.5.8] 2023-03-27 @dwertheimer
- Add underline style to all titles
[1.5.7] 2022-12-15 @dwertheimer
- Fix bug in dark/light toggle
[1.5.6] 2022-11-29 @dwertheimer
- Add /Customize Themes
- Fix bug with how themes are saved as default (use filename, not theme name)
[1.4.0] 2022-09-15 @dwertheimer
- Allow users to change the name of the command
- Under-the-hood tweaks to genericize the presets functionality
[1.3.0] 2022-09-01 @dwertheimer
- Change to match new API signature for theme getting/setting
[1.2.1] 2022-06-24 @dwertheimer
- Remove testing command
[1.2.0] 2022-06-24 @dwertheimer
Critical bug fix
- Save preferences so that your settings get restored when plugin gets refreshed
[1.1.1] 2022-06-24 @dwertheimer
Features
- Added toggle light/dark (you need to set one favorite of each first) - thanks @jgclark for this idea
Improvements
- Added note to prefs/settings telling you how to set the presets - thanks @docJulien for the suggestion
- Hide the presets that have not been set yet (reduce clutter)
[1.0.0] 2022-06-23 @dwertheimer
- Initial release with commands:
/Choose Theme/Change Theme Preset
🎨 Theme Chooser
np.ThemeChooser Changelog
[1.10.0] 2026-03-26 @dwertheimer
- Add Refresh Current Theme command: re-applies the active theme (
Editor.setThemewith the current file) to reload theme CSS after editing a theme
[1.9.1] 2025-02-20 @dwertheimer
- Add support for Eduard's hex colors in frontmatter (do not quote the hex color even though it's illegal YAML)
[1.9.0] 2025-02-20 @dwertheimer
- Add color picker to choose colors and write to frontmatter
[1.7.2] 2023-08-24 @dwertheimer
- Fix presets bug where presets were empty - found by @clayrussell
[1.7.1] 2023-08-22 @dwertheimer
- Add theme choosing to frontmatter-based theme setting
[1.7.0] 2023-08-22 @dwertheimer
- Added frontmatter setting of theme on a per-note basis
[1.6.2] 2023-07-09 @dwertheimer
- Remove background color from code blocks which was causing selections to fail.
[1.6.1] 2023-03-31 @dwertheimer
- Adding fancier version of inline comment hide
[1.6.0] 2023-03-31 @dwertheimer
- Adding end-of-line-comment-hide
[1.5.10] 2023-03-27 @dwertheimer
- Added messaging about shouldOverwriteFont
[1.5.9] 2023-03-27 @dwertheimer
- Fix bug with boolean settings
[1.5.8] 2023-03-27 @dwertheimer
- Add underline style to all titles
[1.5.7] 2022-12-15 @dwertheimer
- Fix bug in dark/light toggle
[1.5.6] 2022-11-29 @dwertheimer
- Add /Customize Themes
- Fix bug with how themes are saved as default (use filename, not theme name)
[1.4.0] 2022-09-15 @dwertheimer
- Allow users to change the name of the command
- Under-the-hood tweaks to genericize the presets functionality
[1.3.0] 2022-09-01 @dwertheimer
- Change to match new API signature for theme getting/setting
[1.2.1] 2022-06-24 @dwertheimer
- Remove testing command
[1.2.0] 2022-06-24 @dwertheimer
Critical bug fix
- Save preferences so that your settings get restored when plugin gets refreshed
[1.1.1] 2022-06-24 @dwertheimer
Features
- Added toggle light/dark (you need to set one favorite of each first) - thanks @jgclark for this idea
Improvements
- Added note to prefs/settings telling you how to set the presets - thanks @docJulien for the suggestion
- Hide the presets that have not been set yet (reduce clutter)
[1.0.0] 2022-06-23 @dwertheimer
- Initial release with commands:
/Choose Theme/Change Theme Preset
🔬 Projects + Reviews
What's changed in 🔬 Projects + Reviews plugin?
See website README for more details, and how to configure.under-the-hood fixes for integration with Dashboard plugin
[2.0.0.b14] - 2026-03-26
- change default metadata write behavior: project date fields now write to separate frontmatter keys (
start,due,reviewed,completed,cancelled,nextReview) instead of being embedded in the combinedproject/metadatavalue.
[2.0.0.b13] - 2026-03-26
- when invalid frontmatter metadata values are detected (like
review: @review()ordue: @due()), automatically remove the affected frontmatter key. - normalize mention-style date frontmatter values (e.g.
due: @due(2026-03-09)) to plain date values (due: 2026-03-09) during Project constructor processing. - Handle frontmatter fields in a case-insensitive manner.
- Fix gap at start of topbar if not showing Perspective.
[2.0.0.b12] - 2026-03-22
- improve multi-column layout
- remove two config settings that should have been removed earlier.
- dev: streamline CSS definitions
[2.0.0.b11] - 2026-03-20
Project Metadata & Frontmatter
Project metadata can now be fully stored in frontmatter, either as a single configurable key (project:) or as separate keys for individual fields (start, due, reviewed, etc.). Migration is automatic — when any command updates a note with body-based metadata, it moves it to frontmatter and cleans up the body line. After a review is finished, any leftover body metadata line is replaced with a migration notice, then removed on the next finish.
Modernised Project List Design
The Rich project list has been significantly modernised with a more compact, calmer layout showing more metadata at a glance.
New Controls
An "Order by" control has been added to the top bar (completed/cancelled/paused projects sort last unless ordering by title). Automatic refresh for the Rich project list is available via a new "Automatic Update interval" setting (in minutes; 0 to disable).
Progress Reporting
Weekly per-folder progress CSVs now use full folder paths consistently and include a totals row. This data can also be visualised as two heatmaps — notes progressed per week and tasks completed per week.
Other
The "Group by folder" now defaults to off.
[1.3.1] - 2026-02-26
- New setting "Theme to use for Project Lists": if set to a valid installed Theme name, the Rich project list window uses that theme instead of your current NotePlan theme. Leave blank to use your current theme.
- Fixed edge case with adding progress updates and frontmatter.
- Fixed malformed frontmatter mentions (e.g.
@review()or@due()) causing repeated runtime processing; now logs at WARN level and safely ignores empty bracket values.
[1.3.0] - 2026-02-20
Display Improvements
- Supports opening the Project Lists window in NotePlan's main window on macOS. See Display setting "Open Project Lists in what sort of macOS window?".
- Adds the plugin to the NP Sidebar list of plugins
- Now highlights the project in the list that is currently being reviewed
- Moved the display toggles to a new "Filter…" menu in the top bar, and added "Show next actions?" and "Show paused?" toggles. Other changes to layout at narrower window widths.
- When running in the main window, clicking on a project note now opens it in a split view to the side.
- Added 'Next' review button to top bar.
- Added 'Start' review button to the edit dialogs
- Added an 'Add Task' button to the edit dialog, which asks user for task details, and which heading to add it under.
- Added a count badge to project list rows: shows count of open (non-future) items in a small grey square. Badges only appear for active projects and when counts are greater than zero.
- Smartly truncates long 'next action' lines
- Uses a note's icon in the project list, if set in the note's frontmatter
- Turned back on the automatic updates of Dashboard plugin (if open). [Requires Dashboard v2.4.0 beta 18 or later.]
- Improved the dialog box title (now includes folder and clickable project note name)
- Progress line format now changed to remove colon after date by default (i.e.
Progress: <num>@YYYY-MM-DD <description>), but existing lines will still be parsed correctly. - If "display dates?" setting is off, then any progress or next actions lines are shown under the project title, rather than to the side.
Processing Improvements
- Supports projects in (Team)Space notes, using the settings in the Perspective from Dashboard v2.4 which allows you to specify which (Team)Spaces you wish to include, plus whether or not to include the Private "Space" (all notes not in a Space).
- New 'Sequential' project marker that automatically makes the first open task/checklist in a project note the 'next action'. To set this add the frontmatter
project: #sequential. - Improved next action processing: now only the first tagged item is shown; if there are no tagged items and a sequential tag is present in the frontmatter, the first open item is displayed instead.
- New setting "Progress Heading" allows to put a heading wherever you want in a project note for the
Progress: ...lines to live. If a note has existing progress lines when this is first set, it will first find them and insert the heading above the lines. (Requested by @harold.) - New setting "Also write most recent Progress line to frontmatter?". When turned on this allows the current progress information to be used in Folder Views. (default: off) (for @oak86)
- Pausing or un-pausing on a Project now also updates the
@reviewed()date - Stops the 'next action' check from running if the project note is marked as
#sequential
Fixed
- Re-wrote finding open project note now there can be multiple Editors open.
- Folder name (including Space name) not being included in project completion list in yearly note
- Progress lines with 100% were parsed as 10%
- Other smaller improvements and fixes (including those reported by @garba, @mourique and @doug)
🔬 Projects + Reviews
What's changed in 🔬 Projects + Reviews plugin?
See website README for more details, and how to configure.under-the-hood fixes for integration with Dashboard plugin
[2.0.0.b12] - 2026-03-21
- remove two config settings that should have been removed earlier.
[2.0.0.b11] - 2026-03-20
Project Metadata & Frontmatter
Project metadata can now be fully stored in frontmatter, either as a single configurable key (project:) or as separate keys for individual fields (start, due, reviewed, etc.). Migration is automatic — when any command updates a note with body-based metadata, it moves it to frontmatter and cleans up the body line. After a review is finished, any leftover body metadata line is replaced with a migration notice, then removed on the next finish.
Modernised Project List Design
The Rich project list has been significantly modernised with a more compact, calmer layout showing more metadata at a glance.
New Controls
An "Order by" control has been added to the top bar (completed/cancelled/paused projects sort last unless ordering by title). Automatic refresh for the Rich project list is available via a new "Automatic Update interval" setting (in minutes; 0 to disable).
Progress Reporting
Weekly per-folder progress CSVs now use full folder paths consistently and include a totals row. This data can also be visualised as two heatmaps — notes progressed per week and tasks completed per week.
Other
The "Group by folder" now defaults to off.
[1.3.1] - 2026-02-26
- New setting "Theme to use for Project Lists": if set to a valid installed Theme name, the Rich project list window uses that theme instead of your current NotePlan theme. Leave blank to use your current theme.
- Fixed edge case with adding progress updates and frontmatter.
[1.3.0] - 2026-02-20
Display Improvements
- Supports opening the Project Lists window in NotePlan's main window on macOS. See Display setting "Open Project Lists in what sort of macOS window?".
- Adds the plugin to the NP Sidebar list of plugins
- Now highlights the project in the list that is currently being reviewed
- Moved the display toggles to a new "Filter…" menu in the top bar, and added "Show next actions?" and "Show paused?" toggles. Other changes to layout at narrower window widths.
- When running in the main window, clicking on a project note now opens it in a split view to the side.
- Added 'Next' review button to top bar.
- Added 'Start' review button to the edit dialogs
- Added an 'Add Task' button to the edit dialog, which asks user for task details, and which heading to add it under.
- Added a count badge to project list rows: shows count of open (non-future) items in a small grey square. Badges only appear for active projects and when counts are greater than zero.
- Smartly truncates long 'next action' lines
- Uses a note's icon in the project list, if set in the note's frontmatter
- Turned back on the automatic updates of Dashboard plugin (if open). [Requires Dashboard v2.4.0 beta 18 or later.]
- Improved the dialog box title (now includes folder and clickable project note name)
- Progress line format now changed to remove colon after date by default (i.e.
Progress: <num>@YYYY-MM-DD <description>), but existing lines will still be parsed correctly. - If "display dates?" setting is off, then any progress or next actions lines are shown under the project title, rather than to the side.
Processing Improvements
- Supports projects in (Team)Space notes, using the settings in the Perspective from Dashboard v2.4 which allows you to specify which (Team)Spaces you wish to include, plus whether or not to include the Private "Space" (all notes not in a Space).
- New 'Sequential' project marker that automatically makes the first open task/checklist in a project note the 'next action'. To set this add the frontmatter
project: #sequential. - Improved next action processing: now only the first tagged item is shown; if there are no tagged items and a sequential tag is present in the frontmatter, the first open item is displayed instead.
- New setting "Progress Heading" allows to put a heading wherever you want in a project note for the
Progress: ...lines to live. If a note has existing progress lines when this is first set, it will first find them and insert the heading above the lines. (Requested by @harold.) - New setting "Also write most recent Progress line to frontmatter?". When turned on this allows the current progress information to be used in Folder Views. (default: off) (for @oak86)
- Pausing or un-pausing on a Project now also updates the
@reviewed()date - Stops the 'next action' check from running if the project note is marked as
#sequential
Fixed
- Re-wrote finding open project note now there can be multiple Editors open.
- Folder name (including Space name) not being included in project completion list in yearly note
- Progress lines with 100% were parsed as 10%
- Other smaller improvements and fixes (including those reported by @garba, @mourique and @doug)
⏱ Habits and Summaries
What's Changed in ⏱ Habits and Summaries plugin?
(And see the full README.)
[1.1.0.b11] - 2026-03-20
- add a new period selector option "Custom range ..." at the top of the "Habit & Summary Charts" window.
[1.1.0.b10] - 2026-03-18
- change charts display to use the existing "What time period should the Progress update cover?" setting, and to show it at the top of the display.
- add "quarter to date" and "last 3 months" options to the available ones for the "What time period should the Progress update cover?" setting
- further layout tweaks to suit longer data periods
- switch to using window and sidebar title "Habit & Summary Charts"
[1.1.0.b9] - 2026-03-07
- add demo mode for JGC, controlled by hidden 'useDemoData' boolean setting, and when true picking up from
demoData.jsonfile in the same folder as settings. - dev: shared the AnyChart heatmap HTML/JS pattern with the Reviews plugin for its weekly Area/Project progress heatmaps.
[1.1.0.b8] - 2026-03-07
- fix: totals for time-based tags
- dev: hidden setting useDemoData for chart summary. When true, chart data is read from
demoData.json(serialised occurrences) instead of livegatherOccurrences. When useDemoData is false and Log Level is DEBUG, running the chart summary writes the current live data todemoData.jsonfor later use as demo data.
[1.1.0.b7] - 2026-03-06 (unreleased)
- the TOTALS section now slides under AVERAGES when window isn't wide enough
- heatmap grid now adjusts width responsively.
[1.1.0.b6] - 2026-02-13 (unreleased)
- change: /period stats now excludes future dates when the chosen period (week/month/quarter/year) extends beyond today.
- dev: refactored
chartStats.jsto use the same data-gathering path as Period Stats and Progress Update (gatherOccurrences+gatherOccurrencesHelpers+TMOccurrences). - dev: refactored
chartStatsScript.jsto move stats generation code intochartStats.js, to improve testability and maintainability - dev: fix showHTMLV2() to always write out to savedFilename if set, even if window fails to open
- fix: @mention totals and averages – normalise mention matching so config entries with or without leading
@or#both match note text (e.g.sleepand@sleep).
[1.1.0.b5] - 2026-02-12 (unreleased)
- suppress display of 'total' or 'average' stats and 'average line' on items that aren't listed in the total or average settings.
- add display of a 'days:' stat for the items which are defined as 'count'
- fix calculations to count items without a numeric value as
1 - fix calculations to total items of type
#hashtag/4 - tweak display spacing
[1.1.0.b4] - 2026-02-04 (private beta)
- removed setting "Yes/No chart height (px)" as it wasn't being used
- used user's locale rather than 'en-US' in formatting chart labels
- disabled the many checkboxes at the top of the window
- also show the averages and totals (where relevant) in the header of the bar charts
- weekly average bars now always go Monday-Sunday
- where a week has no data, prevent the weekly average bar from showing
- revert grid and background colours in charts to what prototype had
- update tooltips to show localised short date, including day name (e.g. "Sun, 8 Feb 2026")
- further style tweaks
[1.1.0.b3] - 2026-02-03 (private beta)
- Chart Summary Stats: new setting Chart average line with options: no average, 7-day moving average, or average of each successive weekly period.
- fix to grid and text colors in charts
- fix (I hope) to window floating off on refresh. Can now add back the Reload button.
[1.1.0.b2] - 2026-02-03 (unreleased)
- Added back missing settings for /Heatmap... commands
- Fixed Heatmaps not showing dates in tooltips
- The existing functions now support durations in
H:MMformat not just decimal (e.g.@sleep(7:42)as well as@sleep(7.7)).
[1.1.0.b1] - 2026-02-02 (private beta)
- Added /Chart Summary Stats command. This shows your progress update as beautifully-presented charts and statistics in a window. (It was prototyped by @Grdn and then integrated, updated and made maintainable by @jgclark.)
- Renamed two commands:
- /period stats (was /periodStats)
- /progress update (was /appendProgressUpdate)
Significant changes since @Grdn's prototype
- Added to NP sidebar
- Moved all configuration from code to settings system
- Simplified specifying colors for charts, and added Tailwind color support
- Removed 'timeline' option
- Now styled by the helper-provided Theme translation, and therefore removed unncessary dark/light toggle
- Chart stats now track which tags include any time-based values and display their sums and averages in HH:MM format (not decimal) in the summary and tooltips. This can be overriden by the "Tags to display using time format" setting.
- yes/no habits can be specified in a calendar note as either:
- the habit as a completed task or checklist item;
- For #hashtag or @mention: does it appear anywhere in the note?
[1.0.3] - 2026-01-30 (unreleased)
- worked around a new bug in the API for getting hashtags and mentions that meant some were being ignored, affecting the accuracy of the plugin's output.
[1.0.2] - 2026-01-29 (unreleased)
- under-the-hood code quality improvements, hopefully fixing some subtle bugs
[1.0.1] - 2025-10-11
Dev
- Fixed formation of 'Refresh' x-callbacks for /appendProgressUpdate (only noticeable to devs)
Fixed
- running the
progressUpdate(...)template tag wouldn't write to anything other than the current note.
[1.0.0] - 2025-10-08
Rather arbitrarily promoting this to v1.0. But I think it deserves it after 4 years!
New
- Adds support for 'all' time period in /periodStats command, including x-callback (for @Grdn)
- Allow override of settings for /periodStats command when called from x-callbacks (for @Grdn). This is achieved through a new 4th callback argument where any relevant settings can be over-ridden. (See examples in README!) Note: will work for newly-created 'Refresh' buttons, but existing progress sections may need re-generating from scratch for this to work.
Changed
- In the progress update output, if an item is asked for both in "average" and "total", then the output will show them combined, rather than as separate lines (for @joshdoyle, closes #614).
- If you 'Refresh' an existing progress summary in an older note, it should now use the date interval when it was created, rather than the current date interval (for @vorg, closes #450). Note: will work for newly-created 'Refresh' buttons, but existing progress sections may need re-generating from scratch for this to work.
- Uses richer menu in /periodStats command (available from NP 3.18.0)
- Add note icon to periodStats output notes.
Fixed
- stop periodStats opening its output note in a new split window when it was already open
[0.22.1] - 2024-09-13
- fix empty lines appearing in output of some
progressUpdate(...)template calls (reported by Madscientist and Kc)
[0.22.0] - 2024-06-04 by @aaronpoweruser
- Add new "checklist progress" option to appendProgressUpdate command (by @aarong). See README for details.
[0.21.0] - 2024-03-03
- new "Weekly Stats for Mermaid" command. See README for details.
- added a 'Refresh' button to periodStats outputs (except where the interval cannot be back-computed)
- fix to 'sparkline' output of 'Yes/No Items' (thanks to report by @thor)
[0.20.4] - 2024-02-16
- fix to "Weekly Stats as CSV" command output
[0.20.3] - 2024-01-30
- fixed problem when using
periodStats()tag from a template (thanks to report by @bhan.me). Requires updating Templating plugin to v1.10.2 as well.
[0.20.2] - 2023-12-30
- added x-callback options for /periodStats command. See documentation for details.
[0.20.1] - 2023-11-10
- fix Refresh button not working after '/append progress update' command
- turns down logging against an API error
[0.20.0] - 2023-10-12
Added
- new today progress command that summarises tags or mentions within today's note. This could be useful for summarising
@calories(...)noted from different meals, for example. This can also be invoked by an x-callback call, and through template calls. (For @seanokana) - new heatmap for tag command that displays a 'heatmap' chart of a chosen tag's values for each day (e.g. all
@work(...)values from daily notes) - new Habits+Summaries:update plugin settings command, that allows settings to be changed on iOS/iPadOS.
[0.19.4] - 2023-09-26 unreleased
Added
- Refresh button to out...
🧹 Tidy Up
🧹 Tidy Up Changelog
See Plugin README for full details on the available commands and use from callbacks and templates.
[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.
🔁 @repeat Extensions
What's changed in 🔁 Repeat Extensions plugin?
Please see the Readme for this plugin for more details, including the available settings. For this plugin to work, you need to have the 'Append Completion Date' setting turned on in Preferences > Todo.
[1.1.0] - 2026-03-18
- This can nan now generate repeats on cancelled tasks -- in notes with the special repeat trigger in the frontmatter. To turn this on, set new option "Allow repeats in cancelled paragraphs?" to true. (Note: Because of API limitations, this will only work in notes with the repeat trigger set.)
- Fix to possible bug identified by @cursor.
[1.0.1] - 2025-09-17
Changed
- Adds future ability for plugin to auto-update itself.
[1.0.0] - 2025-09-06
New feature: can now sort the section after a repeat has been generated in it. There are 2 new settings:
- "Run Task Sorter after changes?". If set, it will sort the lines in the section after a repeat has been generated in it. The ordering is controlled by the next setting.
- "Order for Task Sorting". This is a comma-separated list of fields to sort the section by, after generating repeats. The choices are any combination of 'content', 'due' (date), 'priority', 'mentions', 'hashtags'. Each field can be preceded by a minus sign to sort in reverse order. This is most useful for '-priority' which will sort from highest to lowest.
Note: This requires @dwertheimer's 'Task Sorting & Tools' Plugin to be installed.
[0.9.1] - 2025-08-29
Changed
- to avoid issues, any sync marker (the blue asterisk) on the completed task is not included on the new version of the task. (Thanks, @laurah + @i_mush. Addresses #672.)
- Further, when a task lives in a regular/project note, and the sync copy is in a Calendar note, then marking it as complete in the Calendar note will make the new repeated task appear in the regular note. (For @laurah. Addresses #672.)
[0.9.0] - 2025-05-26
Changed
- new setting "Don't look for repeats in Done or Archive note sections?", which defaults to false. (Closes #586 for @dbcoyer and @ouhakheme)
Fixed
- new repeats are now indented to the same level as the original line
- not working on notes with just 1 line
[0.8.2] - 2024-11-02
- turn off warning on deleting
@repeat()s -- useful if you have Delete Completed Repeats setting turned on. Note: requires NotePlan v3.15 beta from 2024-11-02 or later.
[0.8.1] - 2024-06-14
- fixed bug and improved logging
[0.8.0] - 2024-06-09
- added setting 'Delete completed item?', which when set deletes rather than keeps the completed repeated item.
- fix detailed logging error in dateTime::cODS
[0.7.1] - 2024-06-07
- can now be run from an x-callback or function, passing in the note to process. This was needed for the new Tidy plugin command, which generate any needed repeats in all recently-changed notes.
[0.7.0] - 2024-03-08
- adjust new date calculation: when there is no task due date, use the note date if it exists, otherwise default to (current behavior) of task completion date. (PR by @ameritrash)
- fix to @repeat(1m) repeats in a monthly note not being written into a monthly note (etc.)
📒 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.2.11] 2026-03-19 @dwertheimer
Fixed
- Templating AI consent before analysis: When template rendering fails and AI analysis is eligible, the plugin now prompts with a likely error cause + snippet before calling
NotePlan.aifor suggestions.
Edited in this release
np.Templating/lib/engine/aiAnalyzer.js— prompt user withshowMessageYesNobefore callingNotePlan.ainp.Templating/__tests__/*— mock AI consent prompt for deterministic tests
[2.2.10] 2026-03-16 @dwertheimer
Fixed
- templateRunner run-from-code when Forms create-new: When called with no template name but args containing
newNoteTitle(and optionally non-emptytemplateBody),processTemplateArgumentsnow setsisRunFromCode = trueso the main block runs and the note is created and optionally opened in the editor. Previously onlygetNoteTitledor non-emptytemplateBodytriggered run-from-code, so Forms create-new with empty templateBody in the first pass never entered the block. - templateRunner return value when nothing executed: When the main block is not entered (no template name, not run-from-code, no passed template body), templateRunner now returns
nullinstead of falling through toundefined, so callers (e.g. Forms) can treat it as failure and show an error instead of closing the window. Return type updated toPromise<string | void | null>. - CommandBar.prompt return: When "You must supply a template title" is shown, the function now returns
nullso the caller does not treat it as success.
Edited in this release
np.Templating/plugin.json— Version 2.2.10; lastUpdateInfo.np.Templating/CHANGELOG.md— This section.np.Templating/src/NPTemplateRunner.js—processTemplateArguments: treatargs.newNoteTitle(or non-emptyargs.templateBody) as run-from-code;templateRunnerExecute: returnnullwhen main block skipped, and when CommandBar.prompt for missing template title; return typePromise<string | void | null>.
[2.2.9] 2026-01-XX @dwertheimer
- Add new hidden command
getRenderContextfor use by other plugins (e.g., Forms plugin)- Returns the full templating render context object with all globals, modules, and helpers (date, time, note, tasks, moment, etc.)
- Includes timing logs for performance monitoring (setup, config, engine creation, context building, total time)
- Allows other plugins to reuse templating context without duplicating code
- Accessible via
DataStore.invokePluginCommandByName('getRenderContext', 'np.Templating', [userData])
- Comprehensive template search refactoring - Expand template search functions to search in both @templates and @Forms directories across all spaces
- New shared utility: Created
getTemplateFolderPrefixes()function that builds complete list of folder prefixes including:- Private root folders:
@Templatesand@Forms(or localized equivalents) - All teamspace root folders:
%%NotePlanCloud%%/<teamspaceID>/@Templatesand%%NotePlanCloud%%/<teamspaceID>/@Forms
- Private root folders:
- Core template search functions updated:
getFilteredTemplateList- Now searches in both private root and all teamspace root foldersgetTemplateNote- Now searches all teamspaces, not just private rootgetFilenameFromTemplate- Filters notes from all template folders in all spacesgetTemplateContent- Searches in all template folders when finding templatestemplateExists- Searches in all template folders (Templates, Forms, all spaces)
- User-facing commands updated:
templateInsertandtemplateAppend- Now usegetTemplateNote(searches all folders/spaces)<current>prompt validation - Now checks if note is in any template folder (not just @templates)addFrontmatterToTemplate(NPTemplateRunner) - Now usesgetTemplateNotechooseTemplate- Now useschooseNoteV2for decorated note selection UI (shows icons, colors, folder paths)- Automatically displays templates from both @templates and @Forms directories across all spaces
- No longer limited to just @templates folder in display logic
- Improved user experience with visual decorations and better folder path display
- Localization support:
- All functions now use
DataStore.preference('templateFolder')for localized template folder names instead of hardcoded '@templates' - All functions now use
DataStore.preference('formsFolder')for localized forms folder names (with '@Forms' fallback)
- All functions now use
- Bug fixes:
- Fixes issue where form processing templates stored in @Forms weren't found by
templateRunnerandgetTemplateNotewhen processing form submissions - Fixes issue where templates in teamspaces weren't found by template search functions
- Fixes issue where form processing templates stored in @Forms weren't found by
- Impact: Templates can now be stored in @Forms directory (for form processing) or @templates directory (for regular templates), in both private root and teamspace root folders, and all search functions will find them correctly
- New shared utility: Created
- Replace
chooseNote/chooseOptionwithchooseNoteV2throughout np.Templating - Modernize all note selection UI- All functions updated to use
chooseNoteV2:handleNoteSelectioninNPTemplateRunner.js- Replaced deprecatedchooseNotewithchooseNoteV2- Uses
DataStore.projectNoteswhich automatically includes notes from all spaces (private and teamspaces) - When templates use
<choose>or<select>placeholders, users now see decorated note selection UI
- Uses
chooseTemplateintemplateManager.js- ReplacedchooseOptionwithchooseNoteV2- Templates from both @templates and @Forms directories (across all spaces) are properly displayed with full paths
- Removed complex label manipulation code that only handled @templates folder
getTemplateContentintemplateManager.js- ReplacedchooseOptionwithchooseNoteV2- When multiple templates match the same name, user selection now shows decorated UI with folder paths
- Templates from all template folders (Templates, Forms, all teamspaces) are included in selection
- Benefits:
- Better UI with decorated options showing icons, colors, and folder paths
- All note selection now searches across all spaces (private root and all teamspace root folders)
- Consistent user experience across all template selection functions
- Visual distinction between templates in different folders and spaces
- Backward compatibility:
chooseNoteis still available in templates viahelpers.chooseNotefor backward compatibility, buthelpers.chooseNoteV2is recommended for new templates - Testing: Updated all test mocks to use
chooseNoteV2and addedDataStore.preferencemocks for template folder localization
- All functions updated to use
[2.2.8] 2026-01-XX @dwertheimer
- Add triggerTemplateRunner command to automatically run templates when notes are opened
- New hidden command
triggerTemplateRunnerchecks forrunTemplateOnOpenfrontmatter attribute - When a note with
runTemplateOnOpenis opened, the specified template is automatically executed - Use
triggers: onOpen => np.Templating.triggerTemplateRunnerin note frontmatter to enable this feature - Similar to Forms plugin's
triggerOpenFormfunctionality, but for template execution - Example use case: Automatically update age calculations or other dynamic content when a note is opened
[2.2.7] 2026-01-05 @dwertheimer
- templateRunnerExecute now returns AI analysis errors from all code paths
- Modified templateRunnerExecute to return Promise<string | void> instead of Promise
- Added hasAiAnalysisError helper function to detect AI analysis error marker
- Updated all handler functions (handleCurrentNote, handleRegularNote, handleTodayNote, handleWeeklyNote) to return errors
- Updated handleNewNoteCreation to return rendered content if it contains AI analysis error
- All early return paths in templateRunnerExecute now check for and return AI analysis errors
- This allows Forms plugin to capture and display template rendering errors to users
[2.2.6] 2026-01-04 @dwertheimer
- Fix
allowCreateparameter parsing forpromptMentionandpromptTagprompts: TheallowCreateparameter (4th parameter) was not being parsed correctly from template tags, preventing the "➕ Add new [item]" option from appearing in selection dialogs. This fix:- Improved parameter parsing to handle both quoted strings (
'true') and unquoted boolean literals (true) - Fixed regex pattern to handle both full template tag syntax (
<%- promptMention(...) %>) and cleaned tag format (without<% %>) - Added fallback parsing logic for multiple parameters when the primary regex doesn't match
- Works with all template tag syntax variations:
<% %>,<%- %>,<%- -%>,<%= %> - Users can now properly use
allowCreateto enable creating new mentions/hashtags when they don't exist in the list
- Improved parameter parsing to handle both quoted strings (
[2.2.5] 2025-12-19 @dwertheimer
- Fix messaging in templateNew when templates not found
- Enhanced
template: ignorecode block handling: Code blocks starting with ```template: ignore on the first line are now completely removed from templates (not just protected). Comment-style ignores (// template: ignoreor `/* template: ignore */`) continue to be protected during processing and restored in the output. This allows template authors to include metadata or instructions that should not appear in the final rendered output. - TemplateRunner rendering improvements: TemplateRunner now consistently renders template tags in all fields before using them:
templateBodyis now rendered inhandleNewNoteCreation(for create-new pa...
📒 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.2.10] 2026-03-16 @dwertheimer
Fixed
- templateRunner run-from-code when Forms create-new: When called with no template name but args containing
newNoteTitle(and optionally non-emptytemplateBody),processTemplateArgumentsnow setsisRunFromCode = trueso the main block runs and the note is created and optionally opened in the editor. Previously onlygetNoteTitledor non-emptytemplateBodytriggered run-from-code, so Forms create-new with empty templateBody in the first pass never entered the block. - templateRunner return value when nothing executed: When the main block is not entered (no template name, not run-from-code, no passed template body), templateRunner now returns
nullinstead of falling through toundefined, so callers (e.g. Forms) can treat it as failure and show an error instead of closing the window. Return type updated toPromise<string | void | null>. - CommandBar.prompt return: When "You must supply a template title" is shown, the function now returns
nullso the caller does not treat it as success.
Edited in this release
np.Templating/plugin.json— Version 2.2.10; lastUpdateInfo.np.Templating/CHANGELOG.md— This section.np.Templating/src/NPTemplateRunner.js—processTemplateArguments: treatargs.newNoteTitle(or non-emptyargs.templateBody) as run-from-code;templateRunnerExecute: returnnullwhen main block skipped, and when CommandBar.prompt for missing template title; return typePromise<string | void | null>.
[2.2.9] 2026-01-XX @dwertheimer
- Add new hidden command
getRenderContextfor use by other plugins (e.g., Forms plugin)- Returns the full templating render context object with all globals, modules, and helpers (date, time, note, tasks, moment, etc.)
- Includes timing logs for performance monitoring (setup, config, engine creation, context building, total time)
- Allows other plugins to reuse templating context without duplicating code
- Accessible via
DataStore.invokePluginCommandByName('getRenderContext', 'np.Templating', [userData])
- Comprehensive template search refactoring - Expand template search functions to search in both @templates and @Forms directories across all spaces
- New shared utility: Created
getTemplateFolderPrefixes()function that builds complete list of folder prefixes including:- Private root folders:
@Templatesand@Forms(or localized equivalents) - All teamspace root folders:
%%NotePlanCloud%%/<teamspaceID>/@Templatesand%%NotePlanCloud%%/<teamspaceID>/@Forms
- Private root folders:
- Core template search functions updated:
getFilteredTemplateList- Now searches in both private root and all teamspace root foldersgetTemplateNote- Now searches all teamspaces, not just private rootgetFilenameFromTemplate- Filters notes from all template folders in all spacesgetTemplateContent- Searches in all template folders when finding templatestemplateExists- Searches in all template folders (Templates, Forms, all spaces)
- User-facing commands updated:
templateInsertandtemplateAppend- Now usegetTemplateNote(searches all folders/spaces)<current>prompt validation - Now checks if note is in any template folder (not just @templates)addFrontmatterToTemplate(NPTemplateRunner) - Now usesgetTemplateNotechooseTemplate- Now useschooseNoteV2for decorated note selection UI (shows icons, colors, folder paths)- Automatically displays templates from both @templates and @Forms directories across all spaces
- No longer limited to just @templates folder in display logic
- Improved user experience with visual decorations and better folder path display
- Localization support:
- All functions now use
DataStore.preference('templateFolder')for localized template folder names instead of hardcoded '@templates' - All functions now use
DataStore.preference('formsFolder')for localized forms folder names (with '@Forms' fallback)
- All functions now use
- Bug fixes:
- Fixes issue where form processing templates stored in @Forms weren't found by
templateRunnerandgetTemplateNotewhen processing form submissions - Fixes issue where templates in teamspaces weren't found by template search functions
- Fixes issue where form processing templates stored in @Forms weren't found by
- Impact: Templates can now be stored in @Forms directory (for form processing) or @templates directory (for regular templates), in both private root and teamspace root folders, and all search functions will find them correctly
- New shared utility: Created
- Replace
chooseNote/chooseOptionwithchooseNoteV2throughout np.Templating - Modernize all note selection UI- All functions updated to use
chooseNoteV2:handleNoteSelectioninNPTemplateRunner.js- Replaced deprecatedchooseNotewithchooseNoteV2- Uses
DataStore.projectNoteswhich automatically includes notes from all spaces (private and teamspaces) - When templates use
<choose>or<select>placeholders, users now see decorated note selection UI
- Uses
chooseTemplateintemplateManager.js- ReplacedchooseOptionwithchooseNoteV2- Templates from both @templates and @Forms directories (across all spaces) are properly displayed with full paths
- Removed complex label manipulation code that only handled @templates folder
getTemplateContentintemplateManager.js- ReplacedchooseOptionwithchooseNoteV2- When multiple templates match the same name, user selection now shows decorated UI with folder paths
- Templates from all template folders (Templates, Forms, all teamspaces) are included in selection
- Benefits:
- Better UI with decorated options showing icons, colors, and folder paths
- All note selection now searches across all spaces (private root and all teamspace root folders)
- Consistent user experience across all template selection functions
- Visual distinction between templates in different folders and spaces
- Backward compatibility:
chooseNoteis still available in templates viahelpers.chooseNotefor backward compatibility, buthelpers.chooseNoteV2is recommended for new templates - Testing: Updated all test mocks to use
chooseNoteV2and addedDataStore.preferencemocks for template folder localization
- All functions updated to use
[2.2.8] 2026-01-XX @dwertheimer
- Add triggerTemplateRunner command to automatically run templates when notes are opened
- New hidden command
triggerTemplateRunnerchecks forrunTemplateOnOpenfrontmatter attribute - When a note with
runTemplateOnOpenis opened, the specified template is automatically executed - Use
triggers: onOpen => np.Templating.triggerTemplateRunnerin note frontmatter to enable this feature - Similar to Forms plugin's
triggerOpenFormfunctionality, but for template execution - Example use case: Automatically update age calculations or other dynamic content when a note is opened
[2.2.7] 2026-01-05 @dwertheimer
- templateRunnerExecute now returns AI analysis errors from all code paths
- Modified templateRunnerExecute to return Promise<string | void> instead of Promise
- Added hasAiAnalysisError helper function to detect AI analysis error marker
- Updated all handler functions (handleCurrentNote, handleRegularNote, handleTodayNote, handleWeeklyNote) to return errors
- Updated handleNewNoteCreation to return rendered content if it contains AI analysis error
- All early return paths in templateRunnerExecute now check for and return AI analysis errors
- This allows Forms plugin to capture and display template rendering errors to users
[2.2.6] 2026-01-04 @dwertheimer
- Fix
allowCreateparameter parsing forpromptMentionandpromptTagprompts: TheallowCreateparameter (4th parameter) was not being parsed correctly from template tags, preventing the "➕ Add new [item]" option from appearing in selection dialogs. This fix:- Improved parameter parsing to handle both quoted strings (
'true') and unquoted boolean literals (true) - Fixed regex pattern to handle both full template tag syntax (
<%- promptMention(...) %>) and cleaned tag format (without<% %>) - Added fallback parsing logic for multiple parameters when the primary regex doesn't match
- Works with all template tag syntax variations:
<% %>,<%- %>,<%- -%>,<%= %> - Users can now properly use
allowCreateto enable creating new mentions/hashtags when they don't exist in the list
- Improved parameter parsing to handle both quoted strings (
[2.2.5] 2025-12-19 @dwertheimer
- Fix messaging in templateNew when templates not found
- Enhanced
template: ignorecode block handling: Code blocks starting with ```template: ignore on the first line are now completely removed from templates (not just protected). Comment-style ignores (// template: ignoreor `/* template: ignore */`) continue to be protected during processing and restored in the output. This allows template authors to include metadata or instructions that should not appear in the final rendered output. - TemplateRunner rendering improvements: TemplateRunner now consistently renders template tags in all fields before using them:
templateBodyis now rendered inhandleNewNoteCreation(for create-new path) to ensure template tags are replaced with form values before being written to notesnewNoteTitleis now rendered if it contains template tags before being used to create a new notegetNoteTitled(noteTitle) is now rendered if it contains template tags, while preserving special values like<today>,<current>,<choose>,<select>,<thisweek>,<nextweek>writeUnderHeadingis now rendered if it contains template tags, while preserving specia...