Stickly: sticky notes synced in real time across Windows, Android and the browser, end-to-end encrypted

A sticky-notes app that syncs in real time across Windows, Android and the browser. On the PC every note is a window on the desktop or an icon in the tray; on the phone, a home-screen widget that updates even with the app closed. Checklists, colours, reminders and sharing with other people, with end-to-end encryption: the server stores notes it cannot read.

Stickly is a sticky-notes app I designed and built on my own, from the server to the apps. A single Vue app runs in the browser, inside a Tauri shell on Windows and inside a Capacitor shell on Android, and they all sync with my server, which for now you join by invitation. The images show sample notes on a test copy: the real ones are encrypted, and not even the server can read them.

**What it does**

- **On the PC** every note has its own window, on top or on the desktop, where it stays even after Win+D. Up to six sit in the tray as icons in their own colour; a note pinned to an app appears only when that app is in front, and “Invia a Claude” (send to Claude) sends its text to the chat in the Claude app. - **On the phone** the home-screen widgets update even with the app closed, and checklist items can be ticked right from the widget. There are also notes floating over other apps, the “Nuova nota” (new note) quick settings tile and Share → Stickly. - **Everywhere**: checklists, colours and emoji, formatting with keyboard shortcuts, search, snooze with a notification when the note comes back, a 30-day trash, version history, light and dark themes. In the browser it installs as an app and opens even offline. - **Together**: a note is shared by email, with people who can edit or only read, and other people's edits appear as they type. - **Sign-in** with a password or a passkey, an app lock with fingerprint or Windows Hello, and emails from the domain for invitations, confirmations and forgotten passwords.

**The hard part: encryption without losing real time**

Each note is a Yjs document. An edit becomes an update that the device encrypts with the note's key (AES-256-GCM) and sends over the WebSocket channel from a local queue that also holds up offline. The server stores and forwards blobs it cannot open, numbered so that a device that fell behind asks only for the ones it is missing. A note's key is sealed for each person with their X25519 public key: sharing means sealing it for one more person, and when someone leaves, the note gets a new key.

From the Android widget an item can be ticked without opening the app: a background job downloads the encrypted document, has it edited by the same sync engine, which there runs in the V8 of a WebView with no page, and sends the update. And the widgets stay current thanks to a connection the app keeps with the server on its own, with no Firebase or other services.

Vue 3 and TypeScript, Tiptap on Yjs, Fastify and PostgreSQL in Docker on my server, Tauri 2 with Rust, Capacitor 8 with Kotlin; 244 automated tests in JavaScript, Rust and Kotlin.

Design, full-stack development and deployment · 2026

Vue.js, Fastify, Tauri, Capacitor, Yjs

View the site

Andrea Coppetta