Get Started
v0.0.1
Mishka CMS is an open-source content management system built with Elixir, Phoenix and the Ash Framework. You build and edit pages in the browser, publish them without a redeploy, and run many websites from one install. This page says what the CMS is, helps you choose where to read next, and lists the six things it does.
What Mishka CMS is
Mishka CMS stores a site's pages, layouts, components, error pages, stylesheets and JS hooks as rows in PostgreSQL. You edit them in the admin dashboard, in the visual editor or as code. When you publish, the CMS compiles the change while it runs, so visitors get it without a deploy.
One install serves many sites. A site is a domain with its own pages, accounts and settings, and the CMS finds the site from the host name of each request. A master account belongs to no site, manages all of them, and signs in at /auth?master_user=true. See Sites, masters and global records.
The CMS ships with two extensions, Blog and Documentation. An extension adds admin screens, permission names, components and pages to a site, and it attaches to the CMS through plugins. See Extensions and plugins. To build an extension of your own, start with Draw an extension's pages in the site layout.
Pick a path
The docs hold four kinds of page. Choose by what you need to do now.
- Tutorials take you to a first result, one step at a time. Start with Install Mishka CMS and sign in, then follow Your first site: edit the starter pages and Start a blog.
- How-to guides solve one task, such as Build a page in the visual editor, Add a site and its domain, Give a teammate access or Install an extension.
- Reference lists the facts you look up: Permission names, Settings, Page fields, Visual editor keys, commands, blocks and starters and Plugin events.
- Concepts explain how a part works and why: How permissions work, Drafts, publishing and versions, Languages and language editions, Components and UI kits and Headless or coupled.
What it does
Six things carry most of the CMS. Each one links to the page that explains it.
A visual editor
The visual editor builds a page on a live canvas. You place sections and components, edit text in place and check each screen size. The editor keeps your work in a draft until you publish, and a code drawer opens the template behind the page. Start with Build a page in the visual editor.
An AI assistant
The editor has an Assistant tab that sends a request about the selected element to an AI model. The CMS ships no model, so until you connect one the tab says the Assistant is not available yet, and a request changes nothing. The edits of a connected model go through the same history as yours, so you can undo them. See Connect a model to the editor's Assistant.
Languages
Each site chooses the languages it publishes in and whether its addresses name them, as in /blog and /fa/blog. A page can answer several languages, either as one page per language or as one page whose path starts with /:lang, and the words of the interface go through t() so they translate too. See Translate a page and Languages and language editions.
Live updates
When you publish, the CMS compiles the page in the background. A visitor who has the page open gets the site's new stylesheet at once, and a This page was updated. banner with a Refresh button when the site's script changes. See How a page reaches visitors.
Access control
The CMS checks every action against permission names such as admin:dashboard:runtime:page. A wildcard covers a branch of names, the dashboard and the API count separately, and you can lock a page or a post to members. See How permissions work.
A JSON:API
Each site runs in one of three modes. Hybrid serves pages and a JSON:API, Phoenix Only serves pages, and API Only serves the JSON:API for a frontend of your own. See Headless or coupled.
Next steps
- Install Mishka CMS and sign in: run the setup wizard and open the admin dashboard.
- How permissions work: read this before you invite anyone else to the admin.