Architecture
Device synchronization system supporting WiFi P2P and cloud-based sync. Source: src/lib/WiFiSyncService.ts, src/lib/CloudSyncService.ts, src/lib/P2PFileSyncService.ts, src/lib/SyncMethodManager.ts
Local
WiFi P2P
Cloud
Anywhere Access
E2E
Encrypted
6-digit
Pairing Code
Sync Types
Sync Types
WiFi P2P Sync
Direct local network connection between devices. Fast, private, no internet required.
Features
- clipboard-sync
- clipboard-sync-request
- execute-command
- desktop-control
Requirements
- Same local network (WiFi)
- Desktop app running
- Mobile app installed
How It Works
- 1Desktop broadcasts a discovery beacon on UDP port 3005 to the broadcast address 255.255.255.255 (the socket itself binds an ephemeral port)
- 2Mobile listens on that port for the beacon
- 3WebSocket connection established on port 3004
- 4Pairing code checked during the handshake, then the six message types above are available
Source: src/lib/WiFiSyncService.ts
Sync Data
Sync Items
Clipboard
Push the desktop clipboard to the paired device
clipboard-syncClipboard request
Ask the paired device for its clipboard
clipboard-sync-requestDesktop control
Drive the desktop from the paired device
desktop-controlCommand execution
Run a command on the desktop
execute-commandPresence
Keep-alive between the paired devices
pingHandshake
Device identity and pairing code exchange
handshakePermissions
Permission Levels
Control what each connected device can access with configurable permission levels.
Trusted
Level 1Known device, allowed to auto-connect. This is what the Trust toggle in Settings sets, and it is the default for a device you have trusted.
Ask once
Level 2Default for a device seen for the first time. You approve each connection instead of it reconnecting on its own.
Blocked
Level 3Declared by the service and enforced at the handshake, which refuses a blocked device. The Settings toggle does not currently offer it — use Remove instead.
Security
Security Features
Pairing code
A six-digit code is generated per session and checked during the handshake; a device presenting the wrong code is refused
src/lib/WiFiSyncService.ts
Short-lived access tokens
Pairing issues short-lived access tokens and refresh tokens bound to client device fingerprint; sync messages require an active token
src/lib/WiFiSyncService.ts
Known devices & revocation
Paired devices are tracked and can be unshared or revoked immediately, invalidating tokens and closing connections
src/lib/WiFiSyncService.ts
Blocked devices & rate limiting
Blocked devices are refused at the handshake, and repeated failed attempts trigger lockout
src/lib/WiFiSyncService.ts
End-to-end encryption
End-to-end encryption covers the cloud path: data is encrypted client-side with your sync passphrase before upload, and decrypted on the device that pulls it. The local WiFi WebSocket is not additionally encrypted by this layer
src/lib/crypto-utils.ts
What is not here
No per-device audit log. Sync messages are written to the developer console and are not retained as a record you can review
Setup Guide
Connect Devices
Mobile Setup
- 1Download Aartiq from Play Store
- 2Open Settings > Sync on desktop
- 3Tap 'Scan QR Code' in mobile app
- 4Point camera at desktop QR code
- 5Enter 6-digit verification code
- 6Select permission level
Cloud Setup
- 1Open Settings > Cloud Sync
- 2Sign in with Google or email
- 3Enable desired sync items
- 4Link additional devices with same account
- 5Data syncs automatically