# Unifiedtransform: a self-hosted Laravel school management system

> Unifiedtransform is a free, GPL-3.0 school management and accounting application built on Laravel 8 and Bootstrap 5, shipped with a Docker Compose stack. It fits schools that want their student, staff and academic data on their own server, and it asks for real sysadmin work in return.

**changeweb/Unifiedtransform** — A school management Software

- Repository: https://github.com/changeweb/Unifiedtransform
- Website: https://changeweb.github.io/Unifiedtransform/
- Stars: 3,002 · Forks: 1,288
- Language: PHP
- License: GPL-3.0
- Published: 2026-09-24 · Updated: 2026-09-24 · Language: en
- Canonical page: https://hysenlabs.com/projects/changeweb-unifiedtransform

## What Unifiedtransform solves, and for whom

The README opens with a plain motivation: the author looked for a free open source school management system that met his quality standards, found none, and wrote one. That origin explains the shape of the project. It is a general school administration application, not a niche tool for one country's curriculum or one examination board. The topics attached to the repository name the areas it covers: attendance, school grading, teacher and student records.

The intended user is a school that wants to run its own instance rather than rent a hosted student information system. The homepage is a static site, the source is on GitHub, and the whole application is designed to be deployed by the institution. That is a meaningful difference from commercial school software, where the data sits with the vendor. Here the database is a MySQL container on your own machine, and the admin credentials after a fresh seed are the well-known admin@ut.com with the password password, which tells you the default deployment assumes a private network.

It is also not a turnkey product. The README walks an administrator through creating a school session and then a semester before anything else works, and the screenshots in the documentation are of the admin dashboard. The software assumes someone will sit down and configure the academic calendar. There is no import wizard described for bringing in an existing student body, and mass student and teacher import is listed among the features still to be migrated from v1.X.

## How the Laravel application and its containers fit together

The architecture is a conventional Laravel monolith served by Nginx. The docker-compose.yml defines three services on a bridge network called app-network. The app service builds from the Dockerfile, which starts from php:7.4-fpm, installs pdo_mysql, zip, exif, pcntl and gd, and installs Composer into /usr/local/bin. It mounts the repository at /var/www, so the code you edit on the host is the code the container runs. The webserver service is nginx:alpine and publishes port 8080 on the host to port 80 in the container, plus 443. The db service is mysql:5.7.22 with the database name unifiedtransform, a root password of your_mysql_root_password, and port 3307 published on the host.

The environment file confirms the wiring. DB_HOST is db, which is the Compose service name, and DB_PORT is 3306, the in-network port rather than the 3307 you would use from the host. DB_USERNAME is unifiedtransform and DB_PASSWORD is secret. Sessions, cache and the filesystem driver are all set to file and local, so there is no Redis or Memcached requirement despite the placeholder entries in .env.example. Queues run with QUEUE_CONNECTION=sync, meaning jobs execute in the request rather than in a worker.

The frontend build is separate. package.json is private and defines Laravel Mix scripts (dev, watch, hot, prod) with Bootstrap 4.6, jQuery 3.6 and axios 1.6 in devDependencies. Note the mismatch: the README says the framework is Bootstrap 5.X, while package.json pins bootstrap ^4.6.0. If you rebuild assets, you are compiling the version in package.json, not the one in the README.

## Installing Unifiedtransform with Docker Compose

The README gives Docker as the supported path and lists what the improved setup provides: Nginx, PHP 7.4 and MySQL 5.7. Start by cloning or downloading the repository, then create the purify directory the README asks for under storage/app, and copy the environment file.

```bash
mkdir -p storage/app/purify
cp .env.example .env
docker-compose up -d
```

After the three containers are up, the database still needs a grant for the application user. The README has you open a shell in the db container and connect as root, using the root password defined in docker-compose.yml.

```bash
docker exec -it db sh
```

```sql
mysql -u root -p
SHOW DATABASES;
GRANT ALL ON unifiedtransform.* TO 'unifiedtransform'@'%' IDENTIFIED BY 'secret';
FLUSH PRIVILEGES;
EXIT;
```

Exit that container, then open a shell in the app container and run the Laravel setup steps in the order the README gives them.

```bash
docker exec -it app sh
```

```bash
composer install
php artisan key:generate
php artisan config:cache
php artisan migrate:fresh --seed
```

When that finishes, the README says to visit http://localhost:8080 and log in as admin@ut.com with the password password. The first thing you should see is a prompt in the top navigation bar telling you no school session exists yet. Go to Academic Settings and create one, then create a semester, which the README describes as usually three to six months long. Nothing else in the application is meaningful until those two records exist. The README also documents the test path: inside the app container, php artisan test runs the feature and unit suites.

## Where Unifiedtransform will disappoint you

The feature gap is the largest limitation, and it is documented by the maintainers rather than discovered by users. The README has a section titled features yet to be migrated from v1.X to v2.X, and it lists Stripe payment, messaging, managing the library, managing income and expenses, mass student and teacher export and import, printing reports, managing certificates, and support for other languages such as Spanish. Version 2.X was built from scratch, so these are not broken features; they are absent. If your school needs fee collection through Stripe or printed report cards, v2 is not the version for you, and the README points to the v1-x-branch for continued 1.X support.

