# FeatherClick

> A Rust autoclicker with adjustable timing, target spread, hotkeys, and a headless mode.

Canonical page: [FeatherClick](<https://devanmetz.com/portfolio/featherclick/>)

Project date: Sep 2026

Updated: 2026-10-14

Category: Desktop software

Status: Open source

Tags: Rust, egui, Desktop software, Automation

- **My work:** Click engine, desktop interface, CLI, and platform integration
- **Platform:** Windows · macOS · Linux
- **Release:** v0.1.0 · September 2026

- [Download FeatherClick](<https://github.com/DevanMetz/featherclick/releases/tag/v0.1.0>)
- [View source](<https://github.com/DevanMetz/featherclick>)

## In short

I built FeatherClick in Rust to repeat mouse clicks from a desktop window or the command line. I can choose the timing, target position and spread, and stop conditions, with downloads for Windows, macOS, and Linux and platform-specific limits on clicking and hotkeys.

![FeatherClick's blue click icon with the project's name, timing modes, and supported operating systems.](<https://devanmetz.com/_astro/featherclick-cover.BdY47Lpc_1wWLjA.webp>)

Illustration using the FeatherClick icon. Fixed, uniform, and Gaussian are the three timing modes.

## What it does 

FeatherClick is a small mouse autoclicker (a tool that repeats mouse clicks) I built in Rust. The same click engine runs from a desktop window or in headless mode (without a desktop window) from the command line. The [v0.1.0 release](<https://github.com/DevanMetz/featherclick/releases/tag/v0.1.0>) provides downloads for Windows, macOS, and Linux.

The window keeps the main controls together: which button to click, when to click it, where to aim, and when to stop. Global hotkeys can start or stop a run and capture a position where the platform supports them.

## Timing and targeting 

The timing modes are:

-   **Fixed:** the same requested interval between clicks.
-   **Uniform:** randomly chosen intervals between two limits.
-   **Gaussian:** intervals sampled from a Gaussian distribution (a bell-shaped distribution centered around a mean).

A click can use the pointer’s current position or return to a selected point. For a selected point, the target can vary within a box, ellipse, or Gaussian spread.

The engine supports left, right, and middle buttons, including single clicks, double clicks, and press-and-hold. A run can stop:

-   After a set number of clicks.
-   After a time limit.
-   When the pointer moves away from its starting point.

These controls also make short, bounded runs practical.

## How it is built 

The app uses Rust, `egui`/`eframe` (a user-interface library and its app framework) for its window, and platform input and hotkey libraries. The engine takes a snapshot of the settings at the start of each run, so changing a control in the window does not alter a run already in progress.

Edited settings are saved to a local JSON (a structured text format) file after a short delay, with an atomic write (replacing the saved file in one operation) to avoid truncating the file if saving is interrupted.

The click loop sleeps in short slices and uses a brief spin near the next click. On Windows it raises timer resolution (how finely the system schedules timed waits) while a run is active. In the project’s Windows 11 measurements, a requested 100 ms fixed interval produced click intervals of 96–109 ms. Those numbers describe that test setup, not a guarantee across machines.

The command-line mode uses the same engine for scripts or environments without a desktop window. The source includes tests and continuous integration builds for the three supported operating systems.

## Platform limits 

Windows supports the window, clicking, and global hotkeys. macOS needs Accessibility permission (macOS authorization to control input) to send clicks; its release is unsigned and not notarized (checked by Apple for malicious software). Linux supports X11 (a Linux display system) and some Wayland (a newer display protocol) compositors (software that manages windows and display output).

On Wayland, global hotkeys are unavailable, and native clicking depends on the compositor’s virtual-pointer support.

FeatherClick does not record macros or automate keyboard input. The [README](<https://github.com/DevanMetz/featherclick#readme>) has the current setup notes, platform table, command-line examples, and limitations. The source is available under the MIT license.

## Related reading

- [OpenMic](<https://devanmetz.com/portfolio/openmic/index.md>)
- [DevBot](<https://devanmetz.com/portfolio/devbot/index.md>)
- [OpenSnip](<https://devanmetz.com/portfolio/opensnip/index.md>)
