Skip to content

How-to Guides

Technical References

VIP Codebase /

What can be put in the VIP repository

Directory structure

The repository for each VIP site (see vip-skeleton for an example) has the following directory structure:


For always active, global plugins (similar to mu-plugins) — see our plugin documentation for more information.


Store your site’s favicons here, per this documentation. All other public-facing images should be uploaded or imported to the WordPress dashboard or stored as part of your /theme/ assets.


For .po and .mo translation files, which specify the translated strings for the site. See below for how to upload languages.


Your site’s plugins — more details here.


Provides access to files that are not directly web accessible, but can be accessed by your theme or plugin code.


Themes to be made available to your sites. We recommend keeping the default theme available for testing purposes.


For custom configuration changes and additional sunrise.php code. This folder’s vip-config.php file is used in place of wp-config.php.

All of these directories are required and should not be removed. These directories will also be available on production web servers. Any additional directories created in your GitHub repository that are not included in the above list will not be mounted onto your site, and so will not be web-accessible.

Plugins and themes directories

The plugins and themes directories are mapped to wp-content/plugins/ and wp-content/themes/ and should be treated like any other WordPress install.

vip-config directory

The vip-config directory contains a file named vip-config.php. This is where to put things usually found in wp-config.php. Not all settings can be changed, as we have optimized certain aspects of the WordPress install, but it is handy if you need to define something like an API key or secret. Note that most of WordPress is not available when this file is loaded and code should be limited to pure PHP.

Languages directory

The languages directory is mapped to wp-content/languages, and should contain the .po and .mo files which specify the translated strings for the site. In order to upload the language files for a particular language, follow these steps. In this example, we’ll be uploading Italian:

  1. Download the Italian WordPress distribution from here.
  2. Unpack it to, for example, /path/to/wordpress/
  3. cp -r /path/to/wordpress/wp-content/languages/* /path/to/your-repo/languages/
    (IMPORTANT! If you have custom translations in any currently present it_IT.* files, you might want to back those files up. You can then backport those custom translations in the new it_IT.po and regenerate from it. If you need to do this and need assistance, let us know in a ticket, and we’ll be happy to help.)
  4. After that, you’ll have to commit, push up, and deploy the changes.
  5. To upload other languages, follow the same steps, downloading that particular language WordPress distribution in step 1.

Images directory

Requests for favicon.ico and apple-touch-icon*.png variant files are mapped to files with the same name within the images directory of the client repository.

Private directory

The private directory is mapped to /private/, which is not web accessible; this might be used to store files streamed via PHP, e.g., a paid, commercial plugin which needs a purchase record checked before starting the download.

Last updated: November 16, 2020