Skip to content

openpatch/classi

Repository files navigation

Classi

Classi logo

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.

Supported platforms

  • Android
  • macOS
  • Windows
  • Linux

Features

  • 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 updat package
  • English and German translations through easy_localization

Data storage

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 Documentsnot 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

WebDAV backups

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-backup archive 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.

Local development

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-dev
flutter 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 linux

macOS desktop builds require Xcode on a Mac with command-line tools installed.

Release builds

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 exe

Or run all platforms at once using the project release config:

fastforge release --name release

Contributing

See CONTRIBUTING.md for local setup, pull request expectations, and release hygiene.

GitHub Actions

Three workflows are included:

  • ci.yml — runs on every push to main/master and 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.pr so they can be installed alongside the production app without overwriting it.

  • release.yml — triggered by version tags (v*). It generates a changelog with git-cliff, commits an updated CHANGELOG.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.

License

Released under the MIT License.

About

A class management app for teachers

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors