Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
자체 운영 엔터프라이즈 아키텍처 플랫폼, IT 환경의 디지털 트윈 생성, 오픈소스·완전 설정 가능·프라이버시 우선
Self-hosted Enterprise Architecture platform that creates a digital twin of your IT landscape. Open source, fully configurable, privacy-first.
비즈니스TypeScript · PythonGitHub @vincentmakes온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Source Available Enterprise Architecture Management Solution
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Self-hosted Enterprise Architecture Management platform that creates a digital twin of your IT landscape. Inspired by LeanIX, with a fully admin-configurable metamodel — card types, fields, subtypes, and relations are all data, not code.
Docker runtime note: The bundled Docker stack uses custom non-root images for all services and defaults to running as uid:gid 1000:1000, including PostgreSQL, edge nginx, and the MCP server. The optional Ollama container is upstream's own image and runs as upstream ships it, with capabilities dropped and no host port.README 전문 보기 ↗Website | User Guide | Blog | Business Case / Pitch
Self-hosted Enterprise Architecture Management platform that creates a digital twin of your IT landscape. Inspired by LeanIX, with a fully admin-configurable metamodel — card types, fields, subtypes, and relations are all data, not code.
Docker runtime note: The bundled Docker stack uses custom non-root images for all services and defaults to running as uid:gid
1000:1000, including PostgreSQL, edge nginx, and the MCP server. The optional Ollama container is upstream's own image and runs as upstream ships it, with capabilities dropped and no host port.
No install needed — run a fully loaded demo in your browser using GitHub Codespaces:
Click the button below (requires a free GitHub account):
Wait for the build to complete (~5–10 minutes on first launch — mostly the image pull and the demo seed). The setup script starts PostgreSQL, the backend, the frontend, and the edge nginx that serves port 8920, with demo data pre-loaded.
When the build finishes, Codespaces will open port 8920 in your browser. Go to the Port tab and click on the globe to access it :
Log in with:
[email protected] | |
| Password | TurboEA!2025 |
The demo comes pre-populated with the NexaTech Industries dataset — 150+ cards across all architecture layers, business processes, strategic initiatives, and 60+ relations.
Cost: Codespaces runs on your GitHub free tier (120 core-hours/month). A 4-core machine gives ~30 hours of demo time. Codespaces auto-stop after 30 minutes of inactivity and auto-delete after 30 days.
A dedicated /grc module with three tabs, separate from initiative-level PPM risks.
R-000123 references, initial vs residual 4×4 probability×impact matrices, a sequential status workflow (analysis → mitigation → monitoring → closed) with explicit Accept / Reopen side actions, owner→Todo→notification loop, filtering by affected card, and grouping. Mitigation is task-driven: one-shot or recurring controls ("review access rights every 6 months") with lead-time gating and a per-occurrence audit trail of who signed off.--profile ai) and commercial providers (OpenAI, Google Gemini, Azure OpenAI, OpenRouter, Anthropic Claude) with encrypted API key storage. Suggestions are type-aware — the prompt contextualizes each card based on its type (e.g., "software application", "technology vendor", "business process"). Results include a confidence score, editable text, and clickable source links. Admins control which card types get suggestions, the search provider, and the LLM model.AI-powered EA analysis module that runs natively in Turbo EA using the same AI provider configuration.
.zip and import it into another Turbo EA instance with a dry-run diff first. Secrets never leave the source instance. See the workspace transfer guide.[!IMPORTANT] SSO (Entra / Google / Okta / Generic OIDC) and the ServiceNow CMDB integration are implemented and shipping, but the maintainer has limited access to real-world identity providers and ServiceNow instances. Volunteer testers welcome — file an integration-tester issue or start a discussion.
docker compose --profile mcp up -d; a local stdio mode works without SSO.Turbo EA ships an Extension Store (Admin → Extensions). Extensions are vendor-signed .teax bundles that install in seconds from the in-product store or from a file on an air-gapped instance, are licensed per instance, keep working across core upgrades, and never delete your data when a licence lapses or the extension is removed. Published extensions today:
| Extension | What it adds |
|---|---|
| Roadmap Studio | What-if scenarios over the live landscape: planned cards, dated retirements and replacements, transition architectures at named plateaus, a comparison of scenarios on run cost, transition spend, and end-of-life exposure, a present mode, and PowerPoint export. Approving a scenario files a draft ADR and applying it creates the Initiative. |
| EA Value Tracker | Claim categorized savings on Architecture Decision Records, record what was realized, approve realizations four-eyes, and report the claimed-to-realized funnel per fiscal year. |
| DORA Register of Information | Maintain the EU DORA Art. 28 Register of Information from your Provider and Application cards, validate it against the EBA rules, and export the xBRL-CSV submission package plus an Excel review workbook. |
| EU AI Act Register | Classify every AI system with an article-cited wizard, track provider/deployer and GPAI obligations against the staged deadlines, and export the register with Annex IV and FRIA document skeletons. |
| Digital Autonomy Assessment (free) | Score applications with Utrecht University's DAAF framework: 22 weighted indicators, an autonomy score, and an autonomy-quadrant report. |
| Jira Todo Sync | Two-way sync between Turbo EA todos and Jira Cloud issues, with status, due dates, and assignees aligned both ways. |
| SAP Signavio Sync | Publish Applications, Organizations, Data Objects, and IT Components into the Signavio dictionary and mirror the Signavio process directory into Business Process cards. |
Build your own: extensions can ship content packs, backend plugins, and UI plugins against a stable SDK (backend SDK 1.8, UI SDK 1.27) that exposes core's own components, data bridges, events, cron jobs, and encrypted secrets. Core also gates two authoring capabilities behind extension grants: per-field help text and custom field types. The teax CLI in scripts/extension-tools/ builds and verifies bundles; the customer-facing guide is the Extension Store page of the user manual, and the store itself lives at store.turbo-ea.org.
frontend/src/theme/tokens.ts). See frontend/UI_GUIDELINES.md for the full design system.The recommended way to deploy Turbo EA. The bundled docker-compose.yml stack starts PostgreSQL, the backend, the frontend, and the public edge nginx, and it can terminate HTTPS directly when you provide certificate files.
mkdir turbo-ea && cd turbo-ea
curl -O https://raw.githubusercontent.com/vincentmakes/turbo-ea/main/docker-compose.yml
curl -O https://raw.githubusercontent.com/vincentmakes/turbo-ea/main/.env.example
cp .env.example .env
Edit .env and configure:
# PostgreSQL credentials
POSTGRES_PASSWORD=<choose-a-strong-password>
# JWT signing key — generate one with:
# python3 -c "import secrets; print(secrets.token_urlsafe(64))"
SECRET_KEY=<your-generated-secret>
# Port the app will be available on over HTTP (default: 8920)
HOST_PORT=8920
For direct HTTPS from the bundled docker stack, also set:
The Turbo EA compose file does not include a certbot container. You must provide the certificate and private key yourself, either by placing them in a local
./certsdirectory or by pointingTLS_CERTS_DIRat a sibling certbot / letsencrypt folder that another process manages.
HOST_PORT=80
TLS_HOST_PORT=443
TURBO_EA_PUBLIC_URL=https://ea.yourdomain.com
ALLOWED_ORIGINS=https://ea.yourdomain.com
TURBO_EA_TLS_ENABLED=true
# If you use a companion certbot repo or sibling letsencrypt folder:
TLS_CERTS_DIR=../certbot/certs
TURBO_EA_TLS_CERT_FILE=cert.pem
TURBO_EA_TLS_KEY_FILE=key.pem
docker compose pull
docker compose up -d
This uses the single docker-compose.yml stack, which includes PostgreSQL and the public nginx edge. Data is persisted in the postgres_data Docker volume.
That's it. Open http://localhost:8920 in your browser, or https://your-domain if you enabled direct TLS. When TLS is enabled, the bundled nginx serves both HTTP and HTTPS and redirects HTTP traffic to HTTPS automatically.
The first user to register automatically gets the admin role.
The production stack supports optional profiles:
| Profile | Command flag | What it adds |
|---|---|---|
ai | --profile ai | Bundled Ollama container for AI description suggestions |
mcp | --profile mcp | MCP server for AI tool integration (Claude Desktop, Cursor, etc.) |
Example combining everything:
docker compose --profile ai --profile mcp pull
docker compose --profile ai --profile mcp up -d
Every push to main and every v*.*.* tag automatically publishes multi-arch (amd64 + arm64) images to the GitHub Container Registry:
ghcr.io/vincentmakes/turbo-ea/dbghcr.io/vincentmakes/turbo-ea/backendghcr.io/vincentmakes/turbo-ea/frontendghcr.io/vincentmakes/turbo-ea/nginxghcr.io/vincentmakes/turbo-ea/mcp-serverghcr.io/vincentmakes/turbo-ea/charts/turbo-ea (the Helm chart, as an OCI artifact — published on release tags only)The root compose file is production-only and pulls published images from GHCR:
docker compose pull
docker compose up -d
Pin a specific version with TURBO_EA_TAG (defaults to latest):
TURBO_EA_TAG=0.70.0 docker compose up -d
Breaking change: The non-root Docker release uses new persistent volume names for PostgreSQL and Ollama so the stack does not try to reuse older root-owned volumes automatically. If you are upgrading from a pre-
0.70.0release and need to keep your existing database, dump it before upgrading and restore it into the new stack after startup.
For EKS, AKS, GKE or any conformant cluster, the published Helm chart installs the same images in one command against a PostgreSQL server you provide (a managed database is the recommended setup):
helm install turbo-ea oci://ghcr.io/vincentmakes/turbo-ea/charts/turbo-ea \
--version <X.Y.Z> --namespace turbo-ea --create-namespace \
--set publicUrl=https://ea.example.com \
--set postgresql.host=postgres.example.internal \
--set postgresql.password='…' \
--set secretKey="$(openssl rand -base64 48)"
The chart version is the Turbo EA version. Cloud-specific starting points (ALB, App Routing, GCE Ingress, storage classes, managed-database notes) live in charts/turbo-ea/examples/, and the full guide — including the AWS, Azure and GCP walkthroughs — is at docs.turbo-ea.org/admin/kubernetes.
Azure Container Apps, Google Cloud Run and AWS ECS Fargate can run the same images as one container group — the edge nginx, frontend, backend and optional MCP server as sidecars sharing localhost — against a managed PostgreSQL. Ready-to-edit templates live under deploy/ (Bicep, a Cloud Run service manifest, CloudFormation) and the walkthroughs, including what each platform can and cannot do, are at docs.turbo-ea.org/admin/managed-containers.
Every deployment above also exists as a Terraform root module under deploy/terraform/: ecs-fargate, azure-container-apps and cloud-run build the same container group as the templates and create the managed PostgreSQL by default (with a bring-your-own switch), and kubernetes installs the Helm chart through helm_release. Networks are inputs, never created; the release is an explicit image_tag. Mock-provider tests, terraform validate and tflint run in CI. Guide: Terraform.
From 1.0.0 onwards, every published image is signed with cosign using GitHub's keyless OIDC flow — no shared signing key, the certificate is bound to the publish workflow identity. Verification before pulling into production is one command, with cosign 2.6 or newer (or any 3.x):
cosign verify \
--certificate-identity-regexp 'https://github.com/vincentmakes/turbo-ea/.+' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
ghcr.io/vincentmakes/turbo-ea/backend:<version>
The same command works for db, frontend, nginx, mcp-server and the Helm chart (ghcr.io/vincentmakes/turbo-ea/charts/turbo-ea:<version>). Releases since 1.37.0 store the signature as a Sigstore bundle, which cosign 2.5 and older cannot see (they report no signatures found); every publish verifies its own signature with cosign 2.6 before it goes green. A buildkit-generated SPDX SBOM is attached to each image as an OCI referrer; pull it with docker buildx imagetools inspect --format '{{ json .SBOM }}' <image>:<tag>. See docs/admin/supply-chain.md for details.
Local source builds are intentionally separate from production. Use the dev file to add build: for the stack services you want to run from source:
docker compose -f docker-compose.yml -f dev/docker-compose.dev.yml up -d --build
The repository Makefile wraps that as:
make up-dev
If you already run a managed or shared PostgreSQL instance, you can skip the bundled db service and point the backend at your existing server:
Create a database and user for Turbo EA:
CREATE USER turboea WITH PASSWORD 'your-password';
CREATE DATABASE turboea OWNER turboea;
In .env, point POSTGRES_HOST at your server (and update credentials):
POSTGRES_HOST=your-postgres-host
POSTGRES_PORT=5432
POSTGRES_DB=turboea
POSTGRES_USER=turboea
POSTGRES_PASSWORD=your-password
Start everything except the bundled database:
docker compose up -d backend frontend nginx
(Add mcp-server / ollama to the list, or use --profile mcp --profile ai, as needed.)
The backend can reach external hosts via the host's network. If your PostgreSQL is in another container on the same Docker host, attach it to the same network or use host.docker.internal.
To start with a fully populated demo dataset (NexaTech Industries), add seed variables to your .env before the first startup:
SEED_DEMO=true # Full demo: NexaTech Industries (~150 cards, BPM processes, PPM projects)
Setting SEED_DEMO=true includes everything — the NexaTech organizational structure, applications, IT components, interfaces, business capabilities, processes, initiatives, tags, relations, BPM process flows with BPMN diagrams, and PPM project data (status reports, WBS, tasks, budgets, costs, risks).
You can also seed BPM or PPM data independently:
SEED_BPM=true # Only BPM demo data (requires SEED_DEMO to have run first)
SEED_PPM=true # Only PPM demo data (requires SEED_DEMO to have run first)
A demo admin account is created automatically:
| Field | Value |
|---|---|
[email protected] | |
| Password | TurboEA!2025 |
| Role | Admin |
Tip: To start fresh with AI features included, combine seed data with the bundled Ollama container:
# Add to .env: SEED_DEMO=true AI_PROVIDER_URL=http://ollama:11434 AI_MODEL=gemma3:4b AI_AUTO_CONFIGURE=true # Start with AI profile: docker compose -f docker-compose.yml -f dev/docker-compose.dev.yml --profile ai up -d --build
| Category | Content |
|---|---|
| Organizations | NexaTech Industries corporate hierarchy (business units, regions, teams) |
| Business Capabilities | 20+ capabilities in a multi-level hierarchy |
| Business Contexts | Processes, value streams, customer journeys, business products |
| Applications | 15+ apps (NexaCore ERP, IoT Platform, Salesforce CRM, etc.) with lifecycle and cost data |
| IT Components | 20+ infrastructure items (databases, servers, SaaS, AI models) |
| Interfaces & Data Objects | API definitions and data flows |
| Platforms | Cloud and IoT platforms |
| Objectives & Initiatives | 6 strategic initiatives with approval statuses |
| Tags | 5 tag groups (Business Value, Technology Stack, Lifecycle Status, Risk Level, Regulatory Scope) |
| Relations | 60+ relations linking cards across all layers |
BPM (via SEED_DEMO or SEED_BPM) | ~30 business processes in a 4-level hierarchy, BPMN 2.0 diagrams, element-to-card links, process assessments |
PPM (via SEED_DEMO or SEED_PPM) | Status reports, WBS hierarchies, tasks, budget/cost lines, and risks for 6 initiatives |
| EA Delivery | Architecture Decision Records and Statements of Architecture Work |
To wipe everything and re-seed from scratch:
RESET_DB=true
SEED_DEMO=true
Then restart: docker compose pull && docker compose up -d. Remove RESET_DB from .env afterward to avoid resetting on every restart.
For active development with hot-reload on both frontend and backend.
cd backend
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -e ".[dev]"
# Set environment variables
export POSTGRES_HOST=localhost
export POSTGRES_DB=turboea
export POSTGRES_USER=turboea
export POSTGRES_PASSWORD=your-db-password
export SECRET_KEY=dev-secret-key
uvicorn app.main:app --reload --port 8000
The API will be available at http://localhost:8000. Swagger docs at http://localhost:8000/api/docs.
cd frontend
npm install
# For local dev, DrawIO is loaded from the public CDN instead of self-hosted
echo 'VITE_DRAWIO_URL=https://embed.diagrams.net' > .env.development
npm run dev
The dev server starts at http://localhost:5173 and proxies /api requests to the backend on port 8000.
# Backend
cd backend
ruff check . # Lint
ruff format . # Auto-format
pytest # Run tests
# Frontend
cd frontend
npm run lint # ESLint
npm run build # TypeScript check + production build
┌───────────────────────────────────────────────────────────┐
│ Browser │
│ React 19 + MUI 6 + React Router 8 + Recharts + AG Grid │
│ Vite dev server (port 5173) / Nginx in production │
└──────────────────────────┬────────────────────────────────┘
│ /api/* (proxy)
┌──────────────────────────▼────────────────────────────────┐
│ FastAPI Backend (Python 3.12, uvicorn, port 8000) │
│ SQLAlchemy 2 (async) + Alembic migrations │
│ JWT auth (HMAC-SHA256, bcrypt passwords) + RBAC │
│ SSE event stream for real-time updates │
│ Fernet field encryption + signed extension loader │
└──────────────────────────┬────────────────────────────────┘
│
┌──────────────────────────▼────────────────────────────────┐
│ PostgreSQL 18 (asyncpg driver) │
└───────────────────────────────────────────────────────────┘
DrawIO is self-hosted inside the frontend Docker image (cloned at build time from jgraph/drawio v31.5.3) and served under /drawio/ by Nginx.
| Variable | Default | Description |
|---|---|---|
POSTGRES_HOST | db | PostgreSQL hostname |
POSTGRES_PORT | 5432 | PostgreSQL port |
POSTGRES_DB | turboea | Database name |
POSTGRES_USER | turboea | Database user |
POSTGRES_PASSWORD | (required) | Database password |
SECRET_KEY | (required) | HMAC key for JWT signing |
ACCESS_TOKEN_EXPIRE_MINUTES | 1440 | JWT token lifetime (24h default) |
HOST_PORT | 8920 | Public HTTP port exposed on the host by the bundled edge nginx. Set 80 for direct HTTPS deployments with redirect support. |
TLS_HOST_PORT | 9443 | Public HTTPS port exposed on the host when direct TLS is enabled. Set 443 for standard HTTPS deployments. |
ALLOWED_ORIGINS | http://localhost:8920 | CORS allowed origins (comma-separated) |
TURBO_EA_TLS_ENABLED | false | Enable direct TLS termination in the bundled edge nginx. Turbo EA does not bundle certbot; you must provide certificate files yourself. |
TLS_CERTS_DIR | ./certs | Host path mounted read-only at /certs inside the nginx container. Point this at your own certbot / letsencrypt output directory if another process manages renewal. |
TURBO_EA_TLS_CERT_FILE | cert.pem | Certificate filename inside TLS_CERTS_DIR |
TURBO_EA_TLS_KEY_FILE | key.pem | Private-key filename inside TLS_CERTS_DIR |
RESET_DB | false | Drop all tables and re-seed on startup |
API Documentation: Swagger UI is available at
/api/docswhen running in development mode (ENVIRONMENT=development).
Alembic migrations run automatically on startup:
RESET_DB=true to drop all tables and re-create from scratch.The bundled PostgreSQL container stores data in the postgres_data Docker volume.
# Backup
docker compose exec db \
pg_dump -U turboea turboea > backup.sql
# Restore
docker compose exec -T db \
psql -U turboea turboea < backup.sql
The bundled edge nginx can terminate TLS directly (TURBO_EA_TLS_ENABLED=true plus certificate files — see Quick Start). On Kubernetes, TLS terminates at the Ingress or cloud load balancer. Otherwise deploy behind a TLS-terminating reverse proxy such as:
Update ALLOWED_ORIGINS to match your domain:
ALLOWED_ORIGINS=https://ea.yourdomain.com
docker compose pull
docker compose up -d
On Kubernetes: helm upgrade turbo-ea oci://ghcr.io/vincentmakes/turbo-ea/charts/turbo-ea --version <new>.
Migrations run automatically on startup, so the database schema is updated as needed.
From 1.0.0 onwards, Turbo EA commits to documented backwards compatibility within the 1.x line — the database schema, REST API surface under /api/v1/, permission keys, and built-in metamodel are stable, with a deprecation cycle for any covered change.
Pin a specific version in production rather than :latest:
TURBO_EA_TAG=1.0.0 docker compose up -d
turbo-ea/
├── backend/
│ ├── app/
│ │ ├── api/v1/ # All API route handlers
│ │ ├── core/ # JWT, password hashing, permissions, calculation engine
│ │ ├── models/ # SQLAlchemy ORM models
│ │ ├── schemas/ # Pydantic request/response models
│ │ ├── services/ # Business logic, seeding, events, notifications, email
│ │ ├── config.py # Settings from env vars
│ │ ├── database.py # Async engine + session factory
│ │ └── main.py # FastAPI app entrypoint
│ ├── alembic/ # Database migrations
│ ├── tests/
│ ├── pyproject.toml
│ └── Dockerfile
│
├── frontend/
│ ├── src/
│ │ ├── api/ # Fetch wrapper with JWT
│ │ ├── hooks/ # Auth, metamodel, SSE, currency, timeline hooks
│ │ ├── components/ # Shared UI components
│ │ ├── features/
│ │ │ ├── admin/ # Metamodel, users & roles, settings, surveys,
│ │ │ │ # EOL, web portals, integrations, card layout,
│ │ │ │ # calculations, tags, extension store, audit log,
│ │ │ │ # resources, platform migration, workspace transfer
│ │ │ ├── auth/ # Login, SSO callback, password setup
│ │ │ ├── bpm/ # BPMN editor, viewer, process navigator,
│ │ │ │ # assessments, element linker, BPM reports
│ │ │ ├── ppm/ # Portfolio dashboard, initiative detail,
│ │ │ │ # task board, risk matrix, cost tracking, WBS
│ │ │ ├── cards/ # Card detail page
│ │ │ ├── dashboard/ # KPI cards + recent activity
│ │ │ ├── diagrams/ # DrawIO editor, shape system, published diagrams
│ │ │ ├── ea-delivery/ # SoAW + ADR editors, DOCX export
│ │ │ ├── grc/ # Risk Register, compliance scanner, governance
│ │ │ ├── inventory/ # AG Grid table + Excel import/export
│ │ │ ├── reports/ # 11 report types + saved reports + LDV renderer
│ │ │ ├── turbolens/ # AI-powered EA intelligence (vendors, duplicates,
│ │ │ │ # modernization, architecture AI)
│ │ │ ├── capability-catalogue/ # Industry capability catalogue browser
│ │ │ ├── process-catalogue/ # Business process reference set
│ │ │ ├── value-stream-catalogue/ # Value stream reference set
│ │ │ ├── principles-catalogue/ # EA principles reference set
│ │ │ ├── reference-catalogue/ # Shared catalogue shell
│ │ │ ├── surveys/ # Survey response page
│ │ │ ├── todos/ # Todos + surveys combined page
│ │ │ └── web-portals/ # Public portal viewer
│ │ ├── lib/ # Extension host (window.TurboEA.sdk), route permissions
│ │ ├── types/ # TypeScript interfaces
│ │ └── App.tsx # Routes + MUI theme
│ ├── drawio-config/ # DrawIO customization
│ ├── nginx.conf # Production reverse proxy config
│ ├── package.json
│ └── Dockerfile # Multi-stage: node build → drawio clone → nginx
│
├── mcp-server/ # MCP server for AI tool integration
│ ├── turbo_ea_mcp/ # Server implementation (FastMCP + OAuth 2.1)
│ ├── tests/
│ ├── pyproject.toml
│ └── Dockerfile
│
├── Dockerfile # Multi-target root build (backend, frontend, mcp-server)
├── docker-compose.yml # Production stack; pulls images from GHCR
├── dev/
│ ├── docker-compose.dev.yml # Dev-only build file for local source builds
│ └── README.md # Explains how dev compose is meant to be used
├── test/
│ ├── docker-compose.test.yml # Test-only Postgres harness used by scripts/test.sh
│ └── README.md # Explains the test compose workflow
├── .env.example # Template for environment variables
└── CLAUDE.md # AI assistant context file
Turbo EA is licensed under the Functional Source License 1.1 with MIT Future License (FSL-1.1-MIT).
What this means in practice:
Versions up to and including v1.66.x remain under the MIT license.
Third-party components incorporated into Turbo EA keep their own licenses — see THIRD-PARTY-NOTICES.md.
If you want to build a commercial offering on Turbo EA, get in touch at vincent at turbo-ea.org — I'm open to partnerships.
| Deliver Turbo EA notifications as Slack direct messages, opt-in per user and per notification type. |
SEED_DEMO | false | Populate demo dataset on first startup |
SEED_BPM | false | Populate demo BPM processes |
SEED_PPM | false | Populate demo PPM data |
ENVIRONMENT | production | Runtime environment (development enables API docs) |
SMTP_HOST | (empty) | SMTP server hostname (optional) |
SMTP_PORT | 587 | SMTP server port |
SMTP_USER | (empty) | SMTP username |
SMTP_PASSWORD | (empty) | SMTP password |
SMTP_FROM | [email protected] | Sender email address |
SMTP_TLS | true | Use TLS for SMTP |
AI_PROVIDER_URL | (empty) | Ollama-compatible LLM provider URL |
AI_MODEL | (empty) | LLM model name (e.g., gemma3:4b) |
AI_SEARCH_PROVIDER | duckduckgo | Web search provider: duckduckgo, google, or searxng |
AI_SEARCH_URL | (empty) | Search provider URL (SearXNG URL or API_KEY:CX for Google) |
AI_AUTO_CONFIGURE | false | Auto-enable AI on startup if provider is reachable |
OLLAMA_MEMORY_LIMIT | 4G | Memory limit for bundled Ollama container |
MCP_PUBLIC_URL | http://localhost:8920/mcp (docker compose; code default http://localhost:8001) | (MCP server) Public URL for OAuth metadata |
TURBO_EA_PUBLIC_URL | http://localhost:8920 | Public-facing Turbo EA URL (also drives bundled nginx hostname/proto) |
NGINX_BACKEND_UPSTREAM | http://backend:8000 | Edge nginx: address of the backend. Override with a fully-qualified Service name on Kubernetes, where nginx's resolver ignores DNS search domains (the Helm chart sets all three) |
NGINX_FRONTEND_UPSTREAM | http://frontend:8080 | Edge nginx: address of the frontend |
NGINX_MCP_UPSTREAM | http://mcp-server:8001 | Edge nginx: address of the MCP server |
NGINX_HTTP_PORT | 8080 | Edge nginx: port its HTTP server listens on. Only a sidecar layout where the frontend image already owns 8080 changes it (the managed-container templates use 8920) |