YASPO is a modern, self-hosted Learning Management System (LMS) and educational platform designed for single classes or organizations. It provides a complete suite of tools for educators to manage students, assignments, quizzes, grading, announcements, and live meetings.
- Classroom Management: Manage students, staff, and comprehensive grade sheets.
- Assignments & Quizzes: Create AI-assisted quizzes and rich-text assignments.
- Live Video Meetings: Built-in LiveKit integration for remote lectures and screen sharing.
- Self-Hosted First: Entirely containerized and ready to deploy on your own infrastructure with zero third-party dependencies required.
- Mobile Support: Comes with a native mobile application (Flutter) for students and educators.
YASPO is designed to be extremely easy to deploy using Docker Compose. The default stack includes:
- The .NET 9 Backend API (
api) - The React/Vite Web Frontend (
web) - A SQL Server Database (
db) - MinIO for S3-compatible Object Storage (
storage) - Caddy Reverse Proxy (
proxy) for automatic HTTPS
- Docker
- Docker Compose (v2)
By default, YASPO will use secure default passwords and start up automatically. However, for a production environment, you should create a .env file in the root directory to customize your deployment.
# The domain name your server will use (e.g. yaspo.example.com)
# If left blank or set to an IP address, Caddy will serve over HTTP instead of HTTPS.
DOMAIN=yaspo.example.com
SITE_ADDRESS=https://yaspo.example.com
# A secure password for the SQL Server database
DB_PASSWORD=YourSecurePassword123!
# A secure, random 32-character string for JWT token generation
JWT_SECRET=YourSuperSecretKeyNeedToBeLongEnough
# S3 Storage Configuration
# If you leave these blank, YASPO will use the built-in MinIO container by default.
# S3_URL=http://minio:9000
# S3_ACCESS_KEY=minioadmin
# S3_SECRET_KEY=minioadmin123Run the following command from the root directory to pull the images and start the services:
docker compose up -dBecause YASPO is self-hosted, you need to create your first administrative account to access the dashboard. Send a simple POST request to the backend:
curl -X POST "http://localhost/api/system/setup" \
-H "Content-Type: application/json" \
-d '{
"adminEmail": "admin@yourdomain.com",
"adminPassword": "SecureAdminPassword123!",
"organizationName": "My Education Platform"
}'(If you configured a domain with HTTPS, change http://localhost to https://yaspo.example.com).
Navigate to your server's domain or IP address in your web browser. You can now log in using the admin credentials you just created.
- Backend: ASP.NET Core 9.0 API. See
backend/README.md. - Frontend: React + Vite SPA. See
web/README.md. - Mobile App: Flutter application for Android and iOS. See
mobile/README.md.