Skip to main content

All the settings

::: note

Izanami is written with play and akka. You can find additional configuration information here https://www.playframework.com/documentation/2.8.x/Configuration.

:::

::: warning Before deploying to production you MUST change the following values

  • play.http.secret.key or env. variable APPLICATION_SECRET: generate a strong secure random value
  • izanami.filter.default.sharedKey or env. variable FILTER_CLAIM_SHAREDKEY: generate a strong secure random value, without it, your instance will be vulnerable admin login from unexpected third parties
  • izanami.filter.otoroshi.sharedKey or env. variable CLAIM_SHAREDKEY: if you're using izanami behind otoroshi, please use the secret from otoroshi challenge token here

:::

Plays settings

Config propertyEnv variableDescriptionDefault value
play.http.secret.keyAPPLICATION_SECRETA token to sign cookies. generate a strong secure random valueizanamiSecret
play.http.contextAPPLICATION_BASE_URLThe context used/
play.server.http.portHTTP_PORTThe port used for HTTP exposition9000
play.server.http.addressHTTP_ADDRESSThe interface address to bind to0.0.0.0
play.server.http.idleTimeoutHTTP_IDLE_TIMEOUTThe idle timeout for an open connectionnull
play.server.https.portHTTPS_PORTThe port used for HTTPS expositiondisabled
play.server.https.addressHTTPS_ADDRESSThe interface address to bind to0.0.0.0
play.server.https.engineProviderHTTPS_SSL_ENGINE_PROVIDERThe SSL engine providerplay.core.server.ssl.DefaultSSLEngineProvider
play.server.https.keyStore.pathHTTPS_KEYSTORE_PATHThe path to the keystorenull
play.server.https.keyStore.typeHTTPS_KEYSTORE_TYPEThe type of the keystoreJKS
play.server.https.keyStore.passwordHTTPS_KEYSTORE_PASSWORDThe password for the keystore""
play.server.https.keyStore.algorithmHTTPS_KEYSTORE_ALGORITHMThe algorithm to use. If not set, uses the platform default algorithmnull
play.server.https.trustStore.noCaVerificationHTTPS_TRUSTSTORE_NO_CA_VERIFICATIONIf true, does not do CA verification on client side certificatesfalse
play.server.https.wantClientAuthHTTPS_WANT_CLIENT_AUTHWhether JSSE want client auth mode should be used. The server will request a client certificate, but won't fail if one isn't providedfalse
play.server.https.needClientAuthHTTPS_NEED_CLIENT_AUTHWhether JSSE need client auth mode should be used. The server will request a client certificate, and will fail and terminate the session if one isn't providedfalse
izanami.zoneIdZONE_IDThe time-zone idEurope/Paris

Events

Here, you can find settings about the event store configuration.

Config propertyEnv variableDescriptionDefault value
izanami.modeIZANAMI_MODEUse dev when developing. Could be prod or devprod
izanami.events.storeIZANAMI_EVENT_STOREType of the event store. Could be InMemory, Kafka, Redis, Distributed.InMemory
izanami.events.distributed.topicDISTRIBUTED_TOPICName of the topic when izanami.events.store=Distributedizanami
izanami.events.redis.topicREDIS_TOPICName of the topic when izanami.events.store=Redisizanami:events
izanami.events.redis.backpressureBufferSizeREDIS_BACKPRESSURE_BUFFER_SIZESize of buffer (of backpressure) between Redis event store and notification (SSE, WebHook and hook).500
izanami.events.kafka.topicKAFKA_TOPICName of the topic when izanami.events.store=Kafkaizanami
izanami.events.kafka.backpressureBufferSizeKAFKA_BACKPRESSURE_BUFFER_SIZESize of buffer (of backpressure) between Kafka event store and notification (SSE, WebHook and hook).500
izanami.events.inmemory.backpressureBufferSizeIN_MEMORY_BACKPRESSURE_BUFFER_SIZESize of buffer (of backpressure) between InMemory event store and notification (SSE, WebHook and hook).500
izanami.cluster.seed-node-hostAKKA_CLUSTER SEED_NODE_HOSTThe host of the seed used to form a cluster127.0.0.1
izanami.cluster.seed-node-portAKKA_CLUSTER SEED_NODE_PORTThe port of the seed used to form a cluster2551
izanami.cluster.akka.remote.netty.tcp.hostnameAKKA_CLUSTER_HOSTThe host of the current node127.0.0.1
izanami.cluster.akka.remote.netty.tcp.portAKKA_CLUSTER_PORTThe port of the current node127.0.0.1
izanami.cluster.akka.remote.netty.tcp.bind-hostnameAKKA_CLUSTER_HOSTThe internal host of the current node (eg docker)127.0.0.1
izanami.cluster.akka.remote.netty.tcp.bind-portAKKA_CLUSTER_BIND_PORTThe internal port of the current node (eg docker)${cluster.akka.remote.netty.tcp.port}
izanami.cluster.akka.cluster.seed-nodesAKKA_CLUSTER_SEED_NODESAn array of seeds["akka.tcp://"${cluster.system-name}"@"${izanami.cluster.seed-node-host}":"${izanami.cluster.seed-node-port}]

