LunisLunis

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.

Non-commercial only
Lunis is not sold, and it is not used to make money — the video lessons it installs carry a license that requires this. See Content & licensing.

Features

14 features across four areas. Everything below ships in the base install — nothing is a paid add-on.

Core learning
FeatureWhat it does
Reading Hub85 illustrated books, levelled kindergarten to grade 4, each with a comprehension quiz.
Homework HelperA chat tutor that answers in plain language, powered by a language model on the server.
Video lessons127 captioned math lessons for grades K–8.
Ask about this lessonA question box on each lesson that answers from that lesson's own transcript.
Assessment
FeatureWhat it does
Lesson quizzesA short quiz attached to each video lesson.
Unit testsLonger tests covering a whole topic.
Teacher testsTeachers write their own tests, assign them, and see results.
Classroom management
FeatureWhat it does
Teacher dashboardClass overview, per-student progress, and test results.
Activity historyA calendar view of what each student did and when.
Classes & join codesStudents join with a short code; teachers approve or reject requests.
Access & accounts
FeatureWhat it does
AchievementsBadges for finishing books, lessons, and quizzes.
Read aloudText on screen can be spoken for early readers.
Four languagesEnglish, French, German, and Spanish — interface, books, and tutor.
Accounts & progressEach 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.

LowMediumHigh
CPU2 cores, no AVX24 cores, AVX28+ cores
RAM4 GB8 GB16 GB
Free storage4 GB8 GB8 GB
First answer after boot~2 min~2 min<1 min
Simple question30–60s~30s<10s
Comfortable class size3–55–1015+
Reference machine
The Medium column is a real 2012 Intel i5 laptop with 8 GB of RAM — nothing exotic. Two things matter more than the rest: RAM over cores (the model needs about 2.5 GB resident, or the machine starts swapping), and AVX2 (a CPU without it runs the model at roughly half speed).

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.

Tip
The installer is safe to run more than once. It checks what's already done and skips it, so if it stalls or the connection drops, just run bash server/install.sh again to pick up where it left off.

First run

1
Open the address
The installer printed it at the end. Open it on the server itself, or from any other device on the same network.
2
Pick a language
Only shown the very first time anyone opens Lunis on this server — it sets the default for the whole install.
3
Create your teacher account
Choose “Create an account,” then pick a username and password. This becomes the first teacher account.
4
Create your first class
Made from the dashboard. Lunis generates a short join code for it automatically.
5
Hand out the join code
Give students the access code and the server address — that's all they need to get in.

Connecting student devices

The server listens on port 8090 on every network interface, so any device on the same network can reach it.

Lunis server
port 8090
Wi-Fi, no internet needed
Phone
Tablet
Laptop

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.

SourceTitlesLicense
African Storybook Project, via Global ASP30CC BY 4.0
Pratham Books / StoryWeaver, via Global ASP25CC BY 4.0
Project Gutenberg30Public 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

The model is loading into memory on the first question after the server starts. It stays loaded after that.
Usually not enough memory. Run free -g on the server — if very little is free, the model is being swapped in and out of RAM.
Check the device is on the same Wi-Fi. On the server, run hostname -I to confirm the address, and check a firewall isn't blocking port 8090.
The translator builds its cache the first time each language is used. Check it's running with systemctl --user status lunis-translate.
The download can fail on a weak connection. Retry with python3 scripts/fetch_content.py --download.

FAQ

Only to install. After that, no.
No. Accounts, progress, and answers are files on the server. There's no cloud account and nothing is sent anywhere.
No. Lunis and the Khan Academy lessons it installs are both non-commercial only.
Yes — Lunis talks to its AI engine over an OpenAI-compatible API, so you can point it at another model by changing the config.
For reading, videos, and quizzes, dozens. The AI tutor is the limit — see device tiers above.
Ready to install it?
The full walkthrough and troubleshooting help live on the Install page.
Go to Install