Documentation
Everything about how Lunis works, from install to the classroom. For the full source and issue tracker, see the GitHub repo.
Overview
Lunis is an offline learning server for schools with no reliable internet. You install it on one Linux computer. That machine runs a web app, an AI tutor, and a translator, all locally. Students connect to it over Wi-Fi from tablets, phones, or laptops and open it in a browser — nothing is installed on their devices, and nothing needs an internet connection once the server is set up.
Lunis is built to be given away. It's for schools and learning centres that can't pay for software, running on donated or older hardware.
Features
14 features across four areas. Everything below ships in the base install — nothing is a paid add-on.
| Feature | What it does |
|---|---|
| Reading Hub | 85 illustrated books, levelled kindergarten to grade 4, each with a comprehension quiz. |
| Homework Helper | A chat tutor that answers in plain language, powered by a language model on the server. |
| Video lessons | 127 captioned math lessons for grades K–8. |
| Ask about this lesson | A question box on each lesson that answers from that lesson's own transcript. |
| Feature | What it does |
|---|---|
| Lesson quizzes | A short quiz attached to each video lesson. |
| Unit tests | Longer tests covering a whole topic. |
| Teacher tests | Teachers write their own tests, assign them, and see results. |
| Feature | What it does |
|---|---|
| Teacher dashboard | Class overview, per-student progress, and test results. |
| Activity history | A calendar view of what each student did and when. |
| Classes & join codes | Students join with a short code; teachers approve or reject requests. |
| Feature | What it does |
|---|---|
| Achievements | Badges for finishing books, lessons, and quizzes. |
| Read aloud | Text on screen can be spoken for early readers. |
| Four languages | English, French, German, and Spanish — interface, books, and tutor. |
| Accounts & progress | Each student has a login; progress is stored on the server. |
Device tiers
Everything except the AI tutor is fast on any machine, since it's just files sent over a local network. The tutor is what decides which tier a device needs.
| Low | Medium | High | |
|---|---|---|---|
| CPU | 2 cores, no AVX2 | 4 cores, AVX2 | 8+ cores |
| RAM | 4 GB | 8 GB | 16 GB |
| Free storage | 4 GB | 8 GB | 8 GB |
| First answer after boot | ~2 min | ~2 min | <1 min |
| Simple question | 30–60s | ~30s | <10s |
| Comfortable class size | 3–5 | 5–10 | 15+ |
Requirements & install
- A computer running Ubuntu or Debian Linux — the only supported platform for the server.
- Python 3.9 or newer, which the installer sets up.
- Internet access during installation only, to download packages, the model, and the video lessons.
Student devices need nothing but a web browser. Any phone, tablet, Chromebook, or laptop works.
git clone https://github.com/lunislearning/Lunis.git ~/lunis cd ~/lunis bash server/install.sh
That one command handles everything: system packages, the AI engine, the language model, the translator, the video lessons, and the background services that start automatically on boot. Expect 20 to 60 minutes on a slow machine — most of that is downloading the model and the videos.
bash server/install.sh again to pick up where it left off.First run
Connecting student devices
The server listens on port 8090 on every network interface, so any device on the same network can reach it.
If there's no network in the building, the server can be the access point itself:
nmcli device wifi hotspot ssid lunis password choose-something
Students join that Wi-Fi, open the address, and they're in — no internet involved at any point.
For students
Signing in
A student picks “I'm a Student,” then signs in or creates an account. To join a class they enter the join code the teacher gave them; the teacher approves the request from the dashboard.
Reading Hub
A student picks a level, then a book cover. Each book opens one spread at a time, picture and text together, with a read-aloud button for readers still learning to decode. A short quiz at the end marks the book complete and counts toward a badge.
Homework Helper
The student picks a subject and grade by tapping a card, then types a question in their own words. The conversation stays on screen, so a follow-up doesn't mean repeating yourself. On the reference machine, a simple question takes about 30 seconds to answer.
Video lessons
Browsed by grade, then topic. Each lesson plays with captions; a question box underneath answers using that lesson's own transcript. A short quiz follows the video.
Tests & achievements
Tests a teacher has assigned appear on the student's home screen and are marked as soon as they're submitted. Badges are earned for finishing books, lessons, and quizzes.
Changing language
The language selector switches the whole interface, the books, and the tutor. A student's choice is remembered.
For teachers
The dashboard
The dashboard has three sections: Overview, Progress, and Tests.
Classes and students
Create a class and it's given a join code. Students who enter it appear as pending requests for you to approve or reject. You can also add a student directly, set their grade, remove a student, or regenerate the join code.
Progress
Shows each student and what they've completed — lessons watched, books finished, quiz scores. Activity history is a calendar, so you can see which days a student worked and open any day to see exactly what they did.
Tests
Build a test by writing questions and answers, then assign it to specific students. Results come back as students submit.
Settings
Covers the teacher password and how long student records are kept before being cleared.
Content & licensing
The educational content comes from three outside sources, all of which allow redistribution.
| Source | Titles | License |
|---|---|---|
| African Storybook Project, via Global ASP | 30 | CC BY 4.0 |
| Pratham Books / StoryWeaver, via Global ASP | 25 | CC BY 4.0 |
| Project Gutenberg | 30 | Public domain |
The 127 video lessons are math content for grades K–8 from Khan Academy, licensed CC BY-NC-SA 4.0 — shareable and adaptable with credit, but never sold or relicensed. Quizzes, lesson notes, and unit tests are original, written to accompany the lessons they follow. French, German, and Spanish text is produced by LibreTranslate running on the server.
The Lunis code itself is MIT-licensed. Full details for every source are in the repo's NOTICE.md.
Troubleshooting
free -g on the server — if very little is free, the model is being swapped in and out of RAM.hostname -I to confirm the address, and check a firewall isn't blocking port 8090.systemctl --user status lunis-translate.python3 scripts/fetch_content.py --download.