@@@ note The distributed event store rely on akka cluster and akka distributed pub/sub. You can find more information here https://doc.akka.io/docs/akka/current/cluster-usage.html.
@@@

Db config

Here, you can find the settings to configure the different data stores.

Config propertyEnv variableDescriptionDefault value
izanami.db.defaultIZANAMI_DATABASEType of the default datastore. Could be InMemory, LevelDb, Redis, Elastic, Postgresql.LevelDb
izanami.db.leveldb.parentPathLEVEL_DB_PARENT_PATHThe root folder when data are stored by level dbtarget/leveldb
izanami.db.redis.hostREDIS_HOSTThe host of the redis serverlocalhost
izanami.db.redis.portREDIS_PORTThe port of the redis server6379
izanami.db.redis.masterIdREDIS_MASTER_IDThe id of the master in a sentinel contextredismaster
izanami.db.redis.passwordREDIS_PASSWORDThe password for the redis server
izanami.db.redis.sentinelsAn array of redis config for slaves. For example: izanami.db.redis.sentinels=[{ host = localhost, port = 6380 }]
izanami.db.redis.databaseIdREDIS_DATABASE_IDthe id of the redis database.
izanami.db.redis.tlsREDIS_TLSIf TLS should be enabled for the Redis connection.false
izanami.db.redis.keyPassREDIS_KEYPASSThe password for ssl certificate
izanami.db.redis.keystoreREDIS_KEYSTORE_LOCATIONThe absolute location of the keystore if ssl is used
izanami.db.redis.truststoreREDIS_TRUSTSTORE_LOCATIONThe absolute location of the truststore,if ssl is used
izanami.db.mongo.urlMONGODB_ADDON_URIthe url of the mongo database.
izanami.db.kafka.hostKAFKA_HOSTThe host of the kafka serverlocalhost
izanami.db.kafka.portKAFKA_PORTThe port of the kafka server9092
izanami.db.kafka.protocolKAFKA_PROTOCOLAuthentication protocol. Could be SASL_SSL, SSL.SSL
izanami.db.kafka.serversKAFKA_HOSTS_AND_PORTSA string with host and port separated by ','${izanami.db.kafka.host}":"${izanami.db.kafka.port}
izanami.db.kafka.keyPassKAFKA_PASSWORDThe password for ssl certificate
izanami.db.kafka.keystore.locationKAFKA_KEYSTORE_LOCATIONThe absolute location of the keystore if ssl is used
izanami.db.kafka.truststore.locationKAFKA_TRUSTORE_LOCATIONThe absolute location of the truststore,if ssl is used
izanami.db.kafka.saslMechanismKAFKA_SASL_MECHANISMThe SASL mechanism
izanami.db.kafka.saslJaasConfigKAFKA_SASL_JAAS_CONFIGThe SASL Jaas configuration
izanami.db.elastic.hostELASTIC_HOSTThe host of the elastic server127.0.0.1
izanami.db.elastic.portELASTIC_PORTThe port of the elastic server9200
izanami.db.elastic.schemeELASTIC_SCHEMEThe scheme used for the elastic serverhttp
izanami.db.elastic.versionELASTIC_VERSIONThe version of the elastic server6
izanami.db.elastic.userELASTIC_USERThe user if elastic is secured
izanami.db.elastic.passwordELASTIC_PASSWORDThe password if elastic is secured
izanami.db.elastic.automaticRefreshForce refresh on each insert, update or delete. For dev onlyfalse
izanami.db.inMemoryWithDb.dbIN_MEMORY_WITH_DB_DBThe underlying store behind the cacheLevelDB
izanami.db.inMemoryWithDb.pollingIntervalIN_MEMORY_WITH_DB_POLLING_INTERVALThe interval used to refresh the from the underlying store
izanami.db.dynamo.tableNameDYNAMO_TABLE_NAMEThe name of the AWS DynamoDB tableizanami
izanami.db.dynamo.eventsTableNameDYNAMO_EVENTS_TABLE_NAMEThe name of the AWS DynamoDB table for A/B testing eventsizanami_experimentevents
izanami.db.dynamo.regionDYNAMO_REGIONThe AWS regioneu-west-1
izanami.db.dynamo.hostDYNAMO_HOSTThe AWS host"dynamodb."${izanami.db.dynamo.region}".amazonaws.com"
izanami.db.dynamo.portDYNAMO_PORTThe AWS port, https is used as default scheme443
izanami.db.dynamo.parallelismDYNAMO_PARRALLELISMMax number of in flight requests from the AwsClient - must be a power of 232
izanami.db.dynamo.accessKeyDYNAMO_ACCESS_KEYOptional Credentials. Used to define static credentials rather than use the DefaultAWSCredentialsProviderChain
izanami.db.dynamo.secretKeyDYNAMO_SECRET_KEYOptional Credentials. Used to define static credentials rather than use the DefaultAWSCredentialsProviderChain
izanami.db.postgresql.urlJDBC_DATABASE_URLThe postgresql url
izanami.db.postgresql.usernamePOSTGRESQL_USERThe postgresql username
izanami.db.postgresql.passwordPOSTGRESQL_PASSWORDThe postgresql password
izanami.db.postgresql.connectionPoolSizePOSTGRESQL_CONNECTION_POOL_SIZEThe postgresql poolsize32

Threads configuration

Config propertyEnv variableDescriptionDefault value
izanami.script-dispatcher.thread-pool-executor.fixed-pool-sizeSCRIPT_EXECUTION_POOLSIZEThe size of the threapool to execute scripts with nashorn32
izanami.level-db-dispatcher.thread-pool-executor.fixed-pool-sizeLEVEL_DB_POOLSIZEThe size of the threapool for leveldb blocking calls.1

Filters

Here, you can find the settings to configure the security filter.

Config propertyEnv variableDescriptionDefault value
izanami.filter.typeIZANAMI_FILTER_TYPEThe type of the http filter used for security and identification. Izanami provide first class support for Otoroshi reverse proxy so you can set to Otoroshi if you already work with that product. Could be Default or Otoroshi.Default
izanami.filter.otoroshi.allowedPathsOTOROSHI_FILTER_EXCLUSION, OTOROSHI_FILTER_EXCLUSION_1, OTOROSHI_FILTER_EXCLUSION_2, OTOROSHI_FILTER_EXCLUSION_3A list of endpoint that bypass Otoroshi's security filter. The env variable allow to add more than one exclusion
izanami.filter.otoroshi.sharedKeyCLAIM_SHAREDKEYShared key used to encrypt jwt token.none
izanami.filter.otoroshi.headerClaimFILTER_CLAIM_HEADER_NAMEThe name of the claim headerOtoroshi-Claim
izanami.filter.otoroshi.headerRequestIdFILTER_REQUEST_ID_HEADER_NAMEThe name of the requestId headerOtoroshi-Request-Id
izanami.filter.otoroshi.headerGatewayStateFILTER_GATEWAY_STATE HEADER_NAMEThe name of the state headerOtoroshi-State
izanami.filter.otoroshi.headerGatewayStateRespFILTER_GATEWAY_STATE RESP_HEADER_NAMEThe name of the state resp headerOtoroshi-State-Resp
izanami.filter.default.sharedKeyFILTER_CLAIM_SHAREDKEYThe shared key used to encrypt jwt token. It should be the same value between each Izanami nodes in case of a cluster. generate a strong secure random value, without it, your instance will be vulnerable admin login from unexpected third partiesnone
izanami.filter.default.cookieClaimFILTER_COOKIE_NAMEThe name of the cookie used to store the user session.Izanami
izanami.filter.default.issuerFILTER_ISSUERThe issuer for jwt tokenIzanami
izanami.filter.default.apiKeys.headerClientIdFILTER_CLAIM_HEADER_CLIENT_ID_NAMEThe name of the header for clientIdIzanami-Client-Id
izanami.filter.default.apiKeys.headerClientSecretFILTER_CLAIM_HEADER_CLIENT_SECRET_NAMEThe name of the header of clientSecretIzanami-Client-Secret
izanami.filter.default.allowedPathsFILTER_EXLUSION, FILTER_EXLUSION_1, FILTER_EXLUSION_2, FILTER_EXLUSION_3A list of endpoint that pass the security filter. The env variable allow to add more than one exclusion
izanami.logout.urlLOGOUT_URLThe logout url/api/logout

