Changelog

1.0.0

2026-07-02

Major refactor of the entire application.

Daemon Architecture

App now runs a daemon which scans in the background and watches for new apps and projects, as opposed to the previous way of just scanning everything every time waycast was invoked.

Async

The initial version of waycast used no async to keep it simple. Now we use the tokio runtime so we can run scans and other tasks concurrently. This was also necessary to use SQLX for the database.

Database (SQLite)

We now use SQLite as a data store. On every scan, the database gets updated with all the apps, projects, and files we scan. This gives us more flexibility since we now have a data store that we can query, as opposed to just holding everything in memory.

Additionally, if the daemon has a failure when scanning, we can still show data in the UI, even if stale.

The original version of waycast used redb as a key value store for caching. Since we now have SQLite, we just have a cache table instead. No need for a whole separate dependency for just story key:value pairs.

Logging

We're now using the tracing library for logging. This is a standard in rust. Since we now have a background process we need better visibility into the daemon's operations.

You can now see waycast daemon logs with standard tools like journalctl.

0.5.1

2025-11-23

  • Set up cargo dist to be able to build waycast for more platforms

0.4.0

2025-10-03

A whole new world

Replaced the GTK UI with a whole new UI based on Iced, a rust native UI framework.

The GTK UI was taking too long to start up for my taste. I want waycast to be as fast as possible, since I believe that's how a launcher should be. After much profiling and trying to optimize GTK, I realized there wasn't much more I could do. GTK is full featured, but that also means it does a lot of things in the background that I cannot control such as loading themes, checking for icons, and other tasks that take CPU cycles.

GTK also wasn't fun to work with, so it made it difficult for me to add all the cool features I have planned for the future to the UI.

Iced is still in beta, but I'm very excited to support such a cool project by at least using it. And the iced UI is an order of magnitude faster than the GTK one. Not to mention it's safe and ergonomic since it's rust native.

0.5.0

2025-10-03

Added

  • Calculator functionality using my mathengine. You can now type equations straight on the launcher.

0.3.0

2025-09-23

Fixes

  • Steam launch: After the previous performance updates, steam would not launch through waycast because it needed a few miliseconds to properly detach from the parent process. This is now fixed by immediately hiding the window, but waiting a few miliseconds before actually stopping the waycast process.

Enhanced

  • UI Performance: Refactored the UI to start up faster by using simplet GTK widgets

Technical

  • freedesktop-icon: Replaced GIO and custom icon lookup function with my own freedesktop-icon crate. This crate does icon lookups in microseconds. When combined with the waycast caching system, lookup performance and accuracy is greatly improved.

0.1.2

2025-09-16

Breaking Changes

  • Architecture Revert: Removed daemon-based architecture and returned to direct embedded launcher
  • Removed Components: Eliminated waycast-daemon and waycast-protocol crates

Added

  • Direct UI Integration: GTK application now constructs its own WaycastLauncher instance directly
  • All Plugin Support: Restored support for all plugins (drun, file_search, projects) in single process

Fixed

  • Application Spawn Environment: Fixed critical issue where launched applications lost display environment access
  • VS Code Terminal Compatibility: Applications launched through waycast now properly inherit display variables
  • Session Preservation: Changed from setsid() to setpgid(0, 0) to maintain session while detaching processes

Enhanced

  • Development Experience: Simplified architecture makes debugging and development easier

Technical

  • Spawn Function Improvements: Enhanced spawn_detached to explicitly preserve WAYLAND_DISPLAY, DISPLAY, XDG_RUNTIME_DIR, XDG_SESSION_TYPE, and XDG_CURRENT_DESKTOP
  • Nix Development Shell: Added proper display environment variable setup for VS Code integration
  • Process Group Management: Proper detachment without losing session context

Infrastructure

  • Systemd Removal: Eliminated systemd service installation and management

0.2.0

2025-09-16

Added

  • Nucleo-Matcher Integration: Lightning-fast fuzzy matching from the Helix editor team
  • FuzzySearchable Trait: Clean abstraction for fuzzy searching any data type
  • FuzzyMatcher Utility: Reusable fuzzy matching component for all plugins
  • Primary/Secondary Key Support: Smart scoring system that prioritizes primary matches over secondary ones
  • Path-Based File Search: Search files by directory path (e.g., "wallpapers/") alongside filename matching
  • Intelligent Scoring: Better relevance ranking with typo tolerance and smart prioritization
  • Custom Freedesktop Integration: Replaced complex GIO dependencies with clean, purpose-built freedesktop crate

Enhanced

  • File Search Performance: Dramatically faster search with better relevance ranking
  • Desktop App Search: Now uses fuzzy matching for much better app discovery
  • Search Quality: Fuzzy matching provides typo tolerance and intelligent substring matching
  • Developer Experience: Clean, reusable fuzzy search API for plugin developers
  • Code Simplification: Desktop app handling reduced from ~150 lines of complex GIO code to ~60 lines of clean, readable logic
  • Dependency Reduction: Eliminated heavy GIO dependencies in favor of lightweight, focused freedesktop crate

