|Stable release||2.4.0 / February 11, 2014|
|Operating system||Cross-platform, PHP/MySQL required|
|Available in||English, others as contributed|
|Type||Content Management Framework|
While originally developed purely as a CMF, ProcessWire is currently distributed as a combined CMF and CMS, with the CMS portion providing an administrative control panel for web-based management of content.
ProcessWire focuses on being markup agnostic, leaving output to the user. In this manner, the framework is intended to provide flexibility for output in web sites, web services and related applications. The goal was to let the individual site drive the direction of the output, rather than tailor a site around existing generated CMF/CMS output.
- jQuery-inspired API
- Graphical web-based installer
- Rich text editor (using TinyMCE)
- All fields are custom fields and are indexed for fast searches
- Can be bootstrapped from other PHP applications or command-line scripts
- Both interactive and API-based image manipulation functions
- Drag-and-drop tree-based page list
- Drag-and-drop file and image uploads
- PHP5 object-oriented code
- Built-in pagination
- Search engine friendly URLs
- Selectors in the API for finding pages by field value
- Role-based access control
- Template-level and custom markup-level caching
- Hierarchical URLs
- Markup agnostic output
- Multi-language support
- Modular plugin architecture
- Fieldtypes are plugin modules
- Extensive hook system covering most core functions
- User profiles are configurable templates
- Support for larger scale (10k+ page) installations
- Google Maps and Google Calendar integration modules
- RSS publishing and loading modules
- Templates are PHP-based
- Fields and groups of fields are repeatable (using the Repeater fieldtype)
- Field dependencies (2.4+)
ProcessWire has been developed by Ryan Cramer since 2003. From 2003 to 2007 it was developed under the name Dictator CMS. From 2007–2010 it was developed as ProcessWire 1.x, and from 2010 to now, it has been developed as ProcessWire 2.x.
While similar to past versions, ProcessWire 2.x was built from scratch purely as an open source content management framework. The admin control panel was later added on as an application built in the framework, and now serves as ProcessWire CMS.
Prior to version 2.x, ProcessWire was closed-source. All past versions of ProcessWire are architecturally similar in look and use, though Dictator CMS (2003) lacked the API that is one of the most notable features in ProcessWire 1.x and 2.x.
In 2008, a small portion of ProcessWire 1.x was released as a jQuery plugin called  asmSelect. This plugin was the basis for multi-page reference selection in ProcessWire 1.x and has since been adopted by other CMS platforms (notably as a Drupal CCK node reference module).
The first open source release of ProcessWire was version 2.0, released in October, 2010. The second open source release, ProcessWire 2.1, was released in October 2011 and marked the first collaborative effort as other developers contributed to it. Most notable was Antti Peisa's work with the AJAX file uploading capabilities. Version 2.2, released in January, 2012, brought multi-language support to ProcessWire and was the first version with corporate sponsorship (by a Finnish web company called Avoine).
In December 2012, ProcessWire was awarded Best Free CMS by CMSCritic.com.
ProcessWire is built around a page content tree (as opposed to a bucket system). The URL or path of each page is always reflective of its place in the hierarchy. One uses this same path to reference the page in the API. As a result, this connection of the path to the internal tree hierarchy is important to the architecture of ProcessWire. Beyond the parent-child relationship implied by a content tree, ProcessWire supports relational one-to-one and one-to-many references between pages in the tree.
Templates in ProcessWire represent a data type, group settings and a PHP controller file. Every page in ProcessWire is assigned to a template, and a template may be shared among multiple pages. The template is used as a data type and contains the definition of fields used by the pages assigned to it. It is also the source of access control, caching and other settings shared among pages.
Every template has an associated PHP file, referred to as the template-file. This file handles the behavior for any pages assigned to the template. The template-file is provided with several API variables that may be used in generating this behavior. The most notable is the
$page API variable, which contains all the data (dereferenced by field name) of the current page being viewed.
Template-files serve multiple contexts, depending on the application. ProcessWire's default web site profile uses template-files primarily for output of direct and dynamically generated HTML markup. Template-files may also be used as intermediate controllers between the model and a separate view. Because template-files are regular PHP files, they are able to call upon other web services or PHP applications where appropriate, without a separate parsing layer.
All fields in ProcessWire are custom fields defined by the user. A given field may be assigned to multiple templates, which in turn hold individual chunks of data for each page using that template. Every field has a type, referred to as the fieldtype (1 word), a type of plugin module. ProcessWire includes several fieldtypes including those that support text, numbers, files, images, page references, URLs, email addresses, dates and comments. Additional fieldtypes are available as 3rd party modules.
- A Unix or Windows-based web server running Apache.
- PHP version 5.3.8 or greater with PDO database support.
- MySQL 5.0.15 or greater.
- Apache must have mod_rewrite enabled and support .htaccess files.
- "Article from CMSWire on ProcessWire".
- "The concept behind the API".
- "Post by author describing origins as a CMF".
- "Video of Ryan Cramer speaking about ProcessWire being markup agnostic and the goals behind it".
- "Overview of the bootstrap system".
- "Timeline cited from Dictator".
- "ProcessWire Background/History".
- "ProcessWire 1.x".
- "Post that introduces ProcessWire's API (1.x)".
- "CCK Node Reference ASM Select".
- "Entry announcing ProcessWire 2".
- "Video demonstrating drag-drop file uploads and copy references Antti Peisa".
- "Post citing release of ProcessWire 2.2".
- "ProcessWire awarded Best Free CMS by CMSCritic.com".
- "Comments below the post include discussion from Ryan Cramer on the importance of the content tree".
- "Video demonstrating relational references in ProcessWire 1.x".
- "Discussion of the $page API variable".