Introduction

MMBase is a Content Management System that was relatively popular in the zero’s mainly in the Netherlands. It was originally developed (around 1996) at VPRO (github, this too)

It was open sourced around 2000. Since 2002 it was supported by the MMBase foundation.

Current Status

The product more or less died in the early 2010’s. The original site and servers perished in 2020 or 2021 (?). The domains (mmbase.nl and mmbase.org) were in possession of one of the original sponsors XS4ALL, and were transferred in september 2021.

The code base was copied to github a few years before.

Technical details

MMBase is coded in java. It used to have its own templating language (SCAN), but soon templating was mostly done in JSP, and an extensive 'tag library' was provided.

An early history and overview was also published in IBM Systems Journal ยท February 2005

The last release was MMBase 1.9.6. Releases used to be in our own MMBase Maven repositories (http://www.mmbase.org/maven2, http://www.mmbase.org/snapshots), which don’t exist either anymore. I’ve tried to push some artifacts to maven central and sonatype) in the meantime. This work is not completed. The presently default branch on github is the MMBase 1.9 branch. May be it would be usefull the at least create and publish a 1.9.7 version and publish all its artifacts to maven central.

At the time (around ~ 2010 or so) we were actually busy with an MMBase 2.0, which would have involved 'portlet' functionality and such. We may try to release some of it after all. We also started to split up the mono-repository of MMBase 1.9 in several distinct github repository like:

  • bom: Just a maven pom file with dependencies

  • bridge: Collects interfaces to MMBase. MMBase used to have at least 2 implementations:

    • The core implementation, which backs all data by a relational database. The database layer uses XML’s to define possible tables, and supported several database implementations like MySQL, PostgreSQL, HSQL, Informix, and IIRC even Oracle.

    • The RMMCI implementation, which is backed by another MMBase via RMI. This was used e.g. to create a workflow with 'publishing', where via RMMCI data was synced.

  • taglib: Used in templating, talks to the MMBase bridge, but also contained a lot of utility tags.

  • utils: Collects several utilities. E.g. MMBase had its own logging framework (originating before similar products like slf4j)

Which hopefully will make 2.0 versions of these a bit more usefull. E.g. I’d myself sometimes wish I could use these nice mm: tags again, or perhaps some classes from org.mmbase.util even if I’m not using MMBase itself anymore.

Features

Database abstraction and data models

MMBase has a database abstraction layer, but was always based on relational databases like MySQL or PostgreSQL.

Using XML configuration files one would define the possible tables (referred to as 'builders'), and possible relations between them (which themselves are 'builders' too). These 'builders' could extend from each other, and the 'core' of MMBase would always provide the most basic ones.

Generic editors

Using the thus defined model of data, 'generic' edit tools exists. Originally human editors were using these kind of editors.

Task based editors

Later appeared 'task based' editors, or 'editwizards'. These were using XML’s to define common 'edit tasks'

Caching and invalidation

Query results are cached, and events are sent to prune cache entries that may be effected. The exact implementation of that is pluggable, and configurable.

Clustering

It is possible to run several instances on the same database. The instances may broadcast events between them using multicast or unicast. In the last case the cluster communicates its members to each other using entries in the database.

RMI and staging/live

Images

Templating taglib

Pluggable security

Modularity

MMBase is several ways highly modular

Builders

Define the possible object types (builders) that can be used in the current MMBase instance

Applications

Define a collection of 'needed builders', 'needed relations' and bootstrap data for those.

Components

A component defines as set blocks of templated data.

Functions

Functions basically wraps any peace of functionality, and makes it available in templating.

Modules

i18n

The internals of MMBase itself are pretty well i18ned. Encodings are taken care of, and texts which may be displayed to users are normally translatable. It does not supply an out-of-the-box solution for actual content, but implementors could implement that easily.

Other projects hosted at github.com/mmbase

Originally at the subversion server at scm.mmbase.org

Forked because dissappeared themselves

Sites still running on MMBase

The most noticeable one is:

There might be more?

This page

This page is hosted at github pages, so currently are just static pages. We’re using adoc. The original documentation of MMBase was in Asciidoc XML’s, I’ll try to get them published here too somehow.

Issue management

MMBase-issues used to be hosted in a JIRA installation on the MMBase Server. We lost the database but IIRC it wasn’t very functional anymore, because the installation was very much out dated.

Plans for the future

  • May be it is interesting to put some stuff in docker images to simply have a running MMBase 1.9, so we can see how it was like.

  • As I recall the taglib-documentation was quite nice, but was generated on the fly with JSP’s. Maybe we should do something about that and copy a version to github pages too

  • build the stuff from mmbase/documentation and publish somewhere below here