🖋️ Web surfing and reading reimagined for e-ink devices.
Kindler is a lightweight, open-source web app built to make e-ink devices like Kindles actually useful on the modern web. Browse the internet, read news, or explore public-domain books, all through a clean, no JavaScript interface that works even on the most limited browsers.
Built with Python (Flask + Jinja2), Redis, and Calibre, Kindler lets you instantly convert any webpage, news article, or Gemini capsule into EPUB, MOBI, or AZW3. The project is fully containerized and Docker Swarm–ready. It depends on a Java-based Metasearch backend for federated search across public-domain libraries.
🐳 Docker Hub: kasramp/kindler
🌍 Live Demo: kindler.ink
💻 Org: github.com/kindlerz
If it does not exist, create one:
$ python3 -m venv .venvTo activate:
$ source .venv/bin/activateTo deactivate:
$ deactivateGenerate requirement.txt file:
$ pip3 freeze > requirements.txtTo install from the dependency file:
$ pip3 install -r requirements.txtThe project is dependent on Redis. Make sure to have it available.
For local development, before running the project, bring up the Redis from docker-compose.yml file:
$ docker compose -f docker-compose.yml upThen run:
$ python -m kindler.appMake sure you also deploy Metasearch, without it, Kindler public-domain libraries do not work.
Ensure the Redis cluster is up and running. Then set the below env var:
$ export REDIS_URL=[YOUR_REDIS_URL]$ gunicorn kindler.wsgi:appTo support generating epub, mobi, azw3 of pages on the fly, need to install calibre, or more specific ebook-convert as it's invoked as a sub process to generate ebooks.
Run:
$ docker build -t kindler-app .To test:
$ docker run -p 8181:8181 kindler-appTest an image from Docker Hub:
$ docker run -p 8181:8181 kasramp/kindler:v0.0.2Before committing or sending any PR to review, make sure the code is formatted correctly. You can run black:
$ black --check .To fix:
$ black .