AlchemyCMS
Alchemy is an open source CMS engine written in Ruby on Rails.
Read more about Alchemy on the website and in the guidelines.
[!CAUTION] This main branch is a development branch that can contain bugs.
For productive environments you should use the current Ruby gem version, or the latest stable branch (8.0-stable).**
🏆 Main sponsor
✅ Features
- Flexible templating that separates content from markup
- A rich RESTful API
- Intuitive admin interface with live preview
- Multi language and multi domain
- Page versioning
- SEO friendly urls
- User Access Control
- Build in contact form mailer
- Attachments and downloads
- On-the-fly image cropping and resizing
- Extendable via Rails engines
- Integrates into existing Rails Apps
- Resourceful Rails admin
- Flexible caching
- Hostable on any Server that supports Ruby on Rails, a SQL Database and ImageMagick
🎮 Demo
Visit the existing demo at https://demo.alchemy-cms.com/
- Login:
demo - Password:
demo123
🚂 Rails Version
This version of AlchemyCMS runs with >= Rails 7.2
- For a Rails 7.1 compatible version use the
8.0-stablebranch. - For a Rails 7.0 compatible version use the
7.4-stablebranch. - For a Rails 6.1 compatible version use the
7.0-stablebranch. - For a Rails 6.0 compatible version use the
6.1-stablebranch. - For a Rails 5.2 compatible version use the
5.3-stablebranch. - For a Rails 5.0 or 5.1 compatible version use the
4.5-stablebranch. - For a Rails 4.2 compatible version use the
3.6-stablebranch. - For a Rails 4.0/4.1 compatible version use the
3.1-stablebranch. - For a Rails 3.2 compatible version use the
2.8-stablebranch. - For a Rails 3.1 compatible version use the
2.1-stablebranch. - For a Rails 3.0 compatible version use the
2.0-stablebranch. - For a Rails 2.3 compatible version use the
1.6-stablebranch.
[!NOTE] For Rails
>= 8, use Alchemy version>= 8.0.0awhich comes with propshaft support. If you are on Rails>= 8with an older Alchemy version, you will need to temporarily comment out thepropshaftgem.
💎 Ruby Version
Alchemy runs with Ruby >= 3.1.0 including 4.0.
For a Ruby 3.0 compatible version use the 7.2-stable branch.
For a Ruby 2.4 compatible version use the 5.2-stable branch.
For a Ruby 2.2 compatible version use the 4.1-stable branch.
For a Ruby 2.1 compatible version use the 3.6-stable branch.
For a Ruby 2.0.0 compatible version use the 3.2-stable branch.
For a Ruby 1.9.3 compatible version use the 3.1-stable branch.
For a Ruby 1.8.7 compatible version use the 2.3-stable branch.
⌨️ Installation
Stand Alone Installation
If you do not have a Rails project yet or just want to check out Alchemy, then use this Rails template.
Make sure you have Rails installed first:
$ gem install rails
Then create a new Rails project with:
$ rails new -m https://raw.githubusercontent.com/AlchemyCMS/rails-templates/master/all.rb <MY-PROJECT-NAME>
and follow the on screen instructions.
Manual Installation
If you want to manually install Alchemy into your Rails project follow these steps.
Add the Alchemy gem:
Put Alchemy into your Gemfile with:
$ bundle add alchemy_cms
Set the authentication user
Now you have to decide, if you want to use your own user model or if you want to use the Devise based user model that Alchemy provides and was extracted into its own gem.
Use Alchemy user
If you don't have your own user class, you can use the Alchemy user model. Just add the following gem into your Gemfile:
$ bundle add alchemy-devise
Then run the alchemy-devise installer:
$ bin/rails g alchemy:devise:install
Use your User model
In order to use your own user model you need to tell Alchemy about it.
The best practice is to use an initializer:
# config/initializers/alchemy.rb
Alchemy.configure do |config|
config.user_class = 'YourUserClass' # This has to be configured
config.current_user_method = 'current_admin_user' # Defaults to 'current_user'
config.signup_path = '/your/signup/path' # Defaults to '/signup'
config.login_path = '/your/login/path' # Defaults to '/login'
config.logout_path = '/your/logout/path' # Defaults to '/logout'
config.logout_method = 'http_verb_for_logout' # Defaults to 'delete'
config.unauthorized_path = '/some/public/page' # Defaults to '/'
end
Alchemy needs a alchemy_roles column in your database for the RBAC to work.
Alchemy provides a migration generator that adds these tables to your users table.
$ bin/rails g alchemy:user_columns_migration --table-name=my-users-table
Then include this module in your model.
class User
include Alchemy::UserMethods
end
Please follow this guide for further instructions on how to customize your user class even more.
4. Install Alchemy into your app:
After you set the user model you need to run the Alchemy install task:
$ bin/rails alchemy:install
Now everything should be set up and you should be able to visit the Alchemy Dashboard at:
*) Use your custom path if you mounted Alchemy at something else then '/'
🏗 Customization
Alchemy has very flexible ways to organize and manage content. Please be sure to read the introduction guide in order to understand the basic idea of how Alchemy works.
Custom Controllers
Beginning with Alchemy 3.1 we do not patch the ApplicationController anymore. If you have controllers that loads Alchemy content or uses Alchemy helpers in the views (i.e. render_menu or render_elements) you can either inherit from Alchemy::BaseController or you include Alchemy::ControllerActions in your controller (that's the recommended way).
Custom admin interface routing
By default, Alchemy Dashboard is accessible at <http://example.com/a