-
Notifications
You must be signed in to change notification settings - Fork 58
/
Copy pathabout.html
1285 lines (1137 loc) Β· 85.4 KB
/
about.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{% extends "base.html" %}
{% block title %}About - Bridgy{% endblock %}
{% block body_class %} about {% endblock %}
{% block content %}
<li id="what" class="question">What is this?</li>
<li class="answer">
<p>Bridgy adds social media reactions to posts on your web site. It can also cross-post from your site <em>to</em> social networks. And more!
</p>
<p>A picture is worth a thousand words, so here's Bridgy at work
<a href="https://snarfed.org/2014-01-15_a-new-kingdom#comments"
target="_blank">on my own site</a>:
</p>
<br />
<p>
<a href="https://snarfed.org/2014-01-15_a-new-kingdom#comments" target="_blank">
<img id="screenshot" src="/static/example_post_screenshot.png"
style="border: 1px solid lightgray; max-width: 100%" />
</a></p>
<br />
<p>Bridgy is part of the
<a href="https://indieweb.org/">IndieWeb</a> ecosystem. In IndieWeb terminology,
Bridgy offers
<a href="https://indieweb.org/backfeed">backfeed</a>,
<a href="https://indieweb.org/POSSE">POSSE</a>, and
<a href="http://indiewebify.me/#send-webmentions">webmention</a> support as a
service.</a>
</p>
<p>Read on for more details, or
<a href="/">head to the front page</a> to sign up and get started!</p>
</li>
<br />
<ul class="about">
<p><em>General</em></p>
<li><a href="#how">How does it work?</a></li>
<li><a href="#cost">How much does it cost?</a></li>
<li><a href="#terms">What are the terms of service?</a></li>
<li><a href="#privacy">What do you do with my data?</a></li>
<li><a href="#garbage-collecting">How long do you store data?</a></li>
<li><a href="#who">Who are you? Why did you make this?</a></li>
<li><a href="#history">How long has this been around?</a></li>
<li><a href="#stats">How big is this?</a></li>
<li><a href="#bridgy-fed">What's the difference between this and Bridgy Fed?</a></li>
<li><a href="#rip-twitter">What happened to Twitter?</li>
<li><a href="#rip-facebook">What happened to Facebook?</li>
<li><a href="#rip-google+">What happened to Google+?</li>
<li><a href="#rip-meetup">What happened to Meetup?</li>
<li><a href="#profile-link">Why does my web site URL need to be in my social network profile?</a></li>
<li><a href="#add-remove-url">How do I add or remove a web site URL from my Bridgy profile?</a></li>
<li><a href="#disconnected">Bridgy stopped working for me!</a></li>
<li><a href="#security">It looks like anyone can poll or disable my account or publish as me. Isn't that a security hole?</a></li>
<li><a href="#connect">How do I connect my Bridgy accounts on different social networks?</a></li>
<li><a href="#registration-api">Can users sign up for Bridgy without leaving my site or application?</a></li>
<li><a href="#permissions">Why does Bridgy ask for all these permissions?</a></li>
<li><a href="#api">Does Bridgy have an API?</a></li>
<li><a href="#gdpr">Does Bridgy comply with the GDPR?</a></li>
<li><a href="#ccpa">Does Bridgy comply with the CCPA?</a></li>
<li><a href="#eu-data">Does Bridgy comply with the EU's data regulations, eg the DMA and DSA?</a></li>
<li><a href="#values">What are Bridgy's product and engineering values?</a></li>
<li><a href="#bug">I found a bug! I have a feature request!</a></li>
<li><a href="#vulnerability">I found a security vulnerability!</a></li>
<li><a href="#cute">Brid.gy? Really?</a></li>
<br />
<p><em>Backfeed</em></p>
<li><a href="#which">Which things does it send, specifically?</a></li>
<li><a href="#accept">How can I get my web site to accept webmentions?</a></li>
<li><a href="#missing">Bridgy isn't seeing one of my comments or likes or reposts!</a></li>
<li><a href="#profile-links">Bridgy can't find my original posts! It just says <em>No webmention targets found</em>.</a></li>
<li><a href="#link">Do my posts really need to link to my web site?</a></li>
<li><a href="#domain">Bridgy used to find my syndication links, but then it stopped.</a></li>
<li><a href="#order">Why are the Bridgy comments on my site out of order?</a></li>
<li><a href="#appspot">What are all these brid.gy links in the comments that Bridgy sends to my site?</a></li>
<li><a href="#source-urls">What's the format for Bridgy's webmention source URLs?</a></li>
<li><a href="#browser-extension">Wait, Facebook needs a browser extension now?</a></li>
<li><a href="#facebook-profile-pictures">Where are the profile pictures for Facebook comments and likes?</a></li>
<li><a href="#duplicates">Why did I get multiple duplicate copies of the same response?</a></li>
<li><a href="#opt-out">Can I opt out?</a></li>
<br />
<p><em>Publishing</em></p>
<li><a href="#publishing">What do you mean, <em>publishing</em>?</a></li>
<li><a href="#microformats">How does it decide which parts of my web page to include?</a></li>
<li><a href="#publish-types">What can I publish, exactly?</a></li>
<li><a href="#publish-automatically">Can I do this automatically, whenever I post something new on my web site?</a></li>
<li><a href="#webmentions">How do I automate Bridgy Publish with webmentions?</a></li>
<li><a href="#micropub">How do I use Micropub?</a></li>
<li><a href="#reply">How do I reply to a post from my web site?</a></li>
<li><a href="#like">How do I like, favorite, or repost from my web site?</a></li>
<li><a href="#picture">How do I post a picture?</a></li>
<li><a href="#video">How do I post a video?</a></li>
<li><a href="#person-tag">How do I tag someone in a post?</a></li>
<li><a href="#location">How do I include location in a post?</a></li>
<li><a href="#delete">How do I delete a post?</a></li>
<li><a href="#github-issue-comment">How do I create a GitHub issue or comment?</a></li>
<li><a href="#github-reaction">How do I post an emoji reaction on a GitHub issue or PR?</a></li>
<li><a href="#github-respond-to-comment">How do I respond to a GitHub comment?</a></li>
<li><a href="#add-label">How do I add a label to a GitHub issue?</a></li>
<li><a href="#add-tag">How do I add a tag to a Flickr photo?</a></li>
<li><a href="#github-star">How do I star a GitHub repo?</a></li>
<li><a href="#omit-link">Can I disable the link back to my post?</a></li>
<li><a href="#ignore-formatting">Can I disable the plain text whitespace and formatting?</a></li>
<li><a href="#fragment">Can I publish just one part of a page?</a></li>
<li><a href="#silo-content">I want more control over the text that gets posted.</li>
<li><a href="#html-entities">Why is there a weird <code>&...;</code> in my post?</li>
<li><a href="#multiple-types">What if my original post does more than one thing?</li>
<li><a href="#short-link">Can I include a short link instead of the full link?</a></li>
<li><a href="#response">How does Bridgy respond to webmentions?</a></li>
<li><a href="#error-response">How about error responses?</a></li>
<li><a href="#silos">Why not Instagram?</a></li>
<br />
<p><em>Webmentions for blogs</em></p>
<li><a href="#blogs">What is this?</a></li>
<li><a href="#outgoing">What outgoing webmentions does it send from my blog?</a></li>
<li><a href="#incoming">What does it do with incoming webmentions send to my blog?</a></li>
<li><a href="#endpoint">Why do I have to add a line of HTML to my blog?</a></li>
<li><a href="#disqus">I'm on Tumblr. Why do I have to install Disqus?</a></li>
<li><a href="#medium">I'm on Medium. Why doesn't Bridgy give me incoming webmentions?</li>
<li><a href="#medium-mf2">I'm on Medium. Why do my webmentions look ugly and empty on their target pages?</li>
<li><a href="#moderation">I received a webmention, but it's not showing up on my blog.</a></li>
<li><a href="#user">All the comments for incoming webmentions come from me. That's ugly.</a></li>
</ul>
<br />
<div>
<ul class="about">
<!-- General -->
<li id="how" class="question">How does it work?</li>
<li class="answer">
<p>
Bridgy periodically checks social networks for responses to your posts and
<a href="https://indieweb.org/original-post-discovery">links to your web
site</a> and sends them back to your site
as <a href="http://indiewebify.me/#send-webmentions">webmentions</a>. Bridgy
also translates the responses
to <a href="http://microformats.org/">microformats</a> so that your web site can
fetch and parse them.
</p>
<p>
Bridgy can also publish posts, comments, likes, and reposts from your web
site <em>to</em> social networks. When you ask Bridgy to publish a post, it
analyzes its microformats data and publishes it using the social network APIs.
</p>
<p>Bridgy is <a href="https://github.com/snarfed/bridgy">open source</a>. It's
written in Python and runs on
<a href="https://cloud.google.com/appengine/">Google App Engine</a>. It uses
<a href="https://github.com/snarfed/oauth-dropins">oauth-dropins</a> to let
users connect to the silos and
<a href="https://github.com/snarfed/granary">granary</a>
to fetch data from the silos and convert it to a standard format.
</p>
</li>
<li id="cost" class="question">How much does it cost?</li>
<li class="answer">
<p>Nothing! Bridgy is small, so thanks to <a href="https://cloud.google.com/appengine/">App Engine</a>, it doesn't cost much to run. We don't need donations, promise. If you really want to contribute, <a href="https://github.com/snarfed/bridgy/issues">file an issue</a> or <a href="https://github.com/snarfed/bridgy">send a pull request</a>, or
<a href="https://opencollective.com/indieweb">donate to the IndieWeb</a>!
</p>
<p>On our side, it costs us less than $50/month to run right now. <a href="https://snarfed.org/?s=bridgy%20stats">More details in the stats.</a>
</p></li>
<li id="terms" class="question">What are the terms of service?</li>
<li class="answer">
<p>Bridgy's terms of service are very simple. You agree not to deliberately attack, breach, or otherwise harm the service. If you manage to access private data such as API tokens, you agree to <a href="#vulnerability">report the vulnerability</a> and not use or disclose that data.
</p>
<p>Otherwise, you may use the service for any purpose you see fit. However, we may terminate or block your access for any reason, or no reason at all. (We've never done this, and we expect we never will. Just playing it safe.)
</p>
<p>Are you an admin on a service that Bridgy interacts with? If you have any concerns, please
<a href="https://github.com/snarfed/bridgy/issues">file an issue</a>!
</p>
</li>
<li id="privacy" class="question">What do you do with my data?</li>
<li class="answer">
<p>Nothing! Bridgy isn't a business, and never will be, so we don't have the same
motivations to abuse your data that other services might. More concretely, we
won't ever send you email, we store as little of your
<a href="http://en.wikipedia.org/wiki/Personally_identifiable_information">PII</a>
(personally identifiable information) as possible, and we <em>never</em> have
access to any of your passwords.
</p>
</li>
<li id="garbage-collecting" class="question">How long do you store data?</li>
<li class="answer">
<p>We store all data permanently, but not all in Bridgy itself. Notably, we archive responses (eg other people's likes and comments on your posts) to long term storage after 1-2 years. Archived responses are <a href="https://github.com/snarfed/bridgy/#stats">still visible in BigQuery</a>, but not inside Bridgy.
</p>
<p>Bridgy is a service, not a data storage provider. Its main job is to translate and move data between sites. It's useful to store this data for an extended period of time, so you can see what it's done recently and retry failed responses, but it's not intended to store data permanently. Garbage collecting old responses is one way to enforce and communicate that.
</p>
<p>
</li>
<li id="who" class="question">Who are you? Why did you make this?</li>
<li class="answer">
<p>
We're <a class="h-card" href="https://snarfed.org/">Ryan Barrett</a>, <a class="h-card" href="https://github.com/kylewm">Kyle Mahan</a>, and <a href="https://github.com/snarfed/bridgy/graphs/contributors">many other contributors</a>. We <a href="https://snarfed.org/2012-07-25_why_i_have_my_own_web_site">like using our own websites</a> and <a href="https://indieweb.org/why">owning our data</a>.
</p>
</li>
<li id="history" class="question">How long has this been around?</li>
<li class="answer">
<p>Ryan conceived of the idea behind Bridgy in early 2011, started working on it that summer, and <a href="https://snarfed.org/2012-01-08_bridgy_launched">launched the first version</a> on Jan. 8 2012. It only supported <a href="http://wordpress.org/">WordPress</a>, and wasn't very polished, so it never got much adoption.
</p>
<p>He <a href="https://snarfed.org/2013-12-09_brid-gy-meet-webmentions">launched the current version on Dec. 9, 2013</a>. It's been more successful, thanks in large part to <a href="http://indiewebify.me/#send-webmentions">webmentions</a> and the inspiration of the <a href="https://indieweb.org/why">IndieWeb community</a>.
</p>
</li>
<li id="stats" class="question">How big is this?</li>
<li class="answer">
<p><a href="https://snarfed.org/?s=bridgy%20stats">Check out the stats!</a></p>
</li>
{# NOTE: this question is duplicated in bridgy-fed/templates/docs.html.
If you update it here, update it there too! #}
<li id="bridgy-fed" class="question">What's the difference between this and Bridgy Fed?</li>
<li class="answer">
<p><a href="https://brid.gy/">Bridgy</a> and <a href="https://fed.brid.gy/">Bridgy Fed</a> are separate services. They both connect web sites and social networks and translate posts and interactions back and forth, but they each do it very differently.</p>
<p><a href="https://brid.gy/">Bridgy</a> - this service - connects <a href="https://indieweb.org/">IndieWeb</a> web sites to <em>existing</em> accounts on social networks, both centralized and decentralized, and provides <a href="https://indieweb.org/backfeed">backfeed</a> and <a href="https://indieweb.org/POSSE">POSSE</a> (aka cross-posting) as a service.</p>
<a href="https://fed.brid.gy/">Bridgy Fed</a>, on the other hand, bridges accounts on decentralized social networks like the <a href="https://en.wikipedia.org/wiki/Fediverse">fediverse</a>, <a href="https://blueskyweb.xyz/">Bluesky</a>/<a href="https://atproto.com/">AT Protocol</a>, and the <a href="https://indieweb.org/">IndieWeb</a> <em>directly</em> across those networks.</p>
<p>As an example, here's a visualization of how they each connect web sites to the fediverse:</p>
<br>
{% with titles=True %}
{% include "_mastodon_which_bridgy.html" %}
{% endwith %}
<p>Apologies for the confusingly similar names!</p>
</li>
<li id="rip-twitter" class="question">What happened to Twitter?</li>
<li class="answer">
<p><a href="https://en.wikipedia.org/wiki/Twitter,_Inc.#Post-acquisition">Twitter is burning</a>, <a href="https://www.reuters.com/technology/twitter-makes-first-interest-payment-musk-buyout-debt-bloomberg-news-2023-01-30/">a billionaire owes money</a>, <a href="https://twittercommunity.com/t/announcing-new-access-tiers-for-the-twitter-api/188728">an API got lobotomized</a>, and <a href="https://snarfed.org/2023-04-03_so-long-twitter-api-and-thanks-for-all-the-fish">Bridgy's Twitter support was one of the casualties.</a> Our access was unceremoniously suspended on April 4, 2023, along with many others. So long, and thanks for all the fish!</p>
</li>
<a id="facebook-publish"></a>
<li id="rip-facebook" class="question">What happened to Facebook?</li>
<li class="answer">
<p><a href="#browser-extension">Facebook is now supported again, minimally, via the browser extension!</a></p>
<p>Bridgy included support Facebook from the very beginning, <a href="https://snarfed.org/2012-01-08_bridgy_launched">when it launched in January 2012</a>. After the <a href="https://www.theverge.com/2018/4/10/17165130/facebook-cambridge-analytica-scandal">Cambridge Analytica scandal</a> broke, Facebook started limiting its API in a number of ways. Notably, <a href="https://developers.facebook.com/blog/post/2018/04/24/new-facebook-platform-product-changes-policy-updates/">it disabled RSVPing on April 24, 2018, posting on August 1, 2018,</a> and <a href="https://developers.facebook.com/blog/post/2018/05/01/facebook-login-updates-further-protect-privacy/">reading other people's comments and likes on May 24, 2018</a>, which killed Bridgy for Facebook entirely (see <a href="https://github.com/snarfed/bridgy/issues/826">these</a> <a href="https://github.com/snarfed/bridgy/issues/817">issues</a>) <a href="#browser-extension">until we developed the browser extension</a>.</p>
<p>We tried hard to keep Facebook support alive even without the API. <a href="https://github.com/snarfed/bridgy/issues/854">We first tried using email notifications</a> for backfeed. Users forwarded emails from Facebook to Bridgy, which extracted comment text, likes, and shares, and sent webmentions as normal. This was surprisingly difficult to set up, though: many users struggled to get Facebook to actually send notification emails, even after they were turned on in settings.</p>
<p>After that, <a href="https://github.com/snarfed/granary/search?q=m.facebook.com&type=Commits">we tried scraping m.facebook.com</a>, like <a href="https://facebook-atom.appspot.com/">facebook-atom</a> does. The scraping itself worked fine, but we never managed to consistently evade Facebook's bot detection. They always ended up rate limiting or blocking us, even after we started rotating IP addresses, spoofing User Agent headers, and even running some JavaScript for browser fingerprinting. They have way more resources for that arms race than we do, so we gave up on server side fetching altogether...</p>
</li>
<li id="rip-google+" class="question">What happened to Google+?</li>
<li class="answer">
<p>Bridgy included support Google+ from the very beginning, <a href="https://snarfed.org/2012-01-08_bridgy_launched">when it launched in January 2012</a>. Sadly, Google+ <a href="https://developers.googleblog.com/2018/12/google-apis-shutting-down-march-7-2019.html">turned off its API in February 2019</a> and <a href="https://support.google.com/plus/answer/9217723">shut down entirely in April</a>, at least for end users. Gory details in <a href="https://github.com/snarfed/bridgy/issues/846">this issue</a>. RIP, we'll miss you!
</p>
</li>
<li id="rip-meetup" class="question">What happened to Meetup?</li>
<li class="answer">
<p>Bridgy Publish supported creating Meetup RSVPs from <a href="https://www.jvt.me/posts/2020/02/17/meetup-bridgy-support/">February 2020 to March 2020. This used their REST API, which they <a href="https://www.meetup.com/api/migrating/#graphQl-migrating">decommissioned in 2022 in favor of a new GraphQL API</a> that sadly <a href="https://www.meetup.com/api/schema/#p02-mutations-section">doesn't support creating RSVPs</a>. Ah well!
</p>
</li>
<li id="profile-link" class="question">Why does my web site URL need to be in my social network profile?</li>
<li class="answer">
<p>First, if you want to <a href="#publish">publish</a>, Bridgy uses this link
to connect your web site to your social network account. Second, if you want to
get responses without linking your posts to your web site, Bridgy uses this link
to <a href="#link">fetch syndication URLs</a> from your site so it can map back
from your posts.</p>
<p>Note that if the web site URL used in your social network profile contains
a path, Bridgy will look for a rel="me" link from the root of your domain, to
that path. If the link is found, Bridgy will publish posts from any path on
your domain to your social network profiles. If the link isn't found, Bridgy
will only publish posts from your domain that contain the original path. This is
to support sites that allow multiple users per domain.</p>
</li>
<li id="add-remove-url" class="question">How do I add or remove a web site URL from my Bridgy profile?</li>
<li class="answer">
<p>Just add it to or remove it from your social network profile, then log into Bridgy with that social network again. Et voilΓ !
</p>
<p>If you want a given web site in your social profile but <em>not</em> in Bridgy, remove it from your social profile temporarily, log into Bridgy, then add it back afterward. It won't show up in Bridgy unless you log in again.
</p>
</li>
<li id="disconnected" class="question">Bridgy stopped working for me!</li>
<li class="answer">
<p>Does your Bridgy user page have a
<span class="glyphicon glyphicon-pause"></span> icon on it? If so, Bridgy has
lost access to your account. This can happen when you change your password, when
Bridgy's access expires or is revoked, or for other reasons.</p>
<p>To fix this, just click on the
<span class="glyphicon glyphicon-pause"></span> icon on your user page.
</p></li>
<li id="security" class="question">It looks like anyone can poll or disable my
account or publish as me. Isn't that a security hole?</li>
<li class="answer">
<p>Looks can be deceiving. Polling is harmless - Bridgy does it automatically anyway - and when you publish a post or try to disable an account, we check that you own it first. If you <a href="#webmentions">publish via webmention</a>, we <a href="#webmentions">require a Bridgy Publish backlink</a> in your post.
</p>
</li>
<li id="connect" class="question">How do I connect my Bridgy accounts on different social networks?</li>
<p>You don't! Bridgy could detect accounts that share the same web site(s), but it doesn't yet. If you think it should, <a href="https://github.com/snarfed/bridgy/issues/38">feel free to suggest what it would do</a>!
</p>
</li>
<li id="registration-api" class="question">Can users sign up for Bridgy without leaving my site or application?</li>
<p>Not exactly, but you can get close. Direct your users to <code>POST</code> to a Bridgy registration URL of the form <code>https://brid.gy/SITE/start</code> (where SITE is
<code>flickr</code>, <code>github</code>, <code>mastodon</code>, or <code>reddit</code>) with the parameters:</p>
<ul>
<li><code>feature</code>, a comma-separated list of features, usually <code>listen</code> (ie backfeed), <code>publish</code>, or <code>listen,publish</code></li>
<li><code>callback</code>, a URL pointing back to your site</li>
<li> <code>user_url</code> (optional), the user's URL. Allows callers to set this value without requiring it to be present in the user's silo profile</li>
</ul>
<p>They will be ushered through the registration process and sent back to
your site when it finishes.</p>
<p>For example:</p>
<pre>
POST <a href="https://brid.gy/github/start">https://brid.gy/github/start</a>
<span class="keyword">feature=</span><span class="value">listen,publish</span>&<span class="keyword">callback=</span><span class="value">http%3A%2F%2Fexample.com%2Fbridgy-callback</span>
</pre>
<p>The callback will be passed back query parameters:</p>
<ul>
<li><code>result</code> equal to <code>success</code>, <code>failure</code>, or <code>declined</code></li>
<li><code>user</code> (if successful) equal to their Bridgy user page URL</li>
</ul>
<li id="permissions" class="question">Why does Bridgy ask for all these permissions?</li>
<li class="answer">
<p>Bridgy needs various permissions to access each social network accounts you connect. It prompts you when you first connect an acount, and also when you enable <a href="#back
10000
feed">backfeed</a> or <a href="#publish">publishing</a> afterward. It <a href="https://en.wikipedia.org/wiki/Principle_of_least_privilege">asks for as little access as possible</a>, to only public data, but still often has to ask for more access than it needs, since many social networks have overly coarse permissions. Details:
</p>
<ul>
<li><b>Blogger</b> doesn't have permissions at all, <a href="https://developers.google.com/blogger/docs/2.0/developers_guide_protocol#OAuth2Authorizing">just full access or none.</a> <a href="/static/permissions_screenshots/blogger.png">Screenshot.</a></li>
<li><b>Flickr</b> has <a href="https://www.flickr.com/services/api/auth.oauth.html#authorization">read, write, and delete permissions</a>. We ask for read for backfeed, write for publish. Screenshots: <a href="/static/permissions_screenshots/flickr_read.png">backfeed</a>, <a href="/static/permissions_screenshots/flickr_write.png">publish</a>.</li>
<li><b>GitHub</b> has a few different permission models. We use an <a href="https://developer.github.com/apps/building-oauth-apps/scopes-for-oauth-apps/">OAuth app</a> to request read/write permission to public repository data, and notifications to see new comments and reactions. The alternative would have been a <a href="https://developer.github.com/apps/building-github-apps/">GitHub app,</a> which lets you grant read vs write permission to individual repos, but includes private repos, and doesn't include notifications. <a href="https://developer.github.com/apps/differences-between-apps/">More on the tradeoff here.</a> <a href="/static/permissions_screenshots/github.png">Screenshot.</a></li>
<li><b>Mastodon</b> has <a href="https://docs.joinmastodon.org/api/permissions/">a number of fine grained permissions</a>, but backfeed needs most of the read categories, and publish needs most of the write ones, so Bridgy just asks for blanket read and write permission for each. Backfeed also uses your block list to suppress responses from accounts you've blocked, which <a href="https://docs.joinmastodon.org/api/rest/blocks/#get-api-v1-blocks">Mastodon unfortunately bundles with write access</a> and reports as <em>modify account relationships</em>. We don't actually modify any account relationships, promise!</li>
<li><b>Medium</b> has <a href="https://github.com/Medium/medium-api-docs/#user-content-21-browser-based-authentication">a few different permissions</a>. We ask for read acces to your profile, public posts, and publications. <a href="/static/permissions_screenshots/medium.png">Screenshot.</a></li>
<li><b>Tumblr</b> doesn't have permissions at all, <a href="https://www.tumblr.com/docs/en/api/v2#oauth">just full access or nothing.</a> <a href="/static/permissions_screenshots/tumblr.png">Screenshot.</a></li>
<li><b>WordPress.com</b>: doesn't have permissions at all, <a href="https://developer.wordpress.com/docs/oauth2/">just full access or nothing.</a> We ask for read and write access to a single blog that you specify, so we can see and handle new blog posts and to create comments. <a href="/static/permissions_screenshots/wordpress.com.png">Screenshot.</a></li>
<li><b>Reddit</b> allows you to permit access to different <a href="https://www.reddit.com/api/v1/scopes.json">scopes</a>, we're asking for permission to confirm your identity and read posts that you can read.</li>
<li><b>Bluesky</b> doesn't currently have a proper auth setup - instead, we use an app-specific password that you generate in order to act on your behalf.</li>
</ul>
</li>
<li id="api" class="question">Does Bridgy have an API?</li>
<li class="answer">
<p>Yes! In the spirit of <em><a href="https://aaronparecki.com/2015/04/26/22/html-is-my-api">HTML is my API</a></em>, Bridgy's HTML is its API. User pages (e.g. <a href="/github/schnarfed">/github/snarfed</a>) include standard and custom <a href="http://microformats.org/wiki/microformats2">microformats2</a> properties that you can use to get information about users and their <a href="#backfeed">responses</a>, <a href="#publish">publishes</a>, and <a href="#blogs">blog posts</a>.
</p>
<p>
Here are the properties Bridgy uses:
</p>
<code><ul>
<li>h-card</li>
<ul>
<li>p-name</li>
<li>u-url</li>
<li>u-photo</li>
<li>p-bridgy-account-status</li>
<li>p-bridgy-listen-status</li>
<li>p-bridgy-publish-status</li>
<li>dt-bridgy-next-poll</li>
<li>dt-bridgy-last-syndication-link</li>
<li>dt-bridgy-last-webmention-sent</li>
<li>dt-bridgy-last-refetched</li>
</ul>
<li>h-bridgy-response h-bridgy-{post,comment,like,repost,rsvp}</li>
<ul>
<li>u-name</li>
<li>dt-updated</li>
<li>u-bridgy-syndication-source</li>
<li>u-bridgy-original-source</li>
<li>u-bridgy-target</li>
<li>p-bridgy-status</li>
<li>u-bridgy-log</li>
</ul>
<li>h-bridgy-publish h-bridgy-{preview,post,photo,comment,like,repost,rsvp}</li>
<ul>
<li>u-name</li>
<li>dt-updated</li>
<li>u-url</li>
<li>u-syndication</li>
<li>p-bridgy-status</li>
<li>u-bridgy-log</li>
</ul>
<li>h-bridgy-blogpost</li>
<ul>
<li>u-name</li>
<li>dt-updated</li>
<li>u-url</li>
<li>u-bridgy-target</li>
<li>p-bridgy-status</li>
<li>u-bridgy-log</li>
</ul>
</ul></code>
</li>
<li id="gdpr" class="question">Does Bridgy comply with the GDPR?</li>
<li class="answer">
<p>The <a href="https://www.eugdpr.org/">EU General Data Protection Regulation</a> aka GDPR (<a href="https://indieweb.org/GDPR">more details</a>) is a sweeping new set of data privacy laws that took effect May 2018. A number of us have looked at Bridgy, including a GDPR lawyer, and we think it's largely exempt:</p>
<ul>
<li>Bridgy <a href="#fully+public">only handles fully public data</a>. <a href="https://gdpr-info.eu/art-9-gdpr/">Article 9.2.e</a> exempts processing that <em>relates to personal data which are manifestly made public by the data subject.</em></li>
<li>Bridgy is a small non-commercial project with no revenue. <a href="https://gdpr-info.eu/recitals/no-18/">Recital 18</a> says <em>This Regulation does not apply to the processing of personal data...with no connection to a professional or commercial activity.</em></li>
<li>The vast majority of Bridgy's user data is from or for personal web sites. <a href="https://gdpr-info.eu/art-2-gdpr/">Article 2</a> says <em>personal data...by a natural person in the course of a purely personal or household activity</em> is exempt.</li>
</ul>
<p>The GDPR does require us to provide a full export of a user's data (<a href="https://gdpr-info.eu/art-15-gdpr/">15.1, 15.3</a>, <a href="https://gdpr-info.eu/art-20-gdpr/">20</a>), delete that data (<a href="https://gdpr-info.eu/art-17-gdpr/">17</a>), or terminate their account (<a href="https://gdpr-info.eu/art-17-gdpr/">17</a>) upon request. Bridgy currently lets you terminate (disable) your account, and I'll happily export or delete any user's data upon request. So far, I've never been asked.</p>
<p>Note that this analysis only applies to Bridgy itself. For web sites that receive and display webmentions from Bridgy, see the <a href="https://indieweb.org/backfeed#Discussion">backfeed wiki page</a>, <a href="https://indieweb.org/2018/Berlin/ethics#Notes">IWC Berlin session notes</>, <a href="https://sebastiangreger.net/2018/05/indieweb-privacy-challenge-webmentions-backfeeds-gdpr/"><em>The Indieweb privacy challenge</em></a>, <a href="https://ascraeus.org/micro/1525556293/">Daniel Goldsmith's response</a>, and other related articles on both the legalities and the ethics.</p>
</li>
<li id="ccpa" class="question">Does Bridgy comply with the CCPA?</li>
<li class="answer">
<p>The <a href="https://oag.ca.gov/privacy/ccpa">California Consumer Privacy Act (CCPA)</a> is a sweeping new set of data privacy laws that apply to businesses serving California consumers. It took effect January 1, 2020. None of the <a href="https://oag.ca.gov/system/files/attachments/press_releases/CCPA%20Fact%20Sheet%20%2800000002%29.pdf">CCPA's eligibility criteria</a> apply to Bridgy, so it's currently exempt:</p>
<ul>
<li><em>Has gross annual revenues in excess of $25 million;</em><br>(Bridgy has no revenue.)</li>
<li><em>Buys, receives, or sells the personal information of 50,000 or more consumers, households, or devices;</em><br>(Bridgy doesn't buy, sell, or monetize personal information. It does <em>receive</em> personal information, but not yet over 50k users' worth. Maybe someday!)</li>
<li><em>Derives 50 percent or more of annual revenues from selling consumersβ personal information.</em><br>(Again, Bridgy doesn't sell or monetize personal information.)</li>
</ul>
</li>
<li id="eu-data" class="question">Does Bridgy comply with the EU's data regulations, eg the DMA and DSA?</li>
<li class="answer">
<p>Probably! I haven't hired a lawyer, so I can't say for sure, but a number of us in the community have looked, and we believe it's exempt from most of the EU data regulations and complies with the rest. Specifically:</p>
<ul>
<li><a href="https://eur-lex.europa.eu/legal-content/en/TXT/?uri=COM:2020:842:FIN">DMA</a>: we believe doesn't apply</li>
<li><a href="https://eur-lex.europa.eu/legal-content/en/TXT/?uri=COM:2020:825:FIN">DSA</a>:
<ul>
<li>Chapter 2: we'll comply with all lawful court orders (seems unlikely)</li>
<li>Chapter 3:
<ul>
<li>Section 1: <a href="#terms">Our terms of service are here.</a> Our designated contact person is <a href="https://snarfed.org/">Ryan Barrett</a>.</li>
<li>Section 2: You may notify us of potential illegal content by <a href="https://github.com/snarfed/bridgy/issues">filing an issue on GitHub</a>. If we ever remove any specific content, we'll notify the responsible user. (So far, neither of these have ever happened.) </li>
<li>Sections 3 and 4: only apply to large platforms, not small entities like Bridgy (see articles 13, 17 through 24)
</ul>
</ul>
</li>
<li><a href="https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:52021PC0206">AI Regulation</a>: we believe doesn't apply</li>
<li><a href="https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:52020PC0767">DGA</a>: we're not sure</li>
<li><a href="https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=COM:2022:68:FIN">Data Act</a>: we're not sure</li>
</ul>
</li>
<!-- Mostly duplicated in Bridgy Fed's docs! Keep both copies in sync! -->
<li id="values" class="question">What are Bridgy's product and engineering values?</li>
<li class="answer">
<p>What's important to Bridgy and its development? How do we make technical and design decisions and prioritize work? One way to do this is to explicitly enumerate its product and engineering <em>values</em>, along with their priorities. <a href="https://archive.org/details/vimeo-230142234">Bryan Cantrill describes this well.</a></p>
<p>As far as I can tell, Bridgy's top product and engineering values are:</p>
<ul>
<li><b>Quality</b>: expected functionality works consistently, with minimal bugs, <a href="https://en.wikipedia.org/wiki/Principle_of_least_astonishment">surprises</a>, or outages.</li>
<li><b>Functionality</b>: common features and use cases are supported as broadly and comprehensively as possible.</li>
</ul>
<p>Bridgy's second tier of product and engineering values are:</p>
<ul>
<li><b>Safety and security</b>: Bridgy minimizes harm to its users. The primary way this currently manifests is that it only handles fully public data. It also uses modern secure coding and ops practices to <a href="#vulnerability">minimize vulnerabilities</a> that could expose private keys or other sensitive information.</li>
<li><b>Accessibility</b>: users should mostly fall into a <a href="https://blog.codinghorror.com/falling-into-the-pit-of-success/">"pit of success"</a> with minimal work on their end. Setting up accounts, backfeeding responses, and publishing posts should be as easy as possible. When something doesn't work, it should be straightforward to troubleshoot and fix.</li>
<li><b>Transparency</b>: it should be easy for users to understand what Bridgy is doing. This includes per-user dashboard pages in the web UI, verbose public logs, and comprehensive documentation.</li>
<li><b>Scalability</b>: we want to handle as much usage as we receive, as automatically as possible. This doesn't mean that Bridgy is designed to handle millions of users today, just that it could be, and that we'd prioritize it.</li>
</ul>
</li>
<p>Other possible values include maintainability, operability, feature velocity, innovation, debuggability, performance, efficiency, standards compliance, user growth, and more. Those can all be good, and we may aim at some of them too, but less than the explicitly chosen values above.</p>
</li>
<li id="bug" class="question">I found a bug! I have a feature request!</li>
<li class="answer">
<p>Great! Please <a href="https://github.com/snarfed/bridgy/issues">file bugs, suggestions, and feedback in GitHub</a>. Thank you!
</p>
</li>
<li id="vulnerability" class="question">I found a security vulnerability!</li>
<li class="answer">
<p>Oof. Thank you for reporting it! Please send details to <a href="mailto:security@brid.gy">security@brid.gy</a>. We may provide monetary awards for reports of significant vulnerabilities, eg reading or modifying stored access tokens, <em>if</em> you follow these rules:</p>
<ul>
<li>Vulnerabilities must be in the application itself, not unrelated services like email (eg SPF/DKIM/DMARC).</li>
<li>Out of scope: rate limiting, XSS/CSRF attacks (Bridgy has no authenticated sessions), <code>/admin/*</code> pages.
<li>User data is intentionally public. That's not a vulnerability.</li>
<li>No automated fuzzing, DoSes, or other high volume traffic. We block this traffic, and it will disqualify you from any possible award.</li>
</ul>
<p>Otherwise, <a href="https://github.com/snarfed/bridgy/">the code is open source</a>, feel free to try to break in, let us know if you succeed!</p>
</li>
<li id="cute" class="question">Brid.gy? Really?</li>
<li class="answer">
<p>Yeah, we know. We're not proud of the cutesy domain name either. Just go with it.
</p>
</li>
<!-- Backfeed -->
<br />
<a name="listen"></a>
<h3 id="backfeed">Backfeed</h3>
<li id="which" class="question">Which things does it send, specifically?</li>
<li class="answer">
<p>Bridgy detects and sends webmentions for:</p>
<ul>
<li>Flickr comments and favorites on your photos.</li>
<li>GitHub comments and emoji reactions on your issues and pull requests from other people. (Not your own, since <a href="#GitHub+responses">we rely on notifications</a>, which those don't generate.)</li>
<li>Mastodon replies, favorites, reposts, and mentions. (We can't backfeed links to your site because <a href="https://github.com/mastodon/mastodon/issues/9529#issuecomment-447577703">Mastodon has no global search</a>, and even <a href="https://docs.joinmastodon.org/user/network/#search">local instance search is limited to hashtags, your own posts, and opted in accounts only</a>.)</li>
<li>Reddit posts that link to your site and the top-level comments on those posts.</li>
<li>Bluesky replies, likes, and reposts.</li>
</ul>
</li>
</p></li>
<li id="accept" class="question">How can I get my web site to accept
webmentions?</li>
<li class="answer">
<p>Webmentions are pretty new, but many web servers already support them. If
you're on Blogger, Medium, Tumblr, or WordPress.com, <a href="/">you can sign
your blog up with Bridgy</a> to accept webmentions. If you're on self-hosted
WordPress,
<a href="http://wordpress.org/plugins/indieweb/">install the Indieweb
plugin</a>. Otherwise,
<a href="https://indieweb.org/webmention#Publishing_Software">check out the
Indiewebcamp wiki</a> for a list of options.
</p>
<span id="realtime"></span>
<li id="missing" class="question">Bridgy isn't seeing one of my comments or likes or reposts!</li>
<li class="answer">
<p>This can happen for a number of different reasons.</p>
<ul>
<li><p>Bridgy doesn't work immediately. It checks your accounts for new activity
periodically, every 30 minutes or so depending on the site. This drops down
to once a day if you've been signed up for over a week and we haven't
successfully sent you a webmention yet, or the last one we sent was over a month
ago.
</p></li>
<li>Does the social network post have a link to your web site's post? If not,
does your web site's post have a
<a href="#link">syndication link</a> to the social network post?
Bridgy needs at least one or the other so it can connect the two posts.
</li>
<li>If it's a response, did you write the original post yourself? Bridgy doesn't
crawl responses to other people's posts, even if they have links to your web
site. It only sends back responses to <em>your</em> posts.
</li>
<li id="public">Is the post fully public? And the response too? Bridgy only shows and sends webmentions for fully public posts and responses. Bridgy won't see eg <a href="https://docs.joinmastodon.org/user/posting/#private">followers-only posts</a> or work with <a href="https://help.instagram.com/448523408565555">private accounts</a>.
</li>
<li>Is it on an older post? Bridgy only looks at your 30 most recent posts. It doesn't go back arbitrarily far because that doesn't scale. You can get around this for an individual response by entering it into <em>Resend for post</em> on your user page.</a>
</li>
<li>Are you using a <a href="#link">syndication link</a>? If so, Bridgy may have
fetched your post before you added the link. When that happens, Bridgy waits up
to two hours before it refetches your post and reloads syndication links. Try
clicking the <em>Crawl now</em> button on your user page.
</li>
<li>Have you blocked the author inside the silo? If so, Bridgy won't send you any of their responses.
</li>
<li>Currently, GitHub responses require a <a href="#link">syndication link on the original post on your web site</a> (<a href="https://chat.indieweb.org/dev/2018-02-26#t1519610412751400">background</a>). They're also currently best effort only. <a href="https://developer.github.com/v3/">Their API</a> is almost entirely broken down by user and repository, so there's no good way to ask for all recent responses to your posts. We get close by using their <a href="https://developer.github.com/v3/activity/notifications/">Notifications API</a>, which is good, but not always comprehensive. Apologies!
</li>
</ul>
</li>
<li id="link" class="question">Do my posts really need to link to my web site?</li>
<li class="answer">
<p>Nope! If your social network profile has a link to your web site, Bridgy will
fetch it and run
<a href="https://indieweb.org/posse-post-discovery#Algorithm">posse-post-discovery</a>
to find matching posts on your site. You'll need to include
<a href="http://microformats.org/wiki/h-entry#Core_Properties">u-url</a> and
<a href="https://indieweb.org/rel-syndication#How_to_publish">u-syndication</a>
links in those posts, and your home page (or wherever the link in your profile
points) will need either:
<ul>
<li>a top-level <a href="http://microformats.org/wiki/h-feed">h-feed</a>
with <a href="http://microformats.org/wiki/h-entry">h-entry</a>s
</li>
<li>top-level <a href="http://microformats.org/wiki/h-entry">h-entry</a>s
</li>
OR
<li>a <code><link rel="feed"></code> or <code><link rel="alternate" type="text/mf2+html"></code> with <code>href</code> pointing to another page with top-level <a href="http://microformats.org/wiki/h-feed">h-feed</a> or <a href="http://microformats.org/wiki/h-entry">h-entry</a>s
</li>
</ul>
If the h-entries in your feed(s) don't have u-syndication links, Bridgy will
fetch their u-urls and look for u-syndication links there.
</p>
<p id="parse">You can enter your home page into an online microformats2 parser like <a href="http://pin13.net/mf2/">pin13.net</a> to check that it satisfies these requirements.
</p>
</li>
<li id="domain" class="question">Bridgy used to find my syndication links, but
then it stopped.</li>
<li class="answer">
<p>If your site includes <a href="#links">syndication links</a> in your feeds
(e.g. your homepage) as well as on individual posts, Bridgy skips fetching the
posts themselves. If you stop including syndication links in your feeds, click
the <em>Crawl now</em> button on your user page to tell Bridgy to start fetching
your permalinks again.</p></li>
<li id="profile-links" class="question">Bridgy can't find my original posts! It just
says <em>No webmention targets found</em>.</li>
<li class="answer">
<p>Does your Bridgy user page have a link to your web site? Specifically, the
exact domain where your original posts are? If not, add that URL to your social
network profile, then log into Bridgy with that social network again. Bridgy
needs this to find your original posts <a href="#link">if you don't link to
them</a>, and it also uses it to
<a href="https://github.com/snarfed/bridgy/issues/51">distinguish between you
officially syndicating your posts and other people just mentioning them</a>.
</p>
<p>Flickr and GitHub only allow one web site link in your profile, so Bridgy <a href="https://github.com/snarfed/bridgy/issues/483">also looks for links in your profile's description field</a>. Reddit doesn't have a spot for any website links so Bridgy just searches your profile description.</p>
</li>
<li id="order" class="question">Why are the Bridgy comments on my site out of
order?</li>
<li class="answer">
<p>Bridgy doesn't guarantee that webmentions for comments, likes, etc. will
always be sent in the same order that they happened inside the silo. If your
site renders webmentions in the order that it receives them, this may mean that
some will occasionally appear out of order.
</p>
<p>To help prevent this, Bridgy includes the
<a href="http://microformats.org/wiki/h-entry#Core_Properties">
<code>dt-published</code> microformats2 timestamp property</a>
in responses whenever the silo's API or web site exposes it. Notably, it's
included in all comments/replies. If those
appear out of order on your site, file a feature request with your site's CMS or
webmention plugin to sort by <code>dt-published</code>!
<a href="https://github.com/idno/Known/issues/1104">Here's an example.</a>
</p></li>
<li id="appspot" class="question">What are all these brid.gy links in the responses that Bridgy sends to my site?</li>
<li class="answer">
<p>Short answer: your
server's <a href="http://www.webmention.org/">webmention</a> code is probably
rendering the webmention source URL. It should instead use the source
page's <a href="http://microformats.org/wiki/h-entry#Properties">microformats2
u-url property</a>. This is a common oversight, since they're usually the same,
but Bridgy is a special snowflake. :P You might want to file a bug against your
server, or even fix it
yourself. <a href="https://github.com/idno/idno/issues/160">Here's an example
discussion.</a>
</p>
Longer answer: Webmentions</a> don't include the actual content of the response,
just a link to it. The recipient fetches that link and extracts the content and
other data using
<a href="http://microformats.org/wiki/microformats2">microformats2</a>. The
social networks don't (yet) support microformats2, so Bridgy translates their
data to microformats2 HTML and serves those translations as webmention targets
so that recipients can fetch and parse them.
<p>
</p></li>
<li id="source-urls" class="question">What's the format for Bridgy's webmention source URLs?</li>
<li class="answer">
<p>Bridgy converts silo posts and responses to HTML with microformats2 and serves them as webmention sources. Feel free to use these for your own purposes too! Here's how to construct their URLs:
</p>
<pre>/post/<span class='keyword'>SITE</span>/<span class='keyword'>USER_ID</span>/<span class='value'>POST_ID</span>
/comment/<span class='keyword'>SITE</span>/<span class='keyword'>USER_ID</span>/<span class='value'>POST_ID</span>/<span class='value'>COMMENT_ID</span>
/like/<span class='keyword'>SITE</span>/<span class='keyword'>USER_ID</span>/<span class='value'>POST_ID</span>/<span class='value'>LIKED_BY_USER_ID</span>
/repost/<span class='keyword'>SITE</span>/<span class='keyword'>USER_ID</span>/<span class='value'>POST_ID</span>/<span class='value'>REPOST_POST_ID</span>
</pre>
<p>Examples:</p>
<ul>
<li><a href="/post/reddit/bonkerfield/iyrjpwq">
/post/reddit/bonkerfield/iyrjpwq
</a></li>
<li><a href="/comment/github/tantek/mozilla:standards-positions:155/mozilla:standards-positions:487311060">
/comment/github/tantek/mozilla:standards-positions:155/mozilla:standards-positions:487311060
</a></li>
<li><a href="/like/flickr/36003160@N08/27058891471/25414664@N07">
/like/flickr/36003160@N08/27058891471/25414664@N07
</a></li>
<li><a href="/repost/mastodon/@brettk@indieweb.social/110166176641387083/109425285510121102">
/repost/mastodon/@brettk@indieweb.social/110166176641387083/109425285510121102
</a></li>
</ul>
<br />
<p>Details:</p>
<ul>
<li><code class='keyword'>SITE</code> is
<code>facebook</code>, <code>flickr</code>, <code>github</code>, <code>instagram</code>, <code>mastodon</code>, or <code>bluesky</code>.
</li>
<li><code>/post/...</code> URLs aren't currently used by Bridgy itself, but
they're fun to play with if you want to convert silo posts to
microformats2.
</li>
<li>You can add <code>?format=json</code> to the end of any URL to get the
JSON-formatted version.
</li>
<li>For Instagram, Reddit, and GitHub, <code class='keyword'>USER_ID</code> is your
username, but for Flickr and Mastodon, it's your numeric user id.
For Bluesky, it's your DID.
<code class='value'>LIKED_BY_USER_ID</code> and
<code class='value'>RSVP_USER_ID</code> are always numeric. You
can get numeric user ids from the API consoles or
from <a href="https://granary.io/">granary</a>.
</li>
<li>For Instagram, <code class='value'>POST_ID</code> is a numeric id,
<em>not</em> the alphanumeric id in the photo's web URL. You can get a numeric
id from <a href="https://granary.io/">granary</a>.
</li>
<li>For Bluesky, <code class='value'>POST_ID</code> is the full <code>at://</code> URI, double-encoded.</li>
<li>If your webmention target complains about <code>brid.gy</code>'s SSL, try
<code>brid-gy.appspot.com</code> instead.
</li>
</ul>
</li>
<li id="browser-extension" class="question">Wait, Facebook needs a browser extension now?</li>
<li class="answer">
<p>Bridgy now uses a browser extension to backfeed Facebook responses (ie <a href="https://indieweb.org/backfeed">backfeed</a>). It's brittle and depends on scraping, so it's provided on a mostly unsupported basis, we don't plan to develop or fix bugs in it much. Still, if that doesn't scare you away, feel free to grab the browser extension for for <a href="https://chrome.google.com/webstore/detail/bridgy/lcpeamdhminbbjdfjbpmhgjgliaknflj" style="white-space: nowrap"><img src="/static/chrome_logo.png" style="height: 1em; margin-top: -.2em; white-space: nowrap" /> Chrome</a> or <a href="https://addons.mozilla.org/en-US/firefox/addon/bridgy/" style="white-space: nowrap"><img src="/static/firefox_logo.png" style="height: 1em; margin-top: -.2em" /> Firefox</a>, try it out, and see how it works!
</p>
<p>(We used to use a similar browser extension for Instagram, but they've gradually started suspending people's accounts for using it, so we've taken it down.)
<p>When you first install the extension, it opens a Bridgy tab for you to <a href="https://indieauth.net/">IndieAuth</a> into your web site. (Your site needs to support IndieAuth, like before.) After that, it runs in the background, forwarding responses to Bridgy to send back to your site like normal. You can see status info and poke it on the extension's settings page.
</p>
<p>Facebook and Instagram have been thorns in Bridgy's side for many years now, as they both gradually locked down parts of their APIs that Bridgy needed. Facebook also had strong anti-scraping countermeasures, so we were <a href="#rip-facebook">forced to shut it down entirely</a>, but we <a href="https://github.com/snarfed/bridgy/issues/603">managed to scrape Instagram</a> enough to keep it limping along. <a href="https://github.com/snarfed/bridgy/issues/665">They recently stepped up their countermeasures too</a>, though, and we couldn't keep up.
</p>
<p>Fortunately, you can log into their sites legitimately, in your own browser, so the browser extension lets you send your own data from those silos to Bridgy.
</p>
</li>
<li id="facebook-profile-pictures" class="question">Where are the profile pictures for Facebook comments and likes?</li>
<li class="answer">
<p>We scrape Facebook via <a href="https://mbasic.facebook.com/">mbasic.facebook.com</a> (details above), which is imperfect in a number of ways. Notably, it doesn't show profile pictures on comments or likes, so we can't easily include those in the webmentions we send to your site.
</p>
</li>
<li id="duplicates" class="question">Why did I get multiple duplicate copies of the same response?</li>
<li class="answer">
<p>If someone responds to one of your posts from more than one place, eg Mastodon and GitHub, or Instagram and their own web site, you'll get a separate webmention for each one. Bridgy doesn't currently try to de-duplicate these responses, but you're welcome to do it on your web site! The <a href="https://indieweb.org/deduplication">deduplication page on the IndieWeb wiki</a> has comprehensive background and techniques.
</p>
</li>
<li id="opt-out" class="question">Can I opt out?</li>
<li class="answer">
<p>Definitely! Just put the text <code>#nobridge</code> or <code>#nobot</code> in your social network profile bio and Bridgy won't backfeed any of your comments, likes, reposts, or other interactions.</p>
</li>
<!-- Publish -->
<br />
<h3 id="publish">Publishing</h3>
<li id="publishing" class="question">What do you mean, <em>publishing</em>?</li>
<li class="answer">
<p>People often post something on their web site, then post a link to it on
Mastodon or elsewhere so that other people will see it. The
<a href="https://indieweb.org/">IndieWeb</a> community calls this
<a href="https://indieweb.org/POSSE">POSSE</a>. There are
<a href="https://indieweb.org/why">lots of different reasons</a> to do this,
but one of the biggest is <em>owning your data</em>. Bridgy lets you do this
faster, more effectively, and even automatically!</p>
<p>You can try it right now. Once you're signed up to publish, plug the URL for
one of your posts into the text box on your Bridgy user page, then hit
the <em>Preview</em> button. You'll see a preview of what your post would look
like. If you like it, click <em>Send</em> and Bridgy will post it for you.</p>
F438
<p>It's not just for posts, either! You can use Bridgy to publish
<a href="#reply">replies</a>,
<a href="#repost">reposts</a>,
<a href="#like">likes</a>, and even
<a href="#person-tag">tag people</a> in photos!
<a href="#publish-types">Here's the full list.</a>
</li>
<li id="microformats" class="question">How does it decide which parts of my web
page to include?</li>
<li class="answer">
<p>Magic! Most major blog engines and CMSes are supported out of the box, no setup necessary. Bridgy looks for <a href="http://microformats.org/">microformats</a> in your HTML, first the <a href="http://microformats.org/wiki/microformats2">microformats2</a> <code>e-content</code> class and then the legacy <code>entry-content</code> class. It also understands more advanced microformats2 classes like <a href="http://microformats.org/wiki/rel-in-reply-to"><code>in-reply-to</code></a>, <a href="https://indieweb.org/like"><code>u-like-of</code></a>, <a href="https://indieweb.org/like"><code>u-repost-of</code></a>, <a href="https://indieweb.org/photo"><code>u-photo</code></a>, <a href="https://indieweb.org/tag"><code>u-category</code></a> (for <a href="https://indieweb.org/person-tag">tagging</a>), and <a href="http://microformats.org/wiki/h-card"><code>h-card</code></a> and <a href="http://microformats.org/wiki/h-geo"><code>h-geo</code></a> (for <a href="#location">location</a>). Here's an example:
<pre><div class="<span class='keyword'>h-entry</span>"><p class="<span class='keyword'>e-content</span>">
<span class='value'>Two naked tags walk into a bar. The bartender exclaims, "Hey, you can't come in here without microformats, this is a classy joint!"</span>
</p></div>
</pre>
</p>
<p>One key part <a href="publish-types">varies from silo to silo</a>: the text contents. Text-based posts fall into two broad buckets: short <a href="https://indieweb.org/note">notes</a>, eg on Mastodon, and longer <a href="https://indieweb.org/article">articles</a>, eg blog posts. In the IndieWeb, <a href="https://indieweb.org/post-type-discovery#Algorithm">we differentiate based on whether the post has a title</a>: articles generally have them, notes don't.
</p>
<p>Mastodon is primarily designed for notes, not articles. For that reason, when you use Bridgy Publish to post an article to Mastodon, it posts just the title, ie the <code>p-name</code> microformats2 element, and a link. (<a href="https://github.com/snarfed/bridgy/issues/228">Background</a> <a href="https://github.com/snarfed/bridgy/issues/219">discussion</a>.) Otherwise - for notes, replies, and everything on other silos - it posts the full contents of the <code>e-content</code> microformats2 element, falling back to <code>p-summary</code> and <code>p-name</code> if necessary. (<a href="#micropub">This is also what the Micropub interface <em>always</em> does</a>, even for articles on Mastodon.)
</p>
<p>Bridgy also tries to preserve some formatting and whitespace, notably newlines and lists, when converting your HTML to plain text. Try previewing a post to see how it will look!
</p>
</li>
<li id="publish-types" class="question">What can I publish, exactly?</li>
<li class="answer">
<p>Bridgy can publish:</p>
<ul>
<li>Bluesky posts, replies, likes, reposts, and quote posts. Posts and replies may include <a href="#picture">pictures</a>, <a href="#video">videos</a>, <a href="#person-tag">@-mentions</a>, <a href="https://indieweb.org/tags#How_to_markup">hashtags</a>, and links. Posts may also be <a href="#delete">deleted</a>.</li>
<li>Flickr photos, videos, comments, favorites, and <a href="#add-tag">tags onto existing photos</a>. Photos may include <a href="#location">location</a>, <a href="https://indieweb.org/tags">tags</a>, and/or <a href="#person-tag">people tags</a>.</li>
<li>GitHub issues, <a href="https://help.github.com/articles/about-stars">stars</a>, comments on issues and PRs, <a href="#add-label">labels onto existing issues</a>, and <a href="https://help.github.com/articles/about-conversations-on-github/#reacting-to-ideas-in-comments">emoji reactions</a> to issues, PRs, and comments.</li>
<li>Mastodon posts, replies, favorites, and reposts. Posts and replies may include <a href="#picture">pictures</a> and <a href="#video">videos</a>. Posts may also be <a href="#delete">deleted</a>.</li>
</ul>
</li>
</p></li>
<li id="publish-automatically" class="question">Can I do this automatically, whenever I post something new on my web site?</li>
<li class="answer">
<p>Definitely! You can automate Bridgy Publish via either <a href="#webmentions">webmention</a> or <a href="#micropub">Micropub</a>.</p>
</li>
<li id="webmentions" class="question">How do I automate Bridgy Publish with webmentions?</li>
<li class="answer">
<p>Just send a <a href="http://indiewebify.me/#send-webmentions">webmention</a>. Your server may be sending them already! Webmentions are pretty new, but <a href="https://indieweb.org/webmention#Publishing_Software">more and more web servers</a> are adding support for them. If you're not sure whether your server can send them, feel free to <a href="https://indieweb.org/IRC">ask on #indiewebcamp</a>, or you can even write a script to <a href="https://indieweb.org/webmention#How_to_Test_Webmentions">send them yourself</a>. It's just a single HTTP request!
</p>
<p id="publish-backlink">Bridgy's webmention endpoint is <code>https://brid.gy/publish/webmention</code>, and the target URL should be one of:
<ul>
<li><code>https://brid.gy/publish/bluesky</code></li>
<li><code>https://brid.gy/publish/flickr</code></li>
<li><code>https://brid.gy/publish/github</code></li>
<li><code>https://brid.gy/publish/mastodon</code></li>
</ul>
Your post HTML must also include that same target URL to verify your intent to publish. It doesn't have to be in your <code>e-content</code> or <code>h-entry</code>; it can appear anywhere on the page.
</p>
<p>If your server sends webmentions, just include any of these invisible links in your post to publish automatically!
<pre><a href="<a href='https://brid.gy/publish/bluesky'>https://brid.gy/publish/bluesky</a>"></a>
<a href="<a href='https://brid.gy/publish/flickr'>https://brid.gy/publish/flickr</a>"></a>
<a href="<a href='https://brid.gy/publish/github'>https://brid.gy/publish/github</a>"></a>
<a href="<a href='https://brid.gy/publish/mastodon'>https://brid.gy/publish/mastodon</a>"></a>
</pre>
</p>
</li>
<li id="micropub" class="question">How do I use Micropub?</li>
<li>
<p><a href="https://micropub.net/">Micropub</a> is a standard protocol for creating, updating, and deleting posts. Usually it's used with web sites, but you can use it with Bridgy Publish too. The endpoint is <code>https://brid.gy/micropub</code>. Once you've enabled publish on your user page, there will be a <em>Get token</em> button, use that as your Micropub token.</p>
<p>Micropub behaves largely the same as normal Bridgy Publish, and <a href="#microformats">supports the same microformats2 in the same ways</a>. It just gets them from the Micropub request rather than from a post on your site. It supports create and delete and photo/video URLs, but not update or file upload. Both <a href="https://micropub.spec.indieweb.org/#x3-1-1-form-encoded-and-multipart-requests">form-encoded</a> and <a href="https://micropub.spec.indieweb.org/#json-syntax">JSON</a> input formats are supported.
</p>
<p>(One difference <a href="#microformats">from normal Bridgy Publish</a> is that Micropub <em>always</em> posts the text from the <code>content</code> property, even if a <code>name</code> property is also included.)
</p>
<p>Here's an example of posting a reply with a photo to Mastodon:
<pre>
POST https://brid.gy/micropub
<span class='keyword'>Authorization</span>: <span class='value'>Bearer [TOKEN]</span>
<span class='keyword'>d</span>=<span class='value'>h-entry</span>
&<span class='keyword'>content</span>=<span class='value'>I+hereby+reply</span>
&<span class='keyword'>in-reply-to</span>=<a href='https://indieweb.social/@dandean/110182757475616244'>https://indieweb.social/@dandean/110182757475616244</a>
&<span class='keyword'>photo</span>=<span class='value'>https://example.com/picture.jpg</span>
</pre>
</p>
<p>Bridgy Publish is primarily designed to be a <a href="https://indieweb.org/POSSE">POSSE</a> service for syndicating posts from your web site onto social networks. It's not intended to be a standalone client for Mastodon or anything else. That's why Bridgy's Micropub doesn't support file upload: photos, videos, and other file attachments will generally already be accessible on your web site. </p>
</li>
<li id="reply" class="question">How do I reply to a post from my web site?</li>
<li class="answer">
<p>
Easy! Put the reply in a new post on your web site, and include a link to the post you're replying to with class <code><a href="http://microformats.org/wiki/rel-in-reply-to">u-in-reply-to</a></code>, as if you were publishing a normal <a href="https://indieweb.org/comment">IndieWeb reply</a>. For example:
<pre><div class="<span class='keyword'>h-entry</span>">
<p class="<span class='keyword'>e-content</span>"><span class='value'>Highly entertaining. Please subscribe me to your newsletter.</span></p>
<a class="<span class='keyword'>u-in-reply-to</span>" href="<a href='https://indieweb.social/@dandean/110182757475616244'>https://indieweb.social/@dandean/110182757475616244</a>"></a>
<a href="<a href='https://brid.gy/publish/mastodon'>https://brid.gy/publish/mastodon</a>"></a>
</div>
</pre>
The <code>u-in-reply-to</code> and <code>brid.gy/publish/mastodon</code> links don't need any visible text unless you want them to. Then publish your post via the Bridgy UI or a webmention like normal!
</p>
<p>
On the other hand, if your post is in reply to another IndieWeb post that is <em>also</em> syndicated, Bridgy will use <a href="https://indieweb.org/rel-syndication">rel-syndication</a> links in the other post to find the appropriate silo post to reply to.
</p>
</li>
<li id="like" class="question">How do I like or repost from my web site?</li>
<li class="answer">
<p>Liking and reposting are almost exactly the <a href="#reply">same as replying</a>. The only difference is that you use <code><a href="https://indieweb.org/like">u-like-of</a></code> for a like or favorite or <code><a href="https://indieweb.org/repost">u-repost-of</a></code> for a repost.
<pre>
<a class="<span class='keyword'>u-like-of</span>" href="<a href='https://www.flickr.com/photos/40721178@N00/24476817906/'>https://www.flickr.com/photos/40721178@N00/24476817906/</a>"></a>
</pre>
<pre>
<a class="<span class='keyword'>u-repost-of</span>" href="<a href='https://mastodon.social/@snarfed/3194674'>https://mastodon.social/@snarfed/3194674</a>"></a>
</pre>
</p>
</li>
<li id="picture" class="question">How do I post a picture?</li>
<li class="answer">
<p>
Add the picture to your post with either <code><img class="u-photo"></code> or <code><img class="u-featured"></code> . For example:
<pre>
<img class="<span class='keyword'>u-featured</span>" src="<span class='value'>/full_glass.jpg</span>" />
I love scotch. Scotchy scotchy scotch.
</pre>
</p>
<p>If you're posting to Bluesky or Mastodon, and your <code><img></code> tag includes <code>alt="..."</code>, Bridgy will pass on that alt text and it will be included with the picture in your post.</p>
</li>
<li id="video" class="question">How do I post a video?</li>
<li class="answer">
<p>
Just <a href="https://indieweb.org/video">add the video</a>
to your post in a <code><video class="u-video"></code>
tag. For example:
<pre>
<video class="<span class='keyword'>u-video</span>" src="<span class='value'>/cat_hunting.mp4</span>">
Kitty is on the hunt!
</video>
</pre>
</p>
</li>
<li id="person-tag" class="question">How do I tag someone in a post?</li>
<li class="answer">
<p>
Flickr supports tagging people in posts, photos, and checkins. Just include a <a href="https://indieweb.org/person-tag">person tag link</a> to their silo profile with <code><a class="u-category h-card"></code>. For example:
<pre>
<a class="<span class='keyword'>u-category h-card</span>" href="<span class='value'>https://www.flickr.com/people/40721178@N00/</span>">
Tag, you're it!
</a>
</pre>
</p>
</li>
<li id="location" class="question">How do I include location in a post?</li>
<li class="answer">
<p>Flickr can include a location, specifically latitude and longitude,
with a post. Just include <code>p-latitude</code> and <code>p-longitude</code>
in an <code>h-geo</code> or <code>p-location h-card</code>. For example:
<pre>
I'm
<p class="<span class='keyword'>p-location h-card</span>">
here!
<span class="<span class='keyword'>p-latitude</span> hidden"><span class='value'>-27.116667</span></span>
<span class="<span class='keyword'>p-longitude</span> hidden"><span class='value'>-109.366667</span></span>
</p>
</pre>
</p>
</li>
<li id="delete" class="question">How do I delete a post?</li>
<li class="answer">
<p><a href="https://indieweb.org/delete">Delete its original post by returning HTTP 410 Gone.</a> (The response body can be anything.)</p>
<p>Bridgy Publish can only delete posts that it created originally, and it can't post a URL on your web site more than once, even if the original post is deleted. If you want to edit a post, delete it, change its permalink on your site, and then republish it using that new URL.</p>
</li>
<li id="github-issue-comment" class="question">How do I create a GitHub issue or comment?</li>
<li class="answer">
<p>To create an issue, link to the repoβs issues page with class <code><a href="https://indieweb.org/u-in-reply-to">u-in-reply-to</a></code>. For example:
<pre><div class="<span class='keyword'>h-entry</span>">
<a class="<span class='keyword'>u-in-reply-to</span>" href="<a href='https://github.com/snarfed/bridgy/issues'>https://github.com/snarfed/bridgy/issues</a>">Regarding Bridgy:</a>
<h1 class="<span class='keyword'>p-name</span>"><span class='value'>Please add support for <a href="https://www.justyo.co">Yo</a></span></h1>
53B1
<p class="<span class='keyword'>e-content</span>"><span class='value'>It's my favorite silo!</span></p>
</div>
</pre>
</p>
<p>To create a comment, use an <code>u-in-reply-to</code> link to the issue or pull request you want to comment on, instead of to the repoβs issues page.
</p>
<p>If you're a <a href="https://help.github.com/articles/permission-levels-for-a-user-account-repository/#collaborator-access-on-a-repository-owned-by-a-user-account">collaborator on the repo</a>, you can attach <a href="https://help.github.com/articles/labeling-issues-and-pull-requests/">labels</a> to issues you create by including them as <a href="https://indieweb.org/tags">tags</a> in your post, e.g. <code><p class="<span class='keyword'>p-category</span>"><span class='value'>extra special</span></p></code>. Bridgy will ignore tags that don't match existing labels, and it will ignore all tags if you don't have permission to add labels to issues in the repo.</p>
</li>
<li id="github-reaction" class="question">How do I post an emoji reaction on a GitHub issue, PR, or comment?</li>
<li class="answer">
<p><a href="#github-issue-comment">Post a comment</a> where the content is π, π, π, π, β€οΈ, π, π, or π. For example:</p>
<pre><div class="<span class='keyword'>h-entry</span>">
<a class="<span class='keyword'>u-in-reply-to</span>" href="<a href='https://github.com/snarfed/bridgy/issues/333'>https://github.com/snarfed/bridgy/issues/333</a>">Regarding bridgy#333:</a>
<p class="<span class='keyword'>e-content</span>"><span class='value'>π</span></p>
</div>
</pre>
<p><a href="https://help.github.com/articles/about-conversations-on-github/#reacting-to-ideas-in-comments">More details.</a> The indieweb community also calls these <a href="https://indieweb.org/reacji">reacji</a>.
</li>
<li id="github-respond-to-comment" class="question">How do I respond to a GitHub comment?</li>
<li class="answer">
<p>You may respond with a comment or reacji to a comment on a GitHub issue (but not to a comment on a pull request) by using an <code>u-in-reply-to</code> link to the specific comment permalink including its fragment. For example:</p>
<pre><div class="<span class='keyword'>h-entry</span>">
<a class="<span class='keyword'>u-in-reply-to</span>" href="<a href='https://github.com/snarfed/bridgy/issues/803#issuecomment-404736702'>https://github.com/snarfed/bridgy/issues/803#issuecomment-404736702</a>">Regarding comment on #803:</a>
<p class="<span class='keyword'>e-content</span>"><span class='value'>π</span></p>
</div>
</pre>
</li>