Golem Application Manifest Reference
JSON schema
For the application manifest format we also publish JSON schemas. The current version (1.5.0) is available here .
The JSON schema is intended to be used with editors and IDEs, to help with base validation and code completion.
Use the following YAML comments at the start of your golem.yaml documents to enable schema support:
# $schema: https://schema.golem.cloud/app/golem/1.5.0/golem.schema.jsonNote that on top of the above schema there are other checks performed by golem, see the field reference below for details.
Loading of Application Manifest documents
The Golem CLI commands that use Application Manifest start by searching for golem.yaml documents in the current and the parent directories. Once the top level manifest document is found, more manifests are searched based on the includes fields.
After resolving relative paths in the documents they are merged, then component selection happens: this can be either explicit, by using --component-name CLI flags, or implicit, in which case only components defined in the directory - including subdirectories - from where the Golem CLI was executed are used.
Application Manifest documents can also be explicitly passed to the CLI, using the --app flag. Note that when using explicit documents the includes field is not used, it is expected that all relevant documents are provided for the CLI.
Template variables and functions
The Application Manifest has some fields which are used as templates, these fields are marked as Templated in the field reference below. The templates are using minijinja , which is a minimal templating engine based on Jinja2 syntax.
Available template variables:
component_name: contains the current component name in which the template is used
Available naming related string transforming functions:
to_snake_caseto_kebab_caseto_lower_camel_caseto_pascal_caseto_shouty_kebab_caseto_shouty_snake_caseto_snake_caseto_title_caseto_train_caseto_upper_camel_case
build: tool-name build {{ component_name | to_snake_case }}.wasmField reference
manifestVersion
Optional manifest schema version string.
includes
Optional list of glob patterns that are used for adding search patterns for other Application Manifests when using auto discovery of them. The patterns are relative to the manifest document in which they are defined.
The default search pattern is **/golem.yaml, which searches for golem.yaml documents in every subdirectory
recursively. Templates and examples provided by Golem usually use more specific search patterns to make the lookups
more efficient.
The includes fields can be defined in one manifest only, usually in the project root directory.
Defining it multiple times results in validation error.
includes:
- components-dir/*/golem.yaml
- custom-templates/golem-*.yamlapp
Required application name which will be used as the deployment name for the application.
httpApi
Optional object for defining HTTP API deployments. Deployments can be defined in multiple manifests, and they are merged during deployment.
httpApi.deployments
Optional map of HTTP API deployments by environment name.
httpApi.deployments.<environment-name>
Optional list of HTTP API deployments for the environment.
httpApi.deployments.<environment-name>[*].domain
Required domain for the deployment.
httpApi.deployments.<environment-name>[*].webhookUrl
Optional webhook URL for the deployment.
httpApi.deployments.<environment-name>[*].agents
Optional map of HTTP API deployment options by agent type name.
httpApi.deployments.<environment-name>[*].agents.<agent-type-name>.securityScheme
Optional security scheme for the agent in this deployment.
httpApi.deployments.<environment-name>[*].agents.<agent-type-name>.testSessionHeaderName
Optional test session header name for the agent in this deployment.
mcp
Optional object for defining MCP deployments.
mcp.deployments
Optional map of MCP deployments by environment name.
mcp.deployments.<environment-name>
Optional list of MCP deployments for the environment.
mcp.deployments.<environment-name>[*].domain
Required domain for the MCP deployment.
mcp.deployments.<environment-name>[*].agents
Optional map of MCP deployment options by agent type name.
mcp.deployments.<environment-name>[*].agents.<agent-type-name>.securityScheme
Optional security scheme for the agent in this MCP deployment.
environments
Optional application environments by environment name.
environments.<environment-name>.default
Optional boolean which when set to true marks the environment as default. Only one environment can be marked as default. If missing, the first environment is used as default.
environments.<environment-name>.account
Optional account that owns the application environment. When not specified then the current user will be used.
environments.<environment-name>.server
Optional server configuration for the environment. Accepted values:
localavailable since1.1.0cloudavailable since1.1.0
or a custom server object with the fields documented below.
environments.<environment-name>.server.url
Required URL for custom servers.
environments.<environment-name>.server.workerUrl
Optional custom URL for golem worker service.
environments.<environment-name>.server.allowInsecure
Optional boolean which defaults to false, when set to true it allows insecure connections to the server.
environments.<environment-name>.server.auth.oauth2
Optional boolean which when set to true selects OAuth2 based authentication.
environments.<environment-name>.server.auth.staticToken
Optional string static token for authentication when using static token based authentication.
environments.<environment-name>.componentPresets
Optional preset name or list of preset names which will be used for the application in the given environment.
environments.<environment-name>.cli.format
Optional default format for the environment, accepted values:
text(default value)available since1.1.0jsonavailable since1.1.0pretty-jsonavailable since1.1.0prettyavailable since1.1.0alias forpretty-jsonyamlavailable since1.1.0pretty-yamlavailable since1.1.0
environments.<environment-name>.cli.autoConfirm
Optional boolean which when set enables the auto-confirm (yes) flag by default.
environments.<environment-name>.cli.redeployAgents
Optional boolean which when set enables redeploy-agents flag by default.
environments.<environment-name>.cli.reset
Optional boolean which when set enables reset flag by default.
environments.<environment-name>.deployment.compatibilityCheck
Optional boolean to enable compatibility checks during deployment.
environments.<environment-name>.deployment.versionCheck
Optional boolean to enable version checks during deployment.
environments.<environment-name>.deployment.securityOverrides
Optional boolean to allow security overrides during deployment.
components
Optional map of Golem components indexed by component-name-s used for defining components.
The components field can be defined in multiple manifest documents, but the used component-name-s must be
unique across all the used manifest documents. Using the same component-name more then once results in
validation error.
components:
pack-ns:component-name:
componentWasm: # ...
# ...
pack:comp-b:
componentWasm: # ...
# ...components.<component-name>.templates
Optional template name or list of template names which will be used for creating the component fields.
The template name must be one of that are defined in componentTemplates.
See componentTemplates and Template variable and functions
for defining templates.
components.<component-name>.presets
Optional map of presets used to define preset variations for a component.
A preset contains the same fields as a component. Presets can also specify a components.<component-name>.presets.<preset-name>.default flag to mark it as the default preset for selection.
components.<component-name>.presets.<preset-name>.default
Preset specific components.<component-name>.default.
Optional boolean which when set to true marks the preset as the default for selection.
components.<component-name>.dir
Optional base directory for resolving component paths. The path is relative to the manifest document.
components.<component-name>.buildMergeMode
Optional merge mode for components.<component-name>.build. Accepted values:
append(default value)available since1.1.0prependavailable since1.1.0replaceavailable since1.1.0
components.<component-name>.files
Optional list of files entries, which can be used for defining the Initial File System for the component.
components:
pack-ns:component-name:
# ...
files:
- sourcePath: ./files/foo.txt
targetPath: /files/foo.txt
permissions: read-only
- sourcePath: ./files/bar.txt
targetPath: /files/bar.txt
permissions: read-writecomponents.<component-name>.filesMergeMode
Optional merge mode for components.<component-name>.files. Accepted values:
append(default value)available since1.1.0prependavailable since1.1.0replaceavailable since1.1.0
components.<component-name>.files[*].sourcePath
Required source path of the file to be added to the Initial File System. The path can be a file path relative to the manifest document or an URL.
components.<component-name>.files[*].targetPath
Required target path of the file in the Initial File System. The path must be an absolute path.
components.<component-name>.files[*].permissions
Optional string enum which controls file permissions. Accepted values:
read-only(default value)available since1.1.0read-writeavailable since1.1.0
components.<component-name>.plugins
Optional list of component plugin installation entries,
components.<component-name>.pluginsMergeMode
Optional merge mode for components.<component-name>.plugins. Accepted values:
append(default value)available since1.1.0prependavailable since1.1.0replaceavailable since1.1.0
components.<component-name>.plugins[*].name
Required name of the plugin.
components.<component-name>.plugins[*].version
Required version of the plugin.
components.<component-name>.plugins[*].account
Optional account used for installing the plugin.
components.<component-name>.plugins[*].parameters
Optional string map of plugin parameters.
components.<component-name>.config
Optional configuration for the component.
components.<component-name>.env
Optional string map of environment variables for the component.
components.<component-name>.envMergeMode
Optional merge mode for components.<component-name>.env. Accepted values:
upsert(default value)available since1.1.0replaceavailable since1.1.0removeavailable since1.1.0
components.<component-name>.wasiConfig
Optional string map of WASI configuration variables for the component.
components.<component-name>.wasiConfigMergeMode
Optional merge mode for components.<component-name>.wasiConfig. Accepted values:
upsert(default value)available since1.1.0replaceavailable since1.1.0removeavailable since1.1.0
components.<component-name>.componentWasm
Optional file path for the built WASM component.
The path is relative to the manifest document in which the field is defined.
components:
pack-ns:component-name:
# ...
componentWasm: build/component.wasmcomponents.<component-name>.outputWasm
Optional file path for the output WASM component which is ready to be uploaded to Golem.
The path is relative to the manifest document in which the field is defined.
components:
pack-ns:component-name:
# ...
outputWasm: build/output.wasmcomponents.<component-name>.build
Optional list of build steps that creates components.<component-name>.componentWasm.
Each build step can be one of:
- an external command (with
commandfield) - a QuickJS crate generation step (with
generateQuickjsCratefield) - a QuickJS d.ts generation step (with
generateQuickjsDtsfield) - an inject to prebuilt QuickJS step (with
injectToPrebuiltQuickjsfield) - a JS preinitialization step (with
preinitializeJsfield)
components:
pack-ns:component-name:
build:
- command: bindgen-tool src component.wasm
- command: build-tool src component.wasmcomponents.<component-name>.build[*].command
Required external command that will be used as a build step for creating
components.<component-name>.componentWasm.
components.<component-name>.build[*].dir
Optional directory path which will be used as working directory when executing
components.<component-name>.build[*].command.
The path is relative to the manifest document, and defaults to ..
components.<component-name>.build[*].env
Optional string map of environment variables for the build command.
components.<component-name>.build[*].rmdirs
Optional list of directory paths which will be deleted before executing the command.
The path is relative to components.<component-name>.build[*].dir.
The rmdirs field is useful when a binding generator does not automatically clean stale bindings.
Directories are not removed if the command is skipped because of up-to-date checks, see
components.<component-name>.build[*].sources and
components.<component-name>.build[*].targets.
Directories are removed before executing components.<component-name>.build[*].mkdirs.
components.<component-name>.build[*].mkdirs
Optional list of directory paths which will be created before executing the command if they do not exists.
The path is relative to components.<component-name>.build[*].dir.
The mkdirs field is useful when a build of binding generator tool does not automatically create
required nested folders.
Directories are not created if the command is skipped because of up-to-date checks, see
components.<component-name>.build[*].sources and
components.<component-name>.build[*].targets.
Directories are created after executing components.<component-name>.build[*].rmdirs.
components.<component-name>.build[*].sources
Optional list of paths and globs which are used as sources for performing up-to-date checks.
If defined then components.<component-name>.build[*].targets also have to be used.
The up-to-date check
- skips executing
components.<component-name>.build[*].command - if all matching files defined by
components.<component-name>.build[*].targets - are newer then the matched files defined by
sources.
components:
pack-ns:component-name:
# ...
build:
- command: build-tool src-dir out.wasm
sources:
- src-dir/*
targets:
- out.wasmcomponents.<component-name>.build[*].targets
Optional list of paths and globs which are used as targets for performing up-to-date checks.
If defined then components.<component-name>.build[*].sources also have to be used.
See components.<component-name>.build[*].sources for up-to-date check details.
components.<component-name>.customCommands
Optional map of component specific external commands, which are useful for defining e.g. one time installation or update related commands for the component.
The commands can be executed using:
golem exec command-nameMultiple components can use the same command-name, the above command will execute all matching
commands in this case, both component specific and project ones.
For defining project level custom commands see customCommands.
components:
pack-ns:component-name:
# ...
customCommands:
npm-install:
- command: npm installcomponents.<component-name>.customCommands.<command-name>[*].dir
components.<component-name>.customCommands.<command-name>[*].env
components.<component-name>.customCommands.<command-name>[*].rmdirs
components.<component-name>.customCommands.<command-name>[*].mkdirs
components.<component-name>.customCommands.<command-name>[*].mkdirs
components.<component-name>.customCommands.<command-name>[*].sources
components.<component-name>.customCommands.<command-name>[*].targets
components.<component-name>.clean
clean
Optional list of paths which are added as targets to the golem clean command.
The paths are relative to the manifest document.
The clean command deletes the following paths:
- build and custom command
targets - the paths defined in common and component specific
cleanfields.
Related fields:
customCommands
Optional map of custom external commands, which are useful for defining e.g. one time installation or update related project commands.
The commands can be executed using:
golem exec command-nameComponents specific custom commands can use the same command-name, the above command will execute all matching
commands in this case, both component specific and project ones.
For defining component specific custom commands see components.<component-name>.customCommands.
customCommands:
npm-install:
- command: npm installcustomCommands.<command-name>[*].dir
Optional directory path which will be used as working directory when executing
customCommands.<command-name>[*].command.
The path is relative to the manifest document, and defaults to ..
customCommands.<command-name>[*].env
Optional string map of environment variables for the command.
customCommands.<command-name>[*].rmdirs
Optional list of directory paths which will be deleted before executing the command.
The path is relative to customCommands.<command-name>[*].dir.
The rmdirs field is useful when a binding generator does not automatically clean stale bindings.
Directories are not removed if the command is skipped because of up-to-date checks, see
customCommands.<command-name>[*].sources and
customCommands.<command-name>[*].targets.
Directories are removed before executing customCommands.<command-name>[*].mkdirs.
customCommands.<command-name>[*].mkdirs
Optional list of directory paths which will be created before executing the command if they do not exists.
The path is relative to customCommands.<command-name>[*].dir.
The mkdirs field is useful when a build of binding generator tool does not automatically create
required nested folders.
Directories are not created if the command is skipped because of up-to-date checks, see
customCommands.<command-name>[*].sources and
customCommands.<command-name>[*].targets.
Directories are created after executing customCommands.<command-name>[*].rmdirs.
customCommands.<command-name>[*].sources
Optional list of paths and globs which are used as sources for performing up-to-date checks.
If defined then customCommands.<command-name>[*].targets also have to be used.
The up-to-date check
- skips executing
customCommands.<command-name>[*].command - if all matching files defined by
customCommands.<command-name>[*].targets - are newer then the matched files defined by
sources.
customCommands.<command-name>[*].targets
Optional list of paths and globs which are used as targets for performing up-to-date checks.
If defined then customCommands.<command-name>[*].sources also have to be used.
See customCommands.<command-name>[*].sources for up-to-date check details.
componentTemplates
Optional map of named templates, which can be used in components.<component-name>.templates.
Templates help in extracting common build patterns and reuse them for multiple components.
The templates field can be defined in multiple application manifest documents, but the template names must be
unique.
See Template variable and functions for more information about templating.
componentTemplates.<template-name>.componentWasm
componentTemplates.<template-name>.outputWasm
componentTemplates.<template-name>.buildMergeMode
componentTemplates.<template-name>.build
componentTemplates.<template-name>.build[*].command
componentTemplates.<template-name>.build[*].dir
componentTemplates.<template-name>.build[*].env
componentTemplates.<template-name>.build[*].rmdirs
componentTemplates.<template-name>.build[*].mkdirs
componentTemplates.<template-name>.build[*].sources
componentTemplates.<template-name>.build[*].targets
componentTemplates.<template-name>.customCommands
componentTemplates.<template-name>.customCommands.<command-name>[*].dir
componentTemplates.<template-name>.customCommands.<command-name>[*].env
componentTemplates.<template-name>.customCommands.<command-name>[*].rmdirs
componentTemplates.<template-name>.customCommands.<command-name>[*].mkdirs
componentTemplates.<template-name>.customCommands.<command-name>[*].sources
componentTemplates.<template-name>.customCommands.<command-name>[*].targets
componentTemplates.<template-name>.clean
componentTemplates.<template-name>.config
componentTemplates.<template-name>.env
componentTemplates.<template-name>.envMergeMode
componentTemplates.<template-name>.wasiConfig
componentTemplates.<template-name>.wasiConfigMergeMode
componentTemplates.<template-name>.plugins
componentTemplates.<template-name>.pluginsMergeMode
componentTemplates.<template-name>.files
componentTemplates.<template-name>.filesMergeMode
componentTemplates.<template-name>.files[*].sourcePath
componentTemplates.<template-name>.files[*].targetPath
componentTemplates.<template-name>.files[*].permissions
componentTemplates.<template-name>.presets
componentTemplates.<template-name>.presets.<preset-name>.default
agents
Optional map of agents by agent type name.
agents.<agent-type-name>.templates
Optional template name or list of template names which will be used for creating the agent fields.
Related fields:
agents.<agent-type-name>.config
Optional configuration for the agent.
Related fields:
agents.<agent-type-name>.env
Optional string map of environment variables for the agent.
Related fields:
agents.<agent-type-name>.envMergeMode
Optional merge mode for agents.<agent-type-name>.env. Accepted values:
upsert(default value)available since1.1.0replaceavailable since1.1.0removeavailable since1.1.0
Related fields:
agents.<agent-type-name>.wasiConfig
Optional string map of WASI configuration variables for the agent.
Related fields:
agents.<agent-type-name>.wasiConfigMergeMode
Optional merge mode for agents.<agent-type-name>.wasiConfig. Accepted values:
upsert(default value)available since1.1.0replaceavailable since1.1.0removeavailable since1.1.0
agents.<agent-type-name>.plugins
Optional list of plugin installations for the agent.
Related fields:
agents.<agent-type-name>.pluginsMergeMode
Optional merge mode for agents.<agent-type-name>.plugins. Accepted values:
append(default value)available since1.1.0prependavailable since1.1.0replaceavailable since1.1.0
agents.<agent-type-name>.plugins[*].name
Required name of the plugin.
agents.<agent-type-name>.plugins[*].version
Required version of the plugin.
agents.<agent-type-name>.plugins[*].account
Optional account used for installing the plugin.
agents.<agent-type-name>.plugins[*].parameters
Optional string map of plugin parameters.
agents.<agent-type-name>.files
Optional list of files entries for defining the Initial File System for the agent.
Related fields:
agents.<agent-type-name>.filesMergeMode
Optional merge mode for agents.<agent-type-name>.files. Accepted values:
append(default value)available since1.1.0prependavailable since1.1.0replaceavailable since1.1.0
agents.<agent-type-name>.files[*].sourcePath
Required source path of the file. The path can be a file path relative to the manifest document or an URL.
agents.<agent-type-name>.files[*].targetPath
Required target path of the file. The path must be an absolute path.
agents.<agent-type-name>.files[*].permissions
Optional string enum which controls file permissions. Accepted values:
read-only(default value)available since1.1.0read-writeavailable since1.1.0
agents.<agent-type-name>.presets
Optional map of presets for the agent.
Related fields:
agents.<agent-type-name>.presets.<preset-name>.default
Preset specific agents.<agent-type-name>.default.
Optional boolean which when set to true marks the preset as the default for selection.
bridge
Optional object for configuring Bridge SDK generation.
bridge.ts
Optional TypeScript SDK configuration.
bridge.ts.agents
Optional list of agent type names, component names, or "*" for including all agents.
bridge.ts.outputDir
Optional custom output directory for the generated TypeScript SDK.
bridge.rust
Optional Rust SDK configuration.
bridge.rust.agents
Optional list of agent type names, component names, or "*" for including all agents.
bridge.rust.outputDir
Optional custom output directory for the generated Rust SDK.
secretDefaults
Optional map of secret defaults by environment name.
secretDefaults.<environment-name>
Optional list of secret default entries for the environment.
secretDefaults.<environment-name>[*].path
Required array of strings defining the path to the secret.
secretDefaults.<environment-name>[*].value
Required value of the secret default.
retryPolicyDefaults
Optional map of retry policy defaults by environment name. Policies defined here are created in the environment during deployment if they don’t already exist.
retryPolicyDefaults.<environment-name>
Optional list of retry policy default entries for the environment.
retryPolicyDefaults.<environment-name>[*].name
Required unique name for this retry policy.
retryPolicyDefaults.<environment-name>[*].priority
Required integer defining selection priority — higher values are evaluated first.
retryPolicyDefaults.<environment-name>[*].predicate
Required predicate tree defining when this policy applies. Supports composable predicates including
property comparisons (propEq, propNeq, propGt, propGte, propLt, propLte),
property checks (propExists, propIn, propMatches, propStartsWith, propContains),
and logical combinators (and, or, not).
retryPolicyDefaults.<environment-name>[*].policy
Required retry policy tree defining the retry strategy. Supports base strategies
("immediate", "never", periodic, exponential, fibonacci) and composable modifiers
(countBox, timeBox, clamp, addDelay, jitter, filteredOn, andThen, union, intersect).
resourceDefaults
Optional map of quota resource defaults by environment name.
resourceDefaults.<environment-name>
Optional list of resource definition entries for the environment.
resourceDefaults.<environment-name>[*].name
Required name of the resource.
resourceDefaults.<environment-name>[*].limit
Required resource limit definition. Can be one of:
- Rate limit:
{"type": "Rate", "value": <int>, "period": <timePeriod>, "max": <int>} - Capacity limit:
{"type": "Capacity", "value": <int>} - Concurrency limit:
{"type": "Concurrency", "value": <int>}
Where timePeriod is one of: second, minute, hour, day, month, year.
resourceDefaults.<environment-name>[*].enforcementAction
Required enforcement action for the resource, accepted values:
rejectavailable since1.1.0throttleavailable since1.1.0terminateavailable since1.1.0
resourceDefaults.<environment-name>[*].unit
Required string for the single unit of measurement (e.g., token, request).
resourceDefaults.<environment-name>[*].units
Required string for the plural units of measurement (e.g., tokens, requests).
Fields and changes by releases
library tocomponents.<component-name>[*].componentTyperesetWorkers to resetAgentstempDir, witDeps, components.<component-name>.sourceWit, components.<component-name>.generatedWit, components.<component-name>.linkedWasm, components.<component-name>.componentType, components.<component-name>.dependencies, components.<component-name>.dependenciesMergeModehttpApi.definitions subtreelinkedWasm to outputWasmhttpApi to deployment-only model