Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 43 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,31 @@
# PixelVault Desktop

[![Release](https://img.shields.io/github/v/release/pixelvault-dev/desktop)](https://github.com/pixelvault-dev/desktop/releases/latest)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)
![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Linux-lightgrey)
![Built with Tauri](https://img.shields.io/badge/built%20with-Tauri%20v2-24C8DB)

A macOS/Linux **menubar app**: copy an image, and a hosted URL replaces it on
your clipboard — ready to paste into a coding agent that only accepts text
(Codex cloud, Claude Code on the web, Cursor background agents, Daytona/e2b
sandboxes). The remote side needs nothing installed; it just receives a URL.

> **Status: v0 (slices 1–2).** Passive clipboard watch + active-hotkey capture →
> keyless upload → URL on clipboard. macOS-first. No sign-in yet (planned),
> Linux build pending. See `docs/specs/clipboard-desktop-app.md` in the main
> PixelVault repo.
## Install

**macOS** — [Homebrew](https://brew.sh):

```bash
brew install --cask pixelvault-dev/tap/pixelvault
```

Or download the latest **`PixelVault_*_universal.dmg`** from the
[Releases page](https://github.com/pixelvault-dev/desktop/releases/latest)
(one bundle for both Intel and Apple Silicon). Builds are currently **unsigned**,
so on first launch **right-click the app → Open** to get past Gatekeeper.

**Linux** — grab the latest **`.AppImage`**, **`.deb`**, or **`.rpm`** from
[Releases](https://github.com/pixelvault-dev/desktop/releases/latest). (macOS is
the primary target; Linux builds but is less battle-tested.)

## How it works

Expand All @@ -18,26 +35,36 @@ Two ways to get an image, one result — a hosted URL on your clipboard:
**image** appears, it's uploaded and the **hosted URL** replaces it. On macOS,
**⇧⌃⌘4** copies a screen region straight to the clipboard (note the `Ctrl` —
plain ⇧⌘4 saves a file to the Desktop and won't be picked up).
- **Mode B (active hotkey):** press **⇧⌘2** — the app invokes macOS's native
`screencapture -i` (the same crosshair region select), captures to a temp file,
uploads it, and puts the URL on your clipboard.
- **Mode B (active hotkey):** press **⇧⌘2** — the app runs macOS's native region
capture (`screencapture -i`, the same crosshair select), uploads the grab, and
puts the URL on your clipboard.

Uploads take ~0.5–2s. The **"Image URL copied" notification is your cue** that the
clipboard now holds the URL — then **⌘V** to paste. A `⋯` on the menu-bar icon
means an upload is in flight.

## Accounts & privacy

In both modes the upload takes ~0.5–2s. The **"Image URL copied" notification is
your cue** that the clipboard now holds the URL — then **⌘V** to paste. While an
upload is in flight the menu-bar icon shows a `⋯` busy indicator.
- **Without signing in:** an anonymous free trial — **5 uploads**, after which the
app prompts you to sign in. Links are public and **time-limited (~30 days)**.
- **Sign in** (device login — no password) for **keyed uploads with no trial
gate**, a **Recent uploads** history in the tray menu, and optional **private,
signed URLs** (a toggle in Settings — the app hands you a ready-to-paste signed
link).

Anonymous uploads are **temporary (~30 days)**. The tray shows your remaining
free uploads; sign-in for permanent uploads + history is coming.
Links are time-limited by design — this is a *paste-into-your-agent* tool, not
long-term hosting. For permanent image hosting, use
[PixelVault](https://pixelvault.dev) directly (API, dashboard, and a free tier).

## Develop
## Build from source

Prerequisites: [Rust](https://rustup.rs), Node 18+, and Xcode Command Line Tools
(macOS).

```bash
npm install
npm run tauri dev # run the app
npm run tauri build # produce a bundle
npm run tauri build # produce a bundle (.dmg on macOS; .AppImage/.deb/.rpm on Linux)
```

Point at a non-production API while testing:
Expand All @@ -49,8 +76,8 @@ PIXELVAULT_API_BASE=https://api-staging.pixelvault.dev npm run tauri dev
## Stack

Tauri v2 (Rust core + system webview). Clipboard I/O via `arboard`, PNG encoding
via `image`, uploads via blocking `reqwest`. The UI is the tray menu; the small
window is a status/settings surface.
via `image`, uploads via blocking `reqwest`. The tray menu is the primary UI; the
small window is a status/settings surface.

## License

Expand Down
Loading