ProcessWire 3.x is a friendly and powerful open source CMS with a strong API.

Last update: Jun 30, 2022

Welcome to ProcessWire 3.x

This document is in Markdown. An HTML formatted version of this document can be read at: https://github.com/processwire/processwire/blob/master/README.md

Table of Contents

  1. About
  2. Installation
  3. Upgrading
  4. Troubleshooting
  5. Support

About ProcessWire

ProcessWire is a friendly and powerful open source CMS with an API that is a joy to use at any scale. It is both a content management system (CMS) and framework (CMF) built to save you time and work the way you do. With all custom fields, a secure foundation, proven scalability and performance, ProcessWire connects all of your content seamlessly, making your job fast, easy and fun.

ProcessWire gives you more control over your fields, templates and markup than other platforms, while ProcessWire’s API makes working with your content easy and enjoyable. Managing and developing a site in ProcessWire is shockingly simple compared to what you may be used to.

ProcessWire is widely trusted by web professionals for its exceptional consistency, stability and security; revered by web developers for its API that saves time and makes work fun; valued by web designers for its adaptability and flexibility with modern website/application content management needs; and loved by clients for its no-nonsense interface and ease-of-use in adding, updating and maintaining content. New versions of ProcessWire are released just about every week on the development branch.

Background

ProcessWire is a timeless tool for web professionals that has always been committed to the long term. It started in 2003, gained the name ProcessWire in 2006, and has been in active development as an open source project since 2010. Now more than a decade later (2021), we’re just getting started, as ProcessWire continues to grow and develop into the next 10 years and beyond.

While ProcessWire has been around for a long time, don’t feel bad if you haven’t heard of it till today. We are fundamentally different from other projects in that we don’t make a lot of noise, we’re not into promotion, we value quality over quantity, sustainability over growth, and a friendly community over popularity. ProcessWire is designed to be a silent partner, not easily identified from the front-end of any website. We don’t aim to be big, we are instead focused on being best-in-class.

Web developers find ProcessWire when the time is right, after they’ve tried some other platforms. And once they start using ProcessWire, they tend to stay. ProcessWire is addictive, easy to maintain for the long term, and doesn’t have the security and upgrade woes of other platforms. But don’t take our word for it; unless your livelihood depends on some other platform, find out for yourself.

Community

ProcessWire is more than just software, it is also a friendly community of web professionals dedicated to building great sites and applications, and helping others do so too.

Please visit and join our friendly community in the ProcessWire forums, subscribe to our weekly newsletter for the latest ProcessWire news, check out our website showcase to see what others are building with ProcessWire, and read our blog to stay up-to-date with the latest ProcessWire versions.

Weekly ProcessWire news is posted by Teppo Koivula on his site ProcessWire Weekly. Weekly core updates and related topics are posted by Ryan Cramer in the ProcessWire support forum News and Announcements board.

Learn more


Installing ProcessWire

Simply extract the ProcessWire files to an http accessible location and load the URL in your web browser. This will start the installer. See our Installation Guide for more details and instructions. If you run into any trouble, please see our Troubleshooting Guide.

Upgrading ProcessWire

Upgrading is easy and usually just a matter of replacing your /wire/ directory with the one from the new version. But to be safe, before proceeding with any version upgrade, please see the Upgrading ProcessWire guide and perhaps keep it open during your upgrade in case you need to refer back to it.

When upgrading from one 3.x version to another, please use the general upgrade process. This consists primarily of making sure you've got everything backed up and then just replacing your /wire/ directory with the one from the newer version.

Pro module version upgrade notes (if applicable)

  • FormBuilder version 0.4.0 or newer required, 0.5.0 or newer recommended.
  • ListerPro version 1.0.9 or newer required, 1.1.3 or newer recommended.
  • ProFields the latest versions of all ProFields (10 modules) are recommended.
  • LoginRegisterPro all versions supported but version 5 or newer recommended.
  • ProCache version 3.1.4 or newer required, 4.0.0 or newer recommended. After upgrading, go to your ProCache settings in the admin (Setup > ProCache) and see if it suggests any modifications to your .htaccess file.
  • For all other Pro modules not mentioned above (ProMailer, ProDrafts, ProDevTools, Likes) there are no specific version requirements but we recommend using the latest available versions when possible.

Debug Mode

Debug mode causes all errors to be reported to the screen. This can be helpful during development or troubleshooting. When in the admin, it also enables a “Debug” link (see footer) for reporting of extra information in a panel. Debug mode is not intended for live or production sites, as the information reported is for the developer only. Do not leave debug mode on for any live/production sites, as it could be a security concern. However, we think you'll find it very handy during development or when resolving issues.

  1. Edit this file: /site/config.php
  2. Find this line: $config->debug = false;
  3. Change the false to true, like below, and save.
$config->debug = true; 

This can be found near the bottom of the file, or you can add it if not already there. It will make PHP and ProcessWire report all errors, warnings, notices, etc. Of course, you'll want to set it back to false once you've resolved any issues.

Support and Links


Copyright 2021 by Ryan Cramer / Ryan Cramer Design, LLC

GitHub

https://github.com/processwire/processwire
Comments
  • 1. WebP Support for PW Core Engines

    @ryancramerdesign Hi Ryan, here is the webP support for PW core image engines. Please refer to this forums post for some explanation: https://processwire.com/talk/topic/14236-webp-support/page/2/?tab=comments#comment-184583

    If you like, we can discuss it here or you can contact me via PM or email ([email protected]).

    Reviewed by horst-n at 2019-04-25 10:37
  • 2. Allow modules to add exclusions to FileCompiler

    This change allows you to add fileCompilerExclusions to a module's info array. This is useful for those who have vendor and lib directories in their modules that may break after being compiled.

    Refer: https://github.com/processwire/processwire-requests/issues/18

    Reviewed by mikerockett at 2016-10-02 07:05
  • 3. XXE Vulnerability

    When getting an image file's information, the program does not care about XXE vulnerability, which could lead to sensitive information leakage or DoS attack. In Pageimage class(wire\core\Pageimage.php), function getImageInfoSVG parses file without any sanitation ,whose content may contain attack vectors.

    	protected function getImageInfoSVG($filename = '') {
    		$width = 0;
    		$height = 0;
    		if(!$filename) $filename = $this->filename;
    		$xml = @file_get_contents($filename);
    		
    		if($xml) {
    			$a = @simplexml_load_string($xml)->attributes();
    
    Reviewed by dahua966 at 2020-09-16 14:07
  • 4. Cross-Site Scripting v1.3.6

    Affected software : Processwire CMS

    Version : v.1.3.6

    Type of vulnerability : XSS (Cross-Site Scripting)

    Author : Noth

    Description:
    Processwire CMS is susceptible to cross-site scripting attacks, allowing malicious users to inject code into web pages, and other users will be affected when viewing web pages

    PoC :

    Step 1 : login system 1

    Step 2 : Go to "/processwire/page/edit/?id=1" 2

    Step 3 : insert "XSS" test grammar in "Titile" and save it. XSS Payload : "> 3

    Step 4 : Go back to the login system page 4

    Test Video : https://drive.google.com/file/d/1j06Id6IHf5aUOTnU8w9wSujjGLuX3Wn9/view?usp=sharing

    Reviewed by zxc7528064 at 2020-05-31 15:42
  • 5. fix inputfields not toggling on header clicks

    This PR fixes an old and annoying bug:

    Before: bug

    Its a little hard to see, but the following happens:

    • opened inputfield: arrow blinks
    • collapsed inputfield: toggles correctly
    • ajax: opens correctly, blinks instead of closing

    This is really bad UX because the Inputfield behaves in 3 different ways to the same action (click header)!

    After: fix

    With this fix in place all inputfields toggle correctly on the first click on the header. It just does the click on the icon automatically instead of flashing it!

    Reviewed by BernhardBaumrock at 2020-03-25 17:17
  • 6. $page->setAndSave does not work with array as parameter

    It seems like setAndSave shortcut method does not play well with an array of fields unput.

    This code does not work:

    $page->setAndSave(array(
        'next_action' => 'JustTest',
        'next_action_time' => time() + 12 * 3600,
    ));
    

    This one does:

    $page->setAndSave(array(
        'next_action' => 'JustTest',
    ));
    

    and this one too (of course):

    $of = $page->of();
    $page->of(false);
    $page->next_action = 'JustTest';
    $page->save('next_action');
    $page->next_action_time = time() + 12 * 3600;
    $page->save('next_action_time');
    $page->of($of);
    

    Or I messed something up)

    Reviewed by ivangretsky at 2016-09-15 12:53
  • 7. Support square brackets in field names

    Now supports showIf and requiredIf fields with names like skyscraper[0]name, skyscraper[1]name and so on in the same form.

    This isn't useful in ProcessWire at present since fieldnames can't contain brackets, but is useful when I've been using PW as a framework/library and wanted to use inputfield dependencies in my frontend forms where I do have some array-based fieldnames.

    Thought I'd submit it as it's a harmless change and might be useful in future or to someone else doing what I'm doing.

    Reviewed by Notanotherdotcom at 2017-11-22 20:45
  • 8. add button to close all notifications at once

    Hey Ryan, this is an old issue dating back to 2014: https://processwire.com/talk/topic/8329-how-to-closedelete-notifications/

    I always get lots of - persistent - notifications after login:

    img

    I need to close every single one of them. This PR adds an additional X to close all at once:

    image

    Note that I've only updated the unminified JS

    Reviewed by BernhardBaumrock at 2022-03-08 13:10
  • 9. AdminThemeUikit: add custom markup overrides feature

    Hey @ryancramerdesign

    I want to customize the backend of my app that I'm developing a little bit. Copying the whole module just for replacing the branding in the footer is so much overhead! That's why I created this PR that makes it possible to replace single files of the admintheme while keeping all the others. That means you can still upgrade the core without getting an outdated admin theme!

    Not sure what you think about the render() method being hookable? If you think that is adding too much overhead I'm fine with a non-hookable version as it's easy to overwrite the whole file anyhow.

    Thx in advance!

    Reviewed by BernhardBaumrock at 2022-01-24 20:36
  • 10. Code optimization and enhancements

    Changes Made: +++++++++++

    1] Added visibility(public/private/protected) for the constant. http://php.net/manual/en/language.oop5.constants.php#language.oop5.basic.class.this

    2] Changed double quote to single quote wherever necessary. http://php.net/manual/en/language.types.string.php https://www.codeproject.com/Articles/988255/PHP-Single-Quotes-versus-Double-Quotes

    3] Optimized the code by using Null Coalesce Operator instead of ternary operator http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.coalesce

    4] Added expected exception in CacheFile->save function since we are using $this->wire('files') which tends to throw WireException.

    5] Condition changed from !in_array($page->process, array('ProcessLogin')) to $page->process != 'ProcessLogin'.

    Hopefully this helps, will be adding more changes to it after this PR merged.

    Please let me know if you have any queries.

    Reviewed by mirzadabeer at 2017-12-24 12:09
  • 11. Make previewColumns configurable for Fieldtype / Inputfield Selector

    It's really useful to be able to define the columns shown when clicking the "show" links for viewing results. This supports that like this: image

    I actually think it would be nice to add other options too, like how edit / view links should be handled etc, but wanted to see if you'd at least be willing to support the changed in this PR first.

    Reviewed by adrianbj at 2022-01-19 18:21
  • 12. possible fix for issue #1586 (sub-issue 1)

    Hello @ryancramerdesign , I haven't tried all the combinations but adding a same name check is solving my issue. Without the check the code removes the file with the same name from the server thinking that I want to replace it with other filename, but then it tries to rename the deleted file. I haven't had the time to read all the related code, but maybe having identified the line in the code could be a useful hint. Are you still unable to reproduce (sub)issue 1?

    kind regards

    related comment: https://github.com/processwire/processwire-issues/issues/1586#issuecomment-1165722370

    Reviewed by pine3ree at 2022-06-24 23:54
  • 13. Fix PHP 7.x warning: count()

    In various places count() is still used. This results in warning messages in PHP 7.2.x and higher: "Warning: count(): Parameter must be an array or an object that implements Countable". I have replaced all of them with wireCount().

    Reviewed by FlipZoomMedia at 2022-05-19 15:10
  • 14. Add option: Disable Link Text Edit

    The feature introduced in PR#38, that the link text can be edited in the modal window, has the problem that if there is markup in the link text, such as icons, the markup is lost when changing it. For this the option was implemented to deactivate this function from PR#38 (https://github.com/processwire/processwire/pull/38).

    Reviewed by FlipZoomMedia at 2022-05-07 09:34
