Skip to main content
kairo.toml is the manifest at the root of every Kairo package. It declares who the package is, what kind of package it is, what it depends on, and (for applications) how Pulse should run it. It is the single source of truth for package-level metadata. TOML was chosen because it is readable, stable, and version-control friendly.

Minimal application manifest

Minimal library manifest

manifest_version

The manifest schema version. Currently 1.

[package]

Identity and kind of the package.
Package names use the same PascalCase dot-separated convention as module names. They do not have to match any specific module inside the package.

[application]

Required only when kind = "application".
Rules for the entrypoint:
  • Must resolve to a module-level public func.
  • Name does not have to be main, though main is recommended.
  • Supported signatures: func(), func(): Int32, func(): Result<Int32, E>, and their async forms.
See Pulse Runtime reference for entrypoint and exit code semantics.

[runtime]

Required only when kind = "application".
The runtime contract is an explicit compatibility promise. Pulse rejects artifacts that target an unsupported contract before executing any application code.

[dependencies]

Declares packages this package depends on. Applies to both applications and libraries.
See Dependencies for the full resolution model.

[publish]

Optional. Declares where the package publishes to.
[publish].registry is a logical target name only. Dependency source selection lives in external Forge configuration, not in the ordinary manifest.

Complete example

Validation rules

Forge validates the manifest before building. Common failure modes:
  • Missing [application] on an application package
  • entry that does not resolve to a public module-level function
  • Missing [runtime] on an application package
  • Circular or unresolved dependencies

Next steps

Dependencies

Declaring versions and locking with forge.lock.

Pulse Runtime

Entrypoint signatures and exit codes.