Skip to content

psanford/wormhole-william-mobile

Repository files navigation

wormhole-william-mobile

A Magic Wormhole client for Android.

Current limitations:

  • Received directories are kept in zip form
  • Send only supports sending a single file

Installing

Available from the Play Store: https://play.google.com/store/apps/details?id=io.sanford.wormhole_william

Prebuilt APKs are provided with each release. Install to an Android device with developer mode enabled:

adb install wormhole-william.release.apk

Building

Prerequisites

This project uses Nix for reproducible builds. Install Nix and enable flakes:

# Install Nix (if not already installed)
curl -L https://nixos.org/nix/install | sh

# Enable flakes (add to ~/.config/nix/nix.conf)
experimental-features = nix-command flakes

Build Commands

# Enter the development environment
nix develop

# One-time setup: initialize gomobile
make init

# Build debug APK
make

# Build release APK (requires signing key)
make release

The debug APK will be output to wormhole-william.debug.apk.

Project Structure

wormhole-william-mobile/
├── wormhole/              # Go library (gomobile bindings)
│   ├── wormhole.go        # Main client API
│   ├── callbacks.go       # Callback interfaces for Android
│   ├── pending.go         # File transfer acceptance handling
│   └── config.go          # Configuration persistence
│
├── android/               # Android application
│   ├── app/src/main/
│   │   ├── kotlin/        # Kotlin/Compose UI
│   │   └── res/           # Android resources
│   └── build.gradle.kts   # Gradle build config
│
├── Makefile               # Build orchestration
└── flake.nix              # Nix flake for dev environment

Architecture

The app uses a native Android UI built with Jetpack Compose. The wormhole protocol logic is implemented in Go and bound via gomobile:

┌─────────────────────────────────────┐
│         Kotlin/Compose UI           │
│  (Screens, ViewModels, Repository)  │
└──────────────┬──────────────────────┘
               │ gomobile bindings
┌──────────────▼──────────────────────┐
│          Go wormhole package        │
│    (Wraps wormhole-william lib)     │
└─────────────────────────────────────┘

Screenshots

Receive

Send Text

Send File

iOS

iOS development is on the ios branch.