v8.0.0
AlchemyCMS 8.0.0
This is a major release with significant new features, architectural improvements, and modernization of the admin interface compared to the 7.4 series.
Highlights
🌙 Dark Theme Support
A complete dark theme has been added to the admin interface (#3251), with separate CSS bundles for light and dark themes (#3379).
The UI now uses CSS custom properties instead of Sass variables for theming (#3242).
📦 Active Storage Support
Alchemy now supports Active Storage as an alternative to Dragonfly for file storage (#3283).
The Dragonfly integration has been extracted into an adapter pattern, making it easy to switch between storage backends (#3278).
⚙️ Type-Safe Configuration
A new DSL-based configuration system with type-safe options has been introduced (#3178).
Configuration options are now accessed via Alchemy.config accessors instead of hash keys (#3275).
📋 Definition Models
Page layouts, element definitions, and ingredient definitions have been converted to ActiveModel classes (#3263, #3264, #3266), providing better encapsulation and validation.
🔍 Advanced Filtering with Ransack
The admin interface now uses Ransack for filtering resources (#3215), with support for date/time pickers (#3231) and custom format validations (#3225).
New Features
Frontend/API
- Configurable cache-control headers (#3347)
Admin
- Element icons - Set custom icons for elements in the sidebar (#3356)
- Attachment "deletable" filter showing usage (#3335)
- New welcome screen design (#3260)
- New pagination UX (#3259)
- Turbo Confirms for confirmation dialogs (#3258)
- Turbo Frame/Streams for clipboard operations (#3255)
- Browser validations enabled for forms (#3401)
- Locale select component (#3400)
- New info dialog with light/dark logo support (#3396)
- Delete multiple pictures in background (#3387)
- Default picture archive order set to latest (#3369)
- Update checks service for version notifications (#3495)
Security
- SVG sanitization after upload (#3499)
- Filename sanitization before upload (#3376)
YAML.safe_loadforusers.ymlseeder (#3503)
Developer Experience
- Propshaft support - Works with both Sprockets and Propshaft (#3066)
- view_component v4 support (#3346)
- JS test suite migrated to Vitest from Jest (#3300)
- Bun as JavaScript bundler and script runner (#2994)
- fetch() over XHR for AJAX requests (#3239)
- Icon sprite compilation (#3227)
- Tidy task to remove legacy essence tables (#3382)
Page.all_ingredientsassociation for easier ingredient access (#3507)Numberingredient type for numeric values (#3224)
Breaking Changes
Rails & Ruby Requirements
- Dropped Rails 7.0 support - Requires Rails 7.1+ (#3267)
- Stopped testing Ruby 3.1 - Ruby 3.2+ recommended (#3223)
Removed Features
- Ingredient view partials removed - Use view components instead (#3254)
- Frontend elements controller removed (#3057)
- Admin attachments download action removed (#3282)
- dragonfly_svg plugin removed (#3247)
- 7.x deprecations removed (#3041)
- 7.x upgraders removed (#3039)
- Three letter urlname restriction removed (#3353)
Configuration Changes
- Configuration now uses Alchemy.config with typed accessors instead of hash access
- New initializer template - run the upgrade task to copy it (#3268)
Alchemy::Configis deprecated in favor ofAlchemy.configAlchemy.enable_searchabledeprecated forAlchemy.config.show_page_searchable_checkbox(#3188)
Dependency Updates
- TinyMCE 8 (#3359)
- Shoelace 2.2.0 (#3364)
- SortableJS 1.15.6 (#3365)
- Gutentag v3 allowed (#3486)
- Puma 7 (#3357)
Migration Guide
- Update your Gemfile:
gem "alchemy_cms", "~> 8.0" - Run
bundle update alchemy_cms - Run
rails alchemy:upgrade - Update your configuration to use the new
Alchemy.configaccessors - If using custom ingredient views, migrate to view components
- Review removed deprecations and update accordingly
Full Changelog
For a complete list of all changes, see the https://github.com/AlchemyCMS/alchemy_cms/blob/main/CHANGELOG.md or compare releases on GitHub:
v7.4.0...v8.0.0