Skip to content

Repository files navigation

BEAM

"Beam it."

Send anything. Nearby. Instantly

Kotlin Jetpack Compose Nearby Connections Android 8.0+ AGPL-3.0

Warning

Beam is on active development stage and currently it's unusable.


Beam is a peer-to-peer sharing app for Android. One device starts a beam and shows a short code, the other enters it, and they're connected without any internet or accounts or cables.

Under the hood it uses Google's Nearby Connections API, which automatically picks the best available transport (Bluetooth, BLE, or Wi-Fi) without any manual setup.

Highlights

  • Nearby discovery -> find other Beam devices around you in real time
  • Short code pairing -> hosts share a 6-character code, joiners type it in and connect automatically
  • No internet needed -> everything happens directly between devices
  • Modern UI -> fully built with Jetpack Compose and a custom in-house design system

Tech Stack

Layer Technology
Language Kotlin
UI Jetpack Compose
Networking Google Play Services Nearby Connections
Transfer protocol BEAM/1, custom app-level protocol -> see PROTOCOL.md
Architecture MVVM with ViewModel
Linting ktlint (CLI)

Getting Started

Prerequisites

  • Android Studio (latest stable recommended)
  • JDK 17 or newer
  • An Android device running Android 8.0 (API 26) or newer
  • Google Play Services on the device (required for Nearby Connections)

Note

Nearby Connections does not work on emulators - you need two physical devices to test discovery and transfer.

Build

git clone https://github.com/greenbugx/Beam.git
cd Beam
./gradlew assembleDebug

The APK will be available at app/build/outputs/apk/debug/.

To install directly on a connected device:

./gradlew installDebug

Project Structure

app/src/main/java/com/beam/app/
├── MainActivity.kt          # Entry point and screen routing
├── network/                 # Nearby Connections wrapper
├── permissions/             # Runtime permission handling
├── session/                 # Session state, ViewModel, and models
├── ui/
│   ├── components/          # Reusable UI components (buttons, etc.)
│   ├── files/               # Beam workspace (shared files, transfers, peers)
│   ├── home/                # Home screen (create or join)
│   ├── join/                # Code entry screen for joining
│   ├── nearby/              # Nearby beam browsing and its code entry
│   ├── room/                # Active session screen (code display, beams list, peers)
│   └── theme/               # Design system (colors, typography)
└── util/                    # Beam code generation and validation

How It Works

  1. Create -> one device starts a beam and gets a short code
  2. Join -> the other device enters the code, or taps a discovered beam under nearby beams and enters its code (QR coming later)
  3. Connect -> the joiner's device finds the beam advertising that code and connects automatically
  4. Send -> files are negotiated and transferred in verified chunks by the app-level protocol (file transfer is in active development, see PROTOCOL.md)

Roadmap

Beam is built milestone by milestone — see TODO.md for the full plan:

  • M1 — Foundation: native app, custom design system, home screen, create/join flows, Beam codes
  • M2 — Sessions & Connectivity: discovery, advertising, connection handling, peer tracking
  • M3 — Single File Transfer: SAF picker, transfer protocol (BEAM/1), integrity verification
  • M4+ — Large files, multi-user rooms, resumable transfers, QR joining, and more

Documentation

  • PROTOCOL.md -> the authoritative BEAM/1 protocol design: sessions, messages, chunking, integrity and security.
  • TODO.md -> milestone plan

Contributing

See CONTRIBUTING.md for setup, code style (ktlint), commit conventions, and the PR checklist.

Security

Found a vulnerability? Please report it privately - see SECURITY.md.

License

This project is licensed under the GNU AGPL-3.0

About

Just "Beam it"

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages