All Projects → benbusby → farside

benbusby / farside

Licence: MIT license
A smart redirecting gateway for various frontend services

Programming Languages

elixir
2628 projects
HTML
75241 projects
shell
77523 projects

Projects that are alternatives of or similar to farside

Ryder
Runtime redirection of method calls for .NET Core.
Stars: ✭ 34 (-91.01%)
Mutual labels:  redirect
not-one-link
A simple Node.js library that allows you to re-map Amazon links from one country to another (Like Amazon OneLink™️ but simpler to use)
Stars: ✭ 19 (-94.97%)
Mutual labels:  redirect
custom-permalinks
Set custom permalinks on a per-post basis in WordPress
Stars: ✭ 17 (-95.5%)
Mutual labels:  redirect
craft-retour
Retour allows you to intelligently redirect legacy URLs, so that you don't lose SEO value when rebuilding & restructuring a website
Stars: ✭ 32 (-91.53%)
Mutual labels:  redirect
kirby3-redirects
Setup HTTP Status Code Redirects from within the Kirby Panel
Stars: ✭ 14 (-96.3%)
Mutual labels:  redirect
lambda-redirector
Redirect an entire website using AWS Lambda
Stars: ✭ 21 (-94.44%)
Mutual labels:  redirect
domain-enforcement
Laravel 5+ Middleware to enforce a single domain on your application. e.g non-www. to www.
Stars: ✭ 25 (-93.39%)
Mutual labels:  redirect
wechat-redirect
📨微信跳转-微信浏览器中直接唤起本地浏览器和App
Stars: ✭ 67 (-82.28%)
Mutual labels:  redirect
VirusX5
The Most Powerful Fake Page Redirecting tool...
Stars: ✭ 15 (-96.03%)
Mutual labels:  redirect
mongoose-slug-plugin
Slugs for Mongoose with history and i18n support (uses speakingurl by default, but you can use any slug library such as limax, slugify, mollusc, or slugme)
Stars: ✭ 21 (-94.44%)
Mutual labels:  redirect
openredir
redirect file open operations via LD_PRELOAD
Stars: ✭ 23 (-93.92%)
Mutual labels:  redirect
dnsredir
Yet another seems better forward/proxy plugin for CoreDNS
Stars: ✭ 58 (-84.66%)
Mutual labels:  redirect
httpz
Fat-free hardenable opportunistic encryption for Firefox
Stars: ✭ 60 (-84.13%)
Mutual labels:  redirect
django-redirects
↪️ ✅ redirects as they should be, with full control.
Stars: ✭ 32 (-91.53%)
Mutual labels:  redirect
random-redirect
Page that redirects to a random page that offers the service you are looking for
Stars: ✭ 54 (-85.71%)
Mutual labels:  redirect
Odyssey
A piece of software that shows a traceroute of a URL redirect path
Stars: ✭ 41 (-89.15%)
Mutual labels:  redirect
docker-redirect-http-to-https
Simple redirector
Stars: ✭ 15 (-96.03%)
Mutual labels:  redirect
telresender
A Telegram bot, which resend your message to another account
Stars: ✭ 22 (-94.18%)
Mutual labels:  redirect
nextjs-redirect
HOC to redirect to any URL in NextJS both in client and server
Stars: ✭ 144 (-61.9%)
Mutual labels:  redirect
Farside

A redirecting service for FOSS alternative frontends.

Farside provides links that automatically redirect to working instances of privacy-oriented alternative frontends, such as Nitter, Libreddit, etc. This allows for users to have more reliable access to the available public instances for a particular service, while also helping to distribute traffic more evenly across all instances and avoid performance bottlenecks and rate-limiting.

Farside also integrates smoothly with basic redirector extensions in most browsers. For an simple example setup, refer to the wiki.

Demo

Farside's links work with the following structure: farside.link/<service>/<path>

For example:

Service Page Farside Link
Libreddit /r/popular https://farside.link/libreddit/r/popular
Teddit /r/popular https://farside.link/teddit/r/popular
Nitter User Profile https://farside.link/nitter/josevalim
Invidious Home Page https://farside.link/invidious
Piped Video Page https://farside.link/piped/watch?v=eBGIQ7ZuuiU
Whoogle Search "Elixir" https://farside.link/whoogle/search?q=elixir&lang_interface=en
SearX Search "Redis" https://farside.link/searx/search?q=redis
SearXNG Search "EFF" https://farside.link/searxng/search?q=EFF
SimplyTranslate Translate "hola" https://farside.link/simplytranslate/?engine=google&text=hola
Lingva Translate "bonjour" https://farside.link/lingva/auto/en/bonjour
Rimgo View photo album https://farside.link/rimgo/a/H8M4rcp
Scribe View Medium post https://farside.link/scribe/@ftrain/big-data-small-effort-b62607a43a8c

Note: This table doesn't include all available services. For a complete list of supported frontends, see: https://farside.link

Farside also accepts URLs to "parent" services, and will redirect to an appropriate front end service, for example:

How It Works

The app runs with an internally scheduled cron task that queries all instances for services defined in services.json every 5 minutes. For each instance, as long as the instance takes <5 seconds to respond and returns a successful response code, the instance is added to a list of available instances for that particular service. If not, it is discarded until the next update period.

Farside's routing is very minimal, with only the following routes:

  • /
    • The app home page, displaying all live instances for every service
  • /:service/*glob
    • The main endpoint for redirecting a user to a working instance of a particular service with the specified path
    • Ex: /libreddit/r/popular would navigate to <libreddit instance URL>/r/popular
      • If the service provided is actually a URL to a "parent" service (i.e. "youtube.com" instead of "piped" or "invidious"), Farside will determine the correct frontend to use for the specified URL.
    • Note that a path is not required. /libreddit for example will still redirect the user to a working libreddit instance
  • /_/:service/*glob
    • Achieves the same redirect as the main /:service/*glob endpoint, but preserves a short landing page in the browser's history to allow quickly jumping between instances by navigating back.
    • Ex: /_/nitter -> nitter instance A -> (navigate back one page) -> nitter instance B -> ...
    • Note: Uses Javascript to preserve the page in history

When a service is requested with the /:service/... endpoint, Farside requests the list of working instances from the db and returns a random one from the list and adds that instance as a new entry in the db to remove from subsequent requests for that service. For example:

A user navigates to /nitter and is redirected to nitter.net. The next user to request /nitter will be guaranteed to not be directed to nitter.net, and will instead be redirected to a separate (random) working instance. That instance will now take the place of nitter.net as the "reserved" instance, and nitter.net will be returned to the list of available Nitter instances.

This "reserving" of previously chosen instances is performed in an attempt to ensure better distribution of traffic to available instances for each service.

Farside also has built-in IP ratelimiting for all requests, enforcing only one request per second per IP.

Regarding Cloudflare

Instances for each supported service that are deployed behind Cloudflare are not included when using farside.link. If you would like to also access instances that use Cloudflare (in addition to instances that do not), you can either use cf.farside.link instead, or deploy your own instance of Farside and set FARSIDE_SERVICES_JSON=services-full.json when running.

If you do decide to use cf.farside.link or use the full instance list provided by services-full.json, please be aware that Cloudflare takes steps to block site visitors using Tor (and some VPNs), and that their mission to centralize the entire web behind their service ultimately goes against what Farside is trying to solve. Use at your own discretion.

Development

  • Install elixir
  • (on Debian systems) Install erlang-dev
  • Install dependencies: mix deps.get
  • Initialize db contents: mix run -e Farside.Instances.sync
  • Run Farside: mix run --no-halt
    • Uses localhost:4001

Environment Variables

Name Purpose
FARSIDE_TEST If enabled, bypasses the instance availability check and adds all instances to the pool.
FARSIDE_PORT The port to run Farside on (default: `4001`)
FARSIDE_DATA_DIR The path to the directory to use for storing instance data (default: `/tmp`)
FARSIDE_SERVICES_JSON The "services" JSON file to use for selecting instances (default: `services.json`)
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].