Domains

Config propertyEnv variableDescriptionDefault value
izanami.config.db.typeCONFIG_DATABASEThe db used to store configs${izanami.db.default}
izanami.config.db.conf.namespaceCONFIG_NAMESPACEThe namespace used for configsizanami:configuration
izanami.features.db.typeFEATURE_DATABASEThe db used to store features${izanami.db.default}
izanami.features.db.conf.namespaceFEATURE_NAMESPACEThe namespace used for featuresizanami:features
izanami.globalScript.db.typeSCRIPT_DATABASEThe db used to store scripts${izanami.db.default}
izanami.globalScript.db.conf.namespaceSCRIPT_NAMESPACEThe namespace used for scriptsizanami:globalscripts
izanami.experiment.db.typeEXPERIMENT_DATABASEThe db used to store experiments${izanami.db.default}
izanami.experiment.db.conf.namespaceEXPERIMENT_NAMESPACEThe namespace used for experimentsizanami:experiment
izanami.variantBinding.db.typeEXPERIMENT_VARIANT BINDING_DATABASEThe db used to store variant bindings${izanami.db.default}
izanami.variantBinding.db.conf.namespaceEXPERIMENT_VARIANT BINDING_NAMESPACEThe namespace used for variant bindingsizanami:variantbinding
izanami.experimentEvent.db.typeEXPERIMENT_EVENT DATABASEThe db used to store experiment events${izanami.db.default}
izanami.experimentEvent.db.conf.namespaceEXPERIMENT_EVENT NAMESPACEThe namespace used for experiment eventsizanami:experimentevent
izanami.webhook.db.typeWEBHOOK_DATABASEThe db used to store webhooks${izanami.db.default}
izanami.webhook.db.conf.namespaceWEBHOOK_NAMESPACEThe namespace used for webhooksizanami:webhook
izanami.user.db.typeUSER_DATABASEThe db used to store users${izanami.db.default}
izanami.user.db.conf.namespaceUSER_NAMESPACEThe namespace used for usersizanami:user
izanami.user.initialize.userIdINITIAL_USER_IDThe login to use for the first connectionadmin
izanami.user.initialize.passwordINITIAL_USER_PASSWORDThe password to use for the first connection
izanami.apikey.db.typeAPIKEY_DATABASEThe db used to store api keys${izanami.db.default}
izanami.apikey.db.conf.namespaceAPIKEY_NAMESPACEThe namespace used for api keysizanami:apikey
izanami.apikey.initialize.clientIdINITIAL_APIKEY_CLIENT_IDA client id used from config
izanami.apikey.initialize.clientSecretINITIAL_APIKEY_CLIENT_SECRETA client secret used from config
izanami.apikey.initialize.authorizedPatternsINITIAL_APIKEY_AUTHORIZED_PATTERNA pattern used from config
izanami.patch.db.typePATCH_DATABASEThe db used to store patchs${izanami.db.default}
izanami.patch.db.conf.namespacePATCH_NAMESPACEThe namespace used for patchsizanami:patchs

Metrics

Config propertyEnv variableDescriptionDefault value
izanami.metrics.verboseMETRICS_VERBOSEIf true, additional metrics are provided (detailed about endpoint)false
izanami.metrics.includeCountMETRICS_COUNTIf true, the count for features, config, experiments, user, webhook will be visible in the metricsfalse
izanami.metrics.refreshMETRICS_COUNT_REFRESH_INTERVALthe refresh interval for count metrics (used by console and log)5 minutes
izanami.metrics.console.enabledMETRICS_CONSOLE_ENABLEDIf true, metrics are logged in the consolefalse
izanami.metrics.console.intervalMETRICS_CONSOLE_INTERVALinterval of the logged metrics5 minutes
izanami.metrics.log.enabledMETRICS_LOG_ENABLEDIf true, metrics are logged with slf4jfalse
izanami.metrics.log.intervalMETRICS_LOG_INTERVALinterval of the logged metrics5 minutes
izanami.metrics.http.defaultFormatMETRICS_HTTP_FORMATThe default format for http endpoint: json or prometheusjson
izanami.metrics.kafka.enabledMETRICS_KAFKA_ENABLEDIf true, metrics are logged in kafkafalse
izanami.metrics.kafka.topicMETRICS_KAFKA_TOPICThe kafka topicizanami-metrics
izanami.metrics.kafka.pushIntervalMETRICS_KAFKA_INTERVALThe logging rate30 seconds
izanami.metrics.kafka.formatMETRICS_KAFKA_FORMATThe namespace used for experimentsjson
izanami.metrics.elastic.enabledMETRICS_ELASTIC_ENABLEDIf true, metrics are logged in elasticfalse
izanami.metrics.elastic.indexMETRICS_ELASTIC_INDEXThe namespace used for variant bindings'izanami-metrics-'yyyy-MM-dd
izanami.metrics.elastic.pushIntervalMETRICS_ELASTIC_INTERVALThe db used to store experiment events30 seconds

Oauth2

