Skip to main content
Version: 0.77.1


The plan is a representation of the manipulations that Kurtosis should execute within an enclave. It is central to the multi-phase run design of Kurtosis. Plans are built via Starlark by calling functions on the Plan object like add_service, remove_service, or upload_files.

Kurtosis injects the Plan object into the run method in the of your package or your standalone script. The package or script author must ensure that the first argument is an argument called plan, and then use the enclave-modifying functions from it. The author also must pass the plan methods down to any other scripts or packages that require enclave-modifying functions.

Here's an example :-

Imagine you have a kurtosis.yml that looks like

name: ""

Further with a at the root of the package that looks like

datastore = import_module("")

def run(plan):

and the lib/ looks like

def create_datastore(plan):
name = "datastore-service",
config = ServiceConfig(
image = "kurtosistech/example-datastore-server"

To accept arguments in the run function, pass them as the second parameter like so

def run(plan, args):

Any value returned by a plan function is a future-reference. This means that you can't run conditionals or interpretation time methods like string.split on it.