Technical

  • Generic-Based Design: Type-safe fuzzy matching without trait object overhead
  • Zero-Copy Architecture: Efficient matching that returns references to original data
  • Configurable Limits: Built-in result limiting for optimal performance
  • Score-Based Ranking: 90% penalty for secondary key matches ensures primary keys rank higher

Performance

  • Blazing Fast Search: Orders of magnitude faster than previous substring matching
  • Scalable: Consistent performance even with large file/app collections

Plugin Updates

  • File Search: Now matches both filenames and full paths with intelligent scoring
  • Desktop Apps: Fuzzy matching on application names with much better discovery
  • Unified API: All plugins use the same high-quality search infrastructure

0.1.0

2025-09-15

This update introduces the waycast-daemon binary. Instead of re-doing all the computation of starting up plugins, scanning the file system and getting desktop entries every time the app starts, this will now happen in a long running background process.

Breaking Changes

  • Architecture Refactor: Moved from embedded launcher to daemon-based architecture

Added

  • Waycast Daemon: Background service for managing launcher state and plugins
  • JSON-RPC Protocol: Simple, debuggable communication protocol between GTK client and daemon
  • Automatic Refresh: Daemon periodically rescans applications and projects every 2 minutes
  • Systemd Integration: User service configuration for automatic daemon startup
  • Home Manager Support: Enhanced module with optional daemon service management

Enhanced

  • Performance: Persistent daemon keeps data indexed and ready. Should decrease UI startup time since launcher logic now lives in a separate long running process.

Technical

  • Protocol Crates: New waycast-protocol crate with client/server libraries
  • Socket Utilities: Automatic socket path resolution with fallbacks
  • Error Handling: Comprehensive protocol error types with proper propagation
  • Thread Safety: Arc/Mutex patterns for safe daemon state sharing
  • Background Tasks: Tokio-based async server with sync client compatibility

Infrastructure

  • Service Definition: Systemd user service file with proper dependencies
  • Nix Integration: Flake automatically installs systemd service configuration
  • Build System: Updated workspace with new protocol crate

0.1.1

2025-09-15

Enhanced

UI Startup Performance: Loading icons async and caching results makes the UI load faster.

0.0.3

2025-09-12

Fixed

  • Home manager module: The icons were not getting properly copied to $XDG_DATA_HOME

0.0.2

2025-09-11

Added

  • Framework Detection System: Automatic detection of project types (Laravel, Rails, NextJS, Vue, Svelte, Django, Flask, Go Fiber, Ansible)
  • Project Icons: Visual framework/language icons for project entries using devicons
  • Intelligent Project Type Detection: Uses both framework detection and language analysis (tokei) with fallback logic
  • Icon Asset Management: Bundled devicon SVG assets with proper XDG data directory support
  • Caching System: 24-hour TTL caching for project type detection to improve performance
  • Development Cache Control: WAYCAST_NO_CACHE environment variable to disable caching during development
  • Macro-based Framework Registration: Clean, declarative system for adding new framework detectors
  • Asset Installation: Makefile targets for icon management and XDG directory installation
  • Release Management: Automated release workflow with version bumping across all crates

Enhanced

  • Project Plugin: Now shows framework/language-specific icons instead of generic VSCode icon
  • Icon Resolution: Smart path resolution with XDG directory precedence and development fallback
  • Nix Package: Added icon installation to flake.nix build process

Technical

  • Framework Detection Macro: Compile-time static framework detection system with zero runtime overhead
  • JSON Path Checking: Built-in support for detecting frameworks via package.json dependencies
  • File Pattern Matching: Flexible file existence and directory structure checking
  • Custom Validation: Support for complex framework detection logic via closures

0.0.1

2025-09-08

Added

  • Core Application: GTK4-based application launcher for Wayland compositors
  • Plugin System: Modular plugin architecture with priority-based ordering
  • Desktop Application Plugin: Scan and launch .desktop applications from XDG directories
  • File Search Plugin: Fast file system search with configurable directories and exclusions
  • Project Search Plugin: Code project discovery with configurable search paths
  • Configuration System: TOML-based configuration with environment variable support
  • Caching Framework: Persistent disk cache with TTL support using redb
  • Wayland Integration: Layer shell support for floating launcher interface
  • Search Interface: Type-to-filter functionality with instant results
  • Nix Support: Complete Nix flake with development shell and package definition
  • Home Manager Module: NixOS home-manager integration for declarative configuration

Technical

  • Multi-crate Architecture: Organized codebase with core, plugins, config, and UI separation
  • Async Plugin Loading: Background indexing with non-blocking UI
  • XDG Compliance: Proper XDG Base Directory specification support
  • GTK4 + Relm4: Modern reactive UI framework with factory patterns for list rendering
  • Icon Handling: GIO-based icon resolution with themed and file icon support
  • Error Handling: Comprehensive error types with proper propagation
  • Memory Efficiency: Static compilation patterns and lazy initialization
  • Development Tooling: Comprehensive Makefile with build, test, and quality targets

Infrastructure

  • Build System: Cargo workspace with proper dependency management
  • Development Environment: Nix development shell with all required dependencies
  • Code Quality: Clippy linting, rustfmt formatting, and automated git hooks
  • Documentation: Inline documentation and architectural guidance in CLAUDE.md