Skip to content

Config reference

Full reference for .pcmp.json, .pcmp.local.json, and the CLI.


Command-Line Interface

ProCMP supports both config-based and configless builds via the CLI.

Subcommands

Subcommand Description
build Run a configless build with flags
init Scaffold pipeline files and personal local config

build flags

Flag Description
-i, --input <path> Source entry point
-o, --output <path> Output file path
-f, --frame <path> Path to the frame file
-c, --config <path> Path to the darklua config
-n, --name <name> Optional display name for the build

Example

pcmp build -i src/init.luau -o generated/out.luau -f pipeline/frames/release.luau -c pipeline/darklua/stable.json

.pcmp.json — Shared cfg

This file is committed to source control and shared across all team members.

Fields

Field Type Default Description
envFile string ".env" Path to the env file for reading tokens
openComposedOutput OpenFileConfig — Open composed output after each build (prefer local config)
releaseNotesEditor OpenFileConfig — Editor for release notes (prefer local config)
deployment DeploymentConfig — GitHub deployment settings
buildConfigs BuildConfig[] required Array of named build configurations

BuildConfig

Field Type Default Description
name string required Display name shown in the selection prompt
input string — Source entry point (mutually exclusive with inputDir)
inputDir string — Scan a directory for .luau/.lua files
output string — Output file path (single-file mode)
outputDir string — Output directory (directory mode)
frame string required Path to the frame file
darkluaConfig string required Path to the darklua config
promptVersion boolean false Prompt for a version string before building
versionFormat string "^v%d+%.%d+%.%d+" Lua pattern the version string must match
promptDeploy boolean false Prompt to deploy after building
prerelease boolean false Mark the GitHub release as a pre-release
openComposedOutput OpenFileConfig — Per-config output opener (overrides global)
variants BuildVariant[] — Additional builds that inherit this config

Directory mode (inputDir)

When inputDir is set, ProCMP scans the directory for .luau and .lua files and builds each one independently. Useful for test suites.

{
 "name": "Tests",
 "inputDir": "tests",
 "outputDir": "generated/tests",
 "frame": "pipeline/frames/release.luau",
 "darkluaConfig": "pipeline/darklua/unminified.json"
}

Single-file mode (input)

Standard mode: one source file → one output file.

{
 "name": "Release",
 "input": "src/init.luau",
 "output": "generated/release/myScript.luau",
 "frame": "pipeline/frames/release.luau",
 "darkluaConfig": "pipeline/darklua/stable.json"
}

BuildVariant

Variants inherit all fields from their parent BuildConfig and override any fields you specify. They are built in sequence after the parent.

Field Type Description
name string Display name for the variant
input string Override source entry point
output string Override output path
frame string Override frame
darkluaConfig string Override darklua config
{
 "name": "Release",
 "input": "src/init.luau",
 "output": "generated/release/myScript.luau",
 "frame": "pipeline/frames/release.luau",
 "darkluaConfig": "pipeline/darklua/stable.json",
 "variants": [
  {
   "name": "Release-Unminified",
   "darkluaConfig": "pipeline/darklua/unminified.json",
   "output": "generated/release/myScript-unminified.luau"
  }
 ]
}

DeploymentConfig

{
 "deployment": {
  "github": {
   "owner": "your-username",
   "repo": "your-repo",
   "tokenEnvVar": "GITHUB_TOKEN"
  }
 }
}
Field Type Default Description
github.owner string required GitHub username or organisation
github.repo string required Repository name
github.tokenEnvVar string "GITHUB_TOKEN" Env var name to read the token from

OpenFileConfig

Used for openComposedOutput and releaseNotesEditor.

Field Type Description
command string Executable to run
args string[] Arguments — {file} is replaced with the file path
{
 "command": "code",
 "args": ["--wait", "{file}"]
}

.pcmp.local.json — Local config

Personal preferences

Field Type Description
envFile string Override env file path
openComposedOutput OpenFileConfig Your editor for output preview
releaseNotesEditor OpenFileConfig Your editor for release notes

See Local Config for full documentation.


Full example

pipeline/.pcmp.json
{
 "deployment": {
  "github": {
   "owner": "your-name",
   "repo": "your-repo",
   "tokenEnvVar": "GITHUB_TOKEN"
  }
 },
 "buildConfigs": [
  {
   "name": "Tests",
   "inputDir": "tests",
   "outputDir": "generated/tests",
   "frame": "pipeline/frames/release.luau",
   "darkluaConfig": "pipeline/darklua/unminified.json"
  },
  {
   "name": "Debug",
   "input": "src/init.luau",
   "output": "generated/debug/myScript.luau",
   "frame": "pipeline/frames/debug.luau",
   "darkluaConfig": "pipeline/darklua/unminified.json"
  },
  {
   "name": "Release",
   "input": "src/init.luau",
   "output": "generated/release/myScript.luau",
   "frame": "pipeline/frames/release.luau",
   "darkluaConfig": "pipeline/darklua/stable.json",
   "promptVersion": true,
   "versionFormat": "^v%d+%.%d+%.%d+",
   "promptDeploy": true,
   "variants": [
    {
     "name": "Release-Unminified",
     "darkluaConfig": "pipeline/darklua/unminified.json",
     "output": "generated/release/myScript-unminified.luau"
    }
   ]
  }
 ]
}