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 |
.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"
}
]
}
]
}