Configuration
nyl project settings are loaded from a single file: nyl.toml.
Configuration File Discovery
nyl searches for nyl.toml starting in the current directory and walking up parent directories.
Configuration Structure
nyl.toml supports:
[project]for project settings[profile.values.<name>]for profile values used in templates
[project]
components_search_paths = ["components"]
helm_chart_search_paths = ["."]
[profile.values.default]
namespace = "default"
replicas = 1
[profile.values.dev]
namespace = "dev"
replicas = 2
[project.aliases]
"myapi.io/v1/MyKind" = "oci://mycharts.org/my-kind@1.0.0"
Settings
project.components_search_paths
- Type: array of path strings
- Default:
["components"] - Meaning: Direct roots for component charts. Each root is scanned as:
<root>/<apiVersion>/<kind>/Chart.yaml
project.helm_chart_search_paths
- Type: array of path strings
- Default:
["."] - Meaning: Search paths used for Helm chart name resolution.
project.aliases
- Type: table/map of string to string
- Default: empty table
- Key format:
<apiVersion>/<kind> - Value format: same component shortcut format accepted in
kind(<repository>[#<name>][@<version>]) or a local component path - Meaning: Treat matching resources as component-style resources and resolve them directly to the configured target instead of
components_search_paths.
profile.values.<name>
- Type: object/map
- Default: none
- Meaning: Template values for profile
<name>exposed asvalues.*during rendering. - Selection:
--profile <name>selects a profile. If omitted, Nyl usesdefaultwhen available.
Example:
[profile.values.dev]
my_value = "Hello!"
replicas = 1
[profile.values.prod]
my_value = "World!"
replicas = 3
Template usage:
{{ values.my_value }}
{% if profile == "dev" %}
# dev-specific logic
{% endif %}
Example:
[project]
components_search_paths = ["components"]
[project.aliases]
"myapi.io/v1/MyKind" = "oci://registry-1.docker.io/bitnamicharts/nginx@18.2.4"
"platform.example.io/v1/IngressStack" = "https://charts.bitnami.com/bitnami#nginx@18.2.4"
Then this manifest is resolved through the alias target:
apiVersion: myapi.io/v1
kind: MyKind
metadata:
name: my-nginx
spec:
replicaCount: 2
Path Resolution
Relative paths are resolved against the directory that contains nyl.toml.
Example (/home/user/my-app/nyl.toml):
[project]
components_search_paths = ["components", "/opt/shared-components"]
helm_chart_search_paths = [".", "charts"]
Resolves to:
components_search_paths:/home/user/my-app/components/opt/shared-components
helm_chart_search_paths:/home/user/my-app/home/user/my-app/charts
Validation
Use:
nyl validate
Checks:
nyl.tomldiscovery and parse validity- existence of configured
components_search_paths - existence of configured
helm_chart_search_paths
Use strict mode in CI:
nyl validate --strict
JSON Schema
Generate schema from the current binary:
nyl generate schema config
Published schema artifact: