Evaluation of Midgard CMS

This is an evaluation of Midgard CMS test site against GnomeWeb/CmsRequirements . Feedback is welcome.


Only testers going through the whole GnomeWeb/CmsRequirements/CmsTest can add their points. You can add your comments on the evaluations made.

Ranks: 0 Not supported - 1 Partially possible - 2 Possible but complex - 3 Possible and easy










Publish static pages



Joachim: not top-level. Quim: preview only via Aegir. Henri: You can preview and publish after approval if you utilize staging setup of Midgard. As to top-level pages, you just need to have appropriate permissions for that.

Publish news



Quim: preview only via Aegir. Henri: See above.

Define friendly URL of a page, including subdirectories



Quim: "Folders" can be renamed and they act as subdirs; you can't assign a URL like wgo/about to a page though; getting rid of '.html' seems not easy; the URL of wiki pages is linked to the title of the page, isn't it. Henri: the .html ending is not mandatory to use, depends how you set up the site navigation. You can also define your own redirection rules

Publish images in a page



Publish attached files in a page


Publish podcasts / screencasts


Quim: there is no module for that, but I guess you can do whatever at a code level. Henri: You just have to configure the datamanager schema used for news items to include the podcastable MP3 file (or whatever)

Integrate aggregated feeds in a page


Quim: would this be done coding? Henri: no coding needed, just install the net.nemein.rss component. Now the server has only a small list of components installed.

Pre-publish a page making it available only to users with editing permissions


Quim: via Aegir. Henri: See staging/live above. You can also use ACLs here by removing Read permission from "Everyone" and giving it to content editors.

Customization of forms for different content types (i.e. case studies)


Quim: I guess you can do whatever at a code level. Henri: Again, no real coding needed, just defining page schemas via datamanager. See the Snippet area in Aegir for examples.

Set feeds for new content


Quim: news are available only at "news". Henri: Feeds are available for some components, but not all. For example, also Wiki publishes feed of latest updated pages.

Track and diff of all changes made

Henri: see the wiki part for this, though now the default UI isn't exactly intuitive.

Notify that a page has been updated


Henri: The watcher system in Midgard enables you to plug in whatever notifiers you need. For example, net.nemein.ping watches for news item updates and pings several indexing services about them.

Revert changes

Henri: supported by RCS subsystem, but not integrated to UI.

Display when a page was last updated

Henri: This is up to the page template. For example, now the last update time is already shown in page meta tags.

Create localizations in the GNOME supported languages

Quim: i18n is not implemented in the test site, there fore can't see how a new language version is created; can't find the list of languages supported by Midgard.

Get language settings from browser


Quim: Henri says it is supported.

Edit interface strings in all languages

Quim: i18n is not implemented in the test site, can't test.

Content as PO files or at least XML import/export


Henri: XML import/export is available, but now only through command line (easy to script a web UI for it though)

Set links between different versions of the same page


Control version system to detect outdated pages


Quim: since versioning is possible there would be probably a complex way to do this.

Visualization of status of translations


Create and edit menus and submenus


Henri: I'm not sure if you can consider clicking Create subfolder particularly difficult...

Assign pages to menu entires


Establish relations between pages


Henri: please define?

Create an automatic sitemap


Henri: Create folder of type "Sitemap"

Assign keywords to pages


Customize homepage to make it look like the mockups


Quim: my 3 is an assumption, "easy" if you are into XHTML/CSS/PHP I guess

Customize theme to make it look like the mockups


Quim: see above, I would like to know if there are constraints for theming

Set different templates for different sections


Quim: see above

Search performance (probably to be tested in a big website)


Quim: no search available. Henri: Indexer is not installed. Would you like me to set it up?

Search results per type of content


Henri: Supported in "Advanced search" when indexer is running.

Index content in the server not produced by the CMS


Create new accounts and assign permissions


Set permissions policies


Henri: Use "page privileges" or "folder privileges". More info about the ACL system is available.

Set permissions at a page/section level


Check documentation for help


Activate caching system


Quim: is caching integrated? Looks like

Check statistics


Quim: I see the link in Aegir but brings no results. Henri: Again, webalizer isn't installed ATM

Backup database


Quim: is it there web interface for backups? Henri: you can perform per-document backups using Aegir (click the disk icon), or full backups using Exorcist.

