UserFrosting
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.

Features

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.

Sign-in 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.

Optimization

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.

Documentation

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.

FAQ

  • 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!

Contributors

Louis Charette


Louis is a civil engineer from Montréal, Québec who has a passion for coding. Over the last 10+ 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. Louis is one of the main contributors for SimpsonsCity.com.

Jordan Mele


Jordan's a developer at Mayvin Training and a student studying Computer Science at the University of Wollongong. His passion is creating software-based solutions to overcomplicated problems, without taking control away from the user. He's also Australian.

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

v4.3.0-beta.1
07/28/19

See Upgrade Guide : https://learn.userfrosting.com/develop/upgrading/42-to-43

Changed Requirements

  • Changed minimum PHP Version to 7.1

Changed Composer Dependencies

  • Updated Laravel Illuminate packages to 5.8
  • Updated Twig to 2.11
  • Updated PHPUnit to 7.5
  • Updated Mockery to 1.2
  • Updated nikic/php-parser to 4.2.2
  • Updated PHPMailer/PHPMailer to 6.0.7
  • Updated league/csv to 9.2.1
  • Updated symfony/console to 4.3
  • Updated vlucas/phpdotenv to 3.4.0

Changed Frontend Dependencies

  • Updated handlebar from 3.0.x to 4.1.2
  • Updated AdminLTE theme to 2.4.15 (#994; #1014; #1015)
  • Updated Font Awesome to 5.9 (#957; #870)

Added

  • Separated BakeCommand class into multiple methods to make it easier for sprinkle to add custom command to the bake command.
  • Allow null group assignment for users (#867; #964)
  • Password can now be set manually when creating new user (#1017; #763)

Fix

  • bake command return error if account sprinkle is not included (#944)
  • Email is case-sensitive (#881; #1012)
  • Update vulnerable [email protected]^3.0.3 to ^4.0.12 (#921)
  • Moved handlebars-helpers.js from core to admin sprinkle (#897)
  • Remove Package guzzle/guzzle is abandoned, you should avoid using it. Use guzzlehttp/guzzle instead message (#1016)

Changed

  • Account sprinkle now extend the Core BakeCommand class to add the create-admin to the general bake command. Any sprinkle already extending the Core BakeCommand might need adjustments.
  • Updated custom Eloquent relations (belongsToManyThrough, morphToManyUnique, belongsToManyUnique, morphToManyUnique, etc.) to support Laravel 5.8. See The belongsToMany Method.

Removed

  • Removed belongsToManyConstrained (deprecated in 4.1.6)
  • Remove league/flysystem-aws-s3-v3 and league/flysystem-rackspace as core dependencies (#1018)

Latest Builds

userfrosting/UserFrosting Build #871
08/16/19

PHP 5.6 is dead. Re-enable redis Travis test (Louis Charette)
State: passed
Started at: 2019-08-16 01:00:35 UTC
Finished at: 2019-08-16 01:47:20 UTC

userfrosting/UserFrosting Build #870
08/16/19

Update Locale File Keys (#1006) * update ar locale files * update de_DE locale files * update es locale files * update es_ES locale files * update fa locale files * update fr_FR locale files * fix it_IT locale files * update pt_PT locale files * fix th_TH locale files * fix tr locale files * update zh_CN locale files (Louis Charette)
State: passed
Started at: 2019-08-16 00:42:41 UTC
Finished at: 2019-08-16 01:22:27 UTC

userfrosting/UserFrosting Build #869
08/15/19

Fix indentation (Louis Charette)
State: passed
Started at: 2019-08-15 01:07:48 UTC
Finished at: 2019-08-15 01:46:57 UTC

userfrosting/UserFrosting Build #868
08/14/19

4.2.3 Release (GitHub)
State: passed
Started at: 2019-08-14 12:45:19 UTC
Finished at: 2019-08-14 13:44:56 UTC

userfrosting/UserFrosting Build #867
08/14/19

Fix default.php config (Amos Folz)
State: passed
Started at: 2019-08-14 01:03:26 UTC
Finished at: 2019-08-14 01:42:33 UTC