snipexpand 0.2.5

Fast, config-based text expansion for Linux and Wayland
# SnipExpand tasks

This is the prioritized product backlog. Within each group, work from top to
bottom unless user feedback provides a stronger signal.

## P0: Make the current product dependable

These tasks should come before adding major expansion features.

- [ ] Build a repeatable application compatibility suite.
  - [x] Establish an isolated, byte-exact Neovim-in-Foot baseline using the
    real evdev and Wayland injection path.
  - Cover Chromium, Firefox, Zed, terminals, Electron apps, GTK, and Qt.
  - Exercise ASCII, Unicode, multiline text, cursor placement, undo, rapid
    consecutive expansions, and configuration reloads.
  - Record known application-specific timing overrides as fixtures.
- [x] Make upgrades and removal first-class.
  - Add `snipexpand uninstall` for the user service and generated service file.
  - Ensure `snipexpand install` replaces and restarts an older running daemon.
  - Document which user configuration remains after uninstalling.
- [ ] Offer an Arch-native installation path.
  - Publish and maintain an AUR package for release binaries.
  - Ensure installation, input-group access, service setup, upgrade, and removal
    behave naturally on Omarchy and Arch Linux.
  - Keep Cargo and direct binary installation available.
- [x] Rebuild the persistent Unicode keymaps after a configuration reload.
  - Newly added Unicode snippets should not require a daemon restart or
    temporarily fall back to `wtype`.
  - Add regression coverage for adding and removing Unicode while running.
- [ ] Expand keyboard and input testing.
  - [x] Track modifiers independently across multiple keyboards and clear them
    when a device disconnects.
  - Test common non-US XKB layouts, held modifiers, dead keys, compose keys,
    key repeat, multiple keyboards, sleep and resume, and device hotplugging.
  - Document IME and Fcitx5 behavior rather than guessing at compatibility.
- [x] Remove the GitHub Actions Node 20 deprecation warnings.

## P1: Highest-value user features

These are the strongest candidates for the next feature releases.

- [ ] Add per-application profiles.
  - Allow different match sets, trigger modes, and injection timing by title,
    class, or executable.
  - Preserve the current exclusion syntax as the simple path.
  - Make `snipexpand detect` generate or suggest the relevant YAML.
- [ ] Add an Espanso migration command.
  - Import the supported subset without rewriting the original configuration.
  - Report every skipped or incompatible field with its file and match.
  - Make the result pass `snipexpand check` before writing it.
- [ ] Add regex triggers with capture variables.
  - Bound the input buffer and regex execution so matching stays predictable.
  - Define deletion, boundaries, case propagation, and overlapping matches
    before accepting the syntax.
- [ ] Add a snippet search palette.
  - Provide fuzzy search by trigger, replacement preview, and optional label.
  - Keep the daemon usable without any GUI process.
  - Avoid stealing focus or breaking insertion into the original application.
- [ ] Add named snippet groups and quick enable or disable controls.
  - Support global and application-scoped groups.
  - Expose group state through the CLI and status JSON.
- [ ] Add an optional long-text injection strategy.
  - Benchmark persistent typing before choosing a clipboard or compositor-native
    backend.
  - If clipboard insertion is added, make it explicit, preserve prior clipboard
    contents, and retain the clipboard-free default.

## P2: Differentiators and power-user features

- [ ] Build an opt-in snippet opportunity advisor.
  - Detect text the user repeatedly types even though an equivalent snippet
    already exists.
  - Show the highest-value missed opportunity and estimated daily, weekly,
    monthly, and yearly savings.
  - Keep captured text local, make retention configurable, and provide a clear
    way to inspect and delete all collected data.
- [ ] Add safe variable types.
  - Consider UUID, random choice, environment values, and clipboard contents
    individually.
  - Require explicit opt-in for sensitive sources such as the clipboard.
  - Continue rejecting arbitrary shell and script execution by default.
- [ ] Support multiple cursor stops.
  - Let Tab advance through declared positions after expansion.
  - Define cancellation behavior for mouse input, focus changes, and manual
    cursor movement.
- [ ] Add Git-based snippet sharing.
  - Start with import and export of ordinary directories.
  - Pin revisions and validate all imported YAML.
  - Do not build a hosted package registry until this proves insufficient.
- [ ] Explore a small desktop companion.
  - Prioritize status, pause, search, editing, diagnostics, and update guidance.
  - Keep configuration as readable YAML and the daemon independent of the GUI.

## P3: Broader platform work

- [ ] Add tested support for more Wayland compositors, starting with those that
  expose reliable active-window and virtual-keyboard protocols.
- [ ] Investigate macOS and Windows backends without weakening the Linux and
  Wayland implementation.
- [ ] Consider optional encrypted sync only after local import, export, and
  conflict behavior are solid.

## Not planned for the core daemon

These features add substantial security or product complexity and should not be
accepted without a new design decision:

- Arbitrary shell or script execution
- Forms and choice windows inside the daemon
- HTML, images, and application-specific rich-text insertion
- A hosted public package registry
- Mandatory accounts, telemetry, or cloud services

## Prioritization signals

The ordering favors reliability, installation, application-aware behavior,
migration, regex matching, and discoverability. Those needs recur in mature
text-expander communities, while SnipExpand's strongest advantage remains a
small, reliable Wayland-native core.

Useful upstream signals:

- [Espanso feature requests and ideas]https://github.com/espanso/espanso/discussions/categories/feature-requests-and-ideas
- [Wayland application detection and per-app configuration]https://github.com/espanso/espanso/issues/2730
- [Custom configuration locations for dotfile workflows]https://github.com/espanso/espanso/issues/2382
- [Wayland expansion reliability]https://github.com/espanso/espanso/issues/1966

Revisit priorities after the project receives its first substantive user issues
or discussions. Direct SnipExpand feedback should outweigh inferred demand from
other projects.