Skip to main content

Pikku CLI Configuration

The pikku.config.json file configures how the Pikku CLI scans your codebase and generates files.

Minimal Configuration​

{
"tsconfig": "./tsconfig.json",
"srcDirectories": ["src"],
"outDir": ".pikku"
}

Configuration Options​

Core Options​

OptionTypeRequiredDescription
tsconfigstringβœ…Path to TypeScript configuration file
srcDirectoriesstring[]βœ…Directories to scan for Pikku functions and wirings
outDirstringβœ…Where generated files are written (default: .pikku)
rootDirstring❌Root directory for resolving paths (default: config file directory)
$schemastring❌JSON schema URL for editor autocomplete

Client Generation​

OptionTypeDescription
fetchFilestringGenerate type-safe HTTP client (fetch-based)
websocketFilestringGenerate type-safe WebSocket client
queueFilestringGenerate type-safe queue client
rpcWiringsFilestringGenerate type-safe RPC client
nextBackendFilestringGenerate Next.js backend integration
nextHTTPFilestringGenerate Next.js HTTP route handler

Example:

{
"fetchFile": "sdk/pikku-fetch.gen.ts",
"websocketFile": "sdk/pikku-websocket.gen.ts",
"queueFile": "sdk/pikku-queue.gen.ts",
"rpcWiringsFile": "sdk/pikku-rpc.gen.ts"
}

Filtering​

OptionTypeDescription
filters.tagsstring[]Only include functions/wirings with these tags
filters.typesstring[]Only include these wiring types: http, channel, queue, scheduler, rpc, mcp, cli
filters.directoriesstring[]Only scan these directories

Example:

{
"filters": {
"tags": ["api", "public"],
"types": ["http", "rpc"],
"directories": ["src/api"]
}
}

Monorepo Support​

OptionTypeDescription
packageMappingsobjectMap local paths to published package names

Example:

{
"packageMappings": {
"packages/sdk": "@my-app/sdk",
"packages/functions": "@my-app/functions"
}
}

This ensures generated imports use @my-app/sdk instead of relative paths like ../../packages/sdk.

OpenAPI Generation​

OptionTypeDescription
openAPI.outputFilestringWhere to write OpenAPI spec (.yml or .json)
openAPI.additionalInfo.infoobjectAPI metadata (title, version, description)
openAPI.additionalInfo.serversarrayServer URLs
openAPI.additionalInfo.tagsarrayTag descriptions
openAPI.additionalInfo.securitySchemesobjectSecurity scheme definitions
openAPI.additionalInfo.securityarrayGlobal security requirements

Example:

{
"openAPI": {
"outputFile": "openapi.yml",
"additionalInfo": {
"info": {
"title": "My API",
"version": "1.0.0",
"description": "API documentation"
},
"servers": [
{ "url": "https://api.example.com", "description": "Production" },
{ "url": "http://localhost:3000", "description": "Development" }
]
}
}
}

Advanced Options​

OptionTypeDescription
extendsstringExtend another Pikku config file
supportsImportAttributesbooleanEnable import attributes for schema imports (TypeScript 5.3+)
middlewareServicesstring[]Services available in middleware (before session creation)

Generated File Paths​

Most users don't need to customize these - Pikku uses sensible defaults.

OptionDefaultDescription
bootstrapFile.pikku/pikku-bootstrap.gen.tsMain bootstrap file
typesDeclarationFile.pikku/pikku-types.gen.tsType definitions
servicesFile.pikku/pikku-services.gen.tsService types
functionsFile.pikku/function/pikku-functions.gen.tsFunction registry
functionsMetaFile.pikku/function/pikku-functions-meta.gen.tsFunction metadata
httpRoutesFile.pikku/http/pikku-http-wirings.gen.tsHTTP routes
httpRoutesMetaFile.pikku/http/pikku-http-wirings-meta.gen.tsHTTP metadata
httpRoutesMapDeclarationFile.pikku/http/pikku-http-wirings-map.gen.d.tsHTTP type map
channelsFile.pikku/channel/pikku-channels.gen.tsWebSocket channels
channelsMetaFile.pikku/channel/pikku-channels-meta.gen.tsChannel metadata
channelsMapDeclarationFile.pikku/channel/pikku-channels-map.gen.d.tsChannel type map
queueWorkersFile.pikku/queue/pikku-queue-workers-wirings.gen.tsQueue workers
queueWorkersMetaFile.pikku/queue/pikku-queue-workers-wirings-meta.gen.tsQueue metadata
queueMapDeclarationFile.pikku/queue/pikku-queue-workers-wirings-map.gen.d.tsQueue type map
schedulersFile.pikku/scheduler/pikku-schedulers-wirings.gen.tsScheduled tasks
schedulersMetaFile.pikku/scheduler/pikku-schedulers-wirings-meta.gen.tsScheduler metadata
rpcFile.pikku/rpc/pikku-rpc-wirings.gen.tsRPC functions
rpcMetaFile.pikku/rpc/pikku-rpc-wirings-meta.gen.tsRPC metadata
rpcMapDeclarationFile.pikku/rpc/pikku-rpc-wirings-map.gen.d.tsRPC type map
mcpEndpointsFile.pikku/mcp/pikku-mcp-wirings.gen.tsMCP endpoints
mcpEndpointsMetaFile.pikku/mcp/pikku-mcp-wirings-meta.gen.tsMCP metadata
mcpJsonFile.pikku/mcp/pikku-mcp.gen.jsonMCP JSON manifest
schemaDirectory.pikku/schemasJSON schemas directory

Example Configurations​

Monorepo with Shared SDK​

{
"tsconfig": "./tsconfig.json",
"srcDirectories": ["packages/functions/src"],
"outDir": "packages/functions/.pikku",
"fetchFile": "packages/sdk/.pikku/pikku-fetch.gen.ts",
"websocketFile": "packages/sdk/.pikku/pikku-websocket.gen.ts",
"packageMappings": {
"packages/sdk": "@my-app/sdk",
"packages/functions": "@my-app/functions"
}
}

Next.js Application​

{
"tsconfig": "./tsconfig.json",
"srcDirectories": ["./backend"],
"outDir": "./backend/.pikku",
"nextBackendFile": "./pikku-nextjs.ts"
}

Filtered Build (Public API Only)​

{
"tsconfig": "./tsconfig.json",
"srcDirectories": ["src"],
"outDir": ".pikku",
"filters": {
"tags": ["public"],
"types": ["http"]
}
}

Next Steps​