Modern user management for php

Chances are you're here because you have a great idea for a user-oriented website.

Whether it's a private forum for your gaming community, an employee management system for your business, or the next big social network, you want to get started on your awesome new idea as quickly as possible. You don't want to spend your time reinventing user sign-in and management features for the millionth time. Lucky for you - UserFrosting delivers all of this and more!

Screenshot of a login page

A framework and an application.

UserFrosting is a web framework for PHP. Like other web frameworks, it offers a complete toolbox of programmatic components for building your application.

Unlike other PHP frameworks, it's a fully-functioning user management application, right out of the box. And, it's fully extendable so that you can easily create the custom features you need.

Screenshot of the user management table

Step up your game.

UserFrosting is designed to bring new and returning developers up to speed with the modern PHP community. You'll be comfortably introduced to Composer (the dependency manager), object-oriented design patterns, and the PHP Standards Recommendations (PSR), making your code better structured and easier to manage.

Screenshot of the manage user permissions modal

What's more, you'll learn how to use Node.js and Bower to cleanly manage client-side packages (Javascript and CSS). Transform yourself from a code monkey into a software engineer.


Modern Specs

90's fashion might be back in style, but 90's development practices are not. Our detailed installation guide painlessly introduces you to the modern developer's toolkit.

System

Login and persistent sessions ("remember me") are ready out of the box. Basic user functionality is already taken care of for you!

Fully extendable

New in version 4, the modular Sprinkle system lets you implement your application without ever modifying UF's core codebase. Sprinkles can also be used to implement themes, plugins and more - see what our community has to offer!

Admin user management

Built-in user management page lets you view, search, and sort your users, create new user accounts, and edit existing ones. Also provides tools to disable or delete users, manage permissions, and issue password resets.

Separation of concerns

Give the gift of maintainability to your future self, no spaghetti code here.

Roles and permissions

Powerful role-based access control (RBAC) allows you to define fine-grained, programmatic rules for user access, then manage those permissions through the role management page.


Define and compile asset bundles with Node.js, leverage caching for template rendering and route resolution, or use Laravel's caching service to cache arbitrary resources. Just about every component can be optimized for production.

User dashboards

Build beautiful dashboards for your users with the default AdminLTE theme.


Clear, jargon-free guides for every aspect of the framework. More than just the "how" and "what" - we explain the "why", too. Get answers fast.


  • What's the difference between a login script and a framework?

    At least 90% of the time spent on a software project is spent not on writing new code, but reading and debugging existing code. Therefore, it is important to put a lot of care into producing a well-designed application.

    Starting with a framework like UserFrosting is a good way to ensure that you (or others) will be able to understand and maintain your code months or years after the initial work is completed. Anything you find online that bills itself as a "login script" is probably not going to help you produce a piece of software that is built to last.

    While a framework involves a bit of a learning curve compared to "plain PHP," you'll come out a better, more mature developer with a finished project that won't need to be constantly rewritten.

  • Why should I use this? The other options seem easier.

    It may seem simpler to integrate one of the thousands of PHP login scripts that show up in a Google search - and perhaps it would be, at first! But over time, a purely procedural approach tends to leave you with a big ball of mud - a project that is poorly structured and nearly impossible to maintain.

    Furthermore, many of these "user scripts" tend to lack proper maintenance and long-term community support. Bugs and other issues in their codebase can easily end up being your problem, and you may end up needing to significantly rewrite these scripts when major design and security issues come up.

    UserFrosting does take a little more work to set up and learn at first, but it's worth it and we're here to help. The concepts and design principles you'll learn as you write (or rewrite) your project with UserFrosting go far beyond this framework, and even PHP itself! You'll come out a stronger software developer with a more robust application - how many other login scripts can say that?

  • Can I integrate this with my existing scripts?

    Sort of. Actually, you will integrate your existing PHP scripts into a new UserFrosting installation, by implementing a custom Sprinkle. The Sprinkle system helps you keep your code completely separate from the core UserFrosting codebase. This makes it easy to upgrade when a new version of UserFrosting comes out. And, since UserFrosting builds on well-known and widely supported components like Slim, Twig, and Eloquent, much of your code will still be usable even if you decide to move away from UserFrosting in the future.

  • How much does UserFrosting cost?

    UserFrosting is completely free and open source under the MIT license. You can use it for any type of project, even commercial applications - all you need to do is include a copy of the license in any code you distribute that is built with UF. That being said, we always welcome contributions of time, code, and/or money!


Louis Charette

Louis is a civil engineer from Montréal, Québec who has a passion for coding. Over the last 15+ years, he has worked on many small projects, learning everything on his own before getting involved with bigger projects. Louis created UserFrosting's Internationalization module, a module crucial to him as a multi-lingual software developer in Canada, where software requires support for both official languages, English and French, as well as UserFrosting's Bakery CLI interface. Overall, he likes to share his knowledge by helping others, the same way he was helped when he first started coding.

Jordan Mele

Jordan's an Australian Software Engineer at Canva. His passion is creating simple yet intuitive software-based solutions for problems that would otherwise be tedious and/or difficult to solve, while keeping the user in control.

Sarah Baghdadi

Sarah toils behind the scenes to make our website and documentation friendlier and more usable. She's a rising web designer who writes HTML and CSS. Sarah completed her BFA in photography from Indiana University in 2017.

Josh Norris

Josh is a wrongly titled digital marketing assistant who is responsible for everything from IT through to social media management. His passion for web development was sparked back in 2011 when trying to access a hidden function on a website due to it's terrible UI. Josh manages the UserFrosting Facebook presence providing updates to the community and extending the reach of UserFrosting. He is often stalking chat at 'weird' hours due to his east coast Australian timezone where he is often the first person to respond. Currently a Computer Science student at the University of Wollongong, he gets way less sleep than he should.

