Classi is a local-first Flutter app for teachers. It stores groups, students,
grades, notes, checklists, and material tracking data in encrypted .classi
libraries. Automatic backup and restore to a WebDAV server keeps your data safe
and portable across devices.
- Android
- macOS
- Windows
- Linux
- SQLCipher-backed Drift database with passphrase setup and recovery key support
- Adaptive navigation for groups, notes, and settings
- Groups and students flow, including archive, unarchive, clone, and deletion
- Batch student creation and WebUntis class-list import
- Grade entry, chart-based grade history, checklist management, note management, and material tracking
- Avatar editing powered by
avatar_maker, persisted per student in the local database - WebDAV backup with automatic upload on lock and automatic restore on startup
- Configurable light, dark, and system theme
- Auto-update for desktop platforms (macOS, Windows, Linux) via the
updatpackage - English and German translations through
easy_localization
Classi stores your library in a .classi folder that you choose during the
first-run setup. The setup wizard always requires an explicit folder selection
so your data is never silently placed inside an app-private directory.
Library-specific settings such as grade systems, sorting, theme, lock, and
WebDAV backup configuration are stored inside that .classi folder too, so
they move with the project instead of being kept as global app preferences.
Recommended locations:
| Platform | Recommended folder |
|---|---|
| Android | A folder in shared storage such as Documents — not inside Android/data/, which is erased when the app is uninstalled |
| macOS (App Store) | ~/Documents/Classi or another location outside ~/Library/Containers/ |
| macOS / Windows / Linux | Any folder in your home directory or an accessible drive |
Classi can automatically back up your library to any WebDAV server (e.g. Nextcloud, ownCloud, or a self-hosted server). Configure the server URL, credentials, and remote folder path in Settings → Backups. Once saved:
- Auto-export uploads a
.classi-backuparchive whenever Classi locks or switches libraries. - Auto-import checks for a newer backup on startup and offers to restore it.
You can also trigger a manual restore from the setup screen by choosing Restore from WebDAV backup.
Linux desktop builds need native packages installed first:
sudo apt-get update
sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev libsecret-1-dev libssl-devflutter pub get
dart run build_runner build --delete-conflicting-outputs
flutter analyze
flutter test
flutter run -d android
flutter run -d macos
flutter run -d windows
flutter run -d linuxmacOS desktop builds require Xcode on a Mac with command-line tools installed.
Releases are packaged with Fastforge:
dart pub global activate fastforge
fastforge package --platform android --targets apk
fastforge package --platform linux --targets appimage
fastforge package --platform macos --targets dmg
fastforge package --platform windows --targets exeOr run all platforms at once using the project release config:
fastforge release --name releaseSee CONTRIBUTING.md for local setup, pull request expectations, and release hygiene.
Three workflows are included:
-
ci.yml— runs on every push tomain/masterand on pull requests. It installs dependencies, runs Drift code generation, analyzes the code, and executes the test suite. -
build-pr.yml— triggered by posting a slash command as a comment on any pull request. Supported commands:/build android— builds and uploads an APK/build linux— builds and uploads an AppImage/build macos— builds and uploads a DMG/build windows— builds and uploads an EXE installer
Only the requested platform is built using Fastforge. Once the artifact is uploaded the workflow replies directly on the pull request with a link to download the artifact.
Android PR builds use the application ID
org.openpatch.classi.prso they can be installed alongside the production app without overwriting it. -
release.yml— triggered by version tags (v*). It generates a changelog withgit-cliff, commits an updatedCHANGELOG.md, builds release artifacts for Android (APK), Linux (AppImage), macOS (DMG), and Windows (EXE installer) using Fastforge, and publishes a GitHub Release with all artifacts attached.
Released under the MIT License.
