logo
HomeEducationProfessionalProjectsBlogResume
HomeEducationProfessionalProjectsBlogResume
© Ruben Zukic 2025

LinkWave

16.9.2024

Introduction

Everyday work has become increasingly mobile and digital. We jump between laptops, phones and tablets all the time, yet moving data between them still feels like a chore. Apple’s ecosystem demonstrates how seamless it could be: AirDrop makes file transfer trivial and a universal clipboard syncs text and images across devices. When my friends Jan Schäfer and Arshia Reisi and I were brainstorming ideas for our final year project, we realised that the rest of the world deserved the same experience. That idea became LinkWave, a cross‑platform platform that brings AirDrop‑style functionality to Windows, Android, macOS and iOS.

Why build LinkWave?

Modern creative workflows involve frequent file transfers, editing text on one device and pasting it on another, and constantly switching between devices. Existing solutions such as KDE Connect work only within local networks and often require manual pairing. Cloud services like Google Drive or Dropbox add multiple steps and rely on internet connections. We wanted a solution that:

  • automatically discovers nearby devices and requires no manual pairing;
  • works offline via direct connections and doesn’t depend on Wi‑Fi or the internet;
  • supports file transfers, clipboard sharing and notifications across macOS, iOS, Android and Windows;
  • encrypts all data to protect user privacy;
  • scales from phones to tablets and desktops with native user interfaces.

Core features

LinkWave installs as a native application on each platform and automatically detects other LinkWave devices nearby. Once devices are discovered, all features work without further configuration. The main features are:

Device discovery

Devices advertise themselves and discover others using Bonjour/mDNS on the local network. This mechanism broadcasts a service record (_linkwave._tcp) with metadata (device name, type and port) and listens for matching records. When a new LinkWave device appears, it automatically shows up in the device list. Unlike KDE Connect, there is no manual pairing step.

File transfer

Files of any size can be transferred directly between devices over an encrypted TCP connection. The workflow mirrors AirDrop: select Share on the source device, choose LinkWave, pick a target device and accept the transfer on the recipient. Behind the scenes, LinkWave performs a secure TLS handshake, sends a request describing the file (name, size and checksum), waits for the recipient to accept, then streams the file in chunks. Transfers work even without an internet connection because devices talk directly over the local network. The protocol is symmetric—every platform can both send and receive.

Shared clipboard

The clipboard feature synchronises copied text or images. When you copy content on one device, LinkWave detects the change and sends a notification to your other devices logged into the same account. Accepting the share automatically inserts the text or image into the clipboard on the other device. On macOS and Windows the clipboard is monitored continuously; on iOS and Android the clipboard share is triggered via a Share or Process Text action because the operating systems restrict background clipboard access. All clipboard data is encrypted and never stored on external servers.

User accounts and security

To prevent anyone on the same network from pushing data to your devices, LinkWave requires a user account. The account is authenticated using JSON Web Tokens and optional two‑factor authentication. Clipboard sharing only works between devices signed into the same account. All communication is secured with TLS, and files or clipboard content are encrypted end‑to‑end.


Demo Video

To truly showcase what LinkWave can do, we recorded a short demo highlighting the seamless connection between macOS, Windows, Android and iOS. Watch how devices instantly discover each other, transfer files securely, and even synchronize clipboards — all without any internet connection.

Your browser does not support the video tag.

Native apps on every platform

One of the most rewarding parts of LinkWave was creating fully native applications for each operating system. We wanted the apps to feel like part of the platform rather than clunky cross‑platform ports.

iOS

The iOS app is built with Swift and SwiftUI, Apple’s declarative UI framework. It supports iOS 17 and later and offers multiple entry points:

  • LinkWave app: The main app lets users browse nearby devices, configure settings and log into their account.
  • Share extension: LinkWave appears in the system share sheet, so you can send files or clipboard content from any app without opening LinkWave.

Option 1: Share file directly from the app.

Option 2: Share content from any app using the system share extension.

Select a nearby device from the share extension.

macOS

The macOS client is also written in Swift and SwiftUI and runs on macOS 14+. It offers the same features as the iOS app plus some Mac‑specific conveniences:

  • A menu‑bar icon provides quick access to the device list, settings and the ability to quit the background service.
  • The Share extension works just like on iOS, but clipboard sharing uses the system clipboard directly because macOS allows programmatic clipboard access.

The Mac Share extension can be used to share files via LinkWave.

Android

On Android we used Kotlin and Google’s declarative Jetpack Compose framework. The app runs on Android 12+ and consists of three components:

  • Main app: Users can configure visibility, view nearby devices and log in.
  • Share activity: Triggered when selecting LinkWave from Android’s share sheet; it shows the selected file and allows choosing a target device.
  • Process Text action: Because Android 10+ restricts clipboard access, selected text can be sent to LinkWave via the Process Text option in the selection menu.

1. Select LinkWave from the share menu.

2. Send to nearby devices.

Use Clipboard Share via the context menu.

Windows

windows app

The Windows application is written in C# with WinUI 3. It follows the MVVM pattern and consists of three projects: a UI project, a core project and a backend library. Windows users enjoy the same features as Mac users, including file transfer, clipboard sync, a share target and a system‑tray icon for quick access. The app is packaged as an .msix installer for easy distribution.

The Windows Share Integration can be used to share files via LinkWave.


Look at the Source Code & Try It Yourself

