Tutorials for adept web development with ProcessWire

processwire.dev is a collection of (opinionated) tutorials on web development with the ProcessWire Content Management Framework. The guides aim to illustrate best practices for ProcessWire development in terms of performance, accessibility, security, extensibility, developer and user experience in the context of ProcessWire.

All tutorials are written and maintained by me, Moritz L’Hoest (MoritzLost on Github and in the ProcessWire Forum).

How to get started

I do not want to write the millionth hello world tutorial that will teach you how to install the CMS and set up your first template. If you’re looking for a ProcessWire starter tutorial, take a look at ProcessWire CMS — A Beginner’s Guide by Smashing Magazine. Instead, this guide assumes some level of familiarity with ProcessWire and PHP, as well as a solid grasp on current web technologies (HTML5, CSS, JavaScript / ES6 and above).

All tutorials are mostly self-contained, so you can read them in any order you like, or just pick the topics that interest you. That said, most tutorials assume you know how to use Composer and to install external libraries and configure the autoloader for your custom PHP code — see the articles on the Composer integration and on namespaces and autoloading in general. I also use the Twig template language on most of my sites and many examples feature Twig syntax, you can learn more in the following articles: Twig + ProcessWire Setup and Custom Functionality.

If you need some general pointers on ProcessWire, I consider the following topics from the ProcessWire documentation to be essential reading:

Quality standards

Since this site is about following best practices, it’s important to define the quality standards against which those practices are measured. The following is a (roughly ordered) list of my own quality standards and goals for the websites I build. Having such a list helps make decisions about trade-offs and incompatible goals.

I invite you to read through the list and think about which aspects are more or less important to you, and what other things would go on your list. If there is a large disconnect between your values and mine, some chapters might feel unnecessary or counterproductive — which is totally fine. You should carefully consider what’s important to you and disregard any advice I give if it clashes with your goals for your development work or individual projects.

  1. User experience and accessibility. Browsing and using the site is effortless. The site is inclusive by following established accessibility standards. Design flourishes and delightful interactions never trump ease of use or accessibility.
  2. Security. Follow best practices for security hardening. Security should be considered from the beginning, not as an afterthought. Improve your code’s resilience against unknown bugs and exploits by reducing the attack surface.
  3. Performance. Vital for user experience, user retention and search engine ratings. The best performance optimization is cutting out things you don’t need.
  4. Future-proof work. Data and content are stored in sensible formats and structures, independent of the current presentation format or design. Source code is clear, concise and separates concerns.
  5. Standards-compliance and technical SEO. Follow web standards to make your content accessible to all channels and devices that understand those standards. This includes responsive design based on available space, not on device detection, and structured (meta-)data to make the content machine-readable.
  6. Intuitive editing workflows. Editors of your site’s content don’t need a tutorial to work with your interfaces, all fields are either self-explanatory or include usage instructions. Editors can’t accidentally break anything with unexpected inputs.
  7. Developer experience. The code and site structure follows accepted standards for web development like DRY code and separation of concerns to ensure maintainability.

Definitions and roles

This site includes chapters on how to make life a little easier for everyone involved in the lifecycle of building and maintaining a site. For clarity, here are my broad distinctions between the different roles of the people that may be involved in a project. Depending on project size, one person may take on multiple of those roles.

About me

I currently work for schwarzdesign as a developer with over three years of experience building sites on different stacks. In this time I have built over 15 websites with ProcessWire. I have also written several ProcessWire tutorials for the support forum, most of which have been revised and updated for this site.

I also created and maintain the following ProcessWire modules:

Suggestions and error reports

If you find an error, have a suggestion for improvements or any other comment, you can let me know through the following channels. Don’t be hesitant to message me because of a spelling mistake — I despise those as well ;-)

Support options

You can support this site in the following ways: