selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

BiblioReads logo

Self-host BiblioReads

v4.2.0

Privacy-focused alternative Goodreads front-end

ReleaseOpen SourceAGPL-3.0
Docker ComposeCompose file & guide
docker-compose up -d
Updated4 months ago
LanguageJavaScript
Setup difficultyEasy
MobilePWA
ThemeDark mode
Stars
357
Port
3000 (HTTP web interface)
Docker
nesaku/biblioreads
Book page in dark modeBook page in light modeAuthor page in dark modeAuthor page in light modeSearch page in dark modeSearch page in light modeQuotes page in dark modeQuotes page in light modeHome page in dark modeHome page in light mode

What is BiblioReads?

BiblioReads is a free, open-source alternative front-end for Goodreads built with privacy in mind. It fetches book details, author pages, quotes, and search results by scraping Goodreads, then serves them through a clean interface that has no advertisements, no tracking cookies, and no mandatory registration. Every request goes through the self-hosted instance so visitors never contact Goodreads directly. The UI is responsive, includes both light and dark themes, and works as a Progressive Web App on desktop and mobile. Deployment options include Docker, Docker Compose, or a manual Node.js setup. The code is licensed under AGPL-3.0, and the project lists dozens of public instances alongside the official one at biblioreads.eu.org.

Should you self-host BiblioReads?

BiblioReads scores 48/100 on selfhost.directory (how scoring works) and ranks #9 of 12 in Book Management. It has 357 GitHub stars.

There was no stable release in the past 12 months, so check the repository's recent activity before you rely on it.

Setup is easy: most people get it running in one sitting. An official Docker image is available. It is AGPL-3.0-licensed and written mostly in JavaScript.

Its closest alternative on selfhost.directory is bookwyrm (58/100, 2 806 stars). It scores higher overall, so compare the two before you pick. See BiblioReads vs bookwyrm side by side.

Features

  • No Ads
  • No sign-up required
  • No Tracking
  • Proxied requests

BiblioReads README

How to install BiblioReads

Install BiblioReads with Docker

Docker
Environment variables
NEXT_PUBLIC_HOST_URL, NEXT_TELEMETRY_DISABLED, and others from .env.local.example

docker run -d
--name biblioreads
-p 3000:3000
--restart unless-stopped
nesaku/biblioreads:latest

Runs on port 3000. Replace with 127.0.0.1:3000:3000 if using a reverse proxy.

How to configure BiblioReads

  • NEXT_PUBLIC_CONTACT_FORM_SUBMISSIONOptional. Custom POST endpoint for contact form submissions.

    Optional. Custom POST endpoint for contact form submissions.

  • NEXT_PUBLIC_ENABLE_CONTACT_FORMOptional. Set to 'true' to enable the contact form.

    Optional. Set to 'true' to enable the contact form.

    values: true/false

  • NEXT_PUBLIC_GRAPHQL_API_KEYOptional. GraphQL API key (can be changed if defaults become outdated).

    Optional. GraphQL API key (can be changed if defaults become outdated).

  • NEXT_PUBLIC_GRAPHQL_ENDPOINTOptional. GraphQL endpoint URL (can be changed if defaults become outdated).

    Optional. GraphQL endpoint URL (can be changed if defaults become outdated).

  • NEXT_PUBLIC_HOST_URLRequired. The host URL for the instance without trailing slash.

    Required. The host URL for the instance without trailing slash.

  • NEXT_PUBLIC_INSTANCE_CLOUDFLAREOptional but recommended. Whether the instance uses Cloudflare.

    Optional but recommended. Whether the instance uses Cloudflare.

    values: true/false

  • NEXT_PUBLIC_INSTANCE_COUNTRYOptional but recommended. Country where the instance is hosted.

    Optional but recommended. Country where the instance is hosted.

  • NEXT_PUBLIC_INSTANCE_CUSTOM_PRIVACYRequired if instance collects any data. Whether custom privacy policy is used.

    Required if instance collects any data. Whether custom privacy policy is used.

    values: true/false

  • NEXT_PUBLIC_INSTANCE_DEVICE_TYPE_DATARequired if instance collects any data. Whether device type data is collected.

    Required if instance collects any data. Whether device type data is collected.

    values: true/false

  • NEXT_PUBLIC_INSTANCE_DIAGNOSTIC_DATARequired if instance collects any data. Whether diagnostic data is collected.

    Required if instance collects any data. Whether diagnostic data is collected.

    values: true/false

  • NEXT_PUBLIC_INSTANCE_IP_DATARequired if instance collects any data. Whether IP data is collected.

    Required if instance collects any data. Whether IP data is collected.

    values: true/false

  • NEXT_PUBLIC_INSTANCE_LOG_RETENTIONRequired if instance collects any data. Log retention period.

    Required if instance collects any data. Log retention period.

  • NEXT_PUBLIC_INSTANCE_OPERATOR_LINKOptional but recommended. Link to the instance operator.

    Optional but recommended. Link to the instance operator.

  • NEXT_PUBLIC_INSTANCE_OPERATOR_NAMEOptional but recommended. Name of the instance operator.

    Optional but recommended. Name of the instance operator.

  • NEXT_PUBLIC_INSTANCE_OTHER_DATARequired if instance collects any data. Description of other data collected.

    Required if instance collects any data. Description of other data collected.

  • NEXT_PUBLIC_INSTANCE_PAGE_VIEW_DATARequired if instance collects any data. Whether page view data is collected.

    Required if instance collects any data. Whether page view data is collected.

    values: true/false

  • NEXT_PUBLIC_INSTANCE_PRIVACY_POLICY_URLRequired if instance collects any data. URL to privacy policy.

    Required if instance collects any data. URL to privacy policy.

  • NEXT_PUBLIC_INSTANCE_PROVIDEROptional but recommended. Hosting provider for the instance.

    Optional but recommended. Hosting provider for the instance.

  • NEXT_PUBLIC_USER_AGENTOptional but recommended. User agent string for scraping requests.

    Optional but recommended. User agent string for scraping requests.

  • NEXT_TELEMETRY_DISABLED1Optional. Disable Next.js telemetry. Defaults to '1' in Docker Compose.

    Optional. Disable Next.js telemetry. Defaults to '1' in Docker Compose.

    values: 0/1

FAQ

Why Is This Missing Functionality?

Missing features can be requested by opening an issue on GitHub or Codeberg.

Why Is This Slower Than Goodreads?

Requests must first be scraped from Goodreads before results are shown, causing a delay compared to direct access.

What Do You Do With My Data?

Nothing. The project does not collect any user data, so there is no data to use.

How Did You Come Up With The Name?

The name combines 'biblio-' (meaning book) with 'Reads' from Goodreads, reflecting its purpose as an alternative front-end.

How Does This Work? - Scraping

Since Goodreads stopped issuing new developer API keys in December 2020 and plans to retire their API, BiblioReads scrapes the Goodreads book page directly to extract content.

How Do I Use This?

Visit an instance like biblioreads.eu.org and paste a Goodreads book URL or search for a book. Alternatively, replace 'www.goodreads.com' in any book page URL with the instance URL.

More in Book Management

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…