· Reborn Foundation

Power search comes to Reborn Task and Reborn Notes

10+ search operators - tag:, due:, folder:, is:overdue, has:link and more - plus boolean OR / AND / grouping. A unified search box, all client-side, all zero-knowledge.

search feature zero-knowledge
Czytaj po polsku →

Both Reborn Task and Reborn Notes now ship a unified search box that combines plain-text search with structured operators. Plain words match titles by substring; operators filter by tag, folder, list, dates, flags, and a few more dimensions. Boolean composition (OR, AND, parenthesized groups, group negation) is supported on top.

All matching runs client-side over already-decrypted data - operators are processed the same local way as plain-text words. The server sees neither the query nor the results in either case.

This post summarises what the feature does and how the syntax is structured. The full grammar, including edge cases and quoting rules, lives in the search operators documentation.

Quick reference

OperatorWhereExamples
tag:NAMEre/notestag:work, tag:"side projects"
folder:PATHre/notesfolder:projects, folder:projects/active
list:NAMEre/tasklist:Inbox, list:"this week"
created:DATEbothcreated:2026-01-01, created:>2026-01-01, created:<7d, created:today, created:2026-01-01..2026-02-01
modified:DATEbothmodified:<14d, modified:yesterday
due:DATEre/taskdue:<7d, due:today, due:>2026-06-01
is:starredbothis:starred
is:pinnedre/notesis:pinned
is:completedre/taskis:completed
is:overduere/taskis:overdue
has:linkbothhas:link (matches notes/descriptions containing URLs or Markdown links)
no:folderre/notesno:folder - notes not in any folder
no:tagre/notesno:tag - notes with no tags

Modifiers

  • -OPERATOR - negates a single operator. Example: -tag:archived, -is:completed.
  • -WORD - excludes items whose title (or body, when the description/content path is active) contains the word. Example: cat -mouse.
  • "quoted value" - preserves whitespace and colons. Inside an operator: tag:"in progress", list:"Q2 planning". As plain text: "meeting prep" matches the literal phrase, not the two words independently.
  • -"quoted value" - excludes a phrase. Example: cat -"angry mouse".

Combining clauses

Whitespace between clauses is an implicit AND. Every clause must hold simultaneously - operators with each other, operators with plain-text words, and excludes too:

meeting tag:work -is:completed modified:<14d -draft

…matches items containing the word meeting, tagged work, not yet completed, modified within the last 14 days, and not containing draft.

Empty-field filters

no:folder and no:tag (re/notes) match notes where a container field is empty - the mirror image of folder: and tag:. They follow the convention GitHub uses for no:label / no:assignee, and they compose and negate like every other operator:

no:folder              # notes that aren't filed in any folder
no:folder no:tag       # neither filed nor tagged - your "inbox" of unsorted notes
-no:folder             # the inverse: only notes that ARE in some folder
folder:projects no:tag # untagged notes inside Projects (and its subfolders)

Matching is metadata-only, so these run on the instant title path without decrypting note bodies.

Boolean operators

Beyond the implicit AND, the search box supports explicit OR, parenthesized groups, and group negation. Explicit AND is also recognised, as a redundant synonym.

tag:work OR tag:personal                       # either tag matches
is:completed OR is:overdue                     # finished or past due
tag:work (is:starred OR modified:<7d)          # work items, starred OR recently touched
(tag:reading AND has:link) OR is:starred       # reading items with a link, or anything starred
-(tag:archived OR tag:draft)                   # neither archived nor draft

OR and AND must be uppercase with surrounding whitespace - same convention as Gmail, GitHub, and Linear. Lowercase or / and are treated as plain-text words. To search for the literal substring OR, quote it: "OR".

AND binds tighter than OR, so cat dog OR mouse parses as (cat AND dog) OR mouse. Empty groups (()) are ignored, and redundant nesting like ((cat)) collapses naturally. Quotes always preserve characters literally - OR, AND, (, and ) inside quotes are part of the value, not boolean syntax.

Date expressions

Three fields accept date expressions: created: (creation timestamp), modified: (last update), and due: (re/task only). All three use the same grammar.

Absolute dates

created:2026-01-15              # exactly that day
created:>2026-01-15             # after that day
created:<2026-01-15             # before that day
created:2026-01-01..2026-01-31  # range, inclusive on both ends

Format is always YYYY-MM-DD. Invalid dates (e.g. 2026-02-30) silently fall back to plain-text search.

Relative ranges

modified:<7d   # within the last 7 days
created:<2w    # within the last 2 weeks
modified:>1m   # older than 1 month
due:<3d        # due within the next 3 days  (`due:` is forward-looking)

Units: d (days), w (weeks = 7 days), m (months ≈ 30 days). Direction convention: < points toward “now” (recent), > points away from it (older).

Keywords

created:today
modified:yesterday

Dates are interpreted in the local timezone, not UTC - “today” matches the wall clock.

Plain-text and the description/content toggle

Plain-text words match by substring against:

  • Titles - always, instantly, no decryption.
  • Descriptions (re/task) / content (re/notes) - only when the Search in description / content toggle is on. Decryption happens in-memory; the server never sees the query.

Operators that need note/task body - currently only has:link - automatically force the body-aware path even when the toggle is off.

Multiple plain-text words are AND-combined: meeting prep requires both meeting and prep to appear independently. To require the literal phrase, wrap it in quotes: "meeting prep".

Searching in trash

Both apps have a dedicated trash view, and the search box always scans the current bucket only - active items in normal views, trashed items in the trash view. There is no operator to mix the two; to browse deleted items, switch to the trash view directly. All operators above (tag, folder, list, dates, …) work over the trashed set.

This is by design: cross-bucket search would surface stale matches in everyday queries. A future version may introduce an explicit unified search mode.

Graceful fallback

If the parser doesn’t recognise a token (typo like taq:work, invalid date, dangling OR/AND, unmatched parenthesis), it silently treats the offending characters as plain-text tokens instead of failing. The query becomes less specific until the syntax is balanced again - there is no red error state mid-typing.

In practice:

  • created:tomorrow - there is no such keyword (only today and yesterday are supported). The whole token is searched as a literal string.
  • tag: (no value) - falls back to plain text.
  • Unknown operator names (status:done, priority:high, …) - treated as plain text. They may become real operators in a future tier.

If a query “doesn’t work as expected”, the most common cause is a typo silently degrading to plain-text. Re-check the operator name and value format against the table above.

Privacy and architecture

Adding operators did not change the threat model. Every step happens locally:

  1. The encrypted database is decrypted in memory at unlock.
  2. The search box parses the query into an AST (abstract syntax tree).
  3. The AST is evaluated against an in-memory metadata index - titles, dates, tags, flags.
  4. If the query needs body content (has:link, or the description/content toggle), only candidate items are decrypted and re-evaluated.
  5. Nothing is sent to the server. There is no server-side search endpoint, no inverted index, and no query telemetry.

The full architecture write-up is in Zero Knowledge Architecture.

Roadmap

A few power-user features are planned as fast-follows:

  • Saved searches - pin a query like due:<7d -is:completed and reopen it with one click.
  • Smart folders - saved searches surfaced as virtual folders in the sidebar.
  • Additional operators - likely candidates: priority:, status:, list/folder hierarchy traversal.

The complete reference, including edge cases and quoting rules, is in the search operators documentation.


New to Reborn Apps? Try them on the public instance - free, zero-knowledge, no email required. Or self-host your own.

Acknowledgments

The operator vocabulary and the tier-based rollout (essentials first, power-user features as fast-follows) were shaped by detailed feedback from Travis Solin (@computrav).