I made a Firefox fork with Fediverse integration - Now with standalone FF extension.
from rozodru@lemmy.world to fediverse@lemmy.world on 18 Aug 17:48
https://lemmy.world/post/34644975

Not sure if this the appropriate place for it but the FOSS communities seemed dead.

This is Bridge - a privacy focused, Firefox AI disabled, Fediverse integrated browser. It has vim navigation via Tridactyl, Bitwarden integration, as well as Ublock integration.

It has an old Firefox RSS feature where you can scan a site for RSS feeds and it will add them to the RSS feed reader.

But the highlight of this is the Mastodon and Lemmy integration. you can have your Mastodon feed displayed in the sidebar on the browser which will give you access to your home, local, and fediverse feeds. you can post, reply, boost, and favourite posts.

The Lemmy extension allows you to see and link directly to lemmy discussions on whatever instance you like (multiple even) if you’re on a site/news article/blog post/whatever. If the extension sees that this has been posted on Lemmy, it will provide you with a direct link to whatever discussions it finds based on the current URL you’re on.

This has been a hobby project of mine for a bit now, It’s very slow development as I have a job and can’t dedicate all the time in the world to this. I wanted to originally build a browser from scratch but realized that would probably take me years so I settled with a fork of firefox.

Currently I believe it only works on Linux and is in a very early alpha. It hasn’t crashed on me yet but visually is a bit rough around the edges.

I just wanted to share this little hobby project I’ve been working on. Thanks!

codeberg.org/rozodru/Bridge

UPDATE Since I already got a lot of feedback and more people than anything else wanted the Lemmy Extension as a stand alone extension…I delivered.

You were all correct, the Lemmy Add-on is a bigger deal than the browser. Again this was just a hobby project of mine as I’ve never played around with firefox forks before or extensions/addons for that matter so this is my first time.

Regardless, here it is: codeberg.org/rozodru/LemmyBridge

NOTE: I have submitted it to Mozilla so it is NOT VERIFIED as of right now, if you want to use it, use it at your own discretion. If it breaks something in whatever fork of firefox you’re using then I take no responsibility.

Again thanks for all the support, appreciate it.

#fediverse

threaded - newest

Dirk@lemmy.ml on 18 Aug 17:56 next collapse

So … Basically just another preconfigured Firefox with extensions?

sexy_peach@feddit.org on 18 Aug 18:01 next collapse

Go ahead and show what you have done

Dirk@lemmy.ml on 18 Aug 18:52 collapse

// Enable userChrome.css
user_pref('toolkit.legacyUserProfileCustomizations.stylesheets', true);


// Warnings
user_pref('browser.aboutConfig.showWarning', false);


// Style
user_pref('browser.tabs.inTitlebar', 0);
user_pref('browser.theme.content-theme', 1);
user_pref('browser.theme.toolbar-theme', 1);


// Extensions
user_pref('extensions.activeThemeID', 'firefox-compact-light@mozilla.org');
user_pref('extensions.pocket.enabled', false);
user_pref('extensions.screenshots.disabled', true);
user_pref('extensions.getAddons.showPane', false);
user_pref('extensions.htmlaboutaddons.recommendations.enabled', false);


// Zoom
user_pref('toolkit.zoomManager.zoomValues', '.5,.3,1,1.2,1.3,1.5');
user_pref('devtools.toolbox.zoomValue', '1.4');
user_pref('browser.zoom.siteSpecific', false);