Related tags
Twill is an open source CMS toolkit for Laravel that helps developers rapidly create a custom admin console that is intuitive, powerful and flexible. /// Chat with us and others on Spectrum: https://spectrum.chat/twill
Twill is an open source CMS toolkit for Laravel that helps developers rapidly create a custom admin console that is intuitive, powerful and flexible. /// Chat with us and others on Spectrum: https://spectrum.chat/twill

About Twill Twill is an open source Laravel package that helps developers rapidly create a custom CMS that is beautiful, powerful, and flexible. By st

Jun 27, 2022
PHPVibe Open source video CMS / Video Sharing CMS / Youtube Api v3 / Video Embeds
PHPVibe Open source video CMS / Video Sharing CMS / Youtube Api v3 / Video Embeds

PHPVibe Video CMS Free Video Sharing CMS The modern choice of design inspired by Youtube and a social videos sharing module that may just cut it for y

Jun 13, 2022
Flextype is an open-source Hybrid Content Management System with the freedom of a headless CMS and with the full functionality of a traditional CMS
Flextype is an open-source Hybrid Content Management System with the freedom of a headless CMS and with the full functionality of a traditional CMS

Flextype is an open-source Hybrid Content Management System with the freedom of a headless CMS and with the full functionality of a traditional CMS. Building this Content Management System, we focused on simplicity. To achieve this, we implemented a simple but powerful API's.

Jun 23, 2022
Jun 18, 2022
Amila Laravel CMS - Free, open-source Simple Bootstrap Laravel CMS
 Amila Laravel CMS - Free, open-source Simple Bootstrap Laravel CMS

Simple Bootstrap Laravel CMS. Support Laravel 8.x Can integrate into any existing Laravel project. Only add few database tables with prefixes, not affect your existing database tables. Support Laravel 7.x & Laravel 6.x & Laravel 5.x & MySql & PostgreSql - Amila Laravel CMS

Jun 7, 2022
A module allowing you to write your Processwire template using MJML and get a converted HTML output using MJML API.
A module allowing you to write your Processwire template using MJML and get a converted HTML output using MJML API.

PageMjmlToHtml A module allowing you to write your Processwire template using MJML and get a converted HTML output using MJML API. This is considered

May 2, 2022
Craft is a flexible, user-friendly CMS for creating custom digital experiences on the web and beyond.

About Craft CMS Craft is a flexible, user-friendly CMS for creating custom digital experiences on the web and beyond. It features: An intuitive, user-

Jun 30, 2022
Bolt CMS is an open source, adaptable platform for building and running modern websites.

Bolt CMS is an open source, adaptable platform for building and running modern websites. Built on PHP, Symfony and more. Read the site for more info.

Jun 30, 2022
🚀Bolt CMS is an open source, adaptable platform for building and running modern websites

??Bolt CMS is an open source, adaptable platform for building and running modern websites

Jun 13, 2022
Borgert is a CMS Open Source created with Laravel Framework 5.6
Borgert is a CMS Open Source created with Laravel Framework 5.6

A simple CMS to start projects in Laravel containing some modules. Blog, Pages, Products, Mailbox, Image Gallery, Log Viewer and Users. Frontend: Blog

Jun 9, 2022
BlizzCMS an Open-Source CMS

BlizzCMS Plus BlizzCMS Plus is a restructured and improved version of BlizzCMS v1. The development of this version is made constantly by the developer

Jun 10, 2022
Contao Open Source CMS

About Contao is a powerful open source CMS that allows you to create professional websites and scalable web applications. Visit the project website fo

Jun 23, 2022
Free, open-source, self-hosted CMS platform based on the Laravel PHP Framework.
Free, open-source, self-hosted CMS platform based on the Laravel PHP Framework.

Winter is a Content Management System (CMS) and web platform whose sole purpose is to make your development workflow simple again. It was born out of

Jun 28, 2022
Open Source Portfolio/Resume CMS
Open Source Portfolio/Resume CMS

Ezfolio Open Source Portfolio CMS Ezfolio is a professional open source portfolio CMS built using Laravel, React and Ant Design. Choose from awesome t

Jun 26, 2022
Fork is an easy to use open source CMS using Symfony Components.
Fork is an easy to use open source CMS using Symfony Components.

Installation Make sure you have composer installed. Run composer create-project forkcms/forkcms . in your document root. Browse to your website Follow

Jun 17, 2022
Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS

Grav Grav is a Fast, Simple, and Flexible, file-based Web-platform. There is Zero installation required. Just extract the ZIP archive, and you are alr

Jul 1, 2022
Pyro is an experienced and powerful Laravel PHP CMS.

PyroCMS PyroCMS is an easy to use, powerful, and modular CMS and development platform built with Laravel 5. Security If you discover any security rela

Jun 16, 2022
Baicloud CMS is a lightweight content management system (CMS) based on PHP and MySQL and running on Linux, windows and other platforms

BaiCloud-cms About BaiCloud-cms is a powerful open source CMS that allows you to create professional websites and scalable web applications. Visit the

Feb 2, 2022
🍿 An AirPlay friendly web interface to stream your movies and TV shows from a home server.
🍿 An AirPlay friendly web interface to stream your movies and TV shows from a home server.

Airflix Airflix is a web application for browsing and playing movies and TV shows from a local home server. The overall goal of the project is to prov

Apr 20, 2022