This file contains version-specific upgrade information, breaking changes, and migration instructions.
After running composer update neuron-php/cms, follow these steps:
-
Run the upgrade command:
./vendor/bin/neuron cms:upgrade
-
Review and apply migrations: The upgrade command will detect new migrations. Review them and run:
./vendor/bin/neuron db:migrate
-
Clear caches:
./vendor/bin/neuron cache:clear # if applicable -
Test your application to ensure compatibility with the new version.
These features ship with the next CMS release. After composer update, run
php neuron cms:upgrade then php neuron db:migrate. Stock CMS views are
served from the package. cms:upgrade prunes unmodified published copies
and leaves edited site views alone. Do not use --force-views if you
customized layouts. Copy a single view with php neuron cms:views:publish.
New migrations (do not edit existing ones):
20260915120000_create_carousels_tables.php20260915140000_create_menus_tables.php20260915150000_add_seo_to_posts.php20260915180000_create_testimonials_tables.php20260915190000_create_faqs_tables.php20260916120000_create_redirects_table.php
- Named carousels, testimonials, and FAQ groups (
[carousel],[testimonial],[faq]) - CMS-managed header and footer menus (
cms_menu()) - HTTP 301/302 redirects (Content → Redirects)
- Public breadcrumbs (
cms_breadcrumbs(), JSON-LD) - SEO pack:
/sitemap.xml,/robots.txt, Open Graph, per-post meta - Configurable homepage (
homepage.mode:blog,page,landing) - Paginated blog listings (
blog.posts_per_page) - Site-first / package-fallback view resolution. Stock admin and feature views are served from the CMS package; site copies override them.
cms:upgradeprunes unmodified published views.cms:views:publishcopies one view for customization.
- Update
neuron-php/routingif you wantRouter::setRedirectResolver(). Until that method is installed, keepNeuron\Cms\Listeners\ApplyRedirectListeneronrequest.received. - If the admin layout is customized, add Content links for Carousels, Testimonials, FAQs, Menus, and Redirects.
- If the public layout is customized, include
partials/navigation.php/partials/footer-navigation.php(or callcms_menu()), and callcms_breadcrumbs()/cms_breadcrumb_json_ld(). - Do not rewrite
'/'to'/blog'unless you intend to bypass the Home controller.
See the Site Builder Guide and cms/ROADMAP.md for deferred features.
- New Migration:
20251205000000_add_two_factor_and_timezone_to_users.php- Adds
two_factor_recovery_codescolumn (TEXT, nullable) for storing 2FA backup codes - Adds
timezonecolumn (VARCHAR(50), default 'UTC') for user timezone preferences
- Adds
- Two-factor authentication recovery codes support
- Per-user timezone settings
- None
- Run
php neuron cms:upgradeto copy new migrations to your installation - Run
php neuron db:migrateto apply the schema changes - Existing user records will have
timezoneset to 'UTC' by default
- Added comprehensive migration guidelines to prevent schema drift
- See
MIGRATIONS.mdfor detailed migration best practices - Important: Never modify existing migrations; always create new ones for schema changes
- Complete CMS installation system
- User authentication and authorization
- Post, category, and tag management
- Admin dashboard and member areas
- Email verification system
- Password reset functionality
- Maintenance mode
- Job queue integration
users- User accounts with roles and authenticationposts- Blog posts and contentcategories- Content categorizationtags- Content taggingpost_categories- Many-to-many relationshippost_tags- Many-to-many relationshippassword_reset_tokens- Password reset token trackingemail_verification_tokens- Email verification trackingjobs- Job queuefailed_jobs- Failed job tracking
For new installations:
php neuron cms:installError: SQLSTATE[HY000]: General error: 1 no such column: column_name
Cause: Your database schema is out of sync with the CMS code.
Solution:
- Check for new migrations:
php neuron cms:upgrade --check - Copy new migrations:
php neuron cms:upgrade - Run migrations:
php neuron db:migrate
Problem: Migration file exists but wasn't run.
Solution:
# Check migration status
php neuron db:status
# If migration shows as pending, run it
php neuron db:migrate
# If migration isn't tracked, it may need to be marked as run
# See MIGRATIONS.md for details on using --fake flagProblem: Running cms:install with reinstall overwrites customized views.
Solution:
- Use
php neuron cms:upgradeinstead. It prunes unmodified published views so stock UI comes from the package. Edited views are left alone. - Use
php neuron cms:upgrade --skip-viewsto skip view pruning entirely - Use
php neuron cms:views:publish path/to/view.phpto copy one package view into the site - Use
--prompt-viewsto review files that differ, or merge by comparing package views with your copies
Problem: After composer update, application breaks with database errors.
Cause: New CMS code expects columns that don't exist in your database.
Prevention:
- Always run
neuron cms:upgradeaftercomposer update neuron-php/cms - Review and apply any new migrations before deploying to production
- Test in development/staging environment first
| Version | Release Date | Key Changes |
|---|---|---|
| 2025.12.5 | 2025-12-05 | Added 2FA recovery codes, user timezones, migration docs |
| 2025.11.7 | 2025-11-07 | Initial CMS release |
- Documentation: See
README.md,MIGRATIONS.md - Issues: Report bugs at GitHub Issues
- Migration Help: See
MIGRATIONS.mdfor a comprehensive migration guide