Lasan Mahaliyana 7715fb600c Update README to reflect Presence build status
Clarified the status of the Presence section in the README.
2026-04-18 14:54:23 +05:30
2026-01-21 02:34:50 +00:00
2026-04-18 14:50:25 +05:30
2026-01-14 15:51:44 -05:00
2026-03-06 21:20:59 +05:30
2026-01-21 03:16:20 +00:00
2026-01-14 16:55:05 -05:00
2026-03-01 13:44:09 +05:30
2023-03-14 00:11:18 -07:00
2026-01-21 03:28:37 +00:00
2026-03-06 21:21:57 +05:30
2026-03-03 05:51:36 +05:30
2024-03-14 11:09:36 -07:00

Google Nearby Sharing & Connections for Linux (Unofficial)

image

Demo

https://github.com/user-attachments/assets/048afa1e-40a4-4351-a859-c81b642fc6e3

What

This repo consists of the entirety of google's open source nearby library. Currently, it is seperated into 3 sections.

  • Sharing
  • Connections
  • Presence ( Build fails for some reason. Haven't had time to investigate. Maybe something minor. Check the validate.yaml for build steps and see why its faiing )

Linux specific implementation and compatibility shims are provided for building Sharing and Connections. Nearby presence may or may not build. I haven't tested it.

Why

This repo could've been a PR on the official repo. All I've done is implement the platform abstraction layer google has provided for a linux specific environment. It's not like I haven't made a PR towards the official repo. I got tired of begging the official nearby maintainers for a PR review. So here we are.

Moreover, all I've wanted was seamless file sharing between my android devices and my linux workstation + laptop. With this repo and the example application provided here, it accomplishes that goal perfectly. This repo wasn't created out of any altruistic goals or out of the goodness of my heart. I had a problem. I solved it. Simple as that.

How

How to use

Proper documentation is coming I swear. University's getting pretty hectic so docs is on the backburner. The wiki has some more information but it's nowhere near a proper documentation. It has some good brief overviews and where generally everything is located if you're thinking about contributing.

If you want any clarification on anything, feel free to open an issue. I'll get back to you ASAP.

As a consolation prize, I've indexed this project using Deepwiki. You might have strong feeling about AI use. But I feel like documenting very large codebases is a perfect usecase for such models. (They are called Large Language Models for a reason )

How to install

This repo provides prebuilt binaries of the Quick Share application. The only officially supported distro is Fedora 43 for now. The newest ubuntu images should work fine although that needs to be tested. I want to support more distros so if you encounter issues installing on your distro, please let me know.

Prerequisites

  • sdbus-cpp >= 2.0
  • bluez >= 5.85

To install the prerequisites, run this command

sudo dnf install -y \
  bluez bluez-libs bluez-libs-devel \
  sdbus-cpp sdbus-cpp-devel

To install the Quick Share application,

  1. Go to releases
  2. Download the latest nearby-file-share-linux-*.tar.gz
  3. mkdir -p nearby && tar -xf nearby-file-share-linux-*.tar.gz -C nearby
  4. cd nearby
  5. chmod +x install_nearby_file_share.sh
  6. ./install_nearby_file_share.sh

To install the actual library and headers,

Currently there are no prebuilt shared library or headers. You'll have to build them yourself

How to build

Check the wiki

How to contribute

Check the wiki

Apologies

I may have done things in incredibly stupid and overcomplicated ways. It doesn't certainly help that this was the way I decided to learn C++. Blessed be my naive soul. I also do not have much experience working with such enormous codebases.

If you see any such stupidities, feel free to berate me in the most shameless of manners in an issue. I look forward to learning how to do it the proper way and to improve my atrocious code quality.

Note to self in case i forget

GATT client is used to bridge the BLE advertisement size gap in discovery, then inform how connection is made.

During discovery, scanners often only get a small header/fast payload from BLE scan data. The stack then uses ConnectToGattServer(...) to open a short-lived GATT client session, discover/read Copresence characteristics, pull the full Nearby advertisement bytes, and disconnect. That recovered payload is what drives endpoint discovery callbacks (including fields like PSM).

Special thanks

https://github.com/proatgram and https://github.com/vibhavp

they were the original authors of the linux platform support PR that I have based much of this codebase upon. I am standing on the shoulders of giants

Languages
C++ 97.6%
Objective-C 1.1%
Objective-C++ 0.6%
Starlark 0.3%
C 0.2%
Other 0.1%