npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

joplin-plugin-gtd-calendar

v0.5.0

Published

**Your notes and to-dos, on a calendar, inside a note.**

Downloads

2,255

Readme

GTD Calendar — a Joplin plugin

Your notes and to-dos, on a calendar, inside a note.

GTD Calendar renders day, week, and month calendars in any Joplin note — populated not by hand-maintained YAML, but by the actual notes and to-dos in the surrounding folder. Click an event and it opens the note. Items without a date collect in an Unscheduled bucket below the calendar, GTD-style.

Month grid view

How it works

Put a gtd-calendar fenced code block in a note. That note becomes a calendar of the notes and to-dos around it:

```gtd-calendar
view: month-grid
title: GTD Calendar
todos: all
```

Config and result side by side

Notes and to-dos opt in to the calendar with a gtd fenced code block — even an empty one. The block can also set a date (for plain notes), colours, an icon, and hover text:

```gtd
date: 2026-06-19
fg-colour: red
text: Seen on hover
```

A note with a gtd block

To-dos don't need any of that for scheduling — their normal Joplin due date places them on the calendar automatically (when admitted by your todos: setting):

A todo scheduled by its native due date

Installation

Search for GTD Calendar in Tools → Options → Plugins (desktop).

Requires Joplin 2.7+ on desktop.

The gtd-calendar block

Goes in the note that should display the calendar. All options are optional.

| Option | Values | Default | What it does | |---|---|---|---| | view | day, week, month, month-grid | day | day/week/month (or d/w/m) render a compact tile strip spanning all events. month-grid (or grid) renders the entire current calendar month as a classic 7-column grid with weekday headers. | | title | text | — | Heading above the calendar. | | scope | this-folder, children, or a number | this-folder | Which folders to scan: just this one, all descendants, or n levels down (scope: 2). Broad scopes scan every note body in the tree — fine for normal folders, worth knowing for huge ones. | | notes | gtd-only, all, none | gtd-only | Which plain notes appear: only those with a gtd block, every note in scope, or none. | | todos | gtd-only, all, none | gtd-only | Same, for to-dos. todos: all is handy — every to-do with a due date lands on the calendar with zero markup. | | sort | asc, desc | asc | Order of events within each day/week/month and in Unscheduled. The timeline itself is always chronological. | | sort-type | title, modified_date | title | What sort sorts by. |

Invalid values fall back to defaults and show a ⚠ warning above the calendar.

The gtd block

Goes in any note or to-do that should appear on the calendar. An empty block is valid — it's the minimal opt-in. All properties are optional:

| Property | Example | What it does | |---|---|---| | date | 2026-07-04 | Schedules the item (yyyy-mm-dd or mm-dd-yyyy). Required for plain notes to appear in the grid; for to-dos it overrides the Joplin due date. | | bg-colour | teal, #264653 | Tile/chip background. Any CSS colour. (bgColor also accepted.) Without it, the item gets a stable pastel derived from its note ID. | | fg-colour | white | Tile/chip text colour. | | icon | 🦴 | Shown on the tile/chip instead of the first two characters of the title. | | title | Launch day | Replaces the note's title on the calendar only. | | text | Seen on hover | Detail line in the hover card / tooltip. |

Where do dates come from?

  1. A date: in the gtd block always wins.
  2. Otherwise, a to-do uses its Joplin due date.
  3. No date at all → the item appears in the Unscheduled section below the calendar: your dateless next-actions, always in view, one click from their notes.

To-dos keep being real Joplin to-dos throughout — due dates still sort, alarm, and sync exactly as before. Completed to-dos render checked and struck through.

Repeating to-dos

GTD Calendar plays nicely with the Repeating To-Dos plugin (v2). Install it, set a to-do to repeat (e.g. every Tuesday), and that to-do appears on the calendar at its next due date like any other — no extra setup. Recurring to-dos are marked with a ↻ symbol so you can tell them apart at a glance.

Because that plugin keeps a recurring to-do as a single item at its next due date, the calendar shows the next occurrence rather than every future one. Recurrence is detected via the recurring tag the plugin maintains; if you use a different recurrence tool that tags its to-dos recurring, the ↻ will appear for those too.

Kanban board

Alongside calendars, GTD Calendar can render a kanban board from your to-dos. Add a gtd-kanban block — on its own, or stacked beneath a calendar in the same dashboard note:

```gtd-kanban
title: Editorial Board
scope: this-folder
todos: all
sort-type: due-date
in-progress-tag: in-progress
card-detail: hover
done-window: 7
```

Three columns, driven by your to-dos' state:

  • Backlog — every uncompleted to-do without the in-progress tag.
  • In Progress — to-dos carrying the in-progress tag (default tag name in-progress; configurable).
  • Done — completed to-dos, limited to those finished within done-window days (default 7; set all for the full history).

A completed to-do always lands in Done, even if it still carries the in-progress tag.

