bridgy-fed
bridgy-fed copied to clipboard
đ A bridge between decentralized social network protocols
Bridgy Fed

Got an IndieWeb site? Want to interact with federated social networks like Mastodon, Hubzilla, and more? Bridgy Fed is for you.
https://fed.brid.gy/
Bridgy Fed connects the IndieWeb with federated social networks using ActivityPub and OStatus. Original design docs:
- https://snarfed.org/indieweb-activitypub-bridge
- https://snarfed.org/indieweb-ostatus-bridge
License: This project is placed in the public domain.
Development
You'll need Python 3. Install the Google Cloud SDK (aka gcloud
) with the gcloud-appengine-python
and gcloud-appengine-python-extras
components. Then, run:
python3 -m venv local
source local/bin/activate
pip install -r requirements.txt
Now, run the tests to check that everything is set up ok:
gcloud beta emulators datastore start --no-store-on-disk --consistency=1.0 --host-port=:8089 < /dev/null >& /dev/null &
python3 -m unittest discover
Finally, run this in the repo root directory to start the web app locally:
GAE_ENV=localdev FLASK_ENV=development flask run -p 8080
If you send a pull request, please include (or update) a test for the new functionality!
If you hit an error during setup, check out the oauth-dropins Troubleshooting/FAQ section. For searchability, here are a handful of error messages that have solutions there:
bash: ./bin/easy_install: ...bad interpreter: No such file or directory
ImportError: cannot import name certs
ImportError: No module named dev_appserver
ImportError: cannot import name tweepy
File ".../site-packages/tweepy/auth.py", line 68, in _get_request_token
raise TweepError(e)
TweepError: must be _socket.socket, not socket
error: option --home not recognized
You may need to change granary, oauth-dropins, mf2util, or other dependencies as well as as Bridgy Fed. To do that, clone their repo locally, then install them in "source" mode with e.g.:
pip uninstall -y granary
pip install -e <path to granary>
To deploy to the production instance on App Engine - if @snarfed has added you as an owner - run:
gcloud -q beta app deploy --no-cache --project bridgy-federated *.yaml
Compatibility
Here are in progress notes on how I'm testing interoperability with various federated social networks.
ActivityPub
- Mastodon (issue) works! They shipped support in 1.6.
-
Hubzilla is getting close!
- Old since lastauth.com is down now: ~~[email protected], example post~~
-
distbin
- No explicit accounts, can post anything as anyone
-
pump.io
- [email protected]
- Tried posting a bunch of ways, couldn't get any to work :/
-
Kroeg
- Not open to other users yet. Seems to be running at puckipedia.com/social.
- Pleroma
OStatus / Salmon
-
Friendica
- [email protected]
- Example post: HTML (alternate link), Atom
- Atom has Salmon link rel,
author.dfrn:handle
is user URI (dfrn is http://purl.org/macgirvin/dfrn/1.0))
-
GNU Social (nÊe StatusNet)
- [email protected]
- Example post: HTML, Atom
- Atom has no Salmon link rels!
author.name
is username (snarfed)
-
Hubzilla
- [email protected]
- Example post: HTML
- Only has Atom
link rel="alternate"
for full feed, not individual post :/ - Atom feed has Salmon link rels inside top level
feed
, not in individualentry
s - Atom entries have
author.name
as username (snarfed)
Stats
I occasionally generate stats and graphs of usage and growth via BigQuery, like I do with Bridgy. Here's how.
-
Export the full datastore to Google Cloud Storage. Include all entities except
MagicKey
. Check to see if any new kinds have been added since the last time this command was run.gcloud datastore export --async gs://bridgy-federated.appspot.com/stats/ --kinds Follower,Response
Note that
--kinds
is required. From the export docs:Data exported without specifying an entity filter cannot be loaded into BigQuery.
-
Wait for it to be done with
gcloud datastore operations list | grep done
. -
for kind in Follower Response; do bq load --replace --nosync --source_format=DATASTORE_BACKUP datastore.$kind gs://bridgy-federated.appspot.com/stats/all_namespaces/kind_$kind/all_namespaces_kind_$kind.export_metadata done
-
Check the jobs with
bq ls -j
, then wait for them withbq wait
. -
Run the full stats BigQuery query. Download the results as CSV.
-
Open the stats spreadsheet. Import the CSV, replacing the data sheet.
-
Check out the graphs! Save full size images with OS or browser screenshots, thumbnails with the Download Chart button.