Open source · self-host or Lector Cloud

Read your way into a new language.

Lector turns the books, articles, videos, and podcasts you choose into a complete course. Click any word to translate it. Mine vocabulary as you read. Practise it with frequency-ordered cloze. Send it to Anki. Run Lector on your own hardware, or on Lector Cloud.

Lector Cloud is in beta · you host it yourself for free, forever

Lector reader view with click-to-translate and word-state colouring
Read

Turn any book into a lesson.

Lector imports an EPUB file, an article you paste, or a page from a URL. It colours every word by how well you know it: new, learning, or known. For an instant translation on your device, click any word. For rare words, a large language model (LLM) does the translation.
The Lector reader with a novel, colour-coded word states, and click-to-translate
Listen

Read along with video and audio.

Paste a YouTube URL and choose a caption track. Lector imports the transcript, and every line keeps its timestamp. Click a line to move the player to that moment. Lector never downloads or hosts the video. You can also upload a podcast episode. A Whisper model transcribes it, and the current sentence highlights as the audio plays.
A YouTube transcript in Lector with the embedded player and timestamped lines
Practice

Practise the words that matter first.

Lector holds thousands of Tatoeba sentence pairs. It orders them by frequency, so you learn the words you meet most often. You practise with multiple-choice questions or by typing the answer. A spaced-repetition system returns each sentence to you just before you forget it.
Cloze practice with multiple-choice options and mastery tracking
Remember

Mine vocabulary. Sync it with Anki.

Save words as you read. Lector adds them to your vocabulary database and records the known and learning states. Send mined words and phrases to Anki as Basic or Cloze cards. The Lector add-on also syncs reviews back. The add-on is in beta. When you grade a card in Anki, Lector updates the mastery of that word.
The export-to-Anki dialog with the Basic and Cloze card types
Understand

A tutor for your questions, and an editor for your writing.

Ask the built-in tutor your grammar questions in plain language. Keep a journal in your target language. The tutor gives you inline corrections with explanations. It also shows the text before and after each correction. The tutor works with the Claude API or with a local model.
The tutor chat with a grammar conversation
Organise

A library that stays tidy.

Group your collections in the way you think about them. Drag a collection to reorder it. Drop new books straight into a group. Lector records the reading progress of each collection, so you always know your position.
Library organised into collapsible groups with drag-to-reorder and reading progress
Also included

Everything else, without the sprawl.

Text-to-speech

Lector can use Google Cloud to pronounce words and sentences correctly. This feature is optional.

Web and paste import

Lector reads an article from any URL with Readability. You can also paste text directly.

Offline-first storage

Lector stores data in SQLite on the server and in IndexedDB in the browser. It needs no cloud account and no sync.

Statistics dashboard

The dashboard shows your vocabulary growth, your reading streaks, your activity heatmaps, and your cloze mastery. It also rates your fluency on the Common European Framework of Reference (CEFR) scale.

AI translation, with an offline backup

When you need a translation, Lector calls Claude or a local LLM. If neither is available, it uses a 2,000-word offline dictionary.

Any language

The reader works with any language. A language pack adds a cloze bank and a dictionary.

Language packs

Languages, ready to read.

Each language pack contains a frequency-ordered cloze bank and an on-device dictionary. Every pack has the same depth.

On the roadmap.

🇨🇳

Mandarin → English

中文

🇯🇵

Japanese → English

日本語

🇮🇳

Hindi → English

हिन्दी

🇸🇦

Arabic → English

العربية

🇮🇱

Biblical Hebrew → English

עברית מקראית

🇻🇦

Latin → English

Latina

🇮🇩

Indonesian → English

Bahasa Indonesia

🇰🇷

Korean → English

한국어

Which language do you want next?

Choose a language and we will email you once, on the day it is ready. No newsletter.

Your build order comes from this list. Want to talk it over? Join the Discord.

A new language is simple to add. To build a pack yourself, open theGitHub repository.

We keep your address for this one announcement. Read theprivacy policy.

Two ways to run it

Open source. Your way.

You get the same app in both cases. Host it yourself for free, or let us run it for you.

Self-host

Free
Run the Docker image on your own hardware. Your data never leaves your server. You bring your own LLM keys, or you run a local model. Lector is free forever.
Read the setup docs

Lector Cloud

Beta · from $5/mo

We host it, back it up, and keep it updated. You need no Docker and no setup. Just sign in and start to read. If you prefer not to run a server, choose Lector Cloud.

Start on Lector Cloud
Why self-host

Your course should not rent your progress back to you.

Your data, your server

Reading history, vocabulary, and progress live in a SQLite file on your hardware. There are no third parties and no telemetry.

No subscriptions

Deploy Lector once. Then learn forever. There are no monthly fees, no premium tiers, and no feature gates.

Works offline

Reading, cloze, and vocabulary all run without a connection. Only AI features need the internet.

Simple backup

Your data is one SQLite file in one Docker volume. Copy it with rsync or borg, or copy it to a USB drive.

Get started

Ready in about a minute.

Lector needs one Docker container and one volume. Copy this into adocker-compose.ymlfile. Then start the container.
# Create a directory for Lector
mkdir lector && cd lector

# Create a docker-compose.yml
cat <<EOF > docker-compose.yml
services:
  lector:
    image: ghcr.io/heuwels/lector:latest
    container_name: lector
    restart: unless-stopped
    ports:
      - "3400:3000"
    environment:
      - NODE_ENV=production
    volumes:
      - ./data:/app/data
EOF

# Start it up
docker compose up -d
Questions

Good to know.

Still curious? The docscover installation, reverse proxies, AnkiConnect, and every environment variable.
Get involved

Learn alongside other readers.

Join our Discord server. There you can share resources, compare progress, ask for new languages, and tell us what to build next.
Join the Discord server

Start to read in your target language today.

Host the open-source app yourself for free, or sign in to Lector Cloud and start.