Skip to content

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.

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:value is a filter, such as type:Book.
  • A word with no colon is text to search for, such as budget.
type:Task tag:launch budget

This finds Tasks tagged launch whose title, body, or properties mention “budget”.

FilterMatches
type:BookObjects of that Type, including Objects of Types that inherit from it. Every Type inherits from Note, so type:Note matches everything
mixin:TaskableObjects whose Type has that Mixin
facet:LoanedObjects that carry that facet
tag:readingObjects linked to that Tag; capitalization is ignored
is:pinnedPinned Objects (!is:pinned for unpinned ones)
is:deletedObjects in the Trash
prop.rating:>4Objects whose rating property satisfies the comparison
order:titleNot a filter: sets the sort order (see below)

Rules that apply to every filter:

  • Several values mean “any of these”. type:Book,Person matches Books and People. tag:a,b matches Objects with either tag.
  • Repeating a filter means “all of these”. tag:a tag:b requires both tags. type:, mixin:, and facet: can appear only once per query.
  • Put ! in front of a key to exclude. !tag:archived drops archived Objects; !type:Task drops Tasks.
  • Quote values that contain spaces. type:"Daily Note" works; type:Daily Note does 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.

Write prop. followed by the property’s name, a colon, and a comparison.

WriteMeaning
prop.year:2020equals
prop.year:>2020, prop.year:>=2020greater than, greater than or equal
prop.year:<2020, prop.year:<=2020less than, less than or equal
prop.title:~draftcontains the text
prop.deadline:*has any value
!prop.deadline:*has no value
!prop.status:donedoes not equal (also matches Objects with no value)
prop.status:next-up,in-progressequals either value

Things to know:

  • Dates are written YYYY-MM-DD and compare in calendar order: prop.due:<2026-08-01 finds anything due before 1 August 2026. There are no relative words such as today. 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, and done; priorities are low, medium, high, and urgent. 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.

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: team finds “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".

Add one order: term. The choices are updated, created, and title, optionally followed by :asc or :desc.

WriteResult
order:updatedmost recently changed first (the default)
order:created:ascoldest first
order:titleA 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.

QueryWhat it returns
type:Book prop.rating:>4Books rated above 4
type:Task !prop.status:doneTasks whose status is not Done
mixin:Taskable prop.due:<2026-08-01Anything task-like, of any Type, due before 1 August 2026
type:Person tag:client order:titlePeople tagged client, A to Z
type:Task prop.priority:high,urgentTasks that are High or Urgent priority
type:Event prop.start:>=2026-09-01 prop.start:<2026-10-01Events that start in September 2026
"weekly review" type:"Daily Note" order:createdDaily 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.

Copy these, then change the dates and names to fit your workspace. They use the built-in Task, Movie, Weblink, and Daily Note Types.

QueryUse it to
type:Task !prop.status:done prop.deadline:<2026-10-01Find open Tasks whose deadline falls before 1 October 2026
type:Task prop.status:next-up,in-progressSee 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-01Review Tasks completed since 1 September 2026
type:Movie prop.watchStatus:want-to-watch prop.genres:~Sci-Fi order:titlePick a science-fiction film from your watchlist
type:Movie prop.rating:>=4 prop.releaseYear:<2000List older films you rated 4 or higher
type:Weblink prop.url:~youtube.com order:createdGather saved YouTube links, newest first
type:"Daily Note" prop.date:>=2026-09-01 prop.date:<2026-10-01List September’s Daily Notes
tag:launch !tag:done !type:TaskCollect launch material that is not a Task and not tagged done
is:deleted type:TaskFind a Task you deleted, so you can restore it from Trash
is:pinned !type:"Daily Note"See everything you pinned except Daily Notes
  • 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.

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.

If a query cannot be understood, Lar shows a short message under the search field and shows no results.

MessageWhat 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: filtertype:, 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|:descThe sort field or direction is not recognized.
order: takes one value / order: cannot be negatedUse a single order: value and no leading !.
unterminated quoted stringA quotation mark was opened but never closed.

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.