Send anything to anyone nearby. No Google required.
Tarish is file sharing for de‑Googled Android that works with AirDrop and Quick Share. Send a file to
a MacBook from a phone that has never spoken to Google: the Mac shows a real device name and a
normal AirDrop prompt. Send to a Windows laptop or another Android phone and Quick Share does
the same. Nothing signs in, nothing checks in, and no Google application is installed.
Both protocols, both directions, with and without a network
Tested against real peers, not only against itself: macOS and iOS for AirDrop, Windows 11
and stock Android for Quick Share. Passing against one vendor proves very little, and that
distinction has caught bugs no amount of self‑testing would.
AirDrop Apple
Quick Share Android, Windows
Discovery
AWDL and mDNS
mDNS on Wi‑Fi, Bluetooth LE off‑network
Send
Works
Works
Receive
Works
Works
Shared network
Works
22 MB/s measured
No shared network
AWDL is its own link
Wi‑Fi Direct 10.5 MB/s; Bluetooth ~150 KB/s to start
Both at once
On BCM4390 devices, concurrently and in opposite directions. Not on BCM4383 — see Devices.
02 — Why
Sandboxed Play Services is not an answer to this
It cannot do AirDrop at all. Google’s AirDrop support needs its
mosey stack running with platform privileges. Getting it working that way needed
privileged Play Services, not the sandboxed kind, plus a successful check‑in to
Google’s servers to receive a feature flag. That is a long way from installing an app.
And for many people the objection is the code, not the sandbox. Sandboxed
Play Services is still Google’s code on your device. Plenty of people who choose a
de‑Googled OS do not want it there at any privilege level. That is a legitimate position,
and it should not cost you file sharing with the people around you.
03 — How it works
Two processes, and the split is not arbitrary
The daemon holds the link and speaks the protocols
A native daemon has no foreground‑service requirement, so there is no permanent
notification, and doze and app standby do not apply to it. It keeps AWDL up, answers mDNS,
terminates TLS and runs both protocol state machines. The part that parses input from strangers
runs as its own unprivileged uid and holds nothing else.
tarishd · tarishsharingd · libtarish_protocol
The app does what only the framework can, and owns consent
Bluetooth LE, Wi‑Fi Direct groups and the share sheet are framework API a native
daemon cannot reach; the app creates them and hands the daemon a file descriptor. It is where
a person says yes or no, and where managed policy is read. It holds no protocol state.
share sheet · prompts · inbox · policy
What is ours and what is the vendor’s
Quick Share is ours top to bottom. For AirDrop, the radio and the AWDL protocol come from
two vendor files that already ship in the Pixel vendor image and run on a build
with no Google packages — using them adds nothing that was not already on the device.
Replacing them is a separate track that has not started.
AirDrop layer
Whose
Notes
Radio and MAC
Vendor
wonder.ko, already in the stock image. No AWDL protocol in it
including the routing Android’s fwmark model requires
mDNS, TLS, HTTP, plist, cpio
Ours
tarishsharingd
Share sheet, prompts, consent
Ours
the app
libtarish_protocol — UKEY2, D2D keys, SecureMessage, the secure
channel and the sharing state machines — is deliberately Android‑free so it tests on a
build host: 202 tests, including a whole share between two peers
in‑process, compared byte for byte.
04 — Devices
It depends on the Wi‑Fi chip, not the model
Tarish needs wonder.ko bound to the Wi‑Fi driver. Every Pixel 10 image
ships drivers for both chips and loads whichever matches the silicon, so the model name tells you
nothing. Check the device itself:
adb shell 'lsmod | grep bcmdhd' # 4390 = good, 4383 = no wondertap
adb shell 'ls /sys/class/ieee80211/' # a `wonder` wiphy is the real test
Device
Chip
AirDrop
Quick Share
Pixel 10 Pro blazer
BCM4390
AWDL and Wi‑Fi coexist
Works
Pixel 10 Pro XL mustang
BCM4390
AWDL and Wi‑Fi coexist
Works
Pixel 10 frankel
BCM4383
Works, but takes the radio
Works
Pixel 10 Pro Fold rango
unverified
unverified
expected to work
Pixel 10a stallion
no wonder.ko
Not possible
Works
On BCM4383 the radio is exclusive
With no wondertap, AWDL falls back to a path that takes the physical radio:
Wi‑Fi drops within about ten seconds of AirDrop becoming active and returns on its own
10–24 seconds after it is switched off. Stock Android behaves the same on this hardware.
Nothing needs a reboot, but AirDrop and Quick Share over Wi‑Fi are mutually exclusive
there. For a daily driver, prefer a BCM4390 device.
Transfers to Apple are slower, and that is the protocol
An iPhone keeps a sparse AWDL presence to save power — available in
4 of 16 windows where our devices are in
16 of 16. Device to device runs
7.7–9.1 MB/s; iPhone to device
2.6–4.7 MB/s.
05 — Design positions
These look odd until you know why
Visible only on the Receive screen
Anything else means a phone quietly discoverable in a bag. The screen is held awake while
it advertises, so the device never goes off the air while still reporting itself available.
The daemon decides; the app asks
Consent is enforced where the bytes move, not in the UI, so an app that hides its send
button cannot be bypassed by calling the interface directly.
Managed policy is honoured
A pinned control is shown disabled and labelled rather than hidden. A control that silently
refuses to move reads as a broken app, not as an enforced policy.
The parser has its own uid
That costs a one‑line framework patch: since Android B only uid 0 and 1000 may touch
the local network by default, and a native daemon can never earn the permission any other
way.
06 — For OS builders
Built to be adopted
Tarish is part of the operating system, not an app from a store: a daemon with its own SELinux
domain and a privileged app. The integration guide is written for someone who has never seen
the project.
Nothing GrapheneOS‑specific by design: the daemon asks the platform for an AWDL library
and a kernel module and does not care where they came from
LineageOS is the next target. If you maintain GrapheneOS, LineageOS or another
AOSP build and want this in the image, please
open an issue.
07 — Open issues
What is still broken
The project keeps its open work in TODO.md,
which leads with what does not work rather than with what does.
Sending to a Mac does not always find it. Receiving is reliable; the
discovery half of sending is under investigation.
AWDL uses channel 149 only. That channel is not permitted for Wi‑Fi
in much of the EU, where AirDrop will refuse to start until the channel follows the
regulatory domain.
On BCM4383, AirDrop takes the radio. A property of the chip; the app
should say so plainly while it happens.
An open Quick Share implementation for Android. No code from it is used — this is a
fresh implementation in another language and process model — but it worked out protocol
details and wrote down why they matter.