Please follow the following steps to install PoP:

  1. Install the latest version of WordPress
  2. Download/clone PoP from the repository in GitHub on the same folder
  3. Create all required pages/categories/etc, to be found in each plugin’s config/constants.php file (eg: this file), and set those constants with their corresponding ID (there’s an issue to do this through scripts)
  4. Activate all plug-ins and the theme

Required 3rd-party plugins

Install and activate the following plugins, which are integrated with PoP (not all of them are mandatory, however PoP has yet not been tested without them):


PoP allows the configuration of the following properties, done in file wp-config.php:

Create and re-use a cache of the settings of the requested page.

Include the mangled, minified and bundled together version of all .js, .tmpl.js and .css files.

Allows to replace the name of each module with a base36 number instead, to generate a smaller response (around 40%).

0: Use the original name of each module.
1: Use both.
2: Use the base36 counter number.

Common keys from the JSON code sent to the front-end are replaced with a compact string. Output response will be smaller.

Save special loaded-in-the-background pages in localStorage, to not have to retrieve them again (until software version changes).

Decentralization: enabling crossdomain

To have a website consume data coming from other domains, crossdomain access must be allowed. For this, edit your .htaccess file like this:

<IfModule mod_headers.c>
  SetEnvIf Origin "http(s)?://(.+\.)?(|$" AccessControlAllowOrigin=$0
  Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin

  # Allow for cross-domain setting of cookies, so decentralized log-in also works
  Header set Access-Control-Allow-Credentials true
  Header add Access-Control-Allow-Methods GET
  Header add Access-Control-Allow-Methods POST


PoP allows to mangle, minify and bundle together all required .css, .js and .tmpl.js files (suitable for PROD environment), both at the plug-in and website levels:

At the plug-in level (it generates 1 .js file + 1 .tmpl.js file + 1 .css file per plug-in):
execute bash -x plugins/PLUGIN-NAME/build/ for each plugin

At the website level (it generates 1 .js file + 1 .tmpl.js file + 1 .css file for the whole website):
execute bash -x themes/THEME-NAME/build/ for the theme

Executing the scripts requires the following software (I’ll welcome anyone proposing a better way to do this):

  1. UglifyJS
    To mangle and so further reduce the file size of the bundled JS file
  2. Google’s minimizer Min
    To bundle and minify files. The min webserver must be deployed under http://min.localhost/.

The following environment variables are used in POP_APP_PATH, POP_APP_MIN_PATH and POP_APP_MIN_FOLDER. To set their values, for Mac, execute sudo nano ~/.bash_profile, then add and save:

export POP_APP_PATH=path to your website (eg: "/Users/john/Sites/PoP")
export POP_APP_MIN_PATH=path to Google's min website (eg: "/Users/john/Sites/min")
export POP_APP_MIN_FOLDER=folder name in min, where files to minimize are copied (eg: "PoP", with the folder being /Users/john/Sites/min/PoP/)

The script copies all files to minimize under folder POP_APP_MIN_FOLDER, from where it minimizes them. The structure of this folder must be created in advance, as follows:

for each theme:


for each plug-in:


Welcome to the PoP framework!
Break the information monopoly

the PoP framework is open source software which aims to decentralize the content flow and break the information monopoly from large internet corporations. Read more.

Sign up to our newsletter: