Skip to content

WayRun v0.4.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 02:11
· 292 commits to main since this release
v0.4.0
5bdc130

Added

  • f and d search the whole home directory at any depth through a background
    index ($XDG_CACHE_HOME/wayrun/file-index.bin): built on the first f/d
    search, mapped only while in use and unmapped after two minutes idle, and
    re-checked within a minute by a parallel sweep that re-reads just the
    directories whose mtime moved — a patch of ~0.1 s against the walk of ~1.2 s
    it replaces. Every row carries a bigram bloom (index format v4) that the scans
    reject on before touching a name. config.md's [files] holds index
    (default true), depth (the unindexed fallback, 3) and exclude.
  • [files] exclude names the directories the walk never enters. The shipped
    config.toml lists node_modules, target and __pycache__; a name
    starting with a dot is always hidden, and an edit to the list rebuilds on the
    next f/d search.

Changed

  • Breaking: a plain query no longer stops at the first provider with
    results. calculator, system-commands and app-search all answer, and
    their rows are merged by each row's relevance — the match kind's weight scaled
    by the surface it matched on — then by the row's usage count, then by
    registry order, so a prefix command can no longer hide an exact app.
  • Breaking: the app list's metadata surfaces are visible in a plain query:
    a keyword or GenericName matches by word and a Comment by prefix, and a
    near spelling of a name answers too. A title match leads a description match
    of comparable strength, while an exact keyword still beats a title the query
    only sits inside of.
  • Every provider ranks by one match vocabulary: the file index, the path scans,
    the runner, the window list and the app list share the same kinds, and
    nucleo is gone with its transitive crates. A f/d build logs itself on
    stderr (file index … (patched) / (loaded) / (capped)).

Fixed

  • A clipboard preview longer than 80 bytes is cut on a character boundary
    instead of panicking on a multi-byte preview, which silently emptied the
    whole list.
  • A keystroke burst no longer runs one search per key: the core coalesces
    superseded queries and drops their payloads.
  • Firefox snapshots are opened read-only and immutable, so a b/h query takes
    no locks on the private copy.
  • The plugin host cache (now under $XDG_CACHE_HOME/wayrun) and the built-in
    glyphs are written atomically, so a crash mid-write cannot leave a torn file
    behind.
  • The file index only serves a cache it can vouch for: an unreadable walk is
    never persisted as an empty index, a directory layout that is not the walk's
    own pre-order is rejected, a non-UTF-8 $HOME still indexes and serves, and
    the first search after an idle unmap remaps instead of falling back to the
    walk.
  • The index's own search no longer pays for work it discards: every indexed row
    ran a Loose subsequence pass its caller threw away and then a second
    substring pass. f report on this home's 555k-name index went ~12 ms -> ~3 ms
    — confident-only classifiers, a memchr2 candidate walk that fuses the word
    and substring checks, and a per-row bloom the scans reject on before touching
    a name.
  • An index build's peak memory fell 144 MB -> 96 MB on this home: the walk keeps
    one length-prefixed names buffer per directory instead of one allocation per
    name, and the image streams into the cache file instead of being materialised
    beside the tables.