// Privacy
//
// Basically do not leak URLs, IPs, etc. to external services
user_pref('browser.safebrowsing.malware.enabled', false);
user_pref('browser.safebrowsing.phishing.enabled', false);
user_pref('security.OCSP.enabled', 0);
user_pref('browser.contentblocking.categ
sexy_peach@feddit.org on 18 Aug 19:48 collapse

Do you have a screenshot?

Dirk@lemmy.ml on 18 Aug 21:11 collapse

(Screenshots resized due to not wasting too much space.

Here’s a small one of how a website would look like.

<img alt="" src="https://lemmy.ml/pictrs/image/c713a518-a90e-497c-b7b6-cb0a6ed8916f.png">

Here’s a larger one of how my new tab page looks like (including multiple tabs to show how the tab bar looks like).

<img alt="" src="https://lemmy.ml/pictrs/image/8eb473ea-efc0-42ea-b8fd-0a58c397ee4b.png">

sexy_peach@feddit.org on 19 Aug 12:55 collapse

Looks pretty clean, maybe a bit dated.

Dirk@lemmy.ml on 19 Aug 21:11 collapse

Thanks! I just prefer simple UIs.

Lost_My_Mind@lemmy.world on 18 Aug 18:11 next collapse

So…Basically just another negative user with nothing of value to contribute besides a largely unwanted sarcastic comment?

FarraigePlaisteach@lemmy.world on 18 Aug 18:16 collapse

Apparently not.

“How does Bridge compare to other privacy browsers?

Bridge goes beyond configuration changes by modifying Firefox at the source code level. This provides deeper privacy protections than browsers that only change settings.”

jaredwhite@piefed.social on 18 Aug 17:56 next collapse

Very cool idea! Just starred on Codeberg.

pelespirit@sh.itjust.works on 18 Aug 18:02 next collapse

The RSS alone is awesome. Thank you.

Auntievenim@lemmy.world on 18 Aug 18:09 next collapse

This actually sounds really cool, the idea of having a sidebar pull up posts of the article your reading is like sci-fi movie magic stuff

Staden_@pawb.social on 18 Aug 18:10 next collapse

Would it be difficult to convert into a extension for other firefox-based browsers? I love the idea of seeing lemmy discussions about the page I’m in directly on the page, but I don’t really wanna switch my web browser again.

tigerjerusalem@lemmy.world on 18 Aug 18:15 next collapse

I second this, I rely too much on Firefox and its sync features to give up just yet.

andyburke@fedia.io on 18 Aug 18:22 collapse

They are clearly enshittifying and may already be sharing data about you. Eject asap, friends.

🤷‍♂️

woelkchen@lemmy.world on 18 Aug 18:52 collapse

And relying on a single volunteer to ship crucial security updates? Disabling the shitty FF features may be hidden in about:config but as long as this is possible, using upstream FF is still the most secure way to use a Gecko browser.

defaultusername@lemmy.dbzer0.com on 19 Aug 02:56 collapse

Either upstream FF with something like arkenfox or Mullvad Browser, which is just Tor Browser minus Tor, developed by the same people. Librewolf is also an option, which is basically just FF with arkenfox preinstalled.

rozodru@lemmy.world on 18 Aug 19:44 collapse

Eventually yes, I will be turning it into a standalone extension.

Staden_@pawb.social on 18 Aug 19:58 collapse

you’re awesome :3

rozodru@lemmy.world on 18 Aug 21:56 collapse

the extension: codeberg.org/rozodru/LemmyBridge

Staden_@pawb.social on 18 Aug 22:16 collapse

Wha?! I wasn’t expecting such a quick update :0

rozodru@lemmy.world on 18 Aug 22:20 collapse

It was easy to pull out of the browser as a standalone because really that’s all it was, just an extension that was baked into the browser. and since a lot of people requested it I just decided to do it.

MrLLM@ani.social on 18 Aug 22:47 collapse
poVoq@slrpnk.net on 18 Aug 18:35 next collapse

Looks pretty cool on first glance, but I think Opera Vivaldi had a Fediverse integration for some time already, so you are not the first to do so.

Kierunkowy74@piefed.social on 18 Aug 18:47 collapse

Did you mean Vivaldi? It features a sidebar already with their own Mastodon instance: Vivaldi Social featured as one of sidebar entries.

A Vivaldi account allows to use not only Vivaldi Social, but also to make a WordPress blog, with federation available too.

poVoq@slrpnk.net on 18 Aug 18:47 collapse

Ah, you are probably right.

TachyonTele@piefed.social on 18 Aug 18:59 next collapse

If the extension sees that this has been posted on Lemmy, it will provide you with a direct link to whatever discussions it finds

This is effing cool

TachyonTele@piefed.social on 18 Aug 19:03 next collapse

I'm on android firefox. How the heck do i download this. Codeberg is just as confusing as github to people like me that don't use it.

I want to try this.

IllNess@infosec.pub on 18 Aug 19:15 collapse

Always look in the README.md file first for instructions for downloading and installing.

Prerequisites

Bridge requires a full Firefox build environment:

  • Linux: GCC/Clang 13+, Python 3.8+, Node.js 16+, Rust 1.70+
  • Windows: Visual Studio 2022, Python 3.8+, Node.js 16+, Rust 1.70+
  • macOS: Xcode 14+, Python 3.8+, Node.js 16+, Rust 1.70+

So there is no Android version.

If you do want to install for one of OSes mentioned, the next section gives instructions on how to build by source. This means you have to follow in instructions. This might mean it is too technical for users not used to CLI (command line interface).

TachyonTele@piefed.social on 18 Aug 19:24 collapse

Thank you for the explanation and details. I appreciate it.

FarraigePlaisteach@lemmy.world on 18 Aug 19:19 next collapse

I actually support telemetry for Mozilla, especially the way they’ve implemented it. But the other features look great and I don’t want anything to do with GitHub projects. Starred on Codeberg!

akwd169@lemmy.sdf.org on 18 Aug 19:26 next collapse

It sounds really interesting, i’m definitely going to check it out!

alsaaas@lemmy.dbzer0.com on 18 Aug 19:55 next collapse

You can get more than half of the stuff you mentioned by using LibreWolf. Cool idea tho with the integration, would be nice as an extension

kroko@piefed.world on 18 Aug 20:28 next collapse

very cool!
Please announce on the Fediverse when you release the standalone extension

vhstape@lemmy.sdf.org on 18 Aug 20:50 next collapse

Do you plan to offer a browser extension for those who would enjoy the Fediverse integration but don’t want to run a custom fork?

rozodru@lemmy.world on 18 Aug 21:55 collapse
Pika@sh.itjust.works on 18 Aug 21:18 next collapse

Honestly, this is a really innovative project. I wish it came in an extension because I feel that is likely your biggest bottleneck for getting people to try it. I don’t think many are going to build a browser from source & then port all their stuff over strictly for the integration. Plus it looks like a primary advertisement for it is that integration, but it also disables a lot of the QoL features that FF has that some don’t have any problem with. Like the fact that Sync is removed as a whole is a major dealbreaker for me, as I do like the feature and I am not concerned about the privacy aspects of having it on.

If an extension version ever releases for the lemmy integration though, I would for sure be looking at that!

rozodru@lemmy.world on 18 Aug 21:56 collapse

done: codeberg.org/rozodru/LemmyBridge

Pika@sh.itjust.works on 19 Aug 02:25 collapse

Woah, you separated it already? that’s insane. Defo checking it out! Cheers!

rimu@piefed.social on 18 Aug 22:49 next collapse

This is going to absolutely hammer the search API endpoint. Every single time you visit any web page there will be around 5 different requests to lemmy-instance/api/v3/search (see generateUrlVariations()) and running a search is pretty heavy on the server.

I just read the code, didn't actually install the extension, so I could be wrong but at first glance this looks like it would cause real problems if a significant number of people started using it.

rozodru@lemmy.world on 18 Aug 23:04 collapse

Totally understandable. I added in some rate limits, search result caching, timeout handling and error handling (to prevent retry storms), there’s also a max result limit per instance. If this WERE to take off with like 1000+ users I’d have to adjust it further. But right now as it stands the impact should be negligible.

rimu@piefed.social on 18 Aug 23:14 collapse

All it would need is about 10 simultaneous users and the load on the server would be unacceptable to me, as an instance admin. I only run PieFed instances so this isn't going to impact me unless you add PieFed support (please don't).

rozodru@lemmy.world on 18 Aug 23:18 collapse

Fair enough. also to your earlier point it’s only 1 request per instance. the reason you might be seeing 5 is because 5 instances are the default.

Worst-Case Scenario (10 Heavy Users)

  • 10 users × 60 page visits/hour = 600 searches/hour
  • With 30-minute caching, actual API calls = ~300/hour
  • Distributed across 5 default instances = 60 requests/hour per instance
  • That’s 1 request per minute per instance

Lemmy Server Context:

  • Normal web traffic: Thousands of requests per hour
  • Single user browsing: 10-50 requests/hour easily
  • RSS bot: Often 100+ requests/hour
  • This extension: 1 request/minute = trivial load

A single person browsing Lemmy normally generates more API traffic than 10 extension users combined. The /api/v3/search endpoint is also one of the lightest operations, it doesn’t involve complex database queries like fetching full comment threads.

rimu@piefed.social on 18 Aug 23:24 collapse

I guess if the logic for finding the posts was done on the server then you would only need one API call - the extension would just send through whatever url it had. That would be more efficient.

If this gets popular I'd be open to adding a dedicated API endpoint for this to PieFed.

Kind of a privacy nightmare though, aye. Sending your whole browser history to a third party... But that's a whole different issue.

rozodru@lemmy.world on 18 Aug 23:31 collapse

…it doesn’t view the browser history at all.?

rimu@piefed.social on 18 Aug 23:44 collapse

It doesn't access old browser history but from the moment it is installed onwards it sends every url you visit to 7 instances, to do a search. Any one of those instances could save those urls and over time build up a profile on someone.

thenexusofprivacy@lemmy.blahaj.zone on 19 Aug 06:24 collapse

Yeah. Interesting to think if there are ways to get around that problem. Still, very interesting work @rozodru@lemmy.world, and great idea splitting it out into an extension!

lambalicious@lemmy.sdf.org on 19 Aug 15:55 collapse

Yeah. Interesting to think if there are ways to get around that problem.

At a first flance, perhaps a uBlockOrigin-style control pane with per-domain toggle, so that for example you can send the info only when browsing a specific domain (let’s say, a news site; that’d be interesting to find discussion in Lemmy of). This would also prevent the issue of sending URLs that are not internet-wide (eg.: are on a localnet resolver, or an intranet).

As well as the abiity with an option send the request through a relay or proxy, to remove IP origin information that can be used to build the profile.

moseschrute@lemmy.world on 18 Aug 23:41 next collapse

I don’t use Firefox or Linux, but you had me at Vim

4am@lemmy.zip on 18 Aug 23:48 collapse

🤨

moseschrute@lemmy.world on 19 Aug 00:04 collapse

Lol. Idk I like my iPhone. Absolutely not the labor practices of Apple, I’ve thought about a fairphone. But Apple is privacy focused enough, and I love their design language, both hardware and software. I love Linux, but mostly for SSH not my laptop.

Firefox is fine, but as a professional frontend developer, I need to test things on a Chromium based browser. I prefer the ethics and privacy of Mozilla, but Chrome is technically a great browser imo.

But vim, omg. I don’t think there’s a more beautifully designed piece of software. I want to reach wizard level. I want to navigate text like it’s magic with perfect fluidity. Vim is perfect.

I wonder if anyone else on Lemmy is like me lol.

SpookyBogMonster@lemmy.ml on 19 Aug 02:38 next collapse

I’m most stoked about RSS integration. I miss Firefox’s old RSS features

gholk@taiwan.wtf on 19 Aug 03:16 next collapse

@bovine3dom This firefox fork integrated #Tridactyl FYI

lambalicious@lemmy.sdf.org on 19 Aug 13:41 collapse

The Lemmy extension allows you to see and link directly to lemmy discussions on whatever instance you like (multiple even) if you’re on a site/news article/blog post/whatever. If the extension sees that this has been posted on Lemmy, it will provide you with a direct link to whatever discussions it finds based on the current URL you’re on.

So wait, it reports all browsing activity you do to third parties to search for matching Lemmy posts?

Bad, bad, system.

You’ve completely lost the point of why we’re here in Lemmy in the first place. Restrain or remove this feature ASAP.

rozodru@lemmy.world on 19 Aug 14:19 collapse

No automatic browsing activity reporting - The extension only searches for Lemmy discussions when:

  1. A page finishes loading (background.js:119-128)
  2. URL changes are detected (content.js:37-54)

What data is sent:

  • Only the current page URL and its variations (content.js:73-80)
  • URL variations include cleaned URLs (no tracking params), with/without www, http/https variants (content.js:109-168)

Where data is sent:

  • Only to Lemmy instances you’ve configured (background.js:149-152)
  • No third-party analytics or tracking services
  • All requests go directly to Lemmy APIs for post searches

Privacy protections:

  • Results are cached locally for 30 minutes (background.js:141-143)
  • No persistent logging of browsing history
  • You can disable the notification indicator (content.js:172-184)
  • Only sends URL when you actually visit a page, not preemptively

User control:

  • You choose which Lemmy instances to search
  • You can remove instances at any time
  • The extension only activates on http/https URLs

Answer: No - The extension does not report all browsing activity to third parties. It only queries your configured Lemmy instances with the current page URL to find relevant discussions, and only when you actually visit a page.

Regardless after some discussion last night I’ve added a consent notification when the extension is installed, it can now also be enabled/disabled via the sidebar so now people know exactly how the extension is being used: codeberg.org/…/2e735b56f273d44bae9df638b01985519d…

lambalicious@lemmy.sdf.org on 19 Aug 16:07 collapse

Sending the current URL and directly from your own IP too is quite the privacy hurdle already. I’ve already posted on what kind of things could be done to improve this, but first, a notice.

Your README says in the Privacy section:

Does not track your browsing

On the current implementation, this should be changed to:

Enables unverified third parties to track your browsing data

As that honesty is quite important.

As for measures that could be taken to improve on this issue, I have three suggestions (I might Issue Tracker them to the codeberg later, if I can find my credentials XD)

  • Set up a uBO-stye control pane that allows to set this on or off per-domain or per-site. Bonus points if it allows for per-site specific on which lemmy instances to use the same way as uBO’s “3p” Custom Rules does. This already prevents a number of undesirable use cases, such as automatically sending LAN / non-DNS names to third parties when they can’t really be searched for anyways.
  • Anonimyzing assist: Allow for sending only the global context of the visited site (eg.: only the domain) instead of the full URL.
  • Anonimyzing assist: Allow to cache requests to send them later / send them in batches, to avoid clock-based / timezone-based tracking attacks.
  • Anonimyzing assist: Allow for the browser-specific request being sent through a proxy or relay, so that IP origin information is not leaked. (I think this only really makes sense for users not logged-in?)
rozodru@lemmy.world on 19 Aug 17:18 collapse

Thanks, when I have the time I’ll look into implementing this.

woelkchen@lemmy.world on 19 Aug 20:56 collapse

I don’t think the ideas of Lambalicious work with Lemmy. What would sending the domain name only achieve? I assume it uses the same logic as Lemmy uses to find crossposts? Obviously it needs the whole address then.

Maybe instead of crawling automatically, the users need to click a button to look up discussions? (I have yet to install your extension, so I have yet to experience the workflow myself, sorry.)

Maybe link to the privacy terms of the default instances? In general, I think your approach is good. You don’t collect any data, the feature is 100% opt-in. A central relay/proxy is even worse than your current approach. People are obviously free to set up their own Lemmy/Mastodon server if they want a relay.

NikkiDimes@lemmy.world on 19 Aug 22:08 collapse

What would sending the domain name only achieve?

I’m guessing the idea could be to fetch a batch of recent discussions based on pages within a domain, then filter the results locally. This could even work very well with local caching.