ArenaDock icon
ArenaDock interface

A macOS menu bar app for quickly saving things to Are.na. I built it because I constantly have links and photos floating around in my DMs and Slack. Why open the browser when a system tray feels cooler?

Hit Ctrl+Option+A (customizable), drop a link, paste text, or drag a file and it goes straight to your Are.na channels.

Features
  • Menu bar app — lives in your tray, toggled with Ctrl+Option+A or a click
  • Drag & drop file uploads — images, PDFs, videos, etc.
  • Link and text blocks — paste a URL or type text to create blocks
  • Channel picker — search your channels or browse recents, connect to multiple at once
  • OAuth login — authenticates via Are.na's OAuth flow in an embedded webview
How file uploads work

Are.na doesn't expose a direct file-upload API endpoint. Instead, uploads go through a 3-step presigned S3 flow. The catch: Are.na's S3 bucket CORS policy only allows *.are.na origins, but a Tauri webview runs on tauri://localhost. The fix: route the S3 PUT through Rust, bypassing the browser's CORS enforcement entirely.

Browser (JS)Rust (Tauri)Are.na / S3
POST /uploads/presign
{ upload_url, key }
invoke("upload_to_s3")
PUT upload_url
200 OK
Ok(())
POST /blocks { s3_url, channel_ids }
block created
Tech stack
  • Tauri 2 — Rust backend, native webview frontend
  • React + TypeScript — UI
  • Vite — bundler
  • reqwest — HTTP client (Rust side, for S3 uploads and OAuth token exchange)
Releasing

Releases are fully automated via GitHub Actions. Tagging a version triggers a build, sign, and notarize pipeline that creates a GitHub Release with the .dmg and updates update.json so existing users get auto-updated.