Table of Contents
- Short Syntax
- Supported Syntax Forms
- Tag Syntax (#)
- Project Syntax (+)
- Time Estimate Syntax
- Due Date Syntax (@)
- Recurrence Syntax (@every ..., @daily, ...)
- Deadline Syntax (!)
- Formal Grammar and Regex Patterns
- Default Values and Behavior
- Where Short Syntax Is Supported
- Parsing and Evaluation Rules
- Error Handling
- Add Task Bar Behavior
- Notes
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Short Syntax
Super Productivity supports five main short syntax forms for quickly adding metadata to tasks: tags (#), projects (+), time estimates (m/h), due dates (@), and deadlines (!). The due date form also accepts recurrence phrases (@every friday, @daily) in the Add Task Bar. The forms are controlled in 3.02-Settings-and-Preferences#short-syntax, with a separate opt-in setting for deadline syntax.
Supported Syntax Forms
Tag Syntax (#)
- Symbol:
# - Purpose: Add tags to the task.
- Grammar:
#<tag-name>. A space is required before#. - Parameters: Tag name (case-insensitive).
- Valid:
"Task #urgent","Meeting #work #important". Multiple tags allowed. - Invalid:
"Task#urgent"(no space before#) — the whole short-syntax run returns no changes. If other tokens are valid (e.g."Task#urgent #other"), only the valid tag is applied and the invalid token is left in the title.
Project Syntax (+)
- Symbol:
+ - Purpose: Assign the task to a project.
- Grammar:
+<project-name>. A space is required before+. - Parameters: Project title or partial title; minimum 3 characters. Matching is prefix-based, case-insensitive, with spaces removed for comparison. The shortest matching project title is preferred when several match.
- Valid:
"Task +Important Project","Task +Project"(partial match). Project names containing+,#,@, or similar are supported; the parser uses lookahead so these characters inside the name do not end the token. - Invalid:
"Task+Project"(no space before+) — no project is applied.
Time Estimate Syntax
- Symbols:
m(minutes),h(hours). Optional prefixt. Optional/to separate time spent from time estimate. - Purpose: Set time spent and/or time estimate.
- Grammar:
[t]<number><unit>[ <number><unit>...][/ <number><unit>...]. Units:m,h. Decimal numbers allowed (e.g.1.5h). Before/: time spent on the current day. After/: time estimate. Clusters like1h 30mare supported. - Parameters: Time spent (before
/): e.g.30m,1.5h. Time estimate (after/): e.g.1h,90m. One side can be omitted:30m/sets only time spent;1hsets only estimate. - Valid:
"Task 10m","Task 1h/2h","Task 30m/","Task t1.5h","Task 1h 30m / 2h". - Defaults:
h= 60 minutes.
Due Date Syntax (@)
- Symbol:
@ - Purpose: Set due date/time for the task.
- Grammar:
@<date-time-expression>. No space is allowed between@and the expression. - Parameters: Date/time expressions supported by the Chrono-based parser (e.g.
4pm,friday,tomorrow 19:00,2030-10-12T13:37). - Valid:
"Task @4pm","Task @friday","Task @tomorrow 19:00","Task @2030-10-12T13:37". - Invalid:
"Task @ tomorrow"(space after@) — due date is not applied and the expression is stripped from the title. Two-digit years 50–99 are corrected to the current or next calendar year to avoid Chrono interpreting them as years (e.g.90min a date context).
Recurrence Syntax (@every ..., @daily, ...)
- Symbol:
@, shared with the due date form. A recurrence phrase must come directly after the@. - Purpose: Create the task as a repeating task, equivalent to picking a repeat preset in the Add Task Bar's repeat menu.
- Grammar:
@every <unit>,@every <number> <unit>, or a bare frequency word:@daily,@weekly,@monthly,@yearly,@annually. Units forevery:day(s),week(s),weekday(s)/workday(s),month(s),year(s), a weekday name (friday,fri,fridays, ...), or a day of the month (15th). A number may precededay(s),week(s),month(s),year(s)or a weekday name, and must be between 1 and 999. An optional time can follow:@every friday 3pm. - Mapping:
@every friday→ weekly on Friday (due date set to the next Friday);@every weekday→ Monday through Friday;@every 15th→ monthly on the 15th (due date set to the next 15th);@daily 6am→ daily with a start time. The unanchored words recur on the day you add the task:@weeklyon today's weekday,@monthlyon today's day of the month,@yearlyon today's date. If a time you add has already passed today, the first occurrence moves a whole period ahead so the recurring day stays the same —@weekly 6amadded on a Wednesday at 10:00 is due next Wednesday, not tomorrow.@every weekdaynever starts on a weekend:@every weekday 6amadded on a Friday at 08:00 is due Monday. - Intervals:
@every 2 weekscreates a custom recurring config repeating every 2 weeks on the day you add the task;@every 3 daysrepeats every 3 days from that day;@every 2 fridaysrepeats every 2 weeks on Friday, starting with the next one. The interval is editable afterwards in the repeat config dialog. An interval of 1 (@every 1 week) is the same as leaving the number out.@every 2 weekdaysis not supported — every other workday is not a weekly schedule — and is parsed as a plain due date. - Valid:
"Water plants @every friday","Journal @daily 6am","Pay rent @every 15th","Review @every 2 weeks","Water plants @every 2 fridays". - Scope: Only in the Add Task Bar (task creation). In title edits of existing tasks the phrase is parsed as a plain due date, since an existing task cannot be converted to a repeating task this way. The parsed repeat shows on the repeat button and can be cleared there, which also removes the phrase from the input.
Deadline Syntax (!)
- Symbol:
! - Purpose: Set a deadline date/time for the task.
- Default: Disabled. Enable deadline short syntax in the global Short Syntax settings to use it.
- Grammar:
!<date-time-expression>. A space is required before!when it is not at the start of the title. - Parameters: Date/time expressions supported by the Chrono-based parser (e.g.
14:30,friday,next month). - Valid:
"Task !14:30","Task !friday","Task @monday !friday". - Invalid:
"Done!"(no space before!) — the exclamation mark is treated as punctuation and no deadline is applied.
Formal Grammar and Regex Patterns
The parser uses regular expressions for each syntax form. Time: optional t prefix, digits and decimal with m/h, optional / for spent/estimate. Project: + with lookahead so delimiters (#, @, time-like tokens) inside the project name do not terminate the match. Tag: # followed by characters until a special character or whitespace. Due: @ followed by characters until a special character. Deadline: ! followed by characters until a special character. Exact patterns are defined in short-syntax.ts (e.g. SHORT_SYNTAX_TIME_REG_EX, SHORT_SYNTAX_PROJECT_REG_EX, SHORT_SYNTAX_TAGS_REG_EX, SHORT_SYNTAX_DUE_REG_EX, SHORT_SYNTAX_DEADLINE_REG_EX).
Default Values and Behavior
- Time units:
m= minutes,h= 60 minutes. - Time spent only: e.g.
30m/sets time spent on the current day and no estimate. - Time estimate only: e.g.
1hsets estimate without time spent. - Date parsing: Uses a custom Chrono-based parser with year correction for two-digit years 50–99 (current/next year).
- Project matching: Prefix-based, case-insensitive, spaces removed; shortest matching project title wins.
- Tag mode:
combine(default) orreplace; configurable in settings.
Where Short Syntax Is Supported
Supported:
- Add Task Bar (primary place for creating tasks with short syntax).
- Task creation when adding new tasks (e.g. via the shared add-task action).
- Task title updates when the only change is the title (syntax is re-parsed).
Unsupported or disabled:
- Issue-linked tasks: Tasks linked to external issues cannot use project syntax (see 2.07-Manage-Task-Integrations).
- When disabled: Disabled short syntax forms are ignored. Deadline syntax has its own setting and is disabled by default.
- Archived or hidden projects: Project syntax does not match archived or hidden projects.
Parsing and Evaluation Rules
- Order of processing: Due/deadline/time → Project → Tag.
- Title cleanup: Parsed syntax is removed from the task title after processing.
- Tag creation: Tags that do not exist yet are collected in a
newTagTitlesarray for creation. - Return value: The
shortSyntax()function returns an object with task changes (andnewTagTitles,remindAt,projectId,repeat) orundefinedif nothing was parsed or syntax is disabled. - Buttons win over text: picking a date, deadline, estimate or recurrence in the Add Task Bar's buttons removes the matching syntax from the input, the same way the buttons' clear (
x) does, so the text stops advertising a value the task will not get. Changing the date of a task whose recurrence came from syntax keeps the recurrence and re-anchors it to the new date.
Error Handling
Malformed syntax:
- Invalid syntax is ignored; the function may return
undefinedor only apply valid parts. - No exception is thrown; invalid tokens are skipped or left in the title as appropriate.
- If a syntax type is disabled in settings, that form is not processed.
Edge cases:
- Project names containing
+,#,@, or time-like patterns are handled so that the project token is parsed correctly. - Two-digit years 50–99 in date expressions are corrected to the current or next year.
- Time estimate tokens (e.g.
90m) in the same title as date expressions are parsed separately so Chrono date parsing does not consume the time estimate.
Add Task Bar Behavior
- Toggle new task position: A toggle in the Add Task Bar controls whether the new task is added at the top or the bottom of the list.
- Autocomplete: The Add Task Bar can suggest tags, projects, and date expressions while typing.
- Inline highlighting: Detected short syntax (tags, project, estimate, due/deadline dates, recurrence, extracted URLs) is highlighted directly in the input while typing, showing which characters will be stripped from the title before the task is created.
Notes
- Short syntax is processed by the
shortSyntax()function; it returns task changes orundefinedwhen no changes are needed. - The five syntax forms are controlled by the global Short Syntax settings in 3.02-Settings-and-Preferences. Deadline syntax is disabled by default.
1.00-Quickstarts
2.00-How_To
Using Super-Productivity
- 2.01-Downloads and Install
- 2.02-Restore-Data-From-Backup
- 2.03-Add-Tasks
- 2.04-Manage-Subtasks
- 2.05-Manage-Scheduled-Tasks
- 2.06-Manage-Repeating-Tasks
- 2.07-Manage-Task-Integrations
- 2.08-Choose-Sync-Backend
- 2.09-Configure-Sync-Backend
- 2.19-Sync-Proton-Drive-via-rclone
- 2.20-Import-from-Todoist
- 2.21-Manage-Plugins
- 2.13-Run-with-Docker
Contributing to Super-Productivity
- 2.18-Contribute-Translations
- 2.11-Run-the-Development-Server
- 2.16-Set-Up-Development-Environment
- 2.12-Package-the-App
- 2.14-Build-for-Android
- 2.15-Develop-a-Plugin
- 2.17-Add-a-New-Issue-Integration
3.00-Reference
- 3.01-API
- 3.02-Settings-and-Preferences
- 3.03-Keyboard-Shortcuts
- 3.04-Short-Syntax
- 3.05-Web-App-vs-Desktop
- 3.06-User-Data
- 3.07-Issue-Integration-Comparison
- 3.08-Sync-Integration-Comparison
- 3.09-Theming
4.00-Concepts
Data-and-Integrations
Organizing
- 4.06-Project-View
- 4.07-Tag-View
- 4.08-Time-Estimates
- 4.09-Task-Attributes
- 4.10-Task-Notes
- 4.11-Subtasks
Planning
Doing
- 4.01-The-Today-View
- 4.02-Inbox-View
- 4.05-Board-View
- 4.14-How-Time-Is-Logged
- 4.15-Timers-and-Focus-Mode
- 4.16-Break-Reminders
- 4.17-Idle-Time
- 4.08-Time-Estimates
Reviewing
If you have further questions, please refer to the discussions page.