An open-source school administration platform that you run yourself.
Your students' records belong to your institution—not to a vendor subscription.
Why KoAkademy · The platform · Stack · Quick start · Operate it · Contributing
Warning
KoAkademy is beta software and is not yet recommended for production use. Pre-v2 releases can contain breaking changes or incompatible upgrades. Evaluate it in staging, keep tested backups, and review the security guidance before storing institutional data.
School software holds more than a timetable. It holds student identities, grades, tuition, medical records, attendance, and years of institutional history. When that system is a hosted product, the school inherits someone else's pricing, roadmap, retention policy, and operational decisions.
KoAkademy takes a different position: the institution should own the system of record. It is a complete school administration and learning platform that runs on infrastructure you choose. The PostgreSQL database, object storage, backups, domains, and upgrade schedule are yours to manage and audit.
That is not a stripped-down self-hosted edition. Enrollment, academics, finance, staff tools, student and faculty portals, and optional modules are all part of the application. No per-student pricing and no feature gates hidden behind a sales conversation.
KoAkademy is built around the daily work of a school, not a generic database with education fields added later.
| Administration | Students, faculty, programs, courses, classrooms, terms, schedules, attendance, grading, reports, and institution branding. |
| Enrollment | A registrar-to-cashier workflow driven by versioned enrollment blueprints. Rules can be scoped, simulated, staged, and rolled back instead of being buried in code. |
| Three portals | Distinct administrator, faculty, and student experiences for the work each role actually needs: classes, attendance, submissions, grades, schedules, tuition, announcements, and digital IDs. |
| Finance | Tuition assessment, payment posting, statements of account, receipts, public verification, and finance reporting. |
| Optional modules | Library, inventory, cashier, student medical records, announcements, and notification tools can be enabled as the institution needs them. |
| Security and accountability | Role-based permissions, multi-factor authentication, passkeys, audited impersonation, and an operator-controlled deployment boundary. |
The public API is intentionally small while it is beta. Only the endpoints described in the API documentation are part of its supported contract.
Enrollment is where a school’s rules become visible: who can enrol, which documents they need, which checks must happen before payment, what tuition applies, and when an account becomes active. Those are institutional policies, not constants that should require a deployment to change.
KoAkademy models them as versioned blueprints with inheritance, availability and eligibility checks, academic and billing gates, approvals, notifications, simulations, staged publication, and rollback. The result is a workflow a registrar can understand and an institution can adapt without losing its audit trail. Read the blueprint overview for the model and the quick start to configure one.
A Laravel application with a React portal layer, packaged for self-hosting rather than split across vendor services.
| Application | Laravel 12 · PHP 8.5 · Filament 5 |
| Portals | Inertia · React 19 · TypeScript · Vite |
| Data and jobs | PostgreSQL · Redis · Laravel queues, cache, sessions, and scheduled work |
| Documents | Gotenberg for PDFs · S3-compatible object storage for uploads |
| Runtime | nginx + PHP-FPM in a Docker image, with a FrankenPHP (Octane) variant · Docker Swarm installer or supported Docker Compose topology |
| Quality | Pest · Laravel Pint · frontend and documentation builds · CI validation |
| Path | |
|---|---|
app/ |
Laravel application services, models, policies, jobs, and HTTP boundaries |
resources/js/ |
Inertia React pages and shared portal components |
Modules/ |
Optional domain modules |
database/ |
Migrations, factories, and seeders |
docker/ |
Production image and runtime processes |
docs/ |
Operator, maintainer, API, and staff documentation |
tests/ |
Pest feature and unit coverage |
The supported production installer is Linux-only. It installs Docker when needed, creates a single-node Swarm, deploys Caddy HTTPS with PostgreSQL, Redis, Gotenberg, and a private FrankenPHP application, then opens the one-time /setup wizard.
Linux
curl -fsSL https://github.com/yukazakiri/koakademy/releases/latest/download/install.sh | sudo bash -s -- install --domain school.exampleVisit /setup when the installer finishes to create the institution, the first academic period, and the first super administrator. The setup route closes after initialization.
The installer runs privileged remote code. Inspect it first if that is not appropriate for your environment:
curl -fSLO https://github.com/yukazakiri/koakademy/releases/latest/download/install.sh
less install.sh
bash install.sh install --domain school.exampleFor a manually managed deployment, use Getting Started. It covers the supported Docker Compose topology, explicit migrations, S3-compatible storage, and the reverse-proxy requirements.
Run a current stable release in production. Caddy owns ports 80/443; the application, PostgreSQL, Redis, and Gotenberg stay private. Use sudo koakademy update for an explicit backed-up release update and sudo koakademy configure storage|mail|search for Docker-Secret-backed provider changes.
| Need | Start here |
|---|---|
| Install, configure, or upgrade a server | Getting Started · Deployment · Configuration |
| Plan backups, HTTPS, storage, or recovery | Deployment runbook · Self-hosting FAQ |
| Understand the codebase and run it locally | Development · Architecture guide |
| Configure enrollment policies | Enrollment blueprints |
| Use the administrator, faculty, or student portals | Staff user guide |
| Integrate with the supported API | API overview |
The hosted documentation site, when enabled for the repository, is available at yukazakiri.github.io/koakademy.
Contributions are welcome when they are focused, tested, and safe for self-hosting institutions. Start with CONTRIBUTING.md. To report a vulnerability, use a private GitHub Security Advisory—not a public issue—and follow SECURITY.md.
KoAkademy is licensed under the GNU AGPL-3.0-or-later. If people use a modified version over a network, they must be able to obtain that modified source. The code that handles a school’s records should remain available to the people who depend on it.
KoAkademy started in 2023 as a college feasibility project here in the Philippines. The first version was written in vanilla PHP, and in 2024 it was migrated to Laravel. My groupmates and I built it together until we graduated — after that, I kept going alone. The system eventually went live at our school, and it has been running there ever since as part of their core infrastructure. Every feature and every piece of logic in this codebase is modeled on that school's real, day-to-day workflow.
As time passed, managing the codebase on my own became increasingly hard, so I now lean heavily on Codex as my main development agent. I have also grown professionally since those college days and currently work as a Senior Software Developer.
Today, KoAkademy is being used by two different schools that run the same workflow. I will be honest: I am not very good at closing deals, and I have never been paid for this project. I have always treated it as my way of helping my school innovate, even just a little. That is why I decided to open source it and make it configurable — so that any institution that cannot afford its own SIS or LIS can use it freely, without handing student information to third-party providers.
You will notice that this project is only half complete, but it is usable today. If you have any suggestions or improvements, you are always welcome to share them. And if this project has been useful to you, I would also ask you to star this repository — it gives me motivation to continue.
Feel free to try it and give feedback. Even the harsh kind. I appreciate every single one.




