Your courses, on your own server.

Teachers build and grade, students hand in, and the data stays yours.

Try the demo$ npx create-vumlo
A student's course in Vumlo: sections with lectures, files and assignments, and what is due next.

Build a course, then see it as a student

A course is sections of lectures, files and assignments. Drag an item by its handle to change the order. Students see only what is published.

A panel beside the outline counts what students see, what is still a draft, and which lectures have changes you have not published. One button previews the course as a student.

A teacher's course, Algorithms and Data Structures: sections with lectures, files and assignments, and a panel counting what students see and what is still a draft.

Grade next to the work

The grading page puts the student’s answer beside the grade. A PDF opens in place, with the points and the comment next to it. Move to the previous or next student, save a draft, publish when you are ready.

Nobody sees a grade early. Students get the grade and the comment only after you publish.

The grading page: a student's PDF report on the left, the points and comment fields on the right.

Five kinds of work

  • Text answer, with drafts that are kept
  • Hand-in of files, shown in place when the teacher grades
  • Quiz: choice, multiple choice, number, short and long text; checked automatically where it can be
  • Form: a team name, a project variant only one team may take, a link
  • Work done in class, which the teacher grades without a hand-in
A quiz with five kinds of question; answers are saved as the student goes.
The gradebook: students in rows, assignments in columns, published and draft grades.

One page with every grade

The gradebook has the students in rows and the assignments in columns. A published grade and a draft that you have not published yet look different, so you always know what students can see.

Groups and subgroups are linked to courses, and a course’s roster follows its group.

What an administrator gets

People
Self-registration with a verified address, limited to the email domains you list, or accounts you create. Sign-in by password or Google.
Terms and groups
Terms, groups and subgroups, each linked to the courses it takes.
An audit log
What changed, who changed it and when. An administrator’s change inside a course is always written down.
Your name on it
The institution’s name and mode (school with grades 1 to 12, or university with 100 points per course) are set once in vumlo.toml. English and Ukrainian are built in.
One command line
vumlo installs, configures, migrates, makes backups and checks the installation (vumlo doctor).

A desktop app with your name on it

Windows, macOS and Linux. It is built from your configuration, so it carries your institution’s name and talks only to your server. It reads courses, deadlines and grades without a connection, keeps what a student writes until there is one, and reminds them before work is due.

How to build and hand it out

The desktop app offline: a banner says it shows what was saved on this computer.

Plugins instead of a fork

A plugin is an HTTP service in any language. Vumlo does not trust it: the plugin is told about events (a submission arrived, a grade was published), may read only what you approve, and can show its own page in a tab of an assignment.

The smallest one is a Python file with no dependencies. It counts the words of every submission.

# the plugin starts without credentials, so the core can read its manifest
PORT=9000 python3 plugin.py

# you approve exactly what it asks for
vumlo-cli plugin install http://127.0.0.1:9000 \
  --grant submissions:read,reports:write

# a student submits; a few seconds later the report is there

The whole example, step by step

How it is built

Backend
A Rust API and a background worker on PostgreSQL 18. No Redis and no message broker: queues and scheduled jobs live in PostgreSQL.
Web
A Next.js app. The desktop app is the same web app in Tauri.
Files
A directory on the server, or an S3-compatible bucket.
Size
One installation serves one institution.
Licence
MIT. The design and the reasons behind it are in the decision records.

What is not here yet

Vumlo is before 1.0. A new minor version may change the configuration, the API or the migrations, and every release lists what you must do in its upgrade notes. It does one thing well, the teaching loop of course, work and grade, and leaves out a lot that a large LMS has:

  • discussion forums
  • peer review
  • attendance registers
  • rubrics and question banks
  • other quiz question types, matching for one
  • SCORM and H5P content
  • sign-in through LDAP or SAML
  • messages between people
  • badges and certificates
  • a mobile app
  • export and import of a single course, or import from another system

A backup covers the whole installation (vumlo db backup). Some of the gaps could be built as plugins; none is promised.

Install it with one command

The installer downloads the newest release, checks it against the release’s checksums, asks a few questions, and writes vumlo.toml and .env with a generated database password. Then it prints the commands that build and start Vumlo.

You need

  • a Linux server with Docker and the Compose plugin (2.24 or newer)
  • Node 20 or newer, for the installer
  • several GB of RAM or swap for the one-time build
  • for a real installation, a domain name and an SMTP relay for sign-up and password-reset mail
Read the install guide
$ npx create-vumlo
Unpacked v0.4.1
Institution name       Example University
School or university?  University
Public address         https://lms.example.edu
Short name             EU
Email domains          example.edu
Language               English
Time zone              Europe/Kyiv
What else?             Web app, Desktop app

# Next
cd vumlo
./vumlo config check && ./vumlo brand apply
export COMPOSE_FILE=deploy/compose.yaml COMPOSE_ENV_FILES=.env
docker compose build
docker compose up -d --wait postgres
./vumlo db migrate
./vumlo admin create you@example.edu --name Your --surname Name
docker compose up -d && ./vumlo doctor