Apache Lenya - Content Management System

Open Source Content Management System


ID Name

Welcome to Apache Lenya

You have successfully installed Apache Lenya 2.0.2 (Revision: xxx). To start, click on any of the publications on the left, or create a new publication.


Apache Lenya is a Java-based open-source Content Management System. It is based on open standards such as XML and XSLT. It is based on Apache Cocoon.

Lenya is a community project and is being developed under the aegis of the Apache Software Foundation (ASF). You are welcome to join our mailing lists and contribute!


  • supports multi-lingual websites
  • includes several client-side content editors, many of them WYSIWYG
  • allows for complex workflows (edit/submit/review/publish)
  • allows for arbitrary output, does not impose standard layouts or techniques (such as HTML tables) on the user
  • provides revision control, old page versions can be viewed and restored if necessary
  • powerful XML processing capabilities thanks to the underlying Cocoon engine
  • ...

README: Apache Lenya

Important notes for users updating from an earlier 2.0 release

2009-09-13: I18n catalogues require proper namespace

Ever since some update in late 2008, all your custom I18n catalogues must be in the namespace xmlns="http://apache.org/cocoon/i18n/2.1", otherwise localization transformation will break globally when you migrate to a recent version.
Symptoms are "untranslated" buttons and message keys displayed in place of the actual translation.
Thanks to user Gerd for finding this out.

2007-11-08: Redirection changes

Most of our sitemap redirects have been changed to make them work with proxy environments. If you notice any regressions, please complain to the dev list immediately.

2007-11-08: New Proxy test scaffold

If you are a developer or a user interested in proxying, please take a look at the proxy test scaffold in tools/proxytest and read the README. It's important to regularly test new code in proxied environments and non-root contexts.

2007-08-22: User names are now case insensitive

User names are now case insensitive to better support Windows, user assumptions, auto form completion, and support. This is done by converting all user names to lower case. Any previously created accounts with upper case characters will no longer work. To fix delete and recreate the account using the built in tools. Or optionally, rename any *.iml files in your publication's config/access-control/passwd directory so that the file names are all lower case. You will also have to edit the id attribute of the identity element to make it lower case in those files as well.

2007-08-13: Workflow schema validation fixed

The old XSD-based schema validation in workflow.xml was never used. It has now been ported to RNG for consistency and is applied to your custom workflows during deployment. You will need to remove the xsi:schemaLocation attribute (and you can then also remove the xmlns:xsi declaration) from your custom publications' config/workflow/workflow.xml if you have defined one.

2007-08-12: Resource type configuration changed

The configuration syntax of resource types has been changed for consistency. Please apply the following changes to your custom resource type configurations:

  • <sample-name mime-type="baz" name="bar">fallback://foo</sample-name> becomes <sample mime-type="baz" name="bar" uri="fallback://foo"/>
  • <schema src="fallback://foo.rng" language="http://relaxng.org/ns/structure/0.9"/> becomes <schema uri="fallback://foo.rng" namespace="http://relaxng.org/ns/structure/0.9"/>

After that, you need to delete build/lenya/webapp/WEB-INF/cocoon.xconf and rebuild Lenya to deploy the changes.

2007-07-27: PolicyAuthorizer removed

The access control for Lenya documents is now also handled by the UsecaseAuthorizer via a newly introduced usecase "ac.visit". For your custom publications, you will need to give your users the appropriate permissions. We suggest copying the visit.rml role from the default publication.
Moreover, be sure to remove the <authorizer type="policy"/> line from your publications' config/access-control/access-control.xml.

2007-07-27: new generic editor usecases

A new generic set of editor helper usecases has been introduced:

  • editors.insertLink
  • editors.insertImage
  • editors.insertAsset
  • editors.createResource

These are now re-used by all editors, which got us rid of a lot of code duplication. Internet Explorer users watch out: if you have problems with selections not working properly when using those new usecases, please complain on the dev list.

2007-07-19: mime-type attribute for resource type samples

The <sample-name> elements of the resource type declaration must have a mime-type attribute. This allows the Create usecase to initialize the MIME type of the document correctly.

2007-07-12: publication.xml/proxies wrapper element re-introduced

The <proxies> wrapper element is now required again for consistency reasons.

2007-07-03: publication.xml/proxies replaced by cocoon.xconf/GlobalProxies

The <proxies> element in publication.xml is not supported anymore. Instead, you have to configure the GlobalProxies service entry in cocoon.xconf. For more information, see [Proposal] Global proxy configuration.

