# Introduction

# Vision

A rising tide lifts all boats. -- United States President, John F. Kennedy (borrowed from the New England Council)

Inspired by the proverb "A rising tide lifts all boats", we want to lift the quality of code across the WordPress ecosystem. Tide’s vision is to run automated quality testing for all WordPress plugins and themes and make those test results visible for the authors and end users of those plugins and themes. This will help improve the quality of code throughout the WordPress ecosystem and help WordPress site owners make better choices about plugins and themes.

# Current status

The Tide project is an official component of the WordPress project (opens new window) and in the early stages of development. Today, Tide scans all WordPress plugins and themes and provides scan results as JSON through the Tide API.

The next step is to use the JSON output in the WordPress plugin and theme repository to show PHP compatibility information. This will help drive the adoption of the newest PHP versions as both plugin/theme authors and WordPress site owners installing those plugins and themes will be more aware of the PHP compatibility of each plugin/theme.

Progress can be followed in the WordPress Meta issue tracker (ticket #4309 (opens new window)).

# Technical overview

Tide services are responsible for the following:

  • The wptide.org website (built with VuePress (opens new window)) includes this documentation and serves the Tide API JSON endpoints. Visit the Specification page to see examples of the API response.
  • The Lighthouse Server reads messages from a queue and runs Google Lighthouse reports against themes only, then writes the results back to the Tide API.
  • The PHPCS Server reads messages from a queue and runs reports against both plugins and themes, then writes the results back to the Tide API.
  • The Sync Server makes scheduled requests to the WordPress.org Themes and Plugins API's to determine which projects have changed since the last request, then adds them to a Pub/Sub queue associated by report type which is then processed by the relevant Report Server.

In addition, we are working on the meta repository of WordPress.org to handle fetching the reports generated by Tide and showing summaries of them in the WordPress.org plugin and theme directories.

# WordPress.org components

# Architecture diagram

The following diagram notes which Google Cloud Platform (GCP) components are used to represent the various Tide services, and how the themes and plugins API on WordPress.org connects to the Sync Server. The basic flow is that a User or an API Client will make a request to the Tide REST API, which sends back a response. The request could create messages in the queue where one or more services process them by running automated scripts and writing the results back to the Tide API. Additionally, the Sync Server will poll the WordPress.org API's for new themes and plugins to add to the message queue.


# Working with Tide

Currently, you can:

  • Request plugins & themes using the Specification page which allows you to make requests to the various Tide API endpoints using a built-in UI generated from our OpenAPI v3 Specification.
  • Install Tide to help test and develop locally.
  • Deploy Tide to Google Cloud and run your own variation of Tide in the cloud.

In the future, we hope to provide authors with the ability to use Tide as a service to test their plugins or themes during development.

# Contributing

There are many ways to contribute to Tide. You can help us champion the adoption of the quality testing results in the WordPress project. You can also help by contributing code or documentation to Tide itself.

Please read our Contributing guide for details on the process of creating a ticket or submitting a pull request to Tide, and our Code of Conduct.

# Maintainers

Derek Herman (@derekherman (opens new window)), and Jeff Paul (@jeffpaul (opens new window))

# Contributors

Props: Anthony Burchell (@antpb (opens new window)), Bartosz Gadomski (@bartoszgadomski (opens new window)), Derek Herman (@derekherman (opens new window)), Jeff Paul (@jeffpaul (opens new window)), Jonathan Wold (@sirjonathan (opens new window)), Jozef Benko (joe-xwp (opens new window)), Ivan Kruchkoff (@ivankruchkoff (opens new window)), Piotr Bajer (@piotr-bajer (opens new window))

The following contributors are those that helped support, manage, design, or develop Tide before the refactor to Node from Golang.

Props: Alberto A. Medina (@amedina (opens new window)), Bartek Makoś (@MakiBM (opens new window)), Brendan Woods (@brendanwoods-xwp (opens new window)), Cathi Bosco (@cathibosco (opens new window)), Daniel Louw (@danlouw (opens new window)), David Cramer (@davidcramer (opens new window)), David Lonjon (@davidlonjon (opens new window)), Derek Herman (@derekherman (opens new window)), Dušan D. Majkić (@dmajkic (opens new window)), Ilya Grigorik (@igrigorik (opens new window)), Janki Moradiya (@jankimoradiya (opens new window)), Jeff Paul (@jeffpaul (opens new window)), Jonathan Wold (@sirjonathan (opens new window)), Joshua Wold (@jwold (opens new window)), Justin Kopepasah (@kopepasah (opens new window)), Keanan Koppenhaver (@kkoppenhaver (opens new window)), Leo Postovoit (@postphotos (opens new window)), Lubos Kmetko (@luboskmetko (opens new window)), Luke Carbis (@lukecarbis (opens new window)), Meet Makadia (@mrmakadia94 (opens new window)), Miina Sikk (@miina (opens new window)), Mike Crantea (@mehigh (opens new window)), Otto Kekäläinen (@ottok (opens new window)), Pierre Gordon (@pierlon (opens new window)), Scott Reilly (@coffee2code (opens new window)), Rheinard Korf (@rheinardkorf (opens new window)), Rob Stinson (@robstino (opens new window)), Sayed Taqui (@sayedtaqui (opens new window)), Ulrich Pogson (@grappler (opens new window)), Utkarsh Patel (@PatelUtkarsh (opens new window))

# Contact Us

Have questions? Join us in the #tide channel (opens new window) in WordPress Slack (opens new window). If you're new to Slack, keep in mind that it sometimes takes several hours for community members to respond — thank you for being patient!