https://github.com/user-attachments/assets/1c3a5138-0fc7-43e9-b0a2-761e70f9c83c
The open-source tool that provides access to premium Medium articles without the paywall
<a href="https://readiumx.com"><strong>Learn more »</strong></a>
<a href="#introduction"><strong>Introduction</strong></a> ·
<a href="#features"><strong>Features</strong></a> ·
<a href="#tech-stack"><strong>Tech Stack</strong></a> ·
<a href="#contributing"><strong>Contributing</strong></a>
ReadiumX is an open source tool that provides access to premium Medium articles without the paywall, allowing you to bookmark, and manage your reading experience across any device
bash
git clone https://github.com/JaleelB/readium-x.git
bash
pnpm install
.env.example to .env.local and update the variables.bash
cp .env.example .env.local
bash
pnpm run dev
This runs at http://localhost:3156. In this mode, Cloudflare bindings are
simulated through OpenNext's local dev bridge when available. If the
READIUMX_ARTICLE_CACHE binding is not available, scraping still works; it
simply skips the server-side KV cache and uses the existing client session
cache.
bash
pnpm run db:push
.dev.vars.example to .dev.vars, fill in the values, then run:bash
cp .dev.vars.example .dev.vars
pnpm preview
pnpm preview builds the OpenNext worker and starts Wrangler, usually at
http://localhost:8787. This is the mode to use when you specifically want
to verify the Cloudflare KV cache behavior before deployment.
ReadiumX deploys to Cloudflare Workers through OpenNext.
bash
pnpm wrangler kv namespace create readiumx-article-cache
pnpm wrangler kv namespace create readiumx-article-cache-preview
These commands create the real Cloudflare KV namespaces. They require
wrangler login locally or CLOUDFLARE_API_TOKEN in CI. For day-to-day
pnpm dev, you do not need to run them first; they are required before
deploying or testing against real Cloudflare resources.
Put the generated namespace IDs into wrangler.jsonc for the
READIUMX_ARTICLE_CACHE binding. Keep the production namespace as id and
the preview namespace as preview_id. If Wrangler offers to add the binding
for you, use READIUMX_ARTICLE_CACHE as the binding name; the app does not
read lowercase binding names.
Add the application variables and secrets from .dev.vars.example to Cloudflare Workers.
Add these GitHub repository secrets for deployment:
CLOUDFLARE_ACCOUNT_ID
CLOUDFLARE_API_TOKEN
Preview or deploy:
bash
pnpm preview
pnpm deploy
If you want google login, you'll need to setup a google project and create some keys:
for authorized javascript origins
http://localhost:3000
https://your-domain.com
Authorized redirect URIs
http://localhost:3000/api/login/google/callback
https://your-domain.com/api/login/google/callback
Set your google id and secret inside of .env
GOOGLE_CLIENT_ID
If you want github login, you'll need to setup a github project and create some keys:
Contributions are welcome! Please open an issue if you have any questions or suggestions. Your contributions will be acknowledged. See the contributing guide for more information.
Licensed under the MIT License. Check the LICENSE file for details.
$ claude mcp add readium-x \
-- python -m otcore.mcp_server <graph>