The 1.4.0 release introduces six breaking changes that affect most existing installations. Chief among them is the new slug system, which replaces underscores with hyphens and enforces lowercase across all URL segments. This guide walks through each change, provides before-and-after code comparisons, and includes a migration script that automates 80% of the upgrade process.
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.