Srinivas Nukala

Srinivas is a web applications architect, with a passion for open source technologies. He is experienced in building SaaS (software as a service) web applications and enjoys working on open source projects and contributing to the community. He has a Masters in Computer Science from Pune University, India.

Abdullah Seba

Abdullah Seba is an electronic engineering hobbyist and noob developer who is into networking, mining and any cool tech. He also helps out with UserFrosting's testing and support in chat.

Latest Release


This is the first pre-release of UserFrosting 5 !

IMPORTANT: This version is unstable and meant for development purpose only. It's should not be used on your own project. Things are not 100% final and no documentation is provided.

This version is meant as a the first stepping stone of the big V5 released, a way to "freeze frame" the current code and as a first technical release test. It's also meant for UserFrosting developers to get a first glimpse of what's coming up.

While no major changes are planed at this stage, things could still be moving around. No breaking changes might not be documented during the alpha stage. Limited support for UF5 can be found for this alpha on the chat or GitHub Discussions.


  • PHP 8.0 or 8.1
  • Node.js 14 or higher
  • Database (MariaDB, MySQL, Postgres, SQLite, or SQL Server)
  • Composer 2


To install locally, you can use theses commands, as long as you met the requirements above (i.e. PHP and Node installed). When running the bake command, you can select sqlite if you don't have a database engine installed.

git clone -b develop-5.0
cd UserFrosting/
composer install
php bakery bake

Seeds are currently not run automatically. To manually run seeds (to create default groups, roles and permissions), run this command:

php bakery seed

Website can be locally served with the following command and then be accessed at http://localhost:8888.

php -S localhost:8888 -t public

What is UserFrosting 5 ?

UserFrosting 5 is the culmination of more than a year of work by @lcharette. It is a complete rewrite of the backend PHP code. And by complete, we really mean complete. No class was left untouched! The main updates are :

  • Slim 3 upgraded to Slim 4
  • Pimple Container replaced with PHP-DI
  • Frontend assets management replaced with Webpack Encore
  • New Sprinkle system, now with extra modularity
  • Skeleton type main repo for easier
  • Built in sprinkle are now managed by Composer
  • New Event dispatcher and listener services
  • New Bakery command for easier debugging
  • 100% test coverage and quality check through PHPStan
  • And so much more

The Slim migration itself is a big deal. While brining UF to a more modern era, it had the most impact on the core changes applied to the UserFrosting framework. Most changes were made in response to the new Slim 4 requirements and changes. It also required the use of a new Dependency Injector, which itself really brought UF5 to a whole new level. You should really check out PHP-DI, it's awesome!

Basically, UF5 uses updated dependencies, all of existing code have been updated to new standard and new test coverage should provide better long term stability.

What UserFrosting 5 isn't ?

UF5 is not a drop-in replacement for UF4. The whole backend has been rewritten, with a new container, sprinkle system, etc. which will require most sprinkle to be updated manually.

UserFrosting 5 also offers the same frontend as UserFrosting 4. But the bases have been set for the future, with Webpack Encore and the current AdminLTE theme separated in it's own Sprinkle providing the necessary tools for Vue.js or other similar frontend.

Known bugs and missing features

While most features are ready at this point, some things are not:

  • [Core] Default seeds are not run automatically on Bake
  • [Core Sprinkle] CSRF service not reimplemented yet.
  • [Core Sprinkle] Clear cache bakery command is not implemented yet.
  • [Core & Admin Sprinkles] Sprunje pagination might not work properly.
  • [Admin Sprinkle] Enabling/Disabling using the dropdown a user is not enabled (requires CORS).
  • [Admin Sprinkle] Clear cache button doesn't work.
  • [AdminLTE Theme] Alert messages might not be properly displayed, for example when a login error should be shown
  • [Webpack Encore] Sprinkle entries needs to be manually copied in their parent sprinkle (Will require a custom plugin or contribution to Encore)
  • [General] Some test coverage still need to be added

What's next? When will it be stable? How can I help?

There's currently no ETA on the release date of the first stable version. For now, alpha released are planed, when necessary, until all features and code coverage are done. Once this is done, the first beta should be released and work will start on the documentation. Once this is also done, the first stable release should be released.

The best way to help is to contribute to the code and create pull requests. You can also help by testing the current release and signaling bugs by opening a new issue. Just make sure to reference V5!

Alternatively, you can contribute through our Open Collective or buying a coffee round.

Latest Builds

userfrosting/UserFrosting Build #1327

Update (GitHub)
State: passed
Started at: 2021-03-03 13:25:06 UTC
Finished at: 2021-03-03 13:59:38 UTC

userfrosting/UserFrosting Build #1326

Update (GitHub)
State: failed
Started at: 2021-02-24 13:24:12 UTC
Finished at: 2021-02-24 13:57:56 UTC

userfrosting/UserFrosting Build #1325

Update (GitHub)
State: passed
Started at: 2021-02-17 13:23:40 UTC
Finished at: 2021-02-17 13:56:48 UTC

userfrosting/UserFrosting Build #1324

Update (GitHub)
State: passed
Started at: 2021-02-10 13:32:32 UTC
Finished at: 2021-02-10 14:46:25 UTC

userfrosting/UserFrosting Build #1323

Update (GitHub)
State: passed
Started at: 2021-02-03 13:37:41 UTC
Finished at: 2021-02-03 15:19:44 UTC