Fork me on GitHub


An article by Gaspard Bucher

Live Preview Editing

live preview

What you see is really what you get !

You edit your text in window (A) and the exact and definitive result appears live on your local page (B). You can adjust image size, paragraphs and layout to the pixel, without ever clicking “preview”, and save the page once you are satisfied.


You decide how and where editing happens.

When you design your template, you choose how users are going to interact with the page. You can let them drag&drop, toggle status, inline edit, live edit preview etc

You can even move all editing possibilities to an old style admin interface by creating an edit mode.


You never lose anything you wrote.

Every time you edit an element, zena creates a new version.


Math support

live math

You can live edit LaTeX.

For those communicating mathematical ideas or just in need of a web based math notepad, Zena supports WYSIWYG editing of LaTeX. Simply use the [math] tag:

[math]\operatorname P [a \leq X \leq b] = \int_a^b f(x) \, \mathrm{d}x .[/math]



access groups

You decide who does what and where.

All objects have access rights defined through groups (see secure for details).

You do not need to set these on each and every page or image. Access rights are inherited from the parent until you decide to use custom rights.

Need a “girls” only section ? Now you can.


You can enforce peer-review publication workflows.

If a writer does not have the rights to publish she will have to propose the content for publication.

Reviewers publish or refuse the proposition depending on the quality of the writing and their mood.


Image support


Images automatically scale.

Once you have uploaded an image, you do not have to worry about it’s size. You define image formats for your site and the images will be resized according to the formats.

If someday you create a new layout for your site, you can change the image formats and all images in the site will be automatically resized.


Built-in editor to crop images.

The simple image editor lets you crop images. You even benefit from the versioning system in zena so you do not lose the original image.


Custom Data Models


Create classes on the fly.

Every element in the CMS is an instance of some class. Zena does not impose these classes, you create the ones that make sense to you.

You can even change these classes later if you are not happy with the ones you initially created.

relations in zenadmin

Add arbitrary relations on the fly.

Once you have defined a relation, you link objects “through” this relation. Using relations in templates is trivial:

<ul do='menus'> <!-- "menu" relation -->
  <li do='each' do='link'/>

Production ready


Optimized for fast content delivery.

Your content will be delivered fast because we use fullpage caching (server-side), browser caching (using timestamps on assets) and concurrent downloads.

When a page actually needs to be computed, we use advanced techniques to reduce CPU load (fast SQL, versions preload, attribute caching, etc).

multi site

One database, 3 mongrels, 20 websites

Zena is built from the ground up to support multiple sites in one database, each site being totally isolated from the others. This means that you can share the resources between different projects and have faster response times for less hosting costs.


Fulltext searching using sphinx.

All content is automatically indexed by the powerful sphinx search engine.

upload progression

Upload progress.

Your users will no longer fear uploading large documents with zena’s nice upload progress indicator.



multi lingual

Your articles can exist in many languages.

You do not have to worry about managing multiple sites with cross links. A new translation is just another version away. Access to the languages is done through the url:

/fr/page5.html   --   /en/page5.html



edit template

You change the templates through the web with your client on the phone.

Just enter “dev mode” and view the page you want to modify: this page will show a “development box” on top with all templates used to build it. Just click and edit the template.

title made dynamic

Designers can work on your templates: these are just “html” files.

A template in zena is composed of ordinary html with attributes added to make it dynamic (see zafu). This markup is just ignored when opened in web authoring tools. For example:

<h1 do='title'>Page Title</h1>


Developer friendly

config gem zena

Code separation.

You use zena by requiring it with config.gem. This means that the custom code and settings of your very special application lives in a totally different place from the source code of the CMS.


Enable/disable features through bricks.

“Bricks” are equivalent to Rails plugins for zena. They provide migrations in their own namespace, tests, tasks and can be activated through a simple yaml configuration file.

rubyless icon

Clean API to provide new methods for the templates.

Rubyless compiles ruby to “safe” ruby. It is a reduced ruby without dynamic typing. In your classes, you declare methods callable on instances of the class like this:

safe_method :name => String


Some other things you might be interested in: