Skip to content

Application manifest

Learn how to initialize and validate a manifest with your tool of choice.

  • CLI: the Nextmv Command Line Interface (CLI).

An application that runs on the Nextmv platform must contain a file named app.yaml which is known as the application manifest. This file is used to specify the execution conditions for the app. You can port any custom app into the Nextmv platform. You just need the app.yaml manifest in the root of the project with the appropriate attributes and an adequate entrypoint.

This page will explain every attribute that can be specified in the app.yaml manifest, and provide examples of manifests for different languages and use cases.

We include complete examples of app.yaml manifests taken from our community apps at the end of this documentation page.

type (required)

The language type to use for the app. Must be one of:

  • python. Use for Python applications.
  • java. Use for Java applications.
  • binary. Use for compiled applications, such as Go, C, C++, Rust, etc.
type: python # (1)!
runtime: ghcr.io/nextmv-io/runtime/python:3.11
files:
  - main.py
python:
  pip-requirements: pyproject.toml # Can be a requirements.txt
  1. Use python for Python applications.
type: java # (1)!
runtime: ghcr.io/nextmv-io/runtime/java:latest
pre-push: mvn package
files:
  - main.jar
  - lib/*.so
  - lib/*.jar
  1. Use java for Java applications.
type: binary # (1)!
runtime: ghcr.io/nextmv-io/runtime/default:latest
build:
  command: go build -o main .
  environment:
    GOOS: linux
    GOARCH: arm64
files:
  - main
  1. Use binary for compiled applications, such as Go, C, C++, Rust, etc.

runtime (required)

The runtime to use for the application. Please see the runtimes documentation for more information.

type: python
runtime: ghcr.io/nextmv-io/runtime/python:3.11 # (1)!
files:
  - main.py
python:
  pip-requirements: pyproject.toml # Can be a requirements.txt
  1. Python applications should use the Python runtime.
type: java
runtime: ghcr.io/nextmv-io/runtime/java:latest # (1)!
pre-push: mvn package
files:
  - main.jar
  - lib/*.so
  - lib/*.jar
  1. Java applications should use the Java runtime.
type: binary
runtime: ghcr.io/nextmv-io/runtime/default:latest # (1)!
build:
  command: go build -o main .
  environment:
    GOOS: linux
    GOARCH: arm64
files:
  - main
  1. Binary applications can use the default runtime.

files (required)

the files to include (or exclude) in the app. Globbing is supported so you may specify individual files or whole directories. Include the entrypoint of the app here. Some examples of supported glob patterns:

  • **/*.py: all Python files recursively
  • !**/*.pyc: exclude all Python compiled files
  • app/**/*.py: all Python files in the app directory.

Patterns are applied in order as they are defined.

type: python
runtime: ghcr.io/nextmv-io/runtime/python:3.11
files:
  - main.py
python:
  pip-requirements: pyproject.toml # Can be a requirements.txt
