Features · TQL search

Ask your tracker a real question

A query language with AND/OR/NOT, IN lists and full-text matching — try it live below.

TQL — Ticket Query Language — turns search into something your team can write, read and reuse. Combine fields with AND, OR, NOT and parentheses, match lists with IN, run full-text with ~, then sort the result with ORDER BY. Every query is scoped to the projects you belong to, and any query worth keeping becomes a saved filter — private to you or shared with everyone.

27 built-in query fields7 operators8 ORDER BY sort keysGIN-indexed Postgres full-text

What you get

  • A real grammar — A hand-written lexer and recursive-descent parser give you =, !=, ~, >, <, IN and NOT IN, combined with AND, OR, NOT and parentheses — with position-aware error messages when a query does not parse.
  • 27 built-in fields — Query by project, type, status, status category, priority, assignee, reporter, label, fix and affected version, component, sprint, team, programme increment, theme, parent, links, time tracking, dates and text — plus any custom field via cf["Field Name"].
  • Full-text built on Postgres — text ~ "..." searches title and description through a stored tsvector column with a GIN index — indexed full-text, not a table scan.
  • Saved filters, private or shared — Name a query and keep it to yourself or share it with everyone. Filters are parse-validated on save, and only the owner can edit or delete one.
  • Filter subscriptions — Subscribe to any filter you can see and receive its current results by email on a configurable period. The query runs under your own access, and empty result sets are never sent.
  • Scoped by membership — Every TQL query and quick search is limited to projects you are a member of, and restricted tickets stay out of results — the scope is enforced server-side on every request.

See it

2 tickets — demo data, queried live in your browser
KeyTitleStatusPriorityAssigneePts
CORE-201Bug: Connection timeout on webhook retryIn progressHighestme5
CORE-195Bug: SLA timer drift on daylight savingIn reviewHighme3

Values that read like you think

Assignee and reporter accept an email address, me or currentUser(), and empty for unassigned work. Date fields take now(), startOfDay(), startOfWeek(), startOfMonth(), relative offsets such as -7d, -2w or -3m, or a plain yyyy-MM-dd date. Sprint, team, PI, theme and parent all accept EMPTY to find backlog, unowned, unplanned or top-level tickets. ORDER BY chains multiple keys with ASC or DESC across eight sort fields; without one, results sort by most recently updated.

Autocomplete that knows your data

The search page is backed by a metadata endpoint that returns the full field list with the operators each field supports, the grammar keywords, and live value suggestions: your project keys, status names, labels, versions, components, sprints, teams and custom-field options, plus the emails of members in your projects. Project keys, labels, versions, components, sprints, custom-field options and member emails are suggested only from the projects you can see.

Quick search for the everyday case

When you do not need a query, type two or more characters and quick search matches project names and keys alongside ticket titles, returning the most recently updated matches first. It obeys the same membership scoping and restricted-ticket visibility as TQL, so the fast path is as safe as the precise one.

Real queries

project = CORE AND assignee = me AND status != Done ORDER BY priority DESC

text ~ "payment timeout" AND created > -7d AND priority IN (HIGHEST, HIGH)

See Iskue on your own screen

A demo takes half an hour. A pilot runs on your servers, with your data, from day one.