|Stable release||3.6.0 / September 14, 2014|
|Type||Web application framework|
CherryPy is an object-oriented web application framework using the Python programming language. It is designed for rapid development of web applications by wrapping the HTTP protocol but stays at a low level and does not offer much more than what is defined in RFC 7321.
CherryPy can be a web server itself or one can launch it via any WSGI compatible environment (including Apache 2). It does not deal with tasks such as templating for output rendering or backend access. The framework is extensible with filters, simple interfaces made of seven functions. These are called at defined points in the request/response processing.
One of the goals of the project founder, Remi Delon, was to make CherryPy as pythonic as possible. This allows the developer to use the framework as any regular Python module and to forget (from a technical point of view) that the application is for the web.
For instance, the common Hello World program with CherryPy 3 would look like:
import cherrypy class HelloWorld(object): def index(self): return "Hello World!" index.exposed = True cherrypy.quickstart(HelloWorld())
- a HTTP/1.1-compliant, WSGI thread-pooled webserver. Typically, CherryPy itself takes  only 1-2 ms per page.
- Support for any other WSGI-enabled web server or adapter, including Apache, IIS, lighttpd, mod_python, FastCGI, SCGI, and mod_wsgi.
- A native mod_python adapter.
- multiple HTTP servers (e.g. on multiple ports) at once.
- A plugin system CherryPy plugins hook into events within the server process — into server startup, server shutdown, server exiting, etc. — to run code that needs to be run when the server starts up or shuts down.
- Built-in tools for caching, encoding, sessions, authorization, static content, and others. CherryPy tools hook into events within the request process. Whenever the CherryPy server receives a request, there is a specific set of steps it goes through to handle that request. Page handlers are only one step in the process. Tools also provide a syntax and configuration API for turning them on and off for a specific set of handlers.
- A configuration system for developers and deployers . CherryPy deployments are configurable on site, on application and on controller level, through Python dictionaries, configuration files, and open file objects.
- Swappable and customizable every component .
- a complete test suite:
- tests for both basic and advanced functionality
- command-line options to control which tests are run, and the output they produce
- debugging tools specifically for web page tests
- many of the test suite components are reusable by applications.
- built-in profiling since v2.1, coverage  and testing support.
Can be used with CherryPy
- Routes  — a Python re-implementation of the Ruby on Rails's routes system for mapping URLs to controllers/actions and generating URLs.
- SQLAlchemy — a database backend and ORM for Python applications. TurboGears 2.x uses CherryPy as server and SQLAlchemy as its default ORM.
- SQLObject — a popular ORM for providing an object interface to a database. Supports a number of common database backends: included in the distribution are MySQL, PostgreSQL, SQLite, Sybase SQL Server, MaxDB, Microsoft SQL Server and Firebird. TurboGears 1.x uses CherryPy as server and SQLObject as ORM.
- Storm — the ORM from Canonical Ltd. (makers of Ubuntu)
- Peewee — a simple and small ORM. It has few (but expressive) concepts, making it easy to learn and intuitive to use
- Dejavu — a public domain, thread-safe ORM for Python applications
- MongoEngine — An ODM for connecting to MongoDB.
- Mako — a template library written in Python, usable with a simple CherryPy tool.
- Cheetah — an open source template engine and code generation tool, written in Python.
- CherryTemplate — a templating language for CherryPy.
- Genshi  — a powerful XML templating language.
- Jinja — a general purpose templating language. CherryPy has a tool for using Jinja templates.
- Kid — a simple template language for XML based vocabularies written in Python. TurboGears 1.x uses CherryPy as server and Kid as frontend.
CherryPy wiki helps  choosing a templating language.
- Sarissa — a cross-browser library for Ajax
CherryPy is a component of
- TurboGears — CherryPy 2.x is a main component of TurboGears 1.x.
- CherryPy v3 WSGI server benchmark results
- How fast is CherryPy?
- How to set up multiple HTTP servers with CherryPy
- Custom engine plugins with CherryPy
- Configuration system of CherryPy
- Configuration API of CherryPy
- Short summary of configuration options
- How to test CherryPy itself
- Profiler module of CherryPy
- How to collect and the analyse coverage data of application code with CherryPy
- A simple dispatcher tool for CherryPy that uses Routes
- TurboGears 2.x uses CherryPy as server and SQLAlchemy as its default ORM
- TurboGears 1.x uses CherryPy as server and SQLObject as ORM
- A simple CherryPy tool for Mako templating
- "CherryPy – Genshi". Retrieved 2009-09-26.
- "Genshi - CherryPy Tools - Trac". Retrieved 2009-09-26.
- A basic CherryPy Tool for using Jinja templates
- TurboGears 1.x uses CherryPy as server and Kid as frontend
- CherryPy wiki about choosing a templating language
- Official website
- mailing list
- Feeds about CherryPy
- CherryPy on Freshmeat
- CherryPy on Ohloh
- Websites running atop CherryPy
- People who use CherryPy
- Products based on or inspired by CherryPy