Upgrade new version


Quim: how are upgrades done? Henri: apt-get for Midgard itself, PEAR package upgrades for CMS components. Basically just apt-get update and pear upgrade...

Additional comments:

  • Explain here anything relevant not covered by the table above.

Regarding some items JoachimNoreiko marked as "0, not supported" above:

  • URL names are fully supported and it is up to configuration whether system autogenerates them or allows users to define them (or both). You'll see a lot more functionality related to this when you log in with larger privilege set than the one provided for regular registered users in this case. Admin-level account has been mailed to at least QuimGil.

  • Page revisions are also supported, see the Wiki as an example.
    • I see the "revisions" link in Aegir, but says that no revisions are available on pages that have been saved several times. Should we activate revisions somewhere?
  • Revision time of pages is available in the system (see "Edit metadata" for this and more). It is up to site template whether it is shown, though.

-- HenriBergius

CMS Platform

  • Version: MidCOM 2.6.0
  • Platform: Midgard 1.7 and PHP 4
  • Backends: MySQL, through GObject-based abstraction. Libgda coming soon.
  • Architecture:


  • robust against attack attempts

Midgard CMS has had a very good security record ever since 1999. Since all I/O happens through a centralized C library (every content object is a GObject), SQL injection and other problems common with other PHP-based systems are easier to safeguard against. Similarly, database connection is opened by an Apache module at start-up and so DB passwords and other information is not available on PHP level.

  • some features protected by authentication

All permissions in Midgard are handled through an Access Control Lists system, making it easy to control modification and reading permissions in a fine-grained way. Authentication can happen using any regular Apache authentication module, and can be checked against Kerberos or PAM sources, or Midgard's local user database.

  • option to communicate over a secure channel (SSL)

Midgard supports regular Apache SSL features. In addition, it is relatively easy to serve the unauthenticated version of a site over port 80, and the authenticated version over SSL.

  • upstream is active releasing security updates

Midgard has a well-defined process for making both patch-level releases and major releases. The numbering system is quite similar to the one used in GNOME.


Since Midgard supplies its own Apache module, all URLs are by default clean and user-friendly. In addition to the regular, path-based URLs, every resource in Midgard also has a PermaLink that will remain the same regardless of site organization and can be used for linking. PermaLinks are also detected and utilized by some search engines like Google.


  • ways to translate CMS strings

Midgard has a MultiLang system for localizing content objects, which is currently in process of being rolled into the MidCOM user interface.

  • How far is Midgard from using/importing/exporting PO files for publishing content in several languages?

    In my view, PO files are useful for UI translations, but using them for translating actual content is of limited use as the content will probably contain XHTML formatting and other things better edited using a real web editor. However, there are some cases where this would be interesting, as noted here. - HenriBergius

  • preferably show translators what changed and what needs updating

Every content change goes into an RCS repository, so such view would be reasonably easy to implement.

  • How far is Midgard from having a revision control system showing to translators what changed in the original English pages and what needs updating in the translations?

    All functionality required for this is in the Midgard libraries (information on what was changed, and when, and in what language version). We're currently implementing a view into this data for a customer. - HenriBergius

  • preferably get language settings from browser (Accept-Language) and session (cookies)

This is done by default by the Midgard i18n service.

  • have URLs to translated pages, so they can be directly referenced

This is currently under work to be implemented into Midgard proper.


  • a comfortable framework for editing content
    • can be wiki style, but does not have to

Midgard has a component-based system where the site is created by creating folders managed by different components. The components include such content areas like static content, wikis, file downloads and blogs. The whole site and all contents are managed using a single consistent user interface.

Midgard also provides an AJAX-powered "double click to edit" interface for quick content modifications.

  • "draft" content, which is already managed in the system, but not yet published
    • translators can do their job before content appears to the public
    • pre-edit text to be published at a specific date and time
      • perhaps automatically publish on a specific date and time

All content has approval status and publication/removal times that can be set as needed.

  • track who has rights to edit a page

Editing permissions are managed using the ACL editor.

  • track who did edit a page

All edits are stored into the RCS repository together with timestamps and user information.

  • can display when a page was last updated

Midgard's metadata system includes information on editing times and users.

  • perhaps change management, so older version of a page can be recalled

See RCS above.

  • copyright and licensing information can be displayed on the pages

