The slug migration is the change with the widest blast radius. Every URL on your site that contains an underscore will break unless you run the migration script. JekCMS 1.4.0 includes a CLI command: php tools/migrate-slugs.php --dry-run lists every affected record before making changes. Run it on a database backup before touching production.

Config Superglobal Removed

The second significant change is the removal of the global $config superglobal. Configuration values must now be accessed through Config::get('key') or the equivalent helper function config('key'). Any theme or plugin that reads $config directly will fail with an undefined variable error on 1.4.0. Search your codebase with grep -r "\$config\[" . before upgrading.

Database-Based Session Storage

Session handling has changed from file-based to database-based storage. This improves reliability on multi-server setups and eliminates the permissions issues that caused intermittent login failures on some shared hosts. The migration requires running php tools/migrate-sessions.php before the first request hits the upgraded installation. Users already logged in will be signed out once.

The Migration Script

The migration script at tools/migrate-1.4.php handles slug rewriting, internal link replacement in post content, cache flushing, and sitemap regeneration. It logs every change to logs/migration-1.4.log. The 80% automation figure excludes custom post type slug remapping, which requires a type_map configuration file that you provide.