| Option | Values | Default | Description | |---|---|---|---| | title | text | — | Heading above the board. | | scope | this-folder, children, integer | this-folder | Same folder-scanning rules as the calendar. | | todos | gtd-only, all, none | gtd-only | Which to-dos appear. gtd-only requires a gtd block; all includes every to-do in scope. (Plain notes never appear on the board.) | | sort-type | due-date, title, modified-date | due-date | Order of cards within each column. Under due-date, cards with no due date sort last. | | sort | asc, desc | asc | Sort direction. | | in-progress-tag | text | in-progress | The tag that places a to-do in the In Progress column. | | card-detail | hover, always, none | hover | Whether each card's due date / hover text shows on hover, always, or never. | | done-window | integer or all | 7 | How many days back the Done column reaches. |

Cards are compact (title, recurrence ↻ if applicable) and click through to the to-do. The board is read-only in this version — it reflects your to-dos' state but doesn't change it. (Drag-and-drop to move cards between columns is planned.)

The Matrix (Skeleton & Eisenhower)

A third view: a 2×2 prioritisation matrix. Add a gtd-matrix block anywhere:

```gtd-matrix
title: Priorities
todos: all
mode: skeleton
```

Two modes:

mode: skeleton (default) — the Skeleton Matrix

Built to complement the kanban and calendar, using the tags and dates you already maintain. Rows ask am I on this? (the in-progress tag); columns ask is the clock running? (due within urgent-window days — overdue counts — or carrying the urgent tag as a manual override):

| | Due soon | Not due soon | |---|---|---| | Active | Do Next | Scheduled | | Not active | On Deck | Backlog |

On Deck is the quadrant to watch: due soon, not yet started. Nothing is ever labelled "Eliminate" — a Backlog item is simply low priority, not condemned. Dateless in-progress work sits in Scheduled (active, no clock). Completed to-dos don't appear at all.

mode: eisenhower — the classic

Quadrants from the urgent/important tags: Do First (both), Schedule (important), Delegate (urgent), Eliminate (neither).

Options

| Option | Values | Default | Description | |---|---|---|---| | mode | skeleton, eisenhower | skeleton | Which matrix semantics to use. | | title | text | — | Heading above the matrix. | | scope | this-folder, children, integer | this-folder | Same folder-scanning rules as the calendar and kanban. | | todos | gtd-only, all, none | gtd-only | Which to-dos appear. Plain notes never do. | | sort-type | due-date, title, modified-date | due-date | Order within each quadrant; dateless cards sort last under due-date. | | sort | asc, desc | asc | Sort direction. | | urgent-tag | any tag name | urgent | Eisenhower's urgent axis; the Skeleton mode's manual due-soon override. | | important-tag | any tag name | important | Eisenhower's important axis (unused in Skeleton mode). | | in-progress-tag | any tag name | in-progress | Skeleton mode's active row — same tag as the kanban's In Progress column. | | urgent-window | integer (days) | 3 | Skeleton mode: how close a due date must be to count as "due soon". | | card-detail | hover, always, none | hover | Card detail line behaviour, as on the kanban. |

Cards behave like kanban cards: compact, ↻ for recurring, click to open. Read-only.

Drilldown

Everything is clickable: single-event tiles, every row of a multi-event hover card, every chip in the month grid, every Unscheduled chip. Clicking opens the source note.

Limitations

  • Desktop only. See the note below.
  • month-grid always shows the current month; there is no month navigation yet.
  • The calendar refreshes when the note re-renders (e.g. switching notes); edits to other notes don't live-update an open calendar.

Mobile / Android

This plugin is built for Joplin desktop and is not expected to work on the Android or iOS apps. It depends on rendering custom code blocks in the note viewer and on two-way messaging between that view and the plugin — capabilities Joplin's mobile apps have historically not supported, or supported only partially. On mobile, a gtd-calendar block will most likely render as plain text or not at all, and drilldown won't work. The companion Repeating To-Dos plugin is desktop-only as well.

Your data is unaffected, though: the calendar is only a view. Your to-dos and their due dates are ordinary Joplin items that sync to mobile normally and appear in Joplin's built-in to-do list and search, with alarms intact — you just won't see the calendar rendering there. If you want a quick scheduled-items view on mobile, pair the calendar with Joplin's native to-do view or the Embed Search plugin on desktop.

Bugs & feedback

Issues and ideas: the repository, or find me on the Joplin forum.

Development

npm install
npm test        # 47 unit tests
npm run dist    # builds publish/*.jpl

Design notes and the full v1 specification live in SPEC.md.

Credits & license

A fork of Event Calendar by Franco Speziali (WeMakeMachines), whose tile-strip design this plugin proudly keeps. Forked with gratitude under the MIT license; this plugin is MIT as well.

Made by Victor Wiebe. Creative work for an uncaring world.