LinkWave is open source — you can explore how everything works, from the peer-to-peer encryption layer to the native UIs on each platform.

  • Source Code: GitHub Repository
    • for iOS: GitHub Repository
    • for Android: GitHub Repository
    • for macOS: GitHub Repository
    • for Windows: GitHub Repository
  • Website: linkwave.org

If you want to try it yourself:

  1. Download the app for your platform from the releases page.
  2. Install it on two or more devices (Windows, macOS, Android, or iOS).
  3. Share files or clipboard content instantly — no setup required.

Read the Full Paper

If you’d like to dive deeper into the technical details, implementation, and architecture of LinkWave, you can also read our full diploma thesis.

  • English (translated): Download PDF
  • German (original): Download PDF

The paper covers every layer of LinkWave — from Bonjour-based device discovery and encrypted peer-to-peer protocols to the SwiftUI, Jetpack Compose, WinUI, and SvelteKit frontends — along with detailed UML diagrams and architectural breakdowns.


Architecture overview

At the heart of LinkWave is a client–server architecture. Each client is responsible for device discovery and peer‑to‑peer communication, while a central backend provides authentication and manages user accounts and device metadata. The key components are:

Bonjour/mDNS for discovery: All clients advertise a _linkwave._tcp service and listen for the same service to detect nearby devices. Service metadata includes the device name, operating system and a dynamically chosen port. Once a device is discovered, clients establish a direct TLS‑encrypted TCP connection for transferring data.

Encrypted peer‑to‑peer protocol: File and clipboard transfers follow a request–response pattern. The sender announces its intent (e.g., FILE_SHARE or CLIPBOARD_SHARE), the recipient accepts (ACK) or rejects (RST), metadata about the data is exchanged, and then the data is streamed in chunks. The protocol is symmetrical and implemented natively on each platform.

Backend services: Our backend exposes a GraphQL API (built with Hot Chocolate on .NET) for user registration, login, device management and authentication. It stores user and device information in a PostgreSQL database and handles password hashing with bcrypt. The backend is containerised and hosted on Azure behind an Nginx reverse proxy, which also terminates TLS and enforces security headers.

Implementation highlights

Cross‑platform device discovery

Implementing Bonjour on four different platforms was one of the biggest challenges. Each operating system exposes mDNS differently:

  • iOS & macOS: Apple’s NWBrowser and NWListener classes make publishing and browsing services straightforward. We wrap them in a helper class that advertises the device with a TXT record describing its type and uses a callback to update the device list when new services appear.
  • Android: Android’s Network Service Discovery (NSD) API uses NsdManager to discover and register services. We implemented BonjourController and BonjourAdvertiser classes to handle discovery and advertising. Because Android 10+ restricts some NSD features, the code falls back to legacy APIs on older devices and gracefully handles service loss events.
  • Windows: We leveraged the open‑source Zeroconf library to send and receive mDNS queries. Our Discovery class listens for _linkwave._tcp.local. services and updates the UI, while Advertisement registers the local service with a ServiceProfile.

Discovery Network Diagram

Device Discovery Network Diagram

Peer‑to‑peer file transfers

File transfers use asynchronous TCP streams and are chunked to avoid blocking the UI. On Swift, we use NWConnection.send/receive callbacks; in Kotlin we rely on coroutines and Socket.getOutputStream/InputStream; and in C# we use asynchronous SslStream operations. All platforms calculate a checksum to verify integrity and report progress back to the UI. Recipients receive a push notification or system notification and can accept or decline the transfer.

File Transfer Network Diagram

File Transfer Network Diagram

Clipboard synchronisation

Clipboard integration required platform‑specific tricks. On macOS we poll NSPasteboard.general.changeCount every couple of seconds; on Windows we hook into System.Windows.Clipboard events. On Android and iOS we rely on the operating systems’ share and process‑text APIs because direct background access is blocked. Once we detect a change, we send a CLIPBOARD_SHARE request to all devices logged into the same account. The target decodes the content and writes it to the local clipboard using the respective API.

Clipboard Synchronization Diagram

Clipboard Synchronization Diagram

Building for security

Security was a central consideration. We enforce TLS across all peer connections. The server uses industry‑best ciphers and stores passwords hashed with bcrypt. Devices are identified by their certificate fingerprint, which is stored in the database. Only devices authenticated with the same account can communicate; untrusted devices simply do not appear in your device list. Our Nginx reverse proxy uses strict SSL configurations and security headers to mitigate common web attacks.

TLS Handshake Diagram

TLS Handshake Diagram

Lessons learned

Building LinkWave taught me more than any school assignment. I honed skills in network programming, encryption, cross‑platform UI design and cloud deployment. Collaborating with Jan and Arshia forced us to divide work by platform yet maintain a consistent user experience. We built a GraphQL API from scratch, designed an authentication system, created polished interfaces with SwiftUI, Jetpack Compose and WinUI, and wrote code that continues to run in the background reliably across platforms.

Conclusion

What began as a simple desire to make my MacBook play nicely with my Android phone became a fully fledged connectivity platform. LinkWave bridges the gap between ecosystems and makes device heterogeneity invisible. It is fast, secure and easy to use thanks to automatic device discovery, encrypted direct connections and thoughtful user interfaces. I am proud of what we built and how much we learned along the way. If you want to try LinkWave yourself, visit linkwave.org or browse the open‑source code on GitHub. Feel free to contact me for more details or collaboration opportunities!