- Overview
- Getting Started
- Quick Start Guide
- Core Concepts
- Users
- Models
- Creating a Model
- Model Card
- Model Card
- Importing Model Card Text
- Comparing Model Cards
- Creating a Release
- Uploading Files
- Uploading Images
- Model Templating
- Data Cards
- Creating a Data Card
- Managing Data Cards
- Using a Model
- Browsing the Marketplace
- Requesting Access
- Using a Pushed Docker Image
- Downloading Files
- Reviews
- Understanding Reviews
- Reviewing
- Reviewing a Release
- Reviewing an Access Request
- Reviewing a Model Card Lifecycle
- Review Outcomes
- Security Scanning
- File Scanning
- Image Scanning
- Inferencing
- Creating an Inference Service
- Managing Inference Services
- Model Mirroring
- Creating a Mirrored Model
- Editing a Mirrored Model Card
- Untrusted Models
- Untrusted Models
- Deletion
- Deleting a File
- Deleting a Model
- Soft Deletion
- Bailo Metrics
- Viewing Bailo Metrics
- Programmatic Access
- Authentication
- Personal Access Tokens
- Python Client
- OpenAPI Reference
- Webhooks
- Administration
- Getting Started
- Deployment Architecture
- App Configuration
- Model Lifecycle Configuration
- LLM
- LLM Import
- Schemas
- Understanding Schemas
- Create a Schema
- Upload a Schema
- Schema Migrations
- Review Roles
- Managing Review Roles
- Assigning Roles to Schemas
- Federation
- Peer Integration
- Microservices
- Artefact Scanners
- Helm
- Basic Usage
- Configuration
- Isolated Environments
- Migrations
- Bailo v0.4
- Bailo v2.0
- DataBase Scripts
- Reference
- Glossary
- Roles & Permissions
- Troubleshooting & FAQ
App Configuration
Common questions this page answers:
- How do I configure Bailo?
- Where are the configuration files?
- How does configuration inheritance work?
Configuration files
Bailo uses node-config for application configuration.
node-config organizes hierarchical configurations, allowing the user to set a series of overrides over a base
configuration.
The default set of configuration can be found in config/default.js, with overrides for other environments included in
the same folder. For production environments, configuration should be placed in either production.cjs or local.js to
override the default configuration.
The full order of configuration inheritance can be found on the node-config wiki.
Configuration Specification
Please Refer to the following specification for details on setup and modification.
These are automatically updated with type documentation from our main branch on Github.
api
Express listen configuration.
These values define where the backend API binds internally. This is functionally the same as http.Server.listen(), and will bind connections to nginx at /api/v2.
port
number - Port number to expose the express backend on (usually 3001)app
Public-facing application metadata used in:
- email links
- registry authentication
During build time certificates are generated with open SSL. These are used to authenticate the backend against the registry.
You can generate the certificates manually using npm run certs
protocol
string - URL scheme used in generated links (e.g. https)host
string - Public domain or hostname used in emailsport
number - Public port used in email linksprivateKey
string - X.509 private key for registry authenticationpublicKey
string - X.509 public certificate for registry token verificationjwks
string - JSON Web Key Set used by the registryhttpClient
defaultOpts
AgentOptions - Default HTTPS agent options (proxy, TLS, etc.)proxy
string - Optional proxy URL for outbound requestsnoProxy
string[] - Hostnames that bypass the configured proxyconnectors
authentication
{ kind: AuthenticationKindKeys; } - Authentication strategy
- 'silly' - No authentication every user is Joe Blogs
- 'oauth' - Uses open authorisation to authenticate users.
authorisation
{ kind: "basic"; } - Authorisation strategy
- 'basic' - Usual checks on access apply
audit
{ kind: AuditKindKeys; } - Audit strategy
- 'silly' - No events are tracked
- 'stdout' - Events are streamed via standard output
artefactScanners
Artefact scanners Information specific to how Bailo connects with the file and image scanners
kinds
ArtefactScanKindKeys[] - Enabled artefact scannersretryDelayInMinutes
number - Retry delay between scan attempts of a given artefact (minutes)maxInitRetries
number - Maximum number of initialisation retriesinitRetryDelay
number - Retry delay between initialisation attempts (minutes)scanTimeoutMs
number - Maximum time allowed for a single artefact scan (milliseconds)federation
state
FederationStateKeys - Status of federation search
- 'enabled' - Creates peer connections
- 'readOnly' - Used for creating a peer itself without any peers
- 'disabled' - Doesn't create peer connections
id
string - Unique peer identifierisEscalationEnabled
boolean - Allow escalation across federated peerspeers
smtp
enabled
boolean - Enable or disable all email sendingtransporter
TransportOption - Transport providerconnection
SMTP Connection
Connection information for an SMTP server. Settings are passed directly to node-mailer.
lifecycle
{ preReminderIntervals: string[]; postReminderInterval: string; } - Reminder schedule for model card review lifecycle emails. Refer to: https://github.com/agenda/human-interval#usesfrom
string - From address used by Bailo, can be different from the SMTP server details.s3
Defines storage behavior. Used for all artifacts including:
- registry artifacts
- files
credentials
{ accessKeyId: string; secretAccessKey: string; } - Object store credentials (do not store in plaintext in production)endpoint
string - Object storage endpointregion
string - AWS regionforcePathStyle
boolean - Use path-style rather than virtual-hosted-style bucket addressingrejectUnauthorized
boolean - Validate the TLS certificate used by the object storage endpointresponseChecksumValidation
ResponseChecksumValidation | Provider<ResponseChecksumValidation> - AWS SDK response checksum validation behaviourautomaticallyCreateBuckets
boolean - Automatically create buckets if missingmultipartChunkSize
number - Multipart upload chunk size (bytes)mongo
uri
string - MongoDB connection URI (no credentials embedded)user
string - Username override (for secret-based auth)pass
string - Password override (for secret-based auth)transactions
boolean - Enable MongoDB transactions (requires replica set)registry
connection
service
string - Registry audienceissuer
string - Registry issuerui
Some features on the UI are dynamic and customisable.
The UI object contains all information that is user facing.
banner
issues
label
string - If you have experienced any issues with Bailo, then please report it to the blank.supportHref
string - Support contact emailcontactHref
string - Help contact emailhelpPopoverText
manualEntryAccess
string - This text appears in under the "Manage Model Access" within each of the model settingsmodelDetails
organisations
string[] - Organisation a model can belong tostates
string[] - Status of LifecycleroleDisplayNames
owner
string - This role includes all permissions, such as managing model access and model deletioncontributor
string - This role allows users edit the model card and draft releasesconsumer
string - This provides read only permissions for the model. If a model is private, these users will be able to view the model and create access requestssession
Secret used to sign express-sessions should be difficult to parse by a human
Should be rotated as best practice
secret
string - Express session signing secretoauth
provider
string - Redirect for the login to set a session cookiegrant
any - Grant configuration optionscognito
Cognito
Defines configuration for Open Authorisation
identityProviderClient
region
string - AWS Regioncredentials
accessKeyId
string - Cognito access keysecretAccessKey
string - Cognito secret keyadminGroupName
string - Cognito admin group namedefaultSchemas
Defines default schemas that are loaded on startup. Use require to import.
eg. require('../src/scripts/example_schemas/minimal_model_schema.json')
modelCards
name
string - Name of the schema that appearsid
string - Unique identifier for the schemadescription
string - Description of the schemas functionsjsonSchema
Schema - The file to mount the contents of each schema eg. require('../src/scripts/example_schemas/minimal_model_schema.json')reviewRoles
string[] - Roles required to reviewaccessRequests
name
string - Name of the schema that appearsid
string - Unique identifier for the schemadescription
string - Description of the schemas functionsjsonSchema
Schema - The file to mount the contents of each schema eg. require('../src/scripts/example_schemas/minimal_model_schema.json')reviewRoles
string[] - Roles required to reviewdataCards
name
string - Name of the schema that appearsid
string - Unique identifier for the schemadescription
string - Description of the schemas functionsjsonSchema
Schema - The file to mount the contents of each schema eg. require('../src/scripts/example_schemas/minimal_model_schema.json')reviewRoles
string[] - Roles required to reviewdefaultReviewRoles
DefaultReviewRole[] - Roles that can be used after startupinstrumentation
enabled
boolean - Enable open telemetry for performance metricsendpoint
string - Trace exporter hostauthenticationToken
string - Authorisation header using the Bearer schemedebug
boolean - Sets logger level to debugstroom
sendEvents
boolean - Send events to STROOMurl
string - STROOM endpointenvironment
string - STROOM environment nameinterval
number - Delay between event batches (milliseconds)generator
string - Event generator namerejectUnauthorized
boolean - Validate the STROOM TLS certificatexmlns
string - XML namespace for generated eventsschemaLocation
string - XML schema location for generated eventsversion
string - Event schema versionheaders
Record<string, string> - Additional HTTP headers sent to STROOMbatchSizeLimit
number - Maximum number of events in a batchartefactScanning
Scanning for files and images within models, including AV and CVEs.
Scanners operate a priority queue
clamdscan
ClamAV is an open-source file scanning toolkit.
This section gives some configuration for Bailo to access the container in order to scan files
concurrency
number - Number of files scanned at one timestreamMaxLength
string - Maximum bytes allowed in a stream from clamd.conf (example format: '2G')host
string - Internal address to model scan APIport
number - Port number for model scan apiartefactscan
modelMirror
metadataFile
string - File name to store metadata such as source and target modelcontentDirectory
string - Directory name of packaged filesexport
concurrency
number - Number of models to export at oncemaxSize
number - Maximum file size to allow for exportbucket
string - Bucket name to export to storage. Buckets should be created before performing exportkmsSignature
{ enabled: boolean; keyId: string; KMSClient: { region: string; credentials: { accessKeyId: string; secretAccessKey: string; }; }; } - Key Management Serviceinference
authorisationToken
string - Shared authorisation token for inference backendsCopyright © Crown Copyright 2026.
