Repository navigation
v2.13.0 — Creation actions, URL rows & index self-heal
Nex 2.13.0 brings type-to-create actions — unmatched queries now offer folder creation (trailing \), file creation (known extensions), and bare-domain URL opening in your default browser — plus a hardened search backend: tantivy fields are stored (fixing vanished app types), a single writer with re-seed, and mid-run self-healing when the index schema changes. Icon extraction is now icon-only (no more file thumbnails) at 256px native resolution, and a batch of overlay resize/row fixes land, including an integral 46px row height that eliminates the 1px bottom strip on small windows.
Changelog (50 commits since v2.12.0)
Features
- Create folder on unmatched query: type a path ending in
\(e.g.D:\projects\new\) → "Create folder" row; nested paths allowed, illegal characters rejected, existing paths offer "Open folder". Configurable target viadefault_create_dir. - Create file on unmatched query: whitelisted extensions (
create_file_extensions, 18 common types) → "Create file" row usingcreate_new(never overwrites); Windows reserved names (CON, PRN, NUL, COM/LPT…) rejected. - Open URL on unmatched query: bare domains (
youtube.com) and explicithttp(s)://URLs → "Open in browser" row viaopen_url_in_default_browser+url_tlds(32 TLDs); also reachable in command mode (> youtube.com). - Fresh installs index files + folders by default:
show_files/show_foldersnow default to true; upgrading users keep their existing config. - Custom folder + file placeholder icons: Explorer shell icons replaced with bundled themed icons until real icons load.
- Extended built-in excludes: AI CLI workdirs, rustup toolchains, WebView caches, dev cache dirs, shell artifacts.
- Kind-first result ordering: apps hoisted above files/folders in the tantivy path, tier-aware regrouping, BM25 as within-tier signal, dedupe-before-top-hit guard.
Bug Fixes
- Tantivy schema:
kindandsubtitleare now STORED — previously they were indexed-only, so every tantivy result read back an empty kind, breaking app hoist and grid rendering. - Tantivy writer: single writer instance + re-seed on open (kills dual-writer meta.json corruption); empty index re-seeds live.
- Mid-run index self-heal: schema mismatch/corruption now resets and rebuilds during the next sync — no restart required.
- TopHit row: only rendered for apps; non-app results group under section headers; single non-app result no longer vanishes.
- 1px bottom strip: row height was fractional (46.22px) —
Math.ceilwindow sizing left an unpainted strip; rows are now an integral 46px. - Icon extraction: icon-only flags (no thumbnails), native-size canvas for small icons (no upscale blur), 256px request for all items.
- Overlay resize: immediate resize on structural transitions (grid flips, action rows), immediate growth on row-count jumps, synchronous shrink, stable grid columns via scrollbar-gutter.
Architecture
- Creation actions registry: action rows (folder/file/URL/web) injected in the search session merge with exact-title-match suppression; dispatch through
launch_path/launch_open_target. - Icon pipeline: single reset helper shared by boot-time and mid-run tantivy recovery paths.
Commit Log
65cfe46release: bump version to 2.13.0be2d2abfix(ui): integral 46px row height — kills 1px bottom strip on small windows9e5c20bfix(tantivy): self-heal schema-mismatched index mid-run, no restartcd88661feat(url): open bare domains / explicit URLs in default browser — phase 35dc963ddocs: creation features plan + issues entries9fb19d1fix(icons): icon-only extraction, native-size canvas, 256 request for all items83eccc3fix(overlay): immediate resize on structural transitions (grid flips, action rows)b815e78feat(create): folder + file creation rows on unmatched queriesfc12479fix(overlay): single non-app result no longer vanishes — stays in kind bucketb8d134efeat(config): default show_files/show_folders true for fresh installs27de5aafix(overlay): TopHit row only for apps — non-app results group under section headersdf3317dfix(search): store kind+subtitle in tantivy schema — restore app hoist + grid2d47d48fix(result): hoist apps first in tantivy path + path-based dedupeddfcc5afix(search): case-insensitive tantivy title prefix matching4ef470dfix(icons): size ladder — 64px extraction for generic file types097e3ecfeat(index): exclude AI CLI workdirs, rustup toolchains, webview caches81496ecfeat(index): extend built-in excludes — dev cache dirs + shell artifacts19ed5c6merge: feat/folder-icon — custom folder + file placeholder iconsa989f23merge: fix/tantivy-empty-index — single tantivy writer + re-seed on open2233206feat(overlay): file placeholder icon until shell icon loadsf261e8efeat(overlay): custom folder icon replaces Explorer shell iconsf1b0701fix(index): single tantivy writer + re-seed on openf9eceaafix(2-B1): stable grid columns — scrollbar-gutter + 104px min, kills 22px cell-width flipd16e19ffix(overlay): immediate growth on >=2 row-count jumps — covers mixed apps+non-apps erase casea543d69fix(overlay): immediate growth for structural jumps (>=70px) — covers erase-grow from small result sets65c85adfix(overlay): immediate grow from idle empty state — kills erase-letter escape flashdad7f02docs(2-PartC): add grid-view rendering checklist5675292fix(overlay): apply shrink resize synchronously, skip stale keystroke measure692b3bbfix(2-B1B2): exclude calculator rows from row-list class792ab2dfix(2-B1B2): bump row-list selectors to .row.row-list, defeat grid-cell specificityac8f32crefactor(2-B3): remove redundant single-row exemption2e083d2feat(2-B1B2): add row-list overrides for non-app rows in grid view0990a2bfeat(2-B1B2): add per-row grid/list classes in render loop0468e74test(1-A1): fix A3 tautology — assert TopHit beats lower-tier index-0 item1a15743test(1-A1): add unit tests for kind-first ordering and TopHit selection54cbdf5docs(1-A4): clarify command_mode deterministic action orderinge95b197feat(1-A1): kind-first result ordering supersedes tier-beats-kind3a8352bdocs: add apps-first result-ordering spec114b255Merge branch 'feat/result-sorting' — result ranking fixes 1-7fa66377fix(result-sorting-7): dedupe before top-hit confidence guard67370e4fix(result-sorting-6): uninstall actions scored by app name not wrapper9bdd0c4fix(result-sorting-5): pinned-to-top only during idle empty query435a54bfix(result-sorting-4): -120 file/folder penalty only in app mode040b01dfix(result-sorting-3): BM25 as within-tier signal, not separate tier mask0a16a3ffix(result-sorting-2): shrink scoring tier gaps, retune top-hit guard deltasb784905fix(result-sorting-1): tier-aware kind regrouping in overlay rows466f222docs: README — Win-key Start-menu replacement, trim CLI commands (GUI app); AGENTS.md: release workflows not delegated8323d06docs: rewrite v2.12.0 release notes per RELEASE-TEMPLATE86e7029docs: align 2.8.1/2.9.0/2.9.1 release notes with template496dd9ddocs: align v2.12.0 release notes with template