PHPackages                             hugofara/lwt - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [DevOps &amp; Deployment](/categories/devops)
4. /
5. hugofara/lwt

ActiveLibrary[DevOps &amp; Deployment](/categories/devops)

hugofara/lwt
============

Learn languages by reading, this is a community maintained version.

3.0.2(1mo ago)2071618[4 issues](https://github.com/HugoFara/lwt/issues)UnlicensePHPPHP ^8.2 | ^8.3 | ^8.4 | ^8.5CI passing

Since Jan 9Pushed 1mo ago2 watchersCompare

[ Source](https://github.com/HugoFara/lwt)[ Packagist](https://packagist.org/packages/hugofara/lwt)[ Docs](https://hugofara.github.io/lwt/)[ GitHub Sponsors](https://github.com/hugofara)[ Fund](https://opencollective.com/lwt-community)[ RSS](/packages/hugofara-lwt/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (13)Versions (29)Used By (0)

Learning with Texts
===================

[](#learning-with-texts)

 [![LWT logo - an open book](https://github.com/HugoFara/lwt/raw/main/assets/images/lwt_icon_512.png)](https://github.com/HugoFara/lwt/raw/main/assets/images/lwt_icon_512.png)

 **Learn languages by reading — with smart suggestions and built-in definitions**

 [![Latest Stable Version](https://camo.githubusercontent.com/87eb1cab17477aee6e49600c9797eec8889692c6f812d4b43e6a8f82a1e5a7ca/68747470733a2f2f706f7365722e707567782e6f72672f6875676f666172612f6c77742f76)](https://packagist.org/packages/hugofara/lwt) [![PHP Version](https://camo.githubusercontent.com/dc8ba03b60c5d4a6e3bba5c363006127f37bea3b6da064863a0d9dda8a3f81ad/68747470733a2f2f706f7365722e707567782e6f72672f6875676f666172612f6c77742f726571756972652f706870)](https://packagist.org/packages/hugofara/lwt) [![PHP CI](https://github.com/HugoFara/lwt/actions/workflows/php.yml/badge.svg)](https://github.com/HugoFara/lwt/actions/workflows/php.yml) [![Frontend CI](https://github.com/HugoFara/lwt/actions/workflows/frontend.yml/badge.svg)](https://github.com/HugoFara/lwt/actions/workflows/frontend.yml) [![Psalm](https://github.com/HugoFara/lwt/actions/workflows/security_check.yml/badge.svg)](https://github.com/HugoFara/lwt/actions/workflows/security_check.yml) [![PHPCS](https://github.com/HugoFara/lwt/actions/workflows/phpcs.yml/badge.svg)](https://github.com/HugoFara/lwt/actions/workflows/phpcs.yml) [![Docker](https://github.com/HugoFara/lwt/actions/workflows/docker-image.yml/badge.svg)](https://github.com/HugoFara/lwt/actions/workflows/docker-image.yml) [![License](https://camo.githubusercontent.com/4fe917451e490300e3e2802e2a4c70200390ec62be3fe004785caeba807af946/68747470733a2f2f706f7365722e707567782e6f72672f6875676f666172612f6c77742f6c6963656e7365)](http://unlicense.org/)

---

**Learning with Texts** (LWT) is a self-hosted web app for language learning through reading. **Import any text you want to study** — a novel, a news article, song lyrics — or let LWT **suggest reading material adapted to your level** from open libraries. Either way, words are enriched with **translations and definitions from open sources**, and you build vocabulary through reading and spaced repetition.

Don't know where to start? LWT suggests books from [Project Gutenberg](https://www.gutenberg.org/) ranked by difficulty, plus curated news feeds in 19 languages. Already have a text you love? Paste it in and start reading. As you mark words, suggestions get smarter and new vocabulary is pre-enriched from [Wiktionary](https://www.wiktionary.org/).

Important

This is a **community-maintained fork** and a significant upgrade over the original LWT (first released in 2011). It brings an easy-to-use interface, text suggestions and reading statistics, modern PHP support (8.2–8.5), mobile support, and compatibility with the modern web. The original SourceForge project is no longer available; an archival snapshot of the original code is preserved on the [`official` branch](https://github.com/HugoFara/lwt/tree/official) of this repository.

Table of Contents
-----------------

[](#table-of-contents)

- [Quick Start](#quick-start)
- [How It Works](#how-it-works)
- [Features](#features)
- [Installation](#installation)
- [Requirements](#requirements)
- [Documentation](#documentation)
- [Contributing](#contributing)
- [Alternatives](#alternatives)
- [License](#license)

Quick Start
-----------

[](#quick-start)

The fastest way to get started is with Docker:

```
git clone https://github.com/HugoFara/lwt.git
cd lwt
docker compose up
```

Then open  in your browser.

How It Works
------------

[](#how-it-works)

**1. Pick a text** — Import something you want to read, or browse suggestions matched to your level from Project Gutenberg and curated news feeds.

**2. Read and learn** — Unknown words are highlighted. Click any word to see its translation (pre-loaded from Wiktionary) and save it to your vocabulary.

[![Reading text](https://camo.githubusercontent.com/f64138e11c931bdb6ab34503133fed1158677f67be9b01889fc1d36c581bc14b/68747470733a2f2f6875676f666172612e6769746875622e696f2f6c77742f6173736574732f696d616765732f72656164696e672d746578742e706e67)](https://camo.githubusercontent.com/f64138e11c931bdb6ab34503133fed1158677f67be9b01889fc1d36c581bc14b/68747470733a2f2f6875676f666172612e6769746875622e696f2f6c77742f6173736574732f696d616765732f72656164696e672d746578742e706e67)

**3. Review with context** — Practice vocabulary with spaced repetition, always seeing words in their original context.

[![Reviewing word](https://camo.githubusercontent.com/2af2fa70994cb529e363c70a605a05fee6bdb5e278614cf5de7b15489829ffd2/68747470733a2f2f6875676f666172612e6769746875622e696f2f6c77742f6173736574732f696d616765732f726576696577696e672d776f72642e706e67)](https://camo.githubusercontent.com/2af2fa70994cb529e363c70a605a05fee6bdb5e278614cf5de7b15489829ffd2/68747470733a2f2f6875676f666172612e6769746875622e696f2f6c77742f6173736574732f696d616765732f726576696577696e672d776f72642e706e67)

**4. Keep going** — As you mark words known or unknown, difficulty estimates adapt. Suggestions get smarter, and your next text is always ready.

Unlike flashcard apps like [Anki](https://apps.ankiweb.net/), LWT keeps words connected to the texts where you found them. We include an Anki exporter if you want both.

Features
--------

[](#features)

### Smart Content Suggestions

[](#smart-content-suggestions)

- **Book suggestions** — Browse Project Gutenberg's catalog, ranked by difficulty for your level
- **Curated news feeds** — [Ready-to-use RSS sources](data/curated_feeds.json) for 19 languages (Arabic, Chinese, French, German, Japanese, Korean, Spanish, and more)
- **Difficulty estimation** — Books are classified easy/medium/hard based on subject matter and your known vocabulary
- **Adaptive recommendations** — Suggestions improve as you learn more words

### Built-in Enrichment

[](#built-in-enrichment)

- **Wiktionary definitions** — Starter vocabulary comes pre-enriched with translations and definitions from open sources
- **Click-to-translate** — Instant dictionary lookups while reading
- **Bulk translation** — Translate multiple new words at once
- **Text-to-speech** — Hear pronunciation of words

### Reading &amp; Review

[](#reading--review)

- **40+ languages supported** — Roman, right-to-left, and East-Asian writing systems
- **Audio integration** — Sync audio tracks with your texts
- **Spaced repetition** — Review words at optimal intervals, always in context
- **Progress tracking** — Statistics to monitor your learning
- **Multi-word selection** — Click and drag to select phrases

### More Features

[](#more-features)

FeatureDescriptionMobile supportResponsive design for phones and tabletsThemesCustomizable appearanceKeyboard shortcutsNavigate efficiently while readingVideo embeddingInclude videos from YouTube and other platformsMeCab integrationJapanese word-by-word translationPosition memoryResume reading where you left offAnki exportExport vocabulary to Anki for additional review### Technical Improvements

[](#technical-improvements)

- **Smaller database** — Optimized schema reduces storage significantly
- **Long expressions** — Save phrases up to 250 characters (was limited to 9)
- **Better search** — Improved querying for words and texts
- **Modern PHP** — Supports PHP 8.1, 8.2, 8.3, and 8.4

Installation
------------

[](#installation)

### Docker (Recommended)

[](#docker-recommended)

Works on any OS with Docker installed.

#### Option A: Quick installer

[](#option-a-quick-installer)

```
# Use the lightweight installer
git clone https://github.com/HugoFara/lwt-docker-installer.git
cd lwt-docker-installer
docker compose up
```

#### Option B: Build from source

[](#option-b-build-from-source)

```
git clone https://github.com/HugoFara/lwt.git
cd lwt

# Optional: customize settings (database password, etc.)
cp .env.example .env
# Edit .env with your preferences

docker compose up
```

Access at

Configuration is done via `.env` file (see `.env.example` for all options).

### Linux

[](#linux)

```
# Download and extract the latest release
wget https://github.com/HugoFara/lwt/archive/refs/heads/main.zip
unzip main.zip && cd lwt-main

# Run the installer
chmod +x ./INSTALL.sh
./INSTALL.sh
```

### Manual Installation (Windows/macOS/Linux)

[](#manual-installation-windowsmacoslinux)

1. Install prerequisites: PHP 8.1+, MySQL/MariaDB, a web server (Apache/Nginx)
2. Clone or download the repository
3. Configure the database:

    ```
    cp .env.example .env
    # Edit .env with your database credentials
    ```
4. Install dependencies:

    ```
    composer install
    npm install && npm run build:all
    ```

See the [Installation Guide](https://hugofara.github.io/lwt/guide/installation) for detailed instructions.

Requirements
------------

[](#requirements)

ComponentVersionPHP8.1, 8.2, 8.3, or 8.4MySQL/MariaDB5.7+ / 10.3+PHP Extensionsmysqli, mbstring, dom, zip (for EPUB support)For development, you'll also need [Composer](https://getcomposer.org/) and [Node.js](https://nodejs.org/) 18+.

Documentation
-------------

[](#documentation)

- **[User Guide](https://hugofara.github.io/lwt/guide/getting-started)** — Getting started and usage
- **[API Reference](https://hugofara.github.io/lwt/reference/features)** — Features and REST API documentation
- **[Developer Docs](https://hugofara.github.io/lwt/developer/api)** — Architecture and contribution guide

Contributing
------------

[](#contributing)

Contributions are welcome! Here's how to set up a development environment:

```
git clone https://github.com/HugoFara/lwt.git
cd lwt
composer install --dev
npm install
```

### Development Commands

[](#development-commands)

```
# Run tests
composer test              # PHP tests with coverage
npm test                   # Frontend tests

# Code quality
./vendor/bin/psalm         # Static analysis
npm run lint               # ESLint
npm run typecheck          # TypeScript checking

# Build assets
npm run dev                # Development server with HMR
npm run build:all          # Production build
```

### Branch Strategy

[](#branch-strategy)

BranchPurpose`main`Stable releases`develop`Development and testing`official`Tracks official LWT releasesAlternatives
------------

[](#alternatives)

If LWT doesn't fit your needs, consider these projects:

- **[LUTE v3](https://github.com/jzohrab/lute-v3)** — Modern rewrite using Python/Flask, actively developed
- **[LinguaCafe](https://github.com/simjanos-dev/LinguaCafe)** — Beautiful Vue.js/PHP implementation
- **[FLTR](https://sourceforge.net/projects/foreign-language-text-reader/)** — Java desktop app by LWT's original author

License
-------

[](#license)

This project is released into the **public domain** under the [Unlicense](UNLICENSE.md). You're free to use, modify, and distribute it however you like.

---

 **Happy reading, happy learning!**

###  Health Score

56

—

FairBetter than 98% of packages

Maintenance92

Actively maintained with recent releases

Popularity24

Limited adoption so far

Community21

Small or concentrated contributor base

Maturity77

Established project with proven stability

 Bus Factor1

Top contributor holds 88.5% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~77 days

Recently: every ~207 days

Total

21

Last Release

41d ago

Major Versions

2.10.0 → 3.0.02026-03-14

PHP version history (5 changes)v2.1.0PHP ^7.4

2.5.0PHP ^7.4 | ^8.0 | ^8.1

2.7.0PHP ^8

2.8.0PHP ^8.0 | ^8.1 | ^8.2

3.0.0PHP ^8.2 | ^8.3 | ^8.4 | ^8.5

### Community

Maintainers

![](https://www.gravatar.com/avatar/78a9e1d5dd276445e6292dca8a44c2a1a15bbd016633b94c21ae27b117067d32?d=identicon)[HugoFara](/maintainers/HugoFara)

---

Top Contributors

[![HugoFara](https://avatars.githubusercontent.com/u/72709893?v=4)](https://github.com/HugoFara "HugoFara (1190 commits)")[![andreask7](https://avatars.githubusercontent.com/u/7857322?v=4)](https://github.com/andreask7 "andreask7 (77 commits)")[![ProgramComputer](https://avatars.githubusercontent.com/u/22284856?v=4)](https://github.com/ProgramComputer "ProgramComputer (23 commits)")[![chaosarium](https://avatars.githubusercontent.com/u/38693485?v=4)](https://github.com/chaosarium "chaosarium (22 commits)")[![jzohrab](https://avatars.githubusercontent.com/u/1637133?v=4)](https://github.com/jzohrab "jzohrab (9 commits)")[![pirtleshell](https://avatars.githubusercontent.com/u/14897503?v=4)](https://github.com/pirtleshell "pirtleshell (9 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (7 commits)")[![hangug-eo](https://avatars.githubusercontent.com/u/138794485?v=4)](https://github.com/hangug-eo "hangug-eo (4 commits)")[![rahimnathwani](https://avatars.githubusercontent.com/u/891558?v=4)](https://github.com/rahimnathwani "rahimnathwani (1 commits)")[![darkone23](https://avatars.githubusercontent.com/u/341306?v=4)](https://github.com/darkone23 "darkone23 (1 commits)")[![dhassanali](https://avatars.githubusercontent.com/u/12805108?v=4)](https://github.com/dhassanali "dhassanali (1 commits)")[![Heliozoa](https://avatars.githubusercontent.com/u/15956940?v=4)](https://github.com/Heliozoa "Heliozoa (1 commits)")

---

Tags

dockerlanguage-acquisitionlanguage-learninglwtmultilingualphpreadingself-hostedspaced-repetitionvocabularyweb-applicationreadinglanguage-learninglwtLearning-with-Texts

###  Code Quality

TestsPHPUnit

Static AnalysisPsalm

Code StylePHP\_CodeSniffer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/hugofara-lwt/health.svg)

```
[![Health](https://phpackages.com/badges/hugofara-lwt/health.svg)](https://phpackages.com/packages/hugofara-lwt)
```

###  Alternatives

[deployer/deployer

Deployment Tool

11.0k25.4M207](/packages/deployer-deployer)[appwrite/server-ce

End to end backend server for frontend and mobile apps.

55.3k84.2k](/packages/appwrite-server-ce)[felixfbecker/language-server-protocol

PHP classes for the Language Server Protocol

22476.7M6](/packages/felixfbecker-language-server-protocol)[mikopbx/core

Free PBX system for SMB based on Asterisk

5271.4k](/packages/mikopbx-core)[yousign/zdd-message-bundle

Assert Zero Downtime Deployment compliance for messages

28113.5k](/packages/yousign-zdd-message-bundle)[chameleon-system/chameleon-base

The Chameleon System core.

1026.5k3](/packages/chameleon-system-chameleon-base)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