The metadata scheme is easily extendable via a configuration file to include license selections etc so pages can be marked to be under a Creative Commons license or whatever.


  • the served html should be accessible
    • with a wide range of browsers (desktop and mobile)
    • for people with disabilities
  • the markup should primarily capture content structure not representation
    • (i.e. "heading" versus "big bold font")

The content editing system in Midgard can be set up to utilize W3Cs HTML Tidy to enforce correct and accessible XHTML.

  • support hierarchical URLs (subdirs)
  • support hierarchical navigation (submenus)

Midgard's content structure is by default hierarchical. The content structure can be constructed into navigation using the Navigation Access Point system..

  • preferably have a site map

Midgard includes a Site Map component.


  • shall provide feeds (RSS, Atom, etc)
    • news (for visitors)
    • site updates (for content authors)

Almost everything in Midgard provides RSS and Atom feeds (plus some other formats) of new content.

  • peferably shall integrate external feeds (e.g. from gnomefiles.org)

Midgard can also import RSS and Atom in Planet-like fashion. See for example Planet DBE


  • shall be themeable to adopt the gnome look

Layout can be developed completely by the site builders, though Midgard also provides some premade styles. Midgard's layout engine has been judged as one of the best in CMSs on several years by CMS Watch.


  • select (know the CMS enough to assert it meets our reqs)

There are some people in the community including TuomasKuosmanen who have Midgard experience. And in any case, HenriBergius is more than happy to help and answer questions.

  • install (the whole stack, includng RDBMS)

apt-get or yum, should be reasonably easy.

  • manage (keep updated and secure, without breaking it)

See above. Midgard has a very good record on backwards compatibility. For example, several applications written for Midgard 0.1 in 1998 still run even though they don't utilize newer features.

  • fix (add missing features or critical updates not yet released by upstream)

Sources are available and easy to track using CVS, mailing lists and RSS feeds. Per-component updates can be installed using PEAR.

  • full text search
  • perhaps keywords assigned to pages?

Midgard is integrated with the Lucene indexer for full-text search including metadata searching. It is possible also to make more advanced searches like "documents created last July with keyword X".


  • it should be easy to make backups
  • it should be easy to restore backups

MySQLdump is the easy backup option. In addition, Midgard provides a content-to-XML serialization tool that can be used for importing and exporting content for backups and replication.

  • perhaps a replicate server in case the main one goes down?
    • perhaps clustering?

See above, clustering and replication is easy to do using the XML serializer and rsync. There are several production environments doing this.

Issues - Comments

From conversation with QuimGil :

  • user integration with other apps i.e. Drupal and Moin which are two that we already have.

Midgard is a PHP app, so generally some level of integration is easy to accomplish.

We ran one experiment couple years ago with OSCOM about building a "Frankenstein CMS" where different site areas came from different CMSs including Midgard. See my paper on that.

  • eCommerce/donations (own or proximity to a free and external solution)

Midgard has a payment backend that provides plugins for different payment types. While this mostly includes Finnish banks, also Paypal is supported.

  • CRM (own or proximity to a free and external solution)

OpenPsa is a GPLd CRM system built on top of Midgard.

  • Role of your company (Nemein) and the community, specially in terms of 'what happens if your company disappears tomorrow'.

Compared to many other CMS projects, Midgard is actually a quite decentralized project. The development team includes people from at least half dozen different companies. While Nemein is currently the leading consultancy, there are lots of other companies providing services and developing on top of Midgard.

Another point with Midgard is that since the project relies much on GNOME libraries, the Midgard developers are inclined to watch the progress of GNOME quite actively, and are likely to help and tune the application according to needs. Usage of some GNOME libraries also helps in building some more integrated apps.

  • Although I see an interesting point in the fact that Midgard uses GNOME libraries, due to my lack of knowledge I still don't see what is the advantage of this over a CMS with no GNOME libraries for wgo. Possible examples would help. :) -- QuimGil

  • About "likely to help", could you offer a fresh install of Midgard as it comes out of the box so we can try it? Greg Nagy's plan is to test the strong CMS candidates by using them creating sandbox sites to challenge the requirements in practice. Also, feel free to join marketing-list and defend/promote your candidate there. -- QuimGil

GnomeWeb/CmsRequirements/MidgardEval (last edited 2008-02-03 14:45:56 by localhost)