Skip to content
hameddavodiPublic

About

Turn an Android tablet + stylus (S Pen) into a pressure-sensitive pen board and laser pointer for macOS — over Bluetooth LE, no cables or Wi-Fi. On-screen annotation for teaching, presentations and Google Meet screen sharing.

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Latest commit

 

History

10 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PenBoard

Latest release License: MIT Android macOS

Turn an Android tablet with a stylus into a pen board for your Mac — over Bluetooth, no cables, no Wi-Fi needed. Pressure-sensitive on-screen annotation and a pen-driven laser pointer for presentations, teaching, and screen sharing.

➡️ Download the latest release (Mac app + tablet APK)

Two modes, toggled from the tablet toolbar, the Mac menu bar, or ⌥⌘D:

  • ✏️ Draw — pressure-sensitive ink on a transparent, click-through overlay above whatever is on your Mac screen (any app, browser, PDF). Your mouse keeps working underneath. Great for teaching, code review, and design walkthroughs.
  • 🔴 Laser — pen hover moves the real macOS cursor; pen touch clicks and drags. Built for presenting: when you share a Chrome tab in Google Meet, Meet's laser pointer follows your pen.

Built and tested with a Galaxy Tab S9 FE+ (S Pen); any Android 10+ device with an active stylus should work. Palm rejection is automatic — only stylus input is captured.

Install

Grab both halves from Releases:

Mac — download PenBoard.app.zip, unzip, move to Applications, then right-click → Open the first time (the app is not notarized; macOS warns once). If Gatekeeper still refuses: xattr -dr com.apple.quarantine /Applications/PenBoard.app.

Tablet — download penboard.apk on the tablet and open it. Android asks once to allow installs from your browser ("install unknown apps") and may show a Play Protect prompt — this is normal for any app installed outside the Play Store. Or install via adb: adb install -r penboard.apk.

First connect

  1. Tablet: open PenBoard, grant the Bluetooth (and notification) permissions → status shows Advertising. While advertising, the app temporarily sets the tablet's Bluetooth name to "PenBoard" (Android has no per-advertisement name API); the original name is restored when it stops.
  2. Mac: launch PenBoard (menu-bar icon), allow Bluetooth → it finds the tablet and macOS shows a pairing dialog once — accept.
  3. Both screens show a 6-digit code. If they match, confirm on the Mac. Trust is stored; future reconnects are automatic and silent.

For Laser mode (one-time): the first activation asks for the Accessibility permission — that's what allows moving the cursor. Grant it in System Settings → Privacy & Security → Accessibility.

Why these permissions: Bluetooth is the transport; Accessibility is required by macOS for any app that moves the mouse. PenBoard has no internet access, no analytics, and collects nothing — see the security model. The optional screen stream (below) is the one network feature: it serves video only on your local network, only while its toggle is on, behind a random 128-bit URL token that rotates every time you enable it. The stream is not encrypted — don't enable it on a Wi-Fi network you don't trust.

Using it

Action Tablet Mac
Toggle Draw/Laser toolbar menu bar or ⌥⌘D
Clear ink toolbar menu bar or ⌥⌘C
Color / width toolbar (6 colors, 4 widths) synced from tablet
Undo toolbar synced
Erase one stroke hold the pen button, touch the stroke —
Dim tablet screen, keep link alive toolbar dim toggle —
Choose which display to draw on — menu bar → Display
See the Mac screen on the tablet toolbar stream toggle menu bar → Stream Screen to Tablet

Screen streaming needs both devices on the same Wi-Fi and a one-time Screen Recording permission on the Mac (System Settings → Privacy & Security → Screen Recording, then relaunch PenBoard). The tablet finds the Mac automatically — no IP addresses. Switching the target display clears current ink on both devices, same as switching modes.

Presenting in Meet:

  • Sharing a Chrome tab → viewers see the cursor only → use Laser.
  • Sharing the entire screen → viewers see your ink → Draw works too.
  • Switching Draw→Laser clears current ink on both devices.

Build from source

Android (JDK 17+, Android SDK):

cd android
./gradlew :app:assembleRelease    # unsigned-fallback build works out of the box

To sign releases, copy keystore.properties.template to keystore.properties and point it at your keystore.

macOS (Xcode Command Line Tools are enough):

cd macos
./scripts/build-app.sh            # → build/PenBoard.app

Optional: ./scripts/make-signing-cert.sh once creates a local signing cert so the Accessibility grant survives rebuilds. Tests: ./scripts/test.sh.

How it works

Android app = BLE GATT peripheral streaming normalized stylus points (x, y, pressure, flags) as batched notifications; Mac app = CoreBluetooth central rendering them (Draw) or injecting cursor events (Laser). Encrypted bonded link + user-confirmed pairing code; every packet schema-validated.

Details: Architecture · Wire protocol · Why BLE GATT

Troubleshooting

  • No pairing dialog on Mac — run the built .app; Bluetooth prompts never fire under swift run.
  • Re-pair from scratch — forget "PenBoard" in both devices' Bluetooth settings, relaunch both apps.
  • Laser stopped working after rebuilding from source — tccutil reset Accessibility <bundle id> and re-grant (or use the signing cert above).
  • Check rendering without a tablet — Mac menu bar → Debug → Replay.
  • Check link latency — Mac menu bar → Debug → latency HUD.

Support

PenBoard is free and open source. If it's useful to you, starring the repo ⭐ helps others find it.

License

MIT © 2026 Hamed Davoodi

About

Turn an Android tablet + stylus (S Pen) into a pressure-sensitive pen board and laser pointer for macOS — over Bluetooth LE, no cables or Wi-Fi. On-screen annotation for teaching, presentations and Google Meet screen sharing.

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages