Configuration Reference
Complete reference for appsettings.json settings in the Riptide Application Manager. Environment variables can override any setting — see Deployment Guide for environment-specific configuration.
Distinct from the API Reference, which documents the REST surface AM exposes to client applications. This document covers the configuration surface AM consumes at startup.
Ports and Hosting
Web UI
{
"Web": {
"Kestrel": {
"Endpoints": {
"Http": { "Url": "http://*:11401" }
}
},
"ApiBaseUrl": "http://localhost:11402",
"ApiKey": "",
"Timeout": 30
}
}
| Setting |
Default |
Description |
Web:Kestrel:Endpoints:Http:Url |
http://*:11401 |
Web UI listen address |
Web:ApiBaseUrl |
http://localhost:11402 |
Internal URL the Web UI uses to call the API |
Web:ApiKey |
(empty) |
API key for authenticating Web UI → API calls |
Web:Timeout |
30 |
HTTP client timeout in seconds |
REST API
{
"Api": {
"Kestrel": {
"Endpoints": {
"Http": { "Url": "http://*:11402" }
}
},
"Cors": {
"AllowedOrigins": ["http://localhost:11401"]
},
"ApiKey": "",
"MaxRequestBodySize": 10485760,
"RequestTimeout": 30
}
}
| Setting |
Default |
Description |
Api:Kestrel:Endpoints:Http:Url |
http://*:11402 |
API listen address |
Api:Cors:AllowedOrigins |
["http://localhost:11401"] |
Allowed CORS origins |
Api:ApiKey |
(empty) |
API key for API authentication |
Api:MaxRequestBodySize |
10485760 (10 MB) |
Maximum request body size |
Api:RequestTimeout |
30 |
Request timeout in seconds |
Databases
{
"Database": {
"Identity": {
"Provider": "Sqlite",
"ConnectionString": "Data Source=data/identity/identity.db",
"MigrationsAssembly": "Riptide.ApplicationManager.Infrastructure"
},
"Configuration": {
"Provider": "Sqlite",
"ConnectionString": "Data Source=data/configuration/configuration.db",
"MigrationsAssembly": "Riptide.ApplicationManager.Infrastructure"
}
}
}
Application Manager uses two separate databases:
| Database |
Purpose |
| Identity |
Trial users, sessions, roles, capabilities, identity providers |
| Configuration |
Admin users, managed applications, file tree, versions, audit logs |
The Provider field supports Sqlite (default). The database provider is abstracted to support future backends (PostgreSQL, SQL Server).
Web UI Settings
{
"Web": {
"Ui": {
"ApplicationName": "Riptide Application Manager",
"PageSize": 20,
"Theme": "light",
"EnableDebugInfo": false
},
"Session": {
"TimeoutMinutes": 60,
"SlidingExpiration": true
},
"Features": {
"EnableTrialManagement": true,
"EnableConfigurationManagement": true,
"EnableFileVersioning": true,
"EnableAuditLog": true
}
}
}
| Setting |
Default |
Description |
Web:Ui:ApplicationName |
Riptide Application Manager |
Display name in the UI header |
Web:Ui:PageSize |
20 |
Default page size for list views |
Web:Ui:Theme |
light |
UI theme |
Web:Ui:EnableDebugInfo |
false |
Show debug information in the UI |
Web:Session:TimeoutMinutes |
60 |
Session inactivity timeout |
Web:Session:SlidingExpiration |
true |
Reset timeout on activity |
Web:Features:Enable* |
true |
Feature flags to enable/disable major sections |
Trial Settings
{
"Trial": {
"DefaultDurationDays": 7,
"GracePeriodDays": 30,
"MaxTeamMembers": 5,
"AutoActivate": true
}
}
| Setting |
Default |
Description |
Trial:DefaultDurationDays |
7 |
Default trial period length |
Trial:GracePeriodDays |
30 |
Grace period after trial expiration |
Trial:MaxTeamMembers |
5 |
Maximum team members per trial |
Trial:AutoActivate |
true |
Automatically activate trials after email verification |
Email
{
"EmailProvider": "AwsSes",
"Email": {
"Enabled": true,
"FromAddress": "noreply@riptide.solutions",
"FromName": "Riptide Application Manager"
}
}
Set EmailProvider to either Smtp or AwsSes.
SMTP
{
"Smtp": {
"Host": "smtp.example.com",
"Port": 587,
"Username": "",
"Password": "",
"EnableSsl": true
}
}
AWS SES
{
"AwsSes": {
"Region": "us-east-1",
"AccessKey": "",
"SecretKey": "",
"ConfigurationSetName": ""
}
}
See the Deployment Guide for detailed AWS SES setup including IAM policies.
Security
{
"Security": {
"SessionTimeoutMinutes": 60,
"PasswordResetTokenExpirationMinutes": 60,
"MaxLoginAttempts": 5,
"LockoutDurationMinutes": 15
}
}
| Setting |
Default |
Description |
Security:SessionTimeoutMinutes |
60 |
Session timeout |
Security:PasswordResetTokenExpirationMinutes |
60 |
Password reset token lifetime |
Security:MaxLoginAttempts |
5 |
Failed attempts before lockout |
Security:LockoutDurationMinutes |
15 |
Lockout duration after max attempts |
SDK Security Middleware
{
"Riptide": {
"Security": {
"Headers": {
"EnableHsts": false,
"RemoveServerHeader": true,
"EnableXContentTypeOptions": true,
"EnableXFrameOptions": true,
"ContentSecurityPolicy": "default-src 'self'; ...",
"ReferrerPolicy": "strict-origin-when-cross-origin"
},
"Audit": {
"Enabled": true,
"StorageProvider": "Database",
"RetentionDays": 2555,
"IncludeRequestBody": false,
"IncludeResponseBody": false,
"ExcludePaths": ["/health", "/ready", "/hangfire"],
"AlertOnPolicyViolations": false
},
"Compliance": {
"Enabled": true,
"EnabledTemplates": ["SOC2", "HIPAA", "FedRAMP"]
}
}
}
}
| Setting |
Default |
Description |
Headers:EnableHsts |
false |
Enable HTTP Strict Transport Security (enable in production behind TLS) |
Headers:RemoveServerHeader |
true |
Remove the Server response header |
Audit:RetentionDays |
2555 |
Audit log retention (~7 years) |
Audit:ExcludePaths |
["/health", "/ready", "/hangfire"] |
Paths excluded from audit logging |
Compliance:EnabledTemplates |
["SOC2", "HIPAA", "FedRAMP"] |
Active compliance frameworks |
Scheduled Audits
{
"SecurityAudit": {
"ScheduledAudit": {
"Enabled": false,
"IntervalHours": 24,
"Frameworks": ["SOC2", "HIPAA", "FedRAMP", "StateRAMP"]
}
}
}
| Setting |
Default |
Description |
ScheduledAudit:Enabled |
false |
Enable automatic compliance audits |
ScheduledAudit:IntervalHours |
24 |
Hours between audit runs |
ScheduledAudit:Frameworks |
All four |
Frameworks to audit |
Riptide SDK
{
"Riptide": {
"Logging": {
"ApplicationName": "RiptideApplicationManager",
"MinimumLevel": "Information",
"EnableCorrelationId": true,
"EnablePiiSanitization": true,
"Console": {
"Enabled": true,
"MinimumLevel": "Debug"
},
"File": {
"Enabled": true,
"LogDirectory": "logs",
"MaxFileSizeInMB": 10,
"RetainedFileCountLimit": 31
},
"External": {
"Enabled": false,
"Provider": "DataDog",
"ApiKey": ""
}
},
"Monitoring": {
"ApplicationName": "RiptideApplicationManager",
"EnableMetrics": true,
"EnableTracing": true,
"Provider": "Console",
"SamplingRate": 1.0
},
"Configuration": {
"Provider": "LocalDevelopment",
"EnableValidation": true,
"EnableCaching": true,
"CacheExpirationMinutes": 60
}
}
}
| Setting |
Default |
Description |
Logging:EnableCorrelationId |
true |
Add correlation IDs to all log entries |
Logging:EnablePiiSanitization |
true |
Sanitize personally identifiable information in logs |
Logging:File:RetainedFileCountLimit |
31 |
Number of log files to retain |
Monitoring:EnableMetrics |
true |
Enable performance metrics collection |
Monitoring:EnableTracing |
true |
Enable distributed tracing |
Monitoring:SamplingRate |
1.0 |
Trace sampling rate (1.0 = sample everything) |
Rate Limiting
{
"RateLimiting": {
"GlobalPermitLimit": 100,
"EmailResendLimitPerHour": 3,
"BulkOperationConcurrency": 3,
"ApiRequestsPerMinute": 60
}
}
File Management
{
"FileManagement": {
"MaxFileSizeBytes": 5242880,
"MaxVersions": 10,
"AllowedFileExtensions": [".json", ".yaml", ".yml", ".txt", ".xml", ".conf", ".config", ".env"]
}
}
| Setting |
Default |
Description |
MaxFileSizeBytes |
5242880 (5 MB) |
Maximum configuration file size |
MaxVersions |
10 |
Maximum versions retained per file |
AllowedFileExtensions |
See above |
Permitted file types |
Background Jobs (Hangfire)
{
"Hangfire": {
"DashboardPath": "/hangfire",
"ServerName": "ApplicationManager",
"WorkerCount": 5,
"EnableDashboard": true
}
}
SignalR
{
"SignalR": {
"EnableDetailedErrors": true,
"MaximumReceiveMessageSize": 102400
}
}
The SignalR hub at /hubs/progress provides real-time progress updates for long-running operations like compliance assessments and bulk operations.
Environment Variable Overrides
Any setting can be overridden via environment variables using the standard ASP.NET Core convention (double underscores for section separators):
# Override the API key
Api__ApiKey=rtk_your-api-key-here
# Override the database path
Database__Identity__ConnectionString="Data Source=/custom/path/identity.db"
# Enable scheduled audits
SecurityAudit__ScheduledAudit__Enabled=true
In Docker deployments, set these in the .env file or pass them directly to docker compose.