Config propertyEnv variableDescription
izanami.oauth2.enabledOAUTH2_ENABLEDEnable this config
izanami.oauth2.authorizeUrlOAUTH2_AUTHORIZE_URLOauth2 authorization url
izanami.oauth2.tokenUrlOAUTH2_TOKEN_URLOauth2 token url
izanami.oauth2.userInfoUrlOAUTH2_USER_INFO_URLOauth2 user info url
izanami.oauth2.introspectionUrlOAUTH2_INTROSPECTION_URLOauth2 introspection url
izanami.oauth2.loginUrlOAUTH2_LOGIN_URLOauth2 login url
izanami.oauth2.logoutUrlOAUTH2_LOGOUT_URLOauth2 logout url
izanami.oauth2.clientIdOAUTH2_CLIENT_IDOauth2 client id
izanami.oauth2.clientSecretOAUTH2_CLIENT_SECRETOauth2 secret if provided
izanami.oauth2.scopeOAUTH2_SCOPEOauth2 scope of the requested user info
izanami.oauth2.readProfileFromTokenOAUTH2_READ_FROM_TOKENShould the user be read from token
izanami.oauth2.useCookieOAUTH2_USE_COOKIEPass desc as query param
izanami.oauth2.useJsonOAUTH2_USE_JSONUse json or form to post data to the server
izanami.oauth2.idFieldOAUTH2_ID_FIELDthe path in the token to access the user id field (required field)
izanami.oauth2.accessTokenFieldOAUTH2_ACCESS_TOKEN_FIELDthe path in the token to access the access token field (required field)
izanami.oauth2.nameFieldOAUTH2_NAME_FIELDthe path in the token to access the user name field (required field)
izanami.oauth2.emailFieldOAUTH2_EMAIL_FIELDthe path in the token to access the user email field (optional field)
izanami.oauth2.adminFieldOAUTH2_ADMIN_FIELDthe path in the token to access the user admin field (a boolean, false if empty)
izanami.oauth2.authorizedPatternFieldOAUTH2_AUTHORIZED_PATTERN_FIELDthe path in the token to access the user authorizedPatternField field
izanami.oauth2.defaultPatternsOAUTH2_DEFAULT_PATTERNthe default patterns if authorizedPatternField is missing
izanami.oauth2.izanamiManagedUserOAUTH2_IZANAMI_MANAGED_USERStrue to manage Oauth users in Izanami
izanami.oauth2.adminsOAUTH2_ADMINS_1 to OAUTH2_ADMINS_5ids of users that are admin
izanami.oauth2.jwtVerifier.enabledOAUTH2_JWT_VERIFIER_ENABLEDEnable jwt verification
izanami.oauth2.jwtVerifier.typeOAUTH2_JWT_VERIFIER_TYPEOne of hs, es, rsa, jwks
izanami.oauth2.jwtVerifier.sizeOAUTH2_JWT_VERIFIER_RSA_SIZESize of rsa 256, 384, 512s
izanami.oauth2.jwtVerifier.sizeOAUTH2_JWT_VERIFIER_HS_SIZESize of hs 256, 384, 512
izanami.oauth2.jwtVerifier.sizeOAUTH2_JWT_VERIFIER_ES_SIZESize of es 256, 384, 512
izanami.oauth2.jwtVerifier.secretOAUTH2_JWT_VERIFIER_HS_SECRETHs secret
izanami.oauth2.jwtVerifier.publicKeyOAUTH2_JWT_VERIFIER_RSA_PUBLIC_KEYRsa public key
izanami.oauth2.jwtVerifier.publicKeyOAUTH2_JWT_VERIFIER_ES_PUBLIC_KEYES public key
izanami.oauth2.jwtVerifier.privateKeyOAUTH2_JWT_VERIFIER_RSA_PRIVATE_KEYRSA private key
izanami.oauth2.jwtVerifier.privateKeyOAUTH2_JWT_VERIFIER_ES_PRIVATE_KEYES private key
izanami.oauth2.jwtVerifier.urlOAUTH2_JWT_VERIFIER_JWKS_URLJWKS url
izanami.oauth2.jwtVerifier.headersOAUTH2_JWT_VERIFIER_JWKS_HEADERSJWKS headers
izanami.oauth2.jwtVerifier.timeoutOAUTH2_JWT_VERIFIER_JWKS_TIMEOUTJWKS timeout call
izanami.oauth2.mtls.enabledOAUTH2_MTLS_ENABLEDEnable mtls authentication
izanami.oauth2.mtls.ssl-config.trustManager.stores.0.pathOAUTH2_TRUSTSTORE_PATHPath to store
izanami.oauth2.mtls.ssl-config.trustManager.stores.0.typeOAUTH2_TRUSTSTORE_TYPEType of the store PEM, JKS, PKCS12
izanami.oauth2.mtls.ssl-config.trustManager.stores.0.passwordOAUTH2_TRUSTSTORE_PASSWORDThe password
izanami.oauth2.mtls.ssl-config.keyManager.stores.0.pathOAUTH2_KEYSTORE_PATHPath to store
izanami.oauth2.mtls.ssl-config.keyManager.stores.0.typeOAUTH2_KEYSTORE_TYPEType of the store PEM, JKS, PKCS12
izanami.oauth2.mtls.ssl-config.keyManager.stores.0.passwordOAUTH2_KEYSTORE_PASSWORDThe password

You can find more option about the ssl-config part on this link: https://lightbend.github.io/ssl-config/index.html.

UI

Config propertyEnv variableDescription
izanami.confirmationDialogIZANAMI_CONFIRMATIONDIALOGAsk confirmation before update a feature