This page lists what the chart needs from you: every credential it reads, the
Secrets you create for it, and the values without which it refuses to render.
For every other setting and its default, see the
values reference.
Status says whether you have to act: required, conditional (with the
condition), optional, or removed (with the chart version). Produced by
says where the value comes from:
- Chart — generated on the first install when you leave it blank, then read
back on every upgrade so it never rotates. Only under
secrets.provider: k8s-native. Under external-secrets the chart generates
nothing, and every key listed here for your answers has to be in your store
first. Under Argo CD, supply each one yourself: see
Configuration.
- You — you produce it, with the command shown.
- An external system — your database, Redis, identity provider or gateway
already holds it.
Credentials go in secrets.managed.<group>.data in a gitignored values file,
or in your store under the same key name. See
Secrets and signing keys.
| Key |
Status |
Produced by |
How |
DATABASE_URL (group edisyl-database) |
Conditional: database.source: managed |
Your database |
postgresql://edisyl:<password>@<host>:5432/edisyl?sslmode=require, password percent-encoded |
The other databases are read from Secrets you create, not from
secrets.managed. With the bundled clusters the chart creates each one whose
consumer reads from them: auth unless edisyl.auth.database.create: false, and
Inngest and the gateway with their database.source: cnpg.
| Secret |
Status |
Keys |
How |
database.existingSecret.name |
Conditional: database.source: existing-secret |
database.existingSecret.key, default uri |
Your tooling, or a platform Postgres claim |
mono-auth-db (edisyl.auth.database.secretName) |
Conditional: when the chart does not create the auth database (edisyl.auth.database.create unset with cnpg.enabled false, or false) |
uri (edisyl.auth.database.secretKey) |
kubectl create secret, see The auth database |
edisyl-inngest-db |
Conditional: inngest.database.source: existing-secret |
uri |
kubectl create secret, see The Inngest database |
bifrost.database.existingSecret.name |
Conditional: bundled gateway, bifrost.database.source: existing-secret |
host, port, username, password, dbname (renamable under keys) |
kubectl create secret, see The gateway database |
| Value |
Status |
Notes |
database.source |
Required |
managed (default), existing-secret or cnpg |
cnpg.enabled |
Conditional: true for any cnpg source |
Off by default |
cnpg.clusters.<database>.* |
Optional |
Per-database sizing for services, auth, inngest, bifrost; see Sizing |
inngest.database.source |
Optional, set it |
cnpg, existing-secret or sqlite. Unset follows cnpg.enabled, and without bundled clusters means SQLite, which loses run history on restart |
edisyl.auth.database.secretName, secretKey |
Conditional: when the chart does not create the auth database (edisyl.auth.database.create unset with cnpg.enabled false, or false) |
Default mono-auth-db, uri |
bifrost.database.source, sslMode |
Conditional: bundled gateway |
cnpg (default) or existing-secret; sslMode default require |
| Key |
Status |
Produced by |
How |
REDIS_PASSWORD (groups edisyl-redis, edisyl-redis-auth) |
Required |
Chart, for bundled Redis; your Redis otherwise |
Bundled under external-secrets: openssl rand -hex 24, the password bundled Redis then enforces. Own Redis: its password; a passwordless Redis needs one |
INNGEST_REDIS_URI (group edisyl-redis-inngest) |
Conditional: bundled Inngest |
Chart, from the bundled Redis password; you otherwise |
Bundled: redis://:<REDIS_PASSWORD>@edisyl-redis.<namespace>.svc:6379. Own: rediss://<user>:<password>@<host>:<port> |
| Value |
Status |
Notes |
config.redisHost, redisPort, redisUser |
Conditional: redis.enabled: false without Sentinel |
redisTls optional |
config.redisSentinels, redisSentinelMaster |
Conditional: Redis behind Sentinel |
Replace host and port |
Bundled Redis always has a password. ElastiCache IAM authentication is not
supported: use an ElastiCache user with a password, or the bundled Redis.
| Key |
Status |
Produced by |
How |
GOTRUE_JWT_KEYS (group edisyl-auth) |
Required |
You |
mint-auth-keys.sh |
GOTRUE_JWT_SECRET (group edisyl-auth) |
Required |
You |
mint-auth-keys.sh |
GOTRUE_SAML_PRIVATE_KEY (group edisyl-auth) |
Required |
You |
mint-auth-keys.sh |
AUTH_ANON_KEY (group edisyl-auth-client) |
Required |
You |
mint-auth-keys.sh |
AUTH_ADMIN_TOKEN (group edisyl-auth-admin) |
Required |
You |
mint-auth-keys.sh; its role must be mono_api |
| Value |
Status |
Notes |
deploymentIdp.metadataUrl or metadataXml |
Required, exactly one |
From your identity provider |
deploymentIdp.domains |
Required |
Email domains that sign in through it |
bootstrap.adminEmails |
Required |
Owners of the organization |
bootstrap.organization.name, slug |
Required on install, since 0.58.0 |
Read on the first install only; slug 3 to 100 of [a-z0-9-], not system |
| Key |
Status |
Produced by |
How |
INNGEST_EVENT_KEY (group edisyl-inngest) |
Required |
Chart |
openssl rand -hex 32 |
INNGEST_SIGNING_KEY (group edisyl-inngest) |
Required |
Chart |
Even-length lowercase hex: openssl rand -hex 32 |
| Key |
Status |
Produced by |
How |
LLM_GATEWAY_API_KEY (group edisyl-llm-gateway) |
Required |
You |
Bundled gateway: the same value as BIFROST_RUNTIME_KEY. External: a virtual key on that gateway |
BIFROST_ADMIN_USERNAME (group edisyl-bifrost) |
Required |
Chart, for the bundled gateway; the external gateway otherwise |
openssl rand -hex 12 |
BIFROST_ADMIN_PASSWORD (group edisyl-bifrost) |
Required |
Chart, for the bundled gateway; the external gateway otherwise |
openssl rand -hex 24 |
BIFROST_RUNTIME_KEY (group edisyl-bifrost) |
Required |
Chart, for the bundled gateway; the external gateway otherwise |
echo "sk-bf-$(openssl rand -hex 24)"; must begin sk-bf- |
BIFROST_ENCRYPTION_KEY (group edisyl-bifrost-encryption) |
Conditional: bundled gateway |
Chart |
openssl rand -hex 32. Never rotate it: every stored provider credential is lost |
| Value |
Status |
Notes |
bifrost.enabled |
Optional |
true (default) runs the gateway, with its own database |
bifrost.external.url |
Conditional: bifrost.enabled: false |
The other deployment’s gateway, without /v1 |
| Key |
Status |
Produced by |
How |
ENCRYPTION_KEY (group edisyl-encryption) |
Required |
Chart |
32 random bytes, base64: openssl rand -base64 32. Never rotate it |
MONO_API_KEYS (group edisyl-mono-api-key) |
Required |
Chart |
openssl rand -hex 24; a comma-separated list, the first is sent |
TOKEN_HMAC_KEY (group edisyl-token-hmac) |
Required |
Chart |
openssl rand -hex 32 |
| Key |
Status |
Produced by |
How |
OBJECT_STORAGE_ACCESS_KEY_ID (group edisyl-object-storage) |
Conditional: s3compatible; optional on s3 with a pod IAM role |
Your object store; chart with bundled MinIO |
An access key on your bucket |
OBJECT_STORAGE_SECRET_ACCESS_KEY (group edisyl-object-storage) |
As above |
As above |
Its secret |
AWS_ACCESS_KEY_ID (group edisyl-query-results-s3) |
Optional |
Chart with bundled MinIO |
Leave empty on AWS with a pod IAM role |
AWS_SECRET_ACCESS_KEY (group edisyl-query-results-s3) |
Optional |
As above |
As above |
rootUser (group edisyl-minio-root) |
Conditional: minio.enabled |
Chart |
Repeated as both access key pairs |
rootPassword (group edisyl-minio-root) |
Conditional: minio.enabled |
Chart |
As above |
| Value |
Status |
Notes |
config.objectStorageBucket |
Required |
An existing bucket, or edisyl-files with MinIO |
config.objectStorageProvider, objectStorageRegion |
Conditional: without MinIO |
s3 (real AWS only) or s3compatible |
config.objectStorageUrl |
Conditional: s3compatible |
The store’s endpoint |
All optional: the API boots without each. Under external-secrets, a group you
do not use either holds empty values in your store or is left out with
secrets.managed.<group>.keys: []; one missing key fails its whole
ExternalSecret.
| Key |
Status |
Produced by |
How |
VOYAGE_API_KEY (group edisyl-voyage) |
Optional |
Voyage AI |
Reranking |
TYPESAFE_API_KEY, TYPESAFE_BASE_URL (group edisyl-typesafe) |
Optional, both or neither |
TypeSafe |
Question rewording |
SLACK_BUG_REPORTS_BOT_TOKEN (group edisyl-slack) |
Optional |
Your Slack app |
In-app bug reports |
PERPLEXITY_API_KEY (group edisyl-perplexity) |
Optional |
Perplexity |
Web search tool |
GITHUB_APP_PRIVATE_KEY (group edisyl-github) |
Optional, with config.githubAppId |
Your GitHub App |
GitHub connections |
CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_IMAGES_ACCOUNT_ID, CLOUDFLARE_IMAGES_API_TOKEN, CLOUDFLARE_BROWSER_RENDERING_API_TOKEN (group edisyl-cloudflare) |
Optional |
Cloudflare |
Leave empty unless Edisyl asks |
RUDDERSTACK_WRITE_KEY (group edisyl-rudderstack) |
Optional |
RudderStack |
Leave empty unless Edisyl asks |
| Value or Secret |
Status |
Notes |
config.domain |
Required |
Every public URL derives from it |
images.pullSecret |
Conditional: unless a kubelet credential provider pulls |
See Registry access |
images.pullSecretAuth.password |
Conditional: seeding the pull secret from values |
An ECR token, passed on the install command |
config.usageExport.* |
Conditional: config.usageExport.enabled |
From the access Edisyl issued you |
config.emailFrom |
Optional |
Blank runs without email |
inngest.namespace.name |
Conditional: a namespace other than edisyl |
Must match the install namespace |
A values file that still sets one of these is refused, or ignored where noted.
| Value or key |
Since |
Instead |
cnpg.instances, storageClass, storageSize, walStorageSize, resources, parameters |
0.60.0 |
cnpg.clusters.<database>.*; refused while cnpg.enabled |
cnpg.name, appSecretName, managedRoles, extraDatabases |
0.60.0 |
Nothing; the chart names and provisions each cluster |
bootstrap.seed |
0.58.0 |
Nothing; true is refused, the chart loads no demo data |
AUTH_SELFHOSTED_ANON_KEY, AUTH_SELFHOSTED_ADMIN_TOKEN (store names) |
0.57.0 |
AUTH_ANON_KEY, AUTH_ADMIN_TOKEN |
edisyl.lattice, groups edisyl-lattice, edisyl-redis-lattice |
0.53.0 |
Nothing |
Removals before 0.53.0 are listed under
Upgrading from 0.36 or earlier.