Edit me on GitHub

Kotti: Web Application Framework and CMS

Kotti is a high-level, Pythonic web application framework. It includes a small and extensible CMS application called the Kotti CMS.

Kotti is most useful when you are developing applications that

  • have complex security requirements,
  • use workflows, and/or
  • work with hierarchical data.

Built on top of a number of best-of-breed software components, most notably Pyramid and SQLAlchemy, Kotti introduces only a few concepts of its own, thus hopefully keeping the learning curve flat for the developer.

Kotti CMS

You can try out the built-in CMS on Kotti’s demo page.

The Kotti CMS is a content management system that’s heavily inspired by Plone. Its main features are:

  • User-friendliness: editors can edit content where it appears; thus the edit interface is contextual and intuitive
  • WYSIWYG editor: includes a rich text editor
  • Responsive design: Kotti builds on Twitter Bootstrap, which looks good both on desktop and mobile
  • Templating: you can extend the CMS with your own look & feel with almost no programming required (see Adjust the look & feel (kotti.override_assets))
  • Add-ons: install a variety of add-ons and customize them as well as many aspects of the built-in CMS by use of an INI configuration file (see Configuration)
  • Security: the advanced user and permissions management is intuitive and scales to fit the requirements of large organizations
  • Internationalized: the user interface is fully translatable, Unicode is used everywhere to store data (see Translations)

For Developers

For developers, Kotti delivers a strong foundation for building different types of web applications that either extend or replace the built-in CMS.

Developers can add and modify through a well-defined API:

Kotti has a down-to-earth API. Developers working with Kotti will most of the time make direct use of the Pyramid and SQLAlchemy libraries. Other notable components used but not enforced by Kotti are Colander and Deform for forms, and Chameleon for templating.

Continuous testing against different versions of Python and with PostgreSQL, MySQL and SQLite and a complete test coverage make Kotti a stable platform to work with. build status


You can download Kotti from the Python Package Index, it takes only a few moments to install.

Support and Development

Please report any bugs that you find to the issue tracker.

If you’ve got questions that aren’t answered by this documentation, contact the Kotti mailing list or join the #kotti IRC channel.

Kotti itself is developed on Github. You can check out Kotti’s source code via its GitHub repostiory. Use this command:

git clone git@github.com:Pylons/Kotti

Automated tests

Kotti uses pytest, zope.testbrowser and WebTest for automated testing.

Before you can run the tests, you must install Kotti’s ‘testing’ extras. Inside your Kotti checkout directory, do:

bin/python setup.py dev

To then run Kotti’s test suite, do:



You can find the list of Kotti’s translations here. Kotti uses GNU gettext and .po files for internationalization.

You can set the pyramid.default_locale_name in your configuration file to choose which language Kotti should serve the user interface (see Configure the user interface language).

In order to compile your .po files to .mo files, do:

bin/python setup.py compile_catalog

To extract messages and update the existing .pot and .po files, do:

bin/python setup.py extract_messages update_catalog

See also Internationalization from the Cookbook.


Kotti was created by Daniel Nouri. Thanks to the following people for support, code, patches etc:

  • Andreas Kaiser
  • Andreas Zeidler
  • Christian Neumann
  • Gouji OCHIAI
  • Jeff Pittman
  • Mike Orr
  • Marco Scheidhuber
  • Nuno Teixeira
  • Steffen Lindner
  • Tom Lazar
  • Wim Boucquaert
  • The University of Coimbra
  • Consipere