Get Involved

Directory Structure

Every time you clone the Plywood repository, you effectively create a new workspace. The workspace has the following directory structure:

plywood Setup.cmake repos workspace-settings.pylon plytool data build bootstrap extern plywood docs extra scripts src apps build cook cpp runtime web (other data folders) (other build folders) (extern folders) (other source folders) (other repo folders) Generated after cloning

Files in the Workspace Root


This is the first script to run immediately after cloning Plywood, as explained in Quick Start. It's responsible for building plytool.


(Not stored in Git) This file contains settings associated with the workspace, such as the current build folder and the default CMake generator for new build folders. It gets modified by certain PlyTool commands.


(Not stored in Git) This is a command-line application to perform various operations on the workspace, such as creating new build folders, installing externs and generating build systems. See PlyTool Reference for more info.

The data Directory

The data directory, located immediately below the workspace root, can be seen as a local cache of transient data. It contains build folders, file downloads, and any other kind of data that is generated or required by Plywood apps. The data folder is excluded from Plywood's main Git repository.

In theory, you could delete the entire data directory at any time and get it back by running PlyTool commands and/or other applications.


The data/build directory is reserved for Plywood build folders. Each build folder contains a special file, info.pylon, that contains information about the build folder. Each time you create a build folder, add a root target or select an extern provider using PlyTool, it modifies one of these info.pylon files.


The data/extern directory is reserved for temporary storage by extern providers. Each extern folder contains a special file, info.pylon, that contains information about that extern folder. This is where certain extern providers download and extract pre-built libraries.

Some examples of extern providers that create extern folders are libsass.prebuilt, libavcodec.prebuilt and cairo.prebuilt, all of which download pre-built libraries for Windows.

Not every extern provider needs to create an extern folder. For example, on Debian and Ubuntu, libsass.apt uses the system package manager instead.

Other applications are free to create their own subdirectories in data. For example, the WebCooker writes a bunch of data files to data/docsite.

The repos Directory

The repos directory, located immediately below the workspace root, is where Plywood modules are stored. Plywood modules are organized into repos, where each sudirectory immediately below the repos directory is considered a Plywood repo.


The repos/plywood directory is special; it's where all of Plywood's built-in modules are stored.

Every other subdirectory of repos is excluded from Plywood's main Git repository. It's possible to define new repos by creating or cloning other Git repos here. Additional repos must include an info.pylon file to declare their dependencies on other repos. For now, this must all be done manually. The plan is extend Plywood to make it easier to work with multiple repos.