Searching Bookmarks
Stashmark's search bar does much more than keyword matching. It understands a lightweight query language — a search DSL — that lets you combine filters, boolean logic, and text search to find exactly what you need in seconds.
The search bar
The search bar sits at the top of your bookmarks list. Click it or press / from anywhere in the app to jump straight to it.
As you type, an autocomplete dropdown suggests available operators and values. When the search bar is empty and focused, it shows all available operators:
Click the ? icon on the right side of the search bar to open the syntax help popover — a quick-reference cheat sheet for every operator:
Quick start examples
Before diving into each operator, here are some common searches to give you a feel for the DSL:
| Query | What it finds |
|---|---|
rust programming | Bookmarks matching "rust" AND "programming" (full-text) |
"async programming" | Bookmarks containing the exact phrase "async programming" |
tag:rust | All bookmarks tagged "rust" (including subtags like rust/async) |
is:favorite saved:1w | Favorites saved in the last week |
type:video has:transcript | Videos that have a transcript |
domain:vercel.com -tag:archived | Vercel bookmarks, excluding those tagged "archived" |
(tag:rust OR tag:go) is:favorite | Favorites tagged either "rust" or "go" |
Full-text search
Just type words into the search bar. Stashmark uses PostgreSQL full-text search to match against bookmark titles, descriptions, URLs, and even video transcripts.
rust async
Each word is matched independently — rust async finds bookmarks containing both "rust" and "async" anywhere in their searchable text.
Exact phrases
Wrap text in double quotes to search for an exact phrase:
"machine learning"
This matches the literal string "machine learning" rather than bookmarks that happen to contain both words separately.
Filter operators
Filters use the syntax operator:value. The autocomplete dropdown helps you discover operators and valid values as you type.
tag: — Filter by tag
The tag: operator (or the # shorthand) matches bookmarks by their tags. It supports hierarchical tags — if you use nested tags like programming/rust, searching for the parent automatically includes all children.
| Syntax | Behavior |
|---|---|
tag:rust or #rust | Matches "rust" and all subtags (e.g. rust/async, rust/wasm) |
tag=rust | Exact match only — matches "rust" but not rust/async |
tag:*/python | Wildcard — matches "python" as a subtag under any parent (e.g. programming/python, ml/python) |
tag:programming/python | Matches programming/python and its descendants |
#dev/rust | Shorthand with hierarchy — same as tag:dev/rust |
When you type tag:, the autocomplete shows your existing tags sorted alphabetically:
Combining tag filters:
tag:rust tag:database— bookmarks with both tagstag:rust OR tag:go— bookmarks with either tag-tag:archived— exclude a tag
folder: — Filter by collection
Match bookmarks in a specific collection (folder). Uses substring matching, so folder:Work matches "Work", "Work/Projects", etc.
folder:Learning
folder:"Side Projects"
Use quotes for collection names with spaces.
status: — Filter by reading status
Every bookmark has a reading status: inbox, later, or archive.
status:inbox # Unprocessed bookmarks
status:later # Saved for later reading
status:archive # Archived / done
type: — Filter by content type
Stashmark automatically detects content types when you save a bookmark.
| Value | Description |
|---|---|
type:article | Long-form articles with reader view |
type:video | YouTube, Vimeo, and other video content |
type:audio | Podcasts and audio content |
type:image | Image-heavy pages |
type:document | PDFs and documents |
type:link | General links (default) |
is: — Boolean property shortcuts
The is: operator checks boolean properties or acts as a shortcut for content types.
| Syntax | Matches |
|---|---|
is:favorite or is:fav | Favorited bookmarks |
is:unread | Bookmarks with inbox status |
is:reading | Bookmarks you've started reading (have progress > 0) |
is:article | Shortcut for type:article |
is:video | Shortcut for type:video |
is:audio | Shortcut for type:audio |
is:image | Shortcut for type:image |
is:document, is:doc, is:pdf | Shortcut for type:document |
has: — Existence checks
Check whether a bookmark has specific associated content.
| Syntax | Matches |
|---|---|
has:notes | Bookmarks with personal notes attached |
has:tags | Bookmarks that have at least one tag |
has:screenshot | Bookmarks with a preserved screenshot |
has:pdf | Bookmarks with a preserved PDF |
has:reader | Bookmarks with reader view content |
has:transcript | Videos with an extracted transcript |
domain: — Filter by URL domain
Match bookmarks from a specific domain. Supports partial matching and subdomains.
domain:vercel.com # All Vercel bookmarks
domain:vercel # Matches vercel.com, vercel.app, etc.
domain:blog.mozilla.org # Specific subdomain
site: — Filter by site name
Match by the display name of the site (from metadata), rather than the URL:
site:GitHub
site:"The Verge"
title: and note: — Field-specific text search
Search within just the title or your personal notes, rather than full-text across everything:
title:kubernetes # Only matches in titles
note:important # Only matches in your notes
title:"getting started" # Exact phrase in title
Date filters with saved:
The saved: operator filters bookmarks by when they were saved. It supports keywords, relative dates, absolute dates, and date ranges.
Keywords
saved:today # Saved today
saved:yesterday # Saved yesterday
saved:thisweek # Saved this week
saved:thismonth # Saved this month
saved:thisyear # Saved this year
Relative dates
Use a number and a duration suffix to find bookmarks saved within a recent time window:
| Suffix | Meaning |
|---|---|
d | Days |
w | Weeks |
m | Months |
y | Years |
saved:1d # Saved in the last day
saved:1w # Saved in the last week
saved:3m # Saved in the last 3 months
saved:1y # Saved in the last year
You can also use > and < to compare the age of the bookmark:
saved:>1w # Saved more than 1 week ago (older)
saved:<1w # Saved less than 1 week ago (recent)
Absolute dates
Use exact YYYY-MM-DD dates with comparison operators:
saved:2024-06-15 # Saved on that exact date
saved:>2024-01-01 # Saved after January 1, 2024
saved:<2024-06-01 # Saved before June 1, 2024
Date ranges
Use .. to specify a range between two dates:
saved:2024-01-01..2024-06-01 # Saved between Jan 1 and Jun 1, 2024
Combining queries
Implicit AND
Multiple terms are combined with AND by default. Every condition must match:
tag:rust is:favorite saved:1w
This finds bookmarks that are tagged "rust" AND are favorited AND were saved in the last week.
OR
Use the OR keyword (must be uppercase) to match any of several conditions:
tag:rust OR tag:python
type:video OR type:audio
domain:vercel.com OR domain:netlify.com
Negation with -
Prefix any term with - to exclude it:
-tag:archived # Exclude bookmarks tagged "archived"
-is:favorite # Exclude favorites
-type:link # Exclude generic links
-"deprecated" # Exclude bookmarks mentioning "deprecated"
-has:tags # Bookmarks without any tags
Parentheses for grouping
Use parentheses to control how OR and AND interact:
(tag:rust OR tag:python) is:favorite
Without parentheses, tag:rust OR tag:python is:favorite would be interpreted as: bookmarks tagged "rust" OR bookmarks that are tagged "python" AND favorited — which is probably not what you want.
More examples:
(type:video OR type:audio) saved:1w
(domain:vercel.com OR domain:netlify.com) tag:rust
(tag:react OR tag:vue) -tag:deprecated has:reader
Complex query examples
Here are some real-world queries that combine multiple operators:
"Favorite Rust or Go articles from this month"
(tag:rust OR tag:go) is:favorite type:article saved:thismonth
"Videos with transcripts"
type:video has:transcript
"Unread bookmarks from Vercel, excluding archived"
status:inbox domain:vercel.com -status:archive
"Articles about Kubernetes I saved recently and haven't read"
kubernetes type:article saved:2w status:inbox
"All programming subtags except Python"
tag:programming -tag=programming/python
"PDFs and documents saved last year"
is:document saved:2024-01-01..2025-01-01
Autocomplete
The search bar provides intelligent autocomplete as you type:
- Empty search bar: Shows all available operators with descriptions
- Partial operator (e.g.,
ta): Narrows to matching operators (tag:) - After operator (e.g.,
tag:): Shows valid values — your tags, folders, status options, etc. #shorthand: Typing#immediately shows tag suggestions
Autocomplete suggestions are navigable with ↑ / ↓ arrow keys. Press Enter or Tab to select. Press Escape to dismiss.
Graceful degradation
The search DSL is designed to never fail. If you type an unrecognized operator like foo:bar, it's treated as plain text and matched via full-text search instead of throwing an error. This means you can always type freely without worrying about syntax — the worst that happens is a broader search than intended.
Keyboard shortcuts
| Shortcut | Action |
|---|---|
| / | Focus the search bar from anywhere |
| ↑ ↓ | Navigate autocomplete suggestions |
| Enter or Tab | Select highlighted suggestion |
| Escape | Dismiss autocomplete, then blur search bar |
Operator reference
A complete reference of every search operator in one place.
| Operator | Example | Description |
|---|---|---|
| (text) | rust async | Full-text search across title, description, URL, transcript |
"phrase" | "exact match" | Exact phrase matching |
tag: | tag:rust | Tag + descendants |
tag= | tag=rust | Exact tag only (no descendants) |
tag:*/ | tag:*/python | Subtag wildcard (any parent) |
# | #rust | Tag shorthand (same as tag:) |
folder: | folder:Work | Filter by collection |
status: | status:inbox | Reading status: inbox, later, archive |
type: | type:video | Content type: article, video, audio, image, document, link |
is: | is:favorite | Boolean: favorite/fav, unread, reading, or content type shortcuts |
has: | has:notes | Existence: notes, tags, screenshot, pdf, reader, transcript |
domain: | domain:vercel.com | URL domain filter |
site: | site:GitHub | Site display name filter |
title: | title:kubernetes | Search within titles only |
note: | note:important | Search within personal notes only |
saved: | saved:1w | Date filter (keywords, relative, absolute, ranges) |
- | -tag:old | Negate any operator or term |
OR | a OR b | Boolean OR (must be uppercase) |
( ) | (a OR b) c | Group expressions |
Questions or ideas for new search operators? Drop us a line at hello@stashmark.app.