Query language (TQL)
TQL, short for Typed Query Language, is a compact way to ask Lar for a set of Objects: “every Movie I rated 4 or higher”, “open Tasks due before October”, “everything tagged launch”. You type it into the search field, and you can save a query as a tab or view to reuse it.
What a query is
Section titled “What a query is”A query is a list of terms separated by spaces. An Object must match every term to appear in the results.
- A term of the form
key:valueis a filter, such astype:Book. - A word with no colon is text to search for, such as
budget.
type:Task tag:launch budgetThis finds Tasks tagged launch whose title, body, or properties mention “budget”.
Filters
Section titled “Filters”| Filter | Matches |
|---|---|
type:Book | Objects of that Type, including Objects of Types that inherit from it. Every Type inherits from Note, so type:Note matches everything |
mixin:Taskable | Objects whose Type has that Mixin |
facet:Loaned | Objects that carry that facet |
tag:reading | Objects linked to that Tag; capitalization is ignored |
is:pinned | Pinned Objects (!is:pinned for unpinned ones) |
is:deleted | Objects in the Trash |
prop.rating:>4 | Objects whose rating property satisfies the comparison |
order:title | Not a filter: sets the sort order (see below) |
Rules that apply to every filter:
- Several values mean “any of these”.
type:Book,Personmatches Books and People.tag:a,bmatches Objects with either tag. - Repeating a filter means “all of these”.
tag:a tag:brequires both tags.type:,mixin:, andfacet:can appear only once per query. - Put
!in front of a key to exclude.!tag:archiveddrops archived Objects;!type:Taskdrops Tasks. - Quote values that contain spaces.
type:"Daily Note"works;type:Daily Notedoes not. - Names are exact. Type, Mixin, facet, and property names must be spelled and capitalized as they appear in Lar. Tag names are the exception.
A Type, Mixin, or facet that does not exist simply matches nothing; Lar does not report an error.
Property filters
Section titled “Property filters”Write prop. followed by the property’s name, a colon, and a comparison.
| Write | Meaning |
|---|---|
prop.year:2020 | equals |
prop.year:>2020, prop.year:>=2020 | greater than, greater than or equal |
prop.year:<2020, prop.year:<=2020 | less than, less than or equal |
prop.title:~draft | contains the text |
prop.deadline:* | has any value |
!prop.deadline:* | has no value |
!prop.status:done | does not equal (also matches Objects with no value) |
prop.status:next-up,in-progress | equals either value |
Things to know:
- Dates are written
YYYY-MM-DDand compare in calendar order:prop.due:<2026-08-01finds anything due before 1 August 2026. There are no relative words such astoday. A property that also stores a time (2026-08-01T09:00) does not equal a bare date, so use a range:prop.due:>=2026-08-01 prop.due:<2026-08-02. - Select properties with fixed options compare against the option’s stored value, not its display label. The built-in Task statuses are
not-started,next-up,in-progress, anddone; priorities arelow,medium,high, andurgent. Free-form select properties compare against the text as typed. - Multi-select properties hold a list. Use the contains operator, such as
prop.genres:~Sci-Fi, rather than equals. - Property names are written as one word. For property names with spaces, checkbox properties, or related-Object properties, use the filter builder of a Saved View instead.
Searching text
Section titled “Searching text”Words without a colon search titles, body text, and property text.
- Every word must match, and a word matches any part of a longer word:
teamfinds “steam” as well as “team”. - Words shorter than three characters are ignored when the query also contains a longer word. If every word is that short, Lar matches them against titles and aliases only.
- Quote a phrase to keep its words together:
"weekly review". - Because a colon starts a filter, put quotes around text that contains one:
"10:30".
Sorting
Section titled “Sorting”Add one order: term. The choices are updated, created, and title, optionally followed by :asc or :desc.
| Write | Result |
|---|---|
order:updated | most recently changed first (the default) |
order:created:asc | oldest first |
order:title | A to Z (order:title:desc reverses it) |
When a query contains text to search for and no order:, results are ordered by how well they match.
TQL has no limit: term. Each place that runs a query decides how many results to show.
Examples
Section titled “Examples”| Query | What it returns |
|---|---|
type:Book prop.rating:>4 | Books rated above 4 |
type:Task !prop.status:done | Tasks whose status is not Done |
mixin:Taskable prop.due:<2026-08-01 | Anything task-like, of any Type, due before 1 August 2026 |
type:Person tag:client order:title | People tagged client, A to Z |
type:Task prop.priority:high,urgent | Tasks that are High or Urgent priority |
type:Event prop.start:>=2026-09-01 prop.start:<2026-10-01 | Events that start in September 2026 |
"weekly review" type:"Daily Note" order:created | Daily Notes mentioning “weekly review”, newest first |
Book (with its rating, year, and genres properties) and Person stand in for custom Types you create; the other Type and property names are built into Lar.
Ready-made queries
Section titled “Ready-made queries”Copy these, then change the dates and names to fit your workspace. They use the built-in Task, Movie, Weblink, and Daily Note Types.
| Query | Use it to |
|---|---|
type:Task !prop.status:done prop.deadline:<2026-10-01 | Find open Tasks whose deadline falls before 1 October 2026 |
type:Task prop.status:next-up,in-progress | See what you are working on now |
mixin:Taskable !prop.due:* | Catch task-like Objects of any Type that have no due date |
type:Task prop.completed:>=2026-09-01 | Review Tasks completed since 1 September 2026 |
type:Movie prop.watchStatus:want-to-watch prop.genres:~Sci-Fi order:title | Pick a science-fiction film from your watchlist |
type:Movie prop.rating:>=4 prop.releaseYear:<2000 | List older films you rated 4 or higher |
type:Weblink prop.url:~youtube.com order:created | Gather saved YouTube links, newest first |
type:"Daily Note" prop.date:>=2026-09-01 prop.date:<2026-10-01 | List September’s Daily Notes |
tag:launch !tag:done !type:Task | Collect launch material that is not a Task and not tagged done |
is:deleted type:Task | Find a Task you deleted, so you can restore it from Trash |
is:pinned !type:"Daily Note" | See everything you pinned except Daily Notes |
Where you can use queries
Section titled “Where you can use queries”- The search field in the header of the desktop app. Type a query instead of plain words and the results update as you type; the field shows the first 25. On a Type’s page the search is limited to that Type unless your query includes its own
type:. Choose ★ save beside the field to keep the query as a view. - A Type’s tabs. Choose Add tab on the Type’s page, type a valid query into the search box, and choose New query: ”…” to add it as a tab.
- The AI assistant and the local MCP server, which use TQL when they look up Objects for you.
The command palette (⌘K) and the full Search page use their own filter controls rather than TQL; see Search and the command palette. A Saved View built with the filter builder can also combine conditions with AND/OR groups and several sort keys, which TQL cannot.
Query language or search?
Section titled “Query language or search?”Use plain search, ⌘K or the Search page, to find something you remember by words. Use TQL when you want a precise, repeatable set of Objects, such as “all open Tasks due this month”, that you might save as a view.
Error messages
Section titled “Error messages”If a query cannot be understood, Lar shows a short message under the search field and shows no results.
| Message | What it means and how to fix it |
|---|---|
unknown filter key "done" (expected type|mixin|facet|tag|is|order|prop.X) | A word before a colon is not a filter. Property filters need the prop. prefix (prop.done:...), and the tag filter is tag:, not tags:. If the colon is part of ordinary text, wrap it in quotes. |
missing value for type: | A filter has nothing after the colon. Add a value. The same message form appears for mixin:, facet:, tag:, is:, order:, and prop.NAME:. |
missing key before ":" | A term starts with a colon. Add a filter name in front of it or quote the text. |
prop: requires a path (prop.NAME:) | You wrote prop.: without a property name. |
duplicate type: filter | type:, mixin:, and facet: can each be used once. Combine values with a comma: type:Book,Person. |
unknown is: value "x" (expected pinned|deleted) | is: accepts only pinned or deleted. |
order: expected updated|created|title with optional :asc|:desc | The sort field or direction is not recognized. |
order: takes one value / order: cannot be negated | Use a single order: value and no leading !. |
unterminated quoted string | A quotation mark was opened but never closed. |
Safety
Section titled “Safety”TQL is parsed by Lar’s own small parser and never runs code, so a query cannot change your data; it can only read it.
Next: Layouts and Saved Views.