2007-06-26: base-url and proxy-url input modules replaced by proxy module

The base-url and proxy-url input modules have been replaced by the proxy module. The functionality of this module corresponds to the ProxyTransformer with one exception: If the webappUrl parameter is an empty string, the root proxy URL (or the context prefix, resp.) is returned.

Usage: {proxy:{webappUrl}}.

2007-06-13: Apply ProxyTransformer after UuidToUrlTransformer

The uuid2url and proxy transformers now complement each other. You have to apply the proxy transformer right after the uuid2url transformer:

<map:transform type="uuid2url"/> <map:transform type="proxy"/> ...

Internal links (to documents, CSS, etc.) don't need to contain the context path anymore, this is now handled by the proxy transformer.

2007-05-29: Using UUID-based URLs for navigation elements

Now the sitetree module uses lenya-document:{uuid} URLs for navigation elements. Because no HTTP URLs are evaluated anymore, you need to pass the document's path instead of URL to the navigation element calls, i.e. the step /{6} in the following call has to be the document's path in the site structure:

<map:generate src="cocoon://modules/sitetree/{1}/{2}/{3}/{4}/{5}/{6}.xml>

2007-05-25: Converted "About Lenya" page to usecase

To enable the "About Lenya" usecase, please set the permissions for the admin.aboutLenya usecase in your config/access-control/usecase-policies.xml file, or use the tab "Usecases" in the administration GUI.

2007-05-08: Fixed create-use-case attribute

The value of the create-use-case attribute of the user-type element in access-control.xml was invalid. The admin area didn't use this attribute yet. Since this has been fixed, you have to update your $PUB_HOME/config/access-control/access-control.xml files:

<user-type class="org.apache.lenya.ac.file.FileUser" create-use-case="admin.addUser">Local User</user-type>

2007-05-05: Introduced workflow.multiWorkflowInvoke usecase

Please add the permissions for this usecase to your config/access-control/usecase-policies.xml file, or use the tab "Usecases" in the administration GUI.

2007-04-30: Renamed $PUB_HOME/config/publication.xconf to publication.xml

Please rename your $PUB_HOME/config/publication.xconf file to $PUB_HOME/config/publication.xml. This change was done to preserve consistency with the other configuration file names.

2007-04-23: Moved and renamed $PUB_HOME/config/lucene_index.xconf

Please move and rename your $PUB_HOME/config/lucene_index.xconf file to $PUB_HOME/config/search/lucene_index.xml. This change was done to preserve consistency with the other configuration file names and locations.

2007-04-23: Moved $MODULE_HOME/module.xml

If you are using custom modules, please move your module.xml file into the config/ directory of the module (create one if necessary). This change was done to preserve consistency with the publication.xml location.

2007-04-18: ac/ is now access-control/

In order to make the Lenya publication configuration more self-explanatory, the directory $PUB_HOME/config/ac has been renamed to $PUB_HOME/config/access-control. Additionally, the access control configuration file has been renamed from ac.xconf to access-control.xml.
You will have to change your custom publications accordingly. Don't forget to change the path settings in access-control.xml as well!

Note the new suffix! From now on, "xconf" will only be used for patchfiles that are integrated into cocoon.xconf at build time. All other configuration files that are parsed directly should end in .xml.

2007-04-13: You need to update your custom publication.xconf files!

As of revision 528490, the file $PUB_HOME/publication.xml is no longer used. Its contents should be merged into $PUB_HOME/config/publication.xconf. To accomodate this, the format of publication.xconf has changed a bit (see below).
Sorry for the breakage, but we were able to eliminate a lot of old ad-hoc code and duplication with this change, and the new xconf file looks a lot nicer and more intuitive.

Most important changes: All elements in publication.xconf must now be in the namespace http://apache.org/cocoon/lenya/publication/1.1, and <module/>, <proxy/>, and <resource-type> elements must now be grouped in <modules/>, <proxies/>, and <resource-types/>. See the default publication for an example.
You can use the RNG schema at src/resources/build/publication.rng to verify that your file is correct:

java -jar lib/jing-20030619.jar \
  src/resources/build/publication.rng \

New per-publication readme.xml

If you want to provide a custom README for your publication (maybe you have used the old <lenya:readme/> in the now gone publication.xconf), you can put it in $YOURPUB/readme.xml. It is now a standard Lenya CMS page in the http://apache.org/cocoon/lenya/cms-page/1.0 namespace.