type: java
runtime: ghcr.io/nextmv-io/runtime/java:latest
pre-push: mvn package
files:
  - main.jar
  - lib/*.so
  - lib/*.jar
type: binary
runtime: ghcr.io/nextmv-io/runtime/default:latest
build:
  command: go build -o main .
  environment:
    GOOS: linux
    GOARCH: arm64
files:
  - main

build (optional)

Contains build-specific attributes. This configuration is used to build the application before it is pushed. The build object can contain the following properties:

  • command: the command to run to build the app. This command will be executed without a shell, i.e., directly. The command must exit with a status of 0 to continue the push process of the app to Nextmv Cloud. This command is executed prior to the pre-push command.
  • environment: environment variables to set when running the build command given as key-value pairs. E.g. GOOS: linux.

Tip

The Nextmv platform mainly uses Linux/ARM64 as the target architecture for apps. Please make sure your build command is set to build for this architecture.

type: binary
runtime: ghcr.io/nextmv-io/runtime/default:latest
build:
  command: go build -o main .
  environment:
    GOOS: linux
    GOARCH: arm64
files:
  - main
type: binary
runtime: ghcr.io/nextmv-io/runtime/default:latest
build:
  command: go build -o main .
  environment:
    GOOS: linux
    GOARCH: arm64
    CGO_ENABLED: 1
    CC: "zig cc -target aarch64-linux-musl"
files:
  - main
type: binary
runtime: ghcr.io/nextmv-io/runtime/default:latest
files:
  - main
  - HiGHS/build/lib/
build:
  command: bash ./build.sh # (1)!
execution:
  entrypoint: main
  1. Custom bash scripts can be executed.

pre-push (optional)

A command to run before the app is pushed to the Nextmv Cloud. This command can be used to compile a binary, run tests or similar tasks. One difference with what is specified under build, is that the command will be executed via the shell (i.e., bash -c on Linux & macOS or cmd /c on Windows). The command must exit with a status of 0 to continue the push process. This command is executed just before the app gets bundled and pushed (after the build command).

type: java
runtime: ghcr.io/nextmv-io/runtime/java:latest
pre-push: mvn package
files:
  - main.jar

execution (optional)

Defines how to execute the app. The execution object can contain the following properties:

  • entrypoint: the entrypoint to use when executing the app. If not specified, the default entrypoint is used based on the app type. E.g., it can be used to override the default entrypoint of main.py for Python apps to app.py. The default entrypoint for each app type is as follows:

    • python: main.py
    • java: main.jar
    • binary: main
  • cwd: the working directory to use when executing the app. If not specified, the root of the app is used. Can be set to src/ for example if all app files are under a src directory (except for the app.yaml).

type: binary
runtime: ghcr.io/nextmv-io/runtime/default:latest
files:
  - main
  - HiGHS/build/lib/
build:
  command: bash ./build.sh # (1)!
execution:
  entrypoint: main
type: java
runtime: ghcr.io/nextmv-io/runtime/java:latest
files:
  - main.jar
build:
  command: mvn clean package
execution:
  entrypoint: main.jar

python (optional)

Set this property for Python applications. It contains specific attributes that are needed for these types of apps. The python object can contain the following properties:

  • pip-requirements: path to a dependencies file containing Python requirements that will be bundled with the app. Supported files are:

    • pyproject.toml
    • requirements.txt
  • arch: the architecture to package the Python app for. Supported values are:

    • arm64 (default)
    • amd64
  • version: the Python version to package the app for. The default value is 3.11.

The Python dependencies are downloaded and bundled as part of the .tar.gz file that is pushed to the Nextmv platform. The arch and version properties are used to decide the target architecture and Python version for the dependencies.

type: python
runtime: ghcr.io/nextmv-io/runtime/python:3.11
files:
  - main.py
python:
  pip-requirements: pyproject.toml
configuration:
  content:
    format: json
type: python
runtime: ghcr.io/nextmv-io/runtime/python:3.11
files:
  - main.py
python:
  pip-requirements: requirements.txt
configuration:
  content:
    format: json
type: python
runtime: ghcr.io/nextmv-io/runtime/cuopt:latest
python:
  pip-requirements: pyproject.toml
  arch: amd64 # (1)!
  version: 3.12 # (2)!
files:
  - main.py
  - visual.py
  1. Nextmv Cloud runs cuOpt models on amd64 instances.
  2. The cuOpt image uses Python 3.12 instead of the default.

configuration (optional)

The configuration for your application. This configuration can be overwritten by instance configurations and run configurations.

content (optional)

Content configuration for specifying how the app input/output is handled. The content object can contain the following properties:

  • format: the actual content format to use for the application. Must be one of:

  • multi-file: only configure this object when the content.format is set to multi-file. For json this property has no effect.

    • input: configuration for the input files. The input object can contain the following properties:

      • path: the path to the input files. The default value is inputs.
    • output: configuration for the output files. The output object can contain the following properties:

      • solutions: the path to the output solution files. The default value is outputs/solutions.
      • metrics: the path to the output metrics file. The default value is outputs/metrics.json.
      • assets: the path to the output visual assets file. The default value is outputs/assets/assets.json.
type: python
runtime: ghcr.io/nextmv-io/runtime/python:3.11
files:
  - main.py
python:
  pip-requirements: pyproject.toml
configuration:
  content:
    format: json # (1)!
  1. The application adheres to the json input/output content format.
type: python
runtime: ghcr.io/nextmv-io/runtime/python:3.11
files:
  - main.py
python:
  pip-requirements: pyproject.toml
configuration:
  content:
    format: multi-file # (1)!
    multi-file:
      input:
        path: inputs
      output:
        solutions: outputs/solutions
        metrics: outputs/metrics.json
        assets: outputs/assets.json
  1. The application adheres to the multi-file input/output content format.
type: python
runtime: ghcr.io/nextmv-io/runtime/python:3.11
files:
  - main.py
python:
  pip-requirements: pyproject.toml
configuration:
  content:
    format: multi-file # (1)!
  1. By not specifying the multi-file object, the default paths are used.

options (optional)

Configuration for how options (parameters) are handled by the application. The options object can contain the following properties:

  • strict: it will prevent your app from being run in Nextmv Cloud if you provide options outside of the ones configured in items if validation.enforce is all. Allowed values are true or false. The default value is false.

  • validation: validation configuration for your application. The validation object can have the following properties:

    • enforce: the validation enforcement setting for your application. "all" will validate all options in the configuration for option_type, required, and additional_attributes. Allowed values are "all" or "none". The default value is "none".
  • format: an optional specification how to translate option values to command line arguments. For example, if your application expects options to be passed as --option value then you can specify the format as ["--{{name}}", "{{value}}"]. Each option will be translated according to this format, where {{name}} is replaced with the option name and {{value}} with the option value. If no format is specified, options will be passed as -{{name}}={{value}}. In addition, empty values in the resulting command line argument array will be omitted. For example, if you have a boolean option verbose with an empty string value ({"verbose":""}) and a format of ["--{{name}}", "{{value}}"], the resulting command line argument will be --verbose (the empty string value is omitted).

  • items: the actual list of options you would like to configure on your application. It is a list of objects.

The options.items surfaces the model options. For each object in the list, the available properties to define your option, its value schema and the control used to render it in Nextmv Console are outlined in the tables below.

Property Required Type Default Description
name Yes string N/A Identifier of your option.
option_type Yes string N/A The expected type of the option value, used in validation.
description No string None Description for your option. (The description will appear as a tooltip for the option in Nextmv Console.)
required No boolean false Represents whether the options is required, used in validation.
default No any None Default value applied to your application run if not set in other configuration based on options hierarchy.
ui No object (see ui table below) None Additional instruction for how the option is rendered in Nextmv Console.
additional_attributes No object (see additional_attributes table below) None Used by Nextmv Console and for option validation.
local_only No boolean None When set to true, this option is not sent to Nextmv cloud when pushing an application binary.

These properties are used only for the Nextmv Console (UI) and have no effect on the application execution.

Property Required Type Default Description
control_type No string (see ui.control_type table below) input If no control_type is specified, the default is to render the option as a text input.
hidden_from No array of string (see ui.hidden_from table below) None List of roles from which this option will be hidden in Nextmv Console.
display_name No string None Used as a display name in the Nextmv Console. If not provided, the option name is shown.
Value Description
input Standard text input field.
select Dropdown selection list. The options to select from are specified with additional_attributes.values.
multiselect Dropdown selection list with multiple selection capabilities. Selections are submitted as a comma-delimited string. The options to select from are specified with additional_attributes.values.
slider Range slider control.
toggle Boolean toggle switch.

Certain ui controls can only be specified for a certain option_types. The table below lists the valid control_types depending on which option_type has been defined.

Option type Supported control types Default
string input, select, multiselect input
bool toggle toggle
int input, slider input
float input, slider input
Value Description
root account owner role
admin administrator role
developer developer role
operator operator role
viewer viewer role
Option type Control type Additional attribute Required Description
string input max_length No The maximum length of the string value.
min_length No The minimum length of the string value.
string select values Yes An array of strings for the select dropdown.
string multiselect values Yes An array of strings for the multiselect dropdown.
int input min No a minimum value for the option.
max No A maximum value for the option.
step No An interval for the input control.
int slider min Yes a minimum value for the option.
max Yes A maximum value for the option.
step Yes An interval for the input control.
int select values Yes an array of integers for the select dropdown.
float input min No a minimum value for the option.
max No A maximum value for the option.
step No An interval for the input control.
float slider min Yes a minimum value for the option.
max Yes A maximum value for the option.
step Yes An interval for the input control.
float select values Yes an array of floats for the select dropdown.

Please find some examples of configuring options for your application below.

configuration:
  content:
    format: json
  options:
    strict: false
    validation:
      enforce: all
    items:
      - name: duration
        option_type: int
        default: 30
        description: Max runtime duration (in seconds).
        required: false
        additional_attributes: # (1)!
          min: 1
          max: 300
          step: 1
        ui: # (2)!
          control_type: slider
          display_name: Duration
      - name: provider
        option_type: string
        default: highs
        description: Solver provider.
        required: false
        ui: # (3)!
          control_type: input
          display_name: Provider
  1. Used the additional_attributes object for the int option_type.
  2. Used the ui object for the int option_type.
  3. Used the ui object for the string option_type.
configuration:
  content:
    format: json
  options:
    items:
      - name: duration
        option_type: int
        default: 30
        description: Max solver runtime in seconds
        required: false
configuration:
  content:
    format: json
  options:
    items:
      - name: duration
        option_type: int
        default: 30

Complete examples

The following are complete examples of app.yaml manifests taken from the community apps repository. They combine different types, runtimes, file patterns, build and pre-push commands, content formats, and option configurations.

# This manifest holds the information the app needs to run on Nextmv.
type: python
runtime: ghcr.io/nextmv-io/runtime/python:3.11
python:
  # All listed packages will get bundled with the app.
  pip-requirements: pyproject.toml # Can be a requirements.txt

# List all files/directories that should be included in the app. Globbing
# (e.g.: configs/*.json) is supported.
files:
  - main.py
  - visuals.py

configuration:
  # Specify the format the app reads and writes.
  content:
    format: json # Read JSON from stdin and write JSON to stdout.
  options:
    strict: false
    items:
      - name: objective
        option_type: string
        default: average_distance
        required: false
        description: Minimizes for average_distance, total_distance, or max_distance
        additional_attributes:
          values:
            - average_distance
            - total_distance
            - max_distance
        ui:
          control_type: select
          hidden_from:
            - operator
          display_name: Objective
      - name: parks_override
        option_type: int
        required: false
        description: Number of parks to build (from 1 to 10). Defaults to the value in the input.
        additional_attributes:
          min: 1
          max: 10
          step: 1
        ui:
          control_type: input
          hidden_from:
            - operator
          display_name: Number of parks (override)
# This manifest holds the information the app needs to run on the Nextmv Cloud.
type: python
runtime: ghcr.io/nextmv-io/runtime/python:3.11
# List all files/directories that should be included in the app. Globbing
# (e.g.: configs/*.json) is supported.
files:
  - main.py
python:
  # Packages the app depends on need to be listed in a requirements.txt file
  # that is referenced here. All listed packages will get bundled with the app.
  pip-requirements: pyproject.toml # Can be a requirements.txt

configuration:
  # Specify the format the app reads and writes.
  content:
    format: multi-file # Read and write files from disk.
    # Configuration of the multi-file format.
    multi-file:
      input:
        path: inputs # Directory where the app will read input files from.
      output:
        solutions: outputs/solutions # Directory where the app will write solution files to.
        metrics: outputs/metrics.json # Path where the app will write metrics to.
  # Define the options (parameters) of the app.
  options:
    strict: false
    items:
      - name: duration
        option_type: int
        default: 30
        description: Max solver runtime in seconds
        required: false
        additional_attributes:
          min: 1
          max: 300
          step: 10
        ui:
          control_type: slider
          display_name: Duration
      - name: provider
        option_type: string
        default: SCIP
        description: Solver provider
        required: false
        ui:
          control_type: input
          display_name: Provider
# This manifest holds the information the app needs to run on the Nextmv Cloud.
type: python
runtime: ghcr.io/nextmv-io/runtime/cuopt:latest

python:
  # All listed packages will get bundled with the app.
  pip-requirements: pyproject.toml # Can be a requirements.txt
  arch: amd64 # Nextmv Cloud runs cuOpt models on amd64 instances.
  version: 3.12 # The cuOpt image uses Python 3.12.

# List all files/directories that should be included in the app. Globbing
# (e.g.: configs/*.json) is supported.
files:
  - main.py
  - visual.py

configuration:
  # Specify the format the app reads and writes.
  content:
    format: json # Read JSON from stdin and write JSON to stdout.
  # Define the options (parameters) of the app.
  options:
    strict: false
    items:
      - name: time_limit
        option_type: float
        default: 1
        description: Max solver runtime in seconds
        required: false
        additional_attributes:
          min: 0.1
          max: 300
          step: 0.1
        ui:
          control_type: slider
          display_name: Time Limit
# This manifest holds the information the app needs to run on the Nextmv Cloud.
type: python
runtime: ghcr.io/nextmv-io/runtime/pyomo:latest
# List all files/directories that should be included in the app. Globbing
# (e.g.: configs/*.json) is supported.
files:
  - main.py
python:
  # Packages the app depends on need to be listed in a requirements.txt file
  # that is referenced here. All listed packages will get bundled with the app.
  pip-requirements: pyproject.toml # Can be a requirements.txt

configuration:
  # Specify the format the app reads and writes.
  content:
    format: json # Read JSON from stdin and write JSON to stdout.
  # Define the options (parameters) of the app.
  options:
    strict: false
    items:
      - name: duration
        option_type: int
        default: 30
        description: Max runtime duration (in seconds).
        required: false
        additional_attributes:
          min: 1
          max: 300
          step: 10
        ui:
          control_type: slider
          display_name: Duration
      - name: provider
        option_type: string
        default: cbc
        description: Solver provider.
        required: false
        ui:
          control_type: input
          display_name: Provider
type: binary
runtime: ghcr.io/nextmv-io/runtime/default:latest

build:
  command: bash .nextmv/build.sh
  environment:
    ARCH: arm64 # Use amd64 for amd... execution classes
files:
  - main
configuration:
  content:
    format: "json"
type: binary
runtime: ghcr.io/nextmv-io/runtime/default:latest

build:
  command: bash .nextmv/build.sh
  environment:
    ARCH: arm64 # Use x64 for amd... execution classes
files:
  - main
configuration:
  content:
    format: "json"
# This manifest holds the information the app needs to run on the Nextmv Cloud.
type: go
runtime: ghcr.io/nextmv-io/runtime/default:latest

# Directives to build a Go binary from the app.
build:
  command: go build -o main .
  environment:
    GOOS: linux
    GOARCH: arm64

# List all files/directories that should be included in the app. Globbing
# (e.g.: configs/*.json) is supported.
files:
  - main

configuration:
  # Specify the format the app reads and writes.
  content:
    format: "json" # Read JSON from stdin and write JSON to stdout.
# This manifest holds the information the app needs to run on the Nextmv Cloud.
type: go
runtime: ghcr.io/nextmv-io/runtime/default:latest

# Directives to build a Go binary from the app.
build:
  command: go build -o main .
  environment:
    GOOS: linux
    GOARCH: arm64

# List all files/directories that should be included in the app. Globbing
# (e.g.: configs/*.json) is supported.
files:
  - main

configuration:
  options:
    strict: false
    validation:
      enforce: all
    items:
      # Check options
      - name: check.duration
        option_type: string
        description: "Maximum duration of the check (e.g.: '30s', '5m')"
        ui:
          control_type: input
          display_name: Check Duration
      - name: check.verbosity
        option_type: string
        description: "{off, low, medium, high} verbosity of the check"
        additional_attributes:
          values:
            - "off"
            - "low"
            - "medium"
            - "high"
        ui:
          control_type: select
          display_name: Check Verbosity

      # Format options
      - name: format.disable.progression
        option_type: bool
        description: Disable the progression series
        ui:
          control_type: toggle
          display_name: Disable Progression
          hidden_from:
            - viewer
            - operator

      # Model constraint disable options
      - name: model.constraints.disable.attributes
        option_type: bool
        description: Ignore the compatibility attributes constraint
        ui:
          control_type: toggle
          display_name: Disable Attributes Constraint
      - name: model.constraints.disable.capacities
        option_type: string
        description: "Ignore the capacity constraint for the given resource names (e.g.: 'weight,volume')"
        ui:
          control_type: input
          display_name: Disable Specific Capacities
      - name: model.constraints.disable.capacity
        option_type: bool
        description: Ignore the capacity constraint for all resources
        ui:
          control_type: toggle
          display_name: Disable All Capacity Constraints
      - name: model.constraints.disable.distancelimit
        option_type: bool
        description: Ignore the distance limit constraint
        ui:
          control_type: toggle
          display_name: Disable Distance Limit
      - name: model.constraints.disable.groups
        option_type: bool
        description: Ignore the groups constraint
        ui:
          control_type: toggle
          display_name: Disable Groups Constraint
      - name: model.constraints.disable.maximumduration
        option_type: bool
        description: Ignore the maximum duration constraint
        ui:
          control_type: toggle
          display_name: Disable Maximum Duration
      - name: model.constraints.disable.maximumstops
        option_type: bool
        description: Ignore the maximum stops constraint
        ui:
          control_type: toggle
          display_name: Disable Maximum Stops
      - name: model.constraints.disable.maximumwaitstop
        option_type: bool
        description: Ignore the maximum stop wait constraint
        ui:
          control_type: toggle
          display_name: Disable Maximum Wait Stop
      - name: model.constraints.disable.maximumwaitvehicle
        option_type: bool
        description: Ignore the maximum vehicle wait constraint
        ui:
          control_type: toggle
          display_name: Disable Maximum Wait Vehicle
      - name: model.constraints.disable.mixingitems
        option_type: bool
        description: Ignore the do not mix items constraint
        ui:
          control_type: toggle
          display_name: Disable Mixing Items
      - name: model.constraints.disable.precedence
        option_type: bool
        description: Ignore the precedence (pickups & deliveries) constraint
        ui:
          control_type: toggle
          display_name: Disable Precedence
      - name: model.constraints.disable.starttimewindows
        option_type: bool
        description: Ignore the start time windows constraint
        ui:
          control_type: toggle
          display_name: Disable Start Time Windows
      - name: model.constraints.disable.vehicleendtime
        option_type: bool
        description: Ignore the vehicle end time constraint
        ui:
          control_type: toggle
          display_name: Disable Vehicle End Time
      - name: model.constraints.disable.vehiclestarttime
        option_type: bool
        description: Ignore the vehicle start time constraint
        ui:
          control_type: toggle
          display_name: Disable Vehicle Start Time

      # Model constraint enable options
      - name: model.constraints.enable.cluster
        option_type: bool
        description: Enable the cluster constraint
        ui:
          control_type: toggle
          display_name: Enable Cluster Constraint

      # Model objectives
      - name: model.objectives.capacities
        option_type: string
        description: "Capacity objective, provide triple for each resource 'name=default;factor=1.0;offset=0.0'"
        ui:
          control_type: input
          display_name: Capacities Objective
      - name: model.objectives.cluster
        option_type: float
        description: "Factor to weigh the cluster objective (e.g.: 2.0)"
        ui:
          control_type: input
          display_name: Cluster Objective
      - name: model.objectives.distance
        option_type: float
        description: "Factor to weigh the travel distance objective (e.g.: 2.0)"
        ui:
          control_type: input
          display_name: Distance Objective
      - name: model.objectives.earlyarrivalpenalty
        option_type: float
        description: "Factor to weigh the early arrival objective (e.g.: 2.0)"
        ui:
          control_type: input
          display_name: Early Arrival Penalty
      - name: model.objectives.latearrivalpenalty
        option_type: float
        description: "Factor to weigh the late arrival objective (e.g.: 2.0)"
        ui:
          control_type: input
          display_name: Late Arrival Penalty
      - name: model.objectives.minstops
        option_type: float
        description: "Factor to weigh the min stops objective (e.g.: 2.0)"
        ui:
          control_type: input
          display_name: Min Stops Objective
      - name: model.objectives.stopbalance
        option_type: float
        description: "Factor to weigh the stop balance objective (e.g.: 2.0)"
        ui:
          control_type: input
          display_name: Stop Balance Objective
      - name: model.objectives.travelduration
        option_type: float
        description: "Factor to weigh the travel duration objective (e.g.: 2.0)"
        ui:
          control_type: input
          display_name: Travel Duration Objective
      - name: model.objectives.unplannedpenalty
        option_type: float
        description: "Factor to weigh the unplanned objective (e.g.: 2.0)"
        ui:
          control_type: input
          display_name: Unplanned Penalty
      - name: model.objectives.vehicleactivationpenalty
        option_type: float
        description: "Factor to weigh the vehicle activation objective (e.g.: 2.0)"
        ui:
          control_type: input
          display_name: Vehicle Activation Penalty
      - name: model.objectives.vehiclesduration
        option_type: float
        description: "Factor to weigh the vehicles duration objective (e.g.: 2.0)"
        ui:
          control_type: input
          display_name: Vehicles Duration Objective

      # Model properties
      - name: model.properties.disable.durationgroups
        option_type: bool
        description: Ignore the durations groups of stops
        ui:
          control_type: toggle
          display_name: Disable Duration Groups
      - name: model.properties.disable.durations
        option_type: bool
        description: Ignore the durations of stops
        ui:
          control_type: toggle
          display_name: Disable Durations
      - name: model.properties.disable.initialsolution
        option_type: bool
        description: Ignore the initial solution
        ui:
          control_type: toggle
          display_name: Disable Initial Solution
      - name: model.properties.disable.stopdurationmultipliers
        option_type: bool
        description: Ignore the stop duration multipliers defined on vehicles
        ui:
          control_type: toggle
          display_name: Disable Stop Duration Multipliers
      - name: model.properties.maximumtimehorizon
        option_type: int
        description: "Maximum time horizon for the model in seconds (e.g.: 604800)"
        ui:
          control_type: input
          display_name: Maximum Time Horizon
          hidden_from:
            - viewer
            - operator

      # Model validation
      - name: model.validate.disable.resources
        option_type: bool
        description: Disable the resources validation
        ui:
          control_type: toggle
          display_name: Disable Resources Validation
          hidden_from:
            - viewer
            - operator
      - name: model.validate.disable.starttime
        option_type: bool
        description: Disable the start time validation
        ui:
          control_type: toggle
          display_name: Disable Start Time Validation
          hidden_from:
            - viewer
            - operator
      - name: model.validate.enable.matrix
        option_type: bool
        description: Enable matrix validation
        ui:
          control_type: toggle
          display_name: Enable Matrix Validation
          hidden_from:
            - viewer
            - operator
      - name: model.validate.enable.matrixasymmetrytolerance
        option_type: int
        description: "Percentage of acceptable matrix asymmetry, requires matrix validation enabled (e.g.: 10 - for 10%)"
        ui:
          control_type: input
          display_name: Matrix Asymmetry Tolerance
          hidden_from:
            - viewer
            - operator

      # Runner options
      - name: runner.input.path
        option_type: string
        description: The input file path
        local_only: true
      - name: runner.output.path
        option_type: string
        description: The output file path
        local_only: true
      - name: runner.output.solutions
        option_type: string
        description: "{all, last} specifies whether to output all solutions or only the last one"
        additional_attributes:
          values:
            - "all"
            - "last"
        ui:
          control_type: select
          display_name: Output Solutions
          hidden_from:
            - viewer
            - operator
      - name: runner.profile.cpu
        option_type: string
        description: The CPU profile file path
        local_only: true
      - name: runner.profile.memory
        option_type: string
        description: The memory profile file path
        local_only: true

      # Solve options
      - name: solve.duration
        option_type: string
        description: "Maximum duration of the solver (e.g.: '30s', '5m')"
        ui:
          control_type: input
          display_name: Solve Duration
      - name: solve.iterations
        option_type: int
        description: "Maximum number of iterations, -1 assumes no limit; iterations are counted after start solutions are generated (e.g.: 100000)"
        ui:
          control_type: input
          display_name: Solve Iterations
          hidden_from:
            - viewer
            - operator
      - name: solve.parallelruns
        option_type: int
        description: "Maximum number of parallel runs, -1 results in using all available resources (e.g.: 4)"
        ui:
          control_type: input
          display_name: Parallel Runs
          hidden_from:
            - viewer
            - operator
      - name: solve.plateau.absolutethreshold
        option_type: float
        description: "Absolute threshold for significant improvement (e.g.: 1000.0)"
        ui:
          control_type: input
          display_name: Plateau Absolute Threshold
      - name: solve.plateau.delay
        option_type: string
        description: "Delay before plateau detection starts (e.g.: '30s', '5m')"
        ui:
          control_type: input
          display_name: Plateau Delay
      - name: solve.plateau.duration
        option_type: string
        description: "Maximum duration without (significant) improvement before solver stops itself (e.g.: '30s', '5m')"
        ui:
          control_type: input
          display_name: Plateau Duration
      - name: solve.plateau.iterations
        option_type: int
        description: "Maximum number of iterations without (significant) improvement before solver stops itself (e.g.: 10000)"
        ui:
          control_type: input
          display_name: Plateau Iterations
      - name: solve.plateau.relativethreshold
        option_type: float
        description: "Relative threshold for significant improvement (e.g.: 0.01 for 1%)"
        ui:
          control_type: input
          display_name: Plateau Relative Threshold
      - name: solve.rundeterministically
        option_type: bool
        description: Run the parallel solver deterministically
        ui:
          control_type: toggle
          display_name: Run Deterministically
          hidden_from:
            - viewer
            - operator
      - name: solve.solver.plangroupsize.delta
        option_type: int
        description: "Delta is the initial change in value after a number of iterations without improvement (e.g.: 0). This is used to adjust the group size of the plan operator during solving."
        ui:
          control_type: input
          display_name: Plan Group Size Delta
          hidden_from:
            - viewer
            - operator
      - name: solve.solver.plangroupsize.deltaafteriterations
        option_type: int
        description: "Number of iterations without improvement after which the value is changed (e.g.: 1000000000). This is used to adjust the group size of the plan operator during solving."
        ui:
          control_type: input
          display_name: Plan Group Size Delta After Iterations
          hidden_from:
            - viewer
            - operator
      - name: solve.solver.plangroupsize.maxvalue
        option_type: int
        description: "Maximum value for the group size (e.g.: 2). This is used to adjust the group size of the plan operator during solving."
        ui:
          control_type: input
          display_name: Plan Group Size Max Value
          hidden_from:
            - viewer
            - operator
      - name: solve.solver.plangroupsize.minvalue
        option_type: int
        description: "Minimum value for the group size (e.g.: 2). This is used to adjust the group size of the plan operator during solving."
        ui:
          control_type: input
          display_name: Plan Group Size Min Value
          hidden_from:
            - viewer
            - operator
      - name: solve.solver.plangroupsize.snapbackafterimprovement
        option_type: bool
        description: "Snap back to the start value after an improvement is found. This is used to adjust the group size of the plan operator during solving."
        ui:
          control_type: toggle
          display_name: Plan Group Size Snap Back After Improvement
          hidden_from:
            - viewer
            - operator
      - name: solve.solver.plangroupsize.startvalue
        option_type: int
        description: "Starting value for the group size (e.g.: 2). This is used to adjust the group size of the plan operator during solving."
        ui:
          control_type: input
          display_name: Plan Group Size Start Value
          hidden_from:
            - viewer
            - operator
      - name: solve.solver.plangroupsize.zigzag
        option_type: bool
        description: "Zigzag is a flag that indicates if the value should zigzag between the min and max value. This is used to adjust the group size of the plan operator during solving."
        ui:
          control_type: toggle
          display_name: Plan Group Size Zigzag
          hidden_from:
            - viewer
            - operator
      - name: solve.solver.unplanunits.delta
        option_type: int
        description: "Delta is the initial change in value after a number of iterations without improvement (e.g.: 2). This is used to adjust the number of units for the unplan operator during solving."
        ui:
          control_type: input
          display_name: Unplan Units Delta
          hidden_from:
            - viewer
            - operator
      - name: solve.solver.unplanunits.deltaafteriterations
        option_type: int
        description: "Number of iterations without improvement after which the value is changed (e.g.: 125). This is used to adjust the number of units for the unplan operator during solving."
        ui:
          control_type: input
          display_name: Unplan Units Delta After Iterations
          hidden_from:
            - viewer
            - operator
      - name: solve.solver.unplanunits.maxvalue
        option_type: int
        description: "Maximum value for the number of units (e.g.: -1). This is used to adjust the number of units for the unplan operator during solving. -1 auto-configures to a fraction of the total number of stops."
        ui:
          control_type: input
          display_name: Unplan Units Max Value
          hidden_from:
            - viewer
            - operator
      - name: solve.solver.unplanunits.minvalue
        option_type: int
        description: "Minimum value for the number of units (e.g.: 2). This is used to adjust the number of units for the unplan operator during solving."
        ui:
          control_type: input
          display_name: Unplan Units Min Value
          hidden_from:
            - viewer
            - operator
      - name: solve.solver.unplanunits.snapbackafterimprovement
        option_type: bool
        description: "Snap back to the start value after an improvement is found. This is used to adjust the number of units for the unplan operator during solving."
        ui:
          control_type: toggle
          display_name: Unplan Units Snap Back After Improvement
          hidden_from:
            - viewer
            - operator
      - name: solve.solver.unplanunits.startvalue
        option_type: int
        description: "Starting value for the number of units (e.g.: 2). This is used to adjust the number of units for the unplan operator during solving."
        ui:
          control_type: input
          display_name: Unplan Units Start Value
          hidden_from:
            - viewer
            - operator
      - name: solve.solver.unplanunits.zigzag
        option_type: bool
        description: "Zigzag is a flag that indicates if the value should zigzag between the min and max value. This is used to adjust the number of units for the unplan operator during solving."
        ui:
          control_type: toggle
          display_name: Unplan Units Zigzag
          hidden_from:
            - viewer
            - operator
      - name: solve.solver.unplanweights
        option_type: string
        description: "Comma separated list of weights for unplanning strategies (e.g.: 'Vehicle:3,Island:1,Location:300')"
        ui:
          control_type: input
          display_name: Unplan Weights
          hidden_from:
            - viewer
            - operator
      - name: solve.startsolutions
        option_type: int
        description: "Number of solutions to generate on top of those passed in; one solution generated with sweep algorithm, the rest generated randomly (e.g.: 5)"
        ui:
          control_type: input
          display_name: Start Solutions
          hidden_from:
            - viewer
            - operator

  # Specify the format the app reads and writes.
  content:
    format: "json" # Read JSON from stdin and write JSON to stdout.
# This manifest holds the information the app needs to run on the Nextmv Cloud.
type: java
runtime: ghcr.io/nextmv-io/runtime/java:latest

# Directives to compile a binary from the app.
pre-push: mvn package

# List all files/directories that should be included in the app. Globbing
# (e.g.: configs/*.json) is supported.
files:
  - main.jar

configuration:
  # Specify the format the app reads and writes.
  content:
    format: "multi-file" # Read and write files from disk.
# This manifest holds the information the app needs to run on the Nextmv Cloud.
type: java
runtime: ghcr.io/nextmv-io/runtime/java:latest

# Directives to compile a binary from the app.
pre-push: mvn package

# List all files/directories that should be included in the app. Globbing
# (e.g.: configs/*.json) is supported.
files:
  - main.jar
  - lib/*.so
  - lib/*.jar

configuration:
  # Specify the format the app reads and writes.
  content:
    format: "json" # Read JSON from stdin and write JSON to stdout.
type: binary
runtime: ghcr.io/nextmv-io/runtime/default:latest

build:
  command: bash .nextmv/build.sh
  environment:
    ARCH: arm64 # Use amd64 for amd... execution classes
files:
  - main
configuration:
  content:
    format: "json"