Skip to content
blastbeat

Filters

A Filter is a saved search over your Tasks, written in a small query language: a few terms, and a few operators to combine them.

Check a query

Type a Filter query below. The checker colors each term, says where the syntax goes wrong and how to fix it, and explains every part in words.

The syntax is valid. The Filter has 1 section.

In words Tasks that are due today, or overdue.

  1. todayTasks due today
  2. |or: either side may match
  3. overdueTasks due before today

This checks syntax only; the API runs a Filter against your Tasks. The suggestions use the demo's Projects, Launch, Home, Garden, Reading list, and Labels, errands, waiting, deep work.

The checker runs the same parser the app uses to check a query. It checks syntax and nothing else. It does not run the query: matching Tasks is the API’s job, and this page has no Tasks to match against.

Terms

A term describes one thing about a Task. Terms are not case sensitive. A word that is no other term searches Task names.

Due date

Due date
WriteMatches
todayalso todDue today
tomorrowalso tomDue tomorrow
yesterdayDue yesterday
overduealso over due, odPast due
7 daysDue within 7 days
no datealso no due date, nodateNo due date
recurringHas recurrence
before: May 5Due before a date
after: todayDue after a date

before: and after: take a date written in words or digits.

Dates after before: and after:
WriteRead as
today2026-10-14 (Wed)
tomorrow2026-10-15 (Thu)
yesterday2026-10-13 (Tue)
in 3 days2026-10-17 (Sat)
friday2026-10-16 (Fri)
2026-11-022026-11-02 (Mon)
oct 282026-10-28 (Wed)
28 oct2026-10-28 (Wed)

A weekday means its next turn after today. A date that cannot be read matches nothing, and the Filter editor warns you about it.

Priority

Priority
WriteMatches
p1 … p4Priority 1 (urgent) to 4 (none)
no prioritySame as p4

Projects and Labels

Projects and Labels
WriteMatches
#LaunchIn a Project whose name contains the text
#"Reading list"Quote a name that has spaces
@waitingHas the Label, spelled exactly
@"deep work"Quote a Label that has spaces
no labelsalso no labelUnlabeled

# matches a Project whose name contains the text, or whose ID is the text. @ matches a Label by its whole name, ignoring case.

Text

Text
WriteMatches
search: invoiceName contains text
invoiceA bare word that is no other term searches Task names too

Completion

Completion
WriteMatches
completedalso doneCompleted Tasks only
allActive + completed Tasks

A Filter shows only Tasks that are not completed. Add completed or all to a Filter section to see completed Tasks in it.

Combining terms

Combining terms
WriteMatches
p1 & todayAnd: both terms must match
p1 | p2Or: either term may match
!@waitingNot: leaves out what follows
(p1 | p2) & !#HomeParentheses group terms
today, overdueA comma starts a new Filter section

Terms written one after another with no operator mean &, so p1 #Launch is p1 & #Launch.

Operators bind in this order: ! first, then &, then |. Use parentheses when you want a different order. p1 | p2 & #Home means p1, or p2 in Home. (p1 | p2) & #Home means P1 or P2, in Home.

Filter sections

A comma at the top level, outside any parentheses, splits a Filter into Filter sections. Each section is its own group of results, and the Filter shows them one after another.

overdue, today, 7 days gives three groups. A Filter can have up to 10 sections. Every section follows the completion rule on its own.

An empty query matches every active Task.

Saving a Filter

Open the Command palette with ⌘K and run New Filter, or go to Filters & Labels with gl and add one there.

A Filter has a name, a color and a query. The query field suggests terms, Projects and Labels as you type, and the editor tells you how many Tasks match as you go. The Builder tab adds terms for you, and the Cheatsheet tab lists them.

Star a Filter to make it a Favorite, which pins it to the sidebar. Filters & Labels lists your Filters and Labels together, and each list can be reordered.