Search and find

Sigla has two search surfaces: a find-in-document bar for the file you’re reading, and a folder-search modal for cross-file queries.

Find in document — ⌘F

⌘F (Edit → Find → Find…) opens a native find bar above the document. It uses macOS’s standard NSTextFinder, so highlights respect your document’s typography and theme.

ShortcutAction
⌘FShow the find bar (and seed with selection if any)
⌘G or ReturnNext match
⌘⇧G or Shift+ReturnPrevious match
⌘EUse Selection for Find (seed from the current selection without opening the bar)
Esc or click DoneDismiss the bar

The status label reads “Found” or “Not Found” — an N-of-M total is a tracked follow-up. The bar closes when you switch documents and re-runs the active query after a live reload (when the source file changes on disk).

Search folder — ⌘⇧F

Requires an open folder workspace. ⌘⇧F (Edit → Search Folder…) opens a modal that queries across every Markdown file in the workspace.

The modal has:

  • A query field at the top
  • A result list below
  • A footer with status (matched count, parse errors, etc.)

Click a result to open that file. The first 100 matches are shown — refine the query if you need to narrow.

Query syntax

Queries are built from three primitive types: words, phrases, and key:value filters. Whitespace separates terms.

Words

A bare word matches against filename, title, and body text. Case-insensitive substring match:

onboarding
release notes

The second example is two words — both must appear (AND across distinct words).

Phrases

Wrap in double quotes to match the exact phrase, including whitespace:

"release notes"

Filters

A key:value pair matches against frontmatter. The key looks up frontmatter fields (case-insensitive, with one-hop singular/plural aliasing — tag: and tags: resolve to the same set):

tag:release
status:draft
author:toni

Existence filters

A bare key with no value matches files where the key exists at all:

draft:
deadline:

Negation

Prefix any term with - to negate:

-draft:                  # files without a `draft` key
-tag:archive             # files not tagged "archive"
release -tag:internal    # files matching "release" but not tagged "internal"

Combining

Terms compose with AND across distinct keys and OR within a single key:

tag:release status:final         # AND: tag=release AND status=final
tag:release tag:rc               # OR: tag=release OR tag=rc
"release notes" -draft:          # AND: phrase matches AND has no draft key

Quoting filter values

When a value contains spaces or special characters, quote it:

author:"José García"
title:"Q4 retrospective"

What’s indexed

  • File basename (without .md extension)
  • The frontmatter title: field (when present)
  • Frontmatter keys and values (all of them, recursively for lists)
  • Body text (everything after the frontmatter block)

What’s NOT indexed

  • Files inside hidden directories (anything starting with .)
  • Files inside .git, node_modules, .build, DerivedData, target, dist, build, __pycache__, .vscode, .idea (same ignore list as the folder workspace sidebar)
  • Non-Markdown files
  • Sidecar JSON files (.<file>.sigla.json — those hold comments, not searchable content)

Result ranking

Results are sorted into stable buckets:

  1. Filename match — basename equals the first search word.
  2. Title-prefix or substring match — title starts with or contains the word.
  3. Frontmatter-only match — only the filters matched, no body text hit.
  4. Body match — found in the body text.

Within a bucket, results are alphabetical by relative path. The first 100 results are returned.

Snippets

Each result row shows a snippet. The snippet source depends on what matched:

  • Body match — ~120 characters of body text around the first hit, snapped to nearest word boundary, with ellipsis on each truncated end.
  • Title match — the title with the matched substring highlighted.
  • Filter-only match — the first matched filter rendered as key: value.

The frontmatter-click flow

In the Frontmatter panel, clicking any value runs a workspace search for key:value. This is the fastest way to find “all files tagged with the same X”:

  1. Click tag: release in the frontmatter panel.
  2. The Search Folder modal opens with tag:release already entered.
  3. Results populate immediately.

Modify the query in the search field to refine further.

Cross-references