Skip to main content
reticle-tauri is a Rust crate on crates.io, not an npm package. It is versioned independently of the ten npm packages, and is currently 0.1.0. MIT licensed, unlike the Apache 2.0 npm packages. Edition 2021.

Why it exists, and why it is small

Tauri IPC observation needs nothing on the Rust side. An invoke('load_todos') already reaches Reticle as ipc://load_todos through the SDK in the webview. You only need this crate for two things: screenshots, and headless mode.
Do not expect this to be version 2.7. Matching the npm version would imply a release cadence the crate does not have, and it would make every npm release a crates.io release for no reason.

Install

Its own dependencies are tauri = "2" plus the per-platform capture backends: objc2 and friends on macOS, webview2-com and windows on Windows, webkit2gtk and cairo-rs on Linux and the BSDs.

Wiring

Nothing is needed on the JavaScript side. Tauri has no preload stage, so the SDK reaches reticle_capture through Tauri’s own internals.

The public API

There are no public traits and no macros.

reticle_capture

Runs on a blocking thread, writes a PNG into a temporary directory as reticle-capture-<nanos>.png, and returns the path, not the bytes. Full-page capture is supported on Linux only; elsewhere it returns FULL_PAGE_UNSUPPORTED, which is pinned to core’s VisualReason value so the refusal is the same string everywhere.

on_page_load

Hides the window on PageLoadEvent::Finished when the environment variable RETICLE_HEADLESS=1 is set. That ordering matters: the window exists and renders, then it is hidden, so the capture path still works.

The silent failure to know about

A Tauri app with the default CSP runs perfectly and never connects to Reticle, with nothing said anywhere. reticle doctor diagnoses this explicitly on a desktop project, because it is invisible otherwise.

Desktop setup in full

The CSP entry, the headless flag, and how capture differs from a browser screenshot.
Last modified on August 14, 2026