The second limitation is the deployment surface. This is not a one-command install. You create a directory by hand, edit an environment file, grant MySQL privileges manually, and run migrations with --seed, which the README uses for the initial setup and which will rebuild the schema. The seeded admin account uses a published password, so the instance is only safe behind a private network until you change it. The Dockerfile runs the application as a non-root www user with uid 1000, which is good practice, but it also means file permissions on storage/app/purify have to line up with that uid or uploads will fail.

Third, the stack is pinned to older components. PHP 7.4, MySQL 5.7.22 and Laravel 8 are all past their mainstream support windows as of the last push on 2026-06-22, and the Dockerfile still references the php:7.4-fpm image. Anyone adopting this is also adopting the job of tracking those versions. The README does not document a rollback procedure or a backup strategy for the dbdata volume, so plan for that yourself.

## How it differs from generic Laravel school management projects

The related searches around this project mostly return other school management systems, so the comparison is worth making concrete. Most Laravel college management projects on GitHub are single-purpose coursework or portfolio pieces: a CRUD panel for students and courses, sometimes with no authentication beyond a default scaffold, and no deployment story. Unifiedtransform differs in that it ships a Docker Compose stack with Nginx, PHP-FPM and MySQL, a documented environment file, a seeded admin account, and a defined first-run workflow of session then semester. That is the difference between a code sample and something an institution can actually stand up.

The other common alternative is a hosted student information system, commercial or freemium. Those give you support, upgrades and a mobile experience, and they take the data off your server. Unifiedtransform gives you the opposite trade: full control of the database and the source, no licence fee, and the operational burden of running it. The GPL-3.0 licence reinforces that. If you modify and distribute the software, the licence terms apply to your distribution, and the README notes that contributions to the repository are made under the same terms. For a school running an internal instance, that is unlikely to matter, but a vendor building a product on top of it should read the licence carefully rather than assume permissive terms. This is a description of the licence, not legal advice.

## Maintenance, upgrades and what the repository tells you

The last push to the default branch was on 2026-06-22, and the repository is not archived, so the codebase is not abandoned. The most recent release, however, is v2.0 from 2021-12-07, described as the first release of the v2.X series, alongside v1.7 and a v1.6 patch for XSS and CSRF vulnerabilities. The distance between the last release and the last push matters when you plan upgrades: there is no published v2.1 to move to, so tracking the master branch is the realistic path if you want current code, and that means you own the diff.

Upgrade cost is dominated by the pinned platform. Moving to a newer PHP or MySQL means editing the Dockerfile and the db image tag, then re-running composer install and the migrations against a copy of your data. Because .env.example sets FILESYSTEM_DRIVER to local and the database lives in the dbdata volume, a safe upgrade starts with a dump of that volume and a copy of storage/app. The README does not describe this procedure, so treat it as work you introduce rather than work the project hands you.

On licensing, GPL-3.0 is a copyleft licence. Internal use inside one school does not trigger distribution obligations, but redistributing a modified build does, and the README explicitly states that contributions are accepted under the same terms. If your organisation has a policy against copyleft dependencies, this project will not clear it. Again, that is a reading of the licence identifier, not legal advice.

## Conclusion

Adopt Unifiedtransform if you have a PHP or Laravel administrator who can own the Docker stack and the upgrade path, and if your school can work with the v2 feature set as it stands today. Do not adopt it if you need Stripe payments, messaging, a library module, income and expense accounting, report printing, certificate generation or non-English interfaces, because the README lists those as still to be migrated from v1.X. Before you commit, verify three things on your own copy: that the docker-compose.yml database credentials match what you grant in MySQL, that the storage/app/purify directory exists and is writable by the www user, and that the v1-x-branch is not the version you actually need.

## FAQ

### What are the default admin credentials for Unifiedtransform?

The README gives admin@ut.com as the email and password as the password for the admin login after a fresh seed. These are published defaults, so change them before exposing the instance beyond a private network.

### Why does the Unifiedtransform dashboard ask me to create a school session?

The README states that after logging in for the first time you see a message in the top nav bar prompting you to create a session. You create it on the Academic Settings page, then create a semester, which the README describes as usually three to six months long.

### Does Unifiedtransform v2 include Stripe payments and library management?

No. The README lists Stripe payment, messaging, managing the library, managing income and expenses, mass student and teacher export and import, printing reports, managing certificates and other language support as features yet to be migrated from v1.X to v2.X.

## Sources

- [changeweb/Unifiedtransform on GitHub](https://github.com/changeweb/Unifiedtransform)
- [License: GPL-3.0](https://github.com/changeweb/Unifiedtransform/blob/master/LICENSE)
- [Project website](https://changeweb.github.io/Unifiedtransform/)
- [README](https://github.com/changeweb/Unifiedtransform/blob/master/README.md)
- [Releases](https://github.com/changeweb/Unifiedtransform/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/changeweb-unifiedtransform
