# Django Evolution — Database Migrations Evolved
   
**GitHub:** https://github.com/beanbaginc/django-evolution/
**PyPI:** https://github.com/beanbaginc/django-evolution/
**Status:** Under active development / released / used in production
Django Evolution is an add-on to the [[Django]] web framework that helps manage changes to the database schema.
"But wait, why would I want this? Doesn't Django have migrations built-in? Isn't this the same thing?"
Yes, yes it does, and it mostly is. In fact, Django Evolution works comfortably alongside Django's migrations, helping you get the best out of both.
There are cases where you might want an alternative to migrations:
1. You're still stuck on Django 1.6 or earlier and need to make changes to your database.
Django 1.6 is the last version without built-in support for migrations, and there are still codebases out there using it. Django Evolution can help keep upgrades manageable, and make it easier to transition all or part of your codebase to migrations when you finally upgrade.
2. You're distributing a self-installable web application, possibly used in large enterprises, where you have no control over when people are going to upgrade.
Django's migrations assume some level of planning around when changes are made to the schema and when they're applied to a database. The more changes you make, and the more versions in-between what the user is running and what they upgrade to, the longer the upgrade time.
If a customer is in control of when they upgrade, they might end up with _years_ of migrations that need to be applied.
Migrations apply one-by-one, possibly triggering the rebuild of a table many times during an upgrade. Django Evolution, on the other hand, can apply years worth of evolutions at once, optimized to perform as few table changes as possible. This can take days, hours or even _seconds_ off the upgrade time.