Skip to content
compact-core:compilation-tooling logo

compact-core:compilation-tooling

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.

SKILL.md

Full skill instructions

Compilation Tooling

Complete guide to the Compact compiler (compactc), project organization, build workflows, and understanding compilation output.

Quick Reference

Basic Compilation

# Compile a contract
compactc contract.compact -o output/

# Compile with debug mode (faster, no ZK proofs)
compactc contract.compact -o output/ --skip-zk

# Generate VS Code language server support
compactc contract.compact -o output/ --vscode

Compiler Flags

FlagDescriptionExample
-o, --outputOutput directory-o build/
--skip-zkSkip ZK proof generation (dev mode)--skip-zk
--vscodeGenerate VS Code language server files--vscode
-I, --includeAdd include path-I ./​lib
--verboseVerbose output--verbose
--jsonJSON output format--json
--no-typescriptSkip TypeScript generation--no-typescript

Environment Variables

VariablePurposeExample
COMPACT_PATHInclude path resolutionexport COMPACT_PATH="/​libs:/​project/​src"
MIDNIGHT_NETWORKTarget networkexport 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

# Fast iteration (no proof generation)
compactc contract.compact -o build/ --skip-zk

# Full build for deployment
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: