Nuxtstop

For all things nuxt.js

ProcessWire's Pros and Cons

ProcessWire's Pros and Cons
12 1

Photo by Victor Aznabaev
https://unsplash.com/photos/pjTU9Edzc1g

ProcessWire is a free 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.

Pros

ProcessWire have many goodies that make it one of the best choices for a PHP CMS/CMF.

Slim and Modular

When other tools like Wordpress or Drupal are too bloated and you need to monkey patch with third party plugins until a big mess is on the table. ProcessWire can shine with its powerful modular system , where you can create your own or choose among the vast library of modules. You can pick and make ProcessWire as huge or as small as you need.

Granular Control

ProcessWire brings you granular control over your data and all the complex relationships between fields. Despite using a MySQL database under the hood, it feels more like a tree or a graph schema, where each node can have parents or children and pointers to each other. You don't need to know SQL since ProcessWire have a simple to learn and use query engine inspired by jQuery .

It's PHP

It does not force you into a complex way of code organization, neither force you to learn a new template engine. Your code will be inside the site/templates directory and from there it up to you how the files are organized, they are good ol' PHP . Also since it's just PHP you don't need a fancy VPS or cloud servers, a regular shared hosting with Cpanel would do for most projects. Where you can run Wordpress, ProcessWire will run.

However if your prefer some strategies. You can check:

Roles and Permissions

The roles and permissions feature is easy to work with and you can create complex security requirements in record time.

Multi Language is First Citizen

You can easily create multilanguage sites in no time. No need for wacky configurations. Need to support multiple languages? All you need to do is translate the text, and ProcessWire takes care of the rest.

Hooks

ProcessWire is filled with Hooks that are used and triggered on mostly every part of the system. This means you can alter the behaviour of system and third party modules, pages and system events, overriding their content or triggering events before, during or after their call. It's practically an IFTTT system inside ProcessWire.

Composer Ready

You can use ProcessWire as a normal composer library and benefit from its huge amount of functions and helpers, and import other external libraries without problems to your site.

Headless

If you need to only return JSON for a Headless CMS experience, then it will be a piece of cake. You can choose to use a module like AppAPI or return the json using PHP's json_encode() function. Maybe a GraphQL module too.

Battle Tested

More than ten years of continuos development . ProcessWire has been in development since 2003 (with other names and cores).

Awesome Admin

You have an awesome administration dashboard that is fully customizable both in PHP and Javascript (jQuery UI).

Friendly Community

The ProcessWire forums is filled with friendly and welcoming folks. Please join and ask if you need help.

Command Line Ready

ProcessWire can work in console apps (terminal). You don't need a browser and can create command line scripts that interacts with the ProcessWire apis. You can look at the Wireshell project for an example console application that uses the ProcessWire apis.

Ever Green

Updating your ProcessWire's core is a breeze. In most projects you just need to replace the wire/ directory with the new version and you are done. In contrast with Wordpress where not updating your CMS is a huge security risk, ProcessWire sites can be not updated for years and they will be fine. All the core updates are mostly new features and bug fixes. Security is strong with ProcessWire.

Cons

Apache and MySQL only

ProcessWire is strongly opinionated on these technologies. You can choose other web server like nginx, but the main security features are tested on Apache only.

If you like other database systems like PostgreSQL you are out of luck. At least if you want to use the jQuery inspired engine from ProcessWire. That query engine is tailored to the bone for MySQL. Other databases compatible with MySQL like MariaDB are fine though.

Migrations and Version Control

Working with multiple people on the same site can be a little difficult. Specially on how to send the changes in field relationships. If a site is in production it would be difficult to replicate the different changes in fields and page relationships from a dev enviroment. There are modules to address this issue though like RockMigrations and Version Control . Be sure your team agrees on their strategy before sending a site to production.

Also ProcessWire is heavily dependent on its query engine. If you need to execute custom SQL for fetching PW's data, is best that you create a custom table. ProcessWire stores its data on heavily optimized table structures that are not easy to grok.

Testing

You will have to configure your own testing suite and testing engine. Since ProcessWire is mainly tested manually in dev and production sites. It does not have an automated testing suite or tooling for that use case yet (afaik).

Analytics and Telemetry

In the same situation as testing. You will have to configure your own analytics and telemetry engine. (afaik).

At least basic PHP knowledge is required

Some Wordpress folks may expect a point and click type of experience. But with ProcessWire you require to learn a bit of PHP. Other folks that comes from other frameworks like Laravel or CakePHP can be a little confused on the terminology of page, field and template . Both are easy to learn and with some experiments and asking you will get the hang of it.

Use Cases

The following are use cases where ProcessWire can shine:

  • Read heavy systems. Where there are more read than write operations, for example a simple Blog or catalogue of products, informational site or landing page.

  • A dashboard for other systems. You can leverage the beautiful ProcessWire dashboard and via Hooks send the data to other systems apis. Having ProcessWire as a single source of truth for the data.

  • Small complexity relationships. Even though you can create complex parent - child relationships, is best to keep them slim and simple. If a more complex database structure is needed, maybe other framework can be used and use ProcessWire as a client for that framework.

  • Stable projects that do not need many changes (in the database structure) after being sent to production.

The following are use cases where ProcessWire would not be recommended:

  • Realtime systems. For example chat applications or long living operations. For these kind of systems there are better tools like Elixir with Phoenix .

  • E-commerce. Although there are wonderful solutions for e-commerce like Padloper.pw, this area is best to configure a dedicated e-commerce software and communicate via its apis, if you need something quick for e-commerce. Do try Padloper though, it could solve many common e-commerce scenarios. This is just a personal opinion, mainly because the time required to create a custom e-commerce.

  • Teams greater than 2. If the development team is one or two people per project it would be fine. With more people modifyng fields and templates it would be difficult to coordinate. Be sure to use migrations module or at least document each change for reproduction in the main production site.

Conclusion

ProcessWire is a wonderful system to build your next project if you use it within it's constraints. With its modular structure and simple requirements you can have a complex site ready using less effort.