Applications

Skuul: Open-Source School Management Built on Laravel

Published
Skuul: Open-Source School Management Built on Laravel image

Skuul is an open-source school management application by Marvellous Ifezue. Version 3.0 was released on October 16 as a rewrite on Laravel 13 and Livewire 4. A school or a group of schools might use it to run admissions, attendance, gradebooks, timetables, and fees from one installation.

Here's what Skuul 3.0 includes:

  • Organizations and campuses: one installation holds several organizations, and each organization holds several campuses
  • Admissions and guardians: an admissions waitlist, and guardian links that connect parent accounts to learners
  • Assessment: course offerings, gradebooks, exam schedules, and results that a reviewer approves before publication
  • Official documents: report cards and transcripts generated from published results
  • Finance: payments, refunds, and student credit post to a ledger, and financial periods control when postings are allowed
  • Optional campus tools: discipline and wellbeing, staff operations, a campus calendar, boarding, a library, clubs and programmes, and student and staff imports, each turned on or off per campus
  • Report exports: CSV, XLSX, and PDF files built in the background
  • Operations: scheduled backups with an encrypted database dump, a weekly restore rehearsal, health endpoints, and the skuul:release-readiness and skuul:update commands

Campuses, Roles, and Permissions

Skuul uses Spatie Permission for team-scoped roles, so a user's permissions apply to one campus at a time.

The installer creates eight roles: platform-admin, organization-admin, admin, teacher, accountant, librarian, student, and parent. A campus can copy a role to make its own, such as an admissions office role. Learners can move between campuses. A campus can also request records from another campus, and each request needs approval.

Family Portal

Students and guardians sign in to a portal that shows a learner's published results, attendance, timetable, invoices, documents, and notices. Families can also send requests to the campus. Portal access comes from the learner's own account or a guardian link. Staff permissions don't apply to the portal.

Each campus chooses which portal pages to show. Some pages also depend on a campus tool, so the Library page stays hidden while the Library tool is off.

Current Limitations

The documentation lists these gaps in V3:

  • There is no public REST API, and API tokens are disabled
  • A Stripe payment channel exists, but no checkout or callback routes are connected. Families can view invoices in the portal but can't pay them there, and staff record cash, bank transfer, and other payments by hand
  • There is no staff appraisal workflow
  • The numeric grade calculator can count a blank, missing, absent, or incomplete mark as zero, so check for those marks before you publish results

A school that wants families to pay fees online, or that needs to sync records with another system, would have to build that part itself.

Upgrading From V2

V3 replaces the V2 data model. Its migrations delete legacy exam results, grading systems, and gradebooks without a course offering, and rollbacks don't restore them. The docs recommend testing the upgrade on a copy of your data first, and keeping a full database backup, the uploaded files, and the original APP_KEY.

Try the Demo or Install It

The Skuul demo has one-click sign-in for staff, student, and family accounts. It resets every hour, and deletions are disabled.

To run it yourself, you need PHP 8.4.1 or later, Node.js 24, MySQL 8, and Redis. Clone a release tag and follow the installation guide, which uses Laravel Sail:

git clone --branch v3.0.2 https://github.com/yungifez/skuul.git skuul

Skuul is MIT licensed. You can find the source on GitHub and the full documentation at skuul.org.

Yannick Lyn Fatt photo

Staff Writer at Laravel News and Full stack web developer.

Sponsored

serpapi logo
SerpApi

The Web Search API for Your LLM and AI Applications

Visit SerpApi

The latest

View all →
Laravel Read Replicas: Check if a Replica Has Caught Up image

Laravel Read Replicas: Check if a Replica Has Caught Up

Read article
UUID Request Input and Migration Failure Events in Laravel 13.42 image

UUID Request Input and Migration Failure Events in Laravel 13.42

Read article
Replay Missed Laravel Scheduled Tasks With Schedule Catchup image

Replay Missed Laravel Scheduled Tasks With Schedule Catchup

Read article
Search Polymorphic Relations and Filament Tables With Laravel Searchable image

Search Polymorphic Relations and Filament Tables With Laravel Searchable

Read article
Laravel Rest Api 3.0: Typed Fields, Metrics, and OpenAPI Docs image

Laravel Rest Api 3.0: Typed Fields, Metrics, and OpenAPI Docs

Read article
Real-Time Inertia Props With Laravel Reverb image

Real-Time Inertia Props With Laravel Reverb

Read article