Skip to content

manojtummala/Clipy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

📋⚡ Clipy — Cross-Device Universal Clipboard (Android + Desktop)

TL;DR: Copy on one device, paste on another. Clipy syncs clipboard text across devices using Firebase and lightweight clients for Android and desktop.

OverviewFeaturesArchitectureData Model & SecurityUsageRoadmapNotes


Overview

Clipy is a universal clipboard that lets you copy text on one device and paste it on another with minimal friction.
The current repo includes:

  • A desktop client (Python) that pushes/pulls clipboard text.
  • An Android client (Java/Android Studio) prototype for mobile sync.
  • A Firebase Realtime Database backend for transport and state.

Optional enhancement: FCM push to wake clients for near real-time sync without polling.


Features

  • One-tap copy/paste across devices
  • Channel-based sync (link specific devices to a channel key)
  • Stateless transport via Firebase Realtime Database
  • Lightweight clients (Python desktop + Android)
  • Graceful fallbacks (polling) with optional push (FCM) integration

Architecture

1) High-Level Map

flowchart LR
  subgraph Clients
    D["Desktop Client<br/>(Python + pyperclip)"]
    A["Android App<br/>(Java/Android)"]
  end

  subgraph Firebase["Firebase Backend"]
    RTDB["Realtime Database<br/>(/clipboards/<channelId>)"]
    FCM["Optional: FCM Push<br/>notify device to pull"]
  end

  D <--> RTDB
  A <--> RTDB
  FCM --> D
  FCM --> A
Loading

2) Copy → Transport → Paste

sequenceDiagram
  autonumber
  participant User as User
  participant D as Desktop
  participant A as Android
  participant RT as RTDB
  participant P as (Optional) FCM

  User->>D: Copy text (OS clipboard)
  D->>RT: Write {text, ts, from, channelId}
  Note right of RT: onDataChange triggers on clients
  RT-->>A: onDataChange delivers payload
  A->>A: Validate channel + freshness
  A-->>User: Paste into focused input (UX flow)
  alt optional push
    RT->>P: Emit notification
    P->>A: Wake / fetch latest
  end
Loading

Data Model & Security

RTDB Paths

/clipboards/<channelId>/messages/<pushId> = {
  "text": "<string>",
  "from": "<deviceId>",
  "ts":  "<epochMillis>"
}

Transport & Privacy

  • Use channel IDs (shared secret) to isolate devices.
  • Prefer data messages via FCM (optional) to nudge clients, and pull content from RTDB to avoid putting clipboard content in push payloads.
  • Consider client-side encryption of text (e.g., AES-GCM) if you want end-to-end protection; store only ciphertext and metadata in RTDB.

Usage

  • Pick a channelId (e.g., family-room, dev-laptop-phone).
  • Launch desktop client with that channel; pair Android app with the same channel.
  • Copy on one device → paste on another.

Roadmap

  • 🔒 End-to-end encryption with device keys
  • 📸 Image/file payloads with temporary object storage (S3/GCS) + signed URLs
  • 🔔 Push-first flow (FCM data messages) to reduce polling
  • 🧪 Conflict handling & per-message ACKs
  • 🖥️ Native desktop tray UI + auto-start
  • 📱 Android foreground service + battery-aware backoff

Notes

  • This repository currently focuses on text payloads and a Firebase RTDB transport with Python & Android prototypes.

About

An Application to transfer texts between devices through a click

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors