| name | compact-core:compilation-tooling |
| description | Use when working with the Compact compiler (compactc), configuring build settings, understanding zkir/prover/verifier output artifacts, setting up COMPACT_PATH, or integrating VS Code language server support for Midnight smart contract development. |
Compilation Tooling
Complete guide to the Compact compiler (compactc), project organization, build workflows, and understanding compilation output.
Quick Reference
Basic Compilation
compactc contract.compact -o output/
compactc contract.compact -o output/ --skip-zk
compactc contract.compact -o output/ --vscode
Compiler Flags
| Flag | Description | Example |
|---|
-o, --output | Output directory | -o build/ |
--skip-zk | Skip ZK proof generation (dev mode) | --skip-zk |
--vscode | Generate VS Code language server files | --vscode |
-I, --include | Add include path | -I ./lib |
--verbose | Verbose output | --verbose |
--json | JSON output format | --json |
--no-typescript | Skip TypeScript generation | --no-typescript |
Environment Variables
| Variable | Purpose | Example |
|---|
COMPACT_PATH | Include path resolution | export COMPACT_PATH="/libs:/project/src" |
MIDNIGHT_NETWORK | Target network | export MIDNIGHT_NETWORK="testnet" |
Output Artifacts
Compilation produces several output files:
output/
├── zkir/ # Zero-knowledge intermediate representation
│ ├── circuit_name.zkir # Circuit IR for each exported circuit
│ └── ...
├── keys/
│ ├── prover/ # Prover keys (for proof generation)
│ │ └── circuit_name.pk
│ └── verifier/ # Verifier keys (for on-chain verification)
│ └── circuit_name.vk
├── contract.ts # TypeScript types and contract interface
├── witnesses.ts # Witness type definitions
└── index.ts # Main export file
Development Workflow
1. Write Compact contract
2. Compile with --skip-zk for fast iteration
3. Run TypeScript tests
4. When ready: Full compile (generates ZK keys)
5. Deploy to testnet
Fast Development Loop
compactc contract.compact -o build/ --skip-zk
compactc contract.compact -o build/
Project Structure
Recommended project layout for Midnight DApps:
my-midnight-project/
├── contracts/
│ ├── main.compact # Main contract entry point
│ ├── types.compact # Shared type definitions
│ └── lib/ # Helper modules
│ └── utils.compact
├── src/ # TypeScript application code
│ ├── index.ts
│ ├── witnesses.ts # Witness implementations
│ └── deploy.ts
├── build/ # Compiled output (gitignored)
│ ├── zkir/
│ ├── keys/
│ └── *.ts
├── tests/
│ └── contract.test.ts
├── package.json
├── tsconfig.json
└── .env # Environment configuration
VS Code Integration
Generate language server support for VS Code:
compactc contract.compact -o build/ --vscode
This creates .vscode/ configuration for:
- Syntax highlighting
- Error diagnostics
- Type checking
- Go to definition
References
For detailed documentation:
Examples
Working project templates and scripts: