The better Schulnetz app - Flutter mobile client
A modern Flutter mobile app providing a superior alternative to the official Schulnetz client. Intuitive interface, multi-user support, and seamless access to grades, timetable, absences, documents & report cards (Zeugnisse), and holidays.
Important
This project is NOT affiliated with, endorsed by, or connected to Schulnetz or Centerboard AG in any way.
Common workflows are wrapped as bun scripts (bun is only the task runner - it doesn't pull in a Node toolchain):
bun run dev # flutter run, dev flavor
bun run prod # flutter run, prod flavor
bun run analyze # flutter analyze
bun run test # flutter testFlavors: dev (com.schuly.app.dev, "Schuly DEV") and prod (com.schuly.app, "Schuly"). Targets Android and iOS only.
The backend URL is compiled in via --dart-define=BACKEND_BASE_URL and defaults to http://localhost:5033, so no machine IP is ever committed. Development setup covers the full script list, the build variants, and pointing the app at a local backend over USB or LAN.
Full documentation lives at docs.schuly.dev/Schuly.
| Guide | What it covers |
|---|---|
| Development setup | Prerequisites, bun tasks, flavors, and connecting to a local backend. |
| Build and release | Release builds for Android and iOS, and how a release is cut. |
| Architecture modes | Account mode vs private mode, and how each reaches school data. |
| API client | Regenerating the Dart client from the backend's OpenAPI document. |
| Contributing | Workflow, branch and PR conventions. |
New to Schuly as a user? Start with the getting-started walkthrough.
| Repo | Purpose |
|---|---|
| Schuly | Flutter mobile app (this repo) |
| SchulyBackend | ASP.NET Core API backend |
| SchulyKeycloak | Keycloak image + the schuly realm |
| SchulyPluginAbstractions | Plugin contract (NuGet) |
| SchulyPlugins | Official plugins monorepo |
| SchulyWebsite | Landing site (schuly.dev) |
| SchulyDocs | Documentation site (docs.schuly.dev) |