Skip to main content
Version: v2 (preview)

Quick Setup with Presets

Using VeeCode Presets

DevPortal V2 uses presets to configure integrations, identity providers, and bundled plugins at startup. Instead of manually writing app-config.local.yaml, set VEECODE_PRESETS to a comma-separated list of preset names. The container resolver validates required variables, wires the preset's plugins into the dynamic-plugins chain, and merges the preset's config — all before the backend starts.

If any required variable for a selected preset is missing, the boot fails with exit code 78 and logs exactly which variable is needed.

How Presets Work

Each preset is a YAML file in /app/presets/ inside the image. It declares:

  • plugins: which bundled plugins to activate for this preset
  • appConfig: the config fragment to merge into the startup config chain
  • requires.variables: environment variables the preset needs
  • exclusive_group: prevents two identity providers from being selected together

The preset list is composable: VEECODE_PRESETS=recommended,veecode-theme,github,github-auth activates all four presets in order.

Identity exclusivity

Only one preset from the identity group can be active at a time. The valid identity presets are:

github-auth, gitlab, azure-auth, keycloak, ldap

Selecting two of these together fails the boot immediately (exit 78).

Available Presets

PresetPurposeIdentity?
recommendedMarketplace, RBAC, tech-radarNo
veecode-themeVeeCode branding themeNo
githubGitHub SCM + catalog discoveryNo
github-authGitHub OAuth sign-inYes
gitlabGitLab SCM + catalog discovery + OAuth sign-inYes
azureAzure DevOps SCM + catalog discoveryNo
azure-authAzure Entra ID (Microsoft) sign-inYes
keycloakKeycloak OIDC sign-inYes
ldapLDAP authentication + org syncYes
ldap-adLDAP (Active Directory variant) + org sync — override layer, must be composed with ldapNo
mcpMCP actions serverNo
mcp-chatMCP chat providerNo
sonarqubeSonarQube code quality integrationNo
kubernetesKubernetes cluster integrationNo
jenkinsJenkins CI integrationNo
note

recommended is the baseline for production use. It activates the marketplace, RBAC, and tech-radar plugins. Without it, DevPortal boots in minimal mode.


Preset Reference

Activates marketplace, RBAC, and tech-radar. No required variables. Add this to every deployment.

environment:
- VEECODE_PRESETS=recommended

veecode-theme

Applies the VeeCode visual theme. No required variables. Combine with recommended for standard branding.


github

GitHub SCM integration: catalog autodiscovery and GitHub Actions/Issues/PRs.

Required variables:

VariableDescription
GITHUB_PATPersonal access token with repo and read:org scope
GITHUB_ORGGitHub organization name for catalog discovery

Docker Compose example:

services:
devportal:
image: veecode/devportal:2.0.0
ports:
- "7007:7007"
environment:
- VEECODE_PRESETS=recommended,veecode-theme,github
- GITHUB_PAT
- GITHUB_ORG
volumes:
- dp-data:/app/data
- dp-plugins:/app/dynamic-plugins-root

volumes:
dp-data:
dp-plugins:

Use together with github-auth to add OAuth sign-in.


github-auth

GitHub OAuth sign-in (identity provider).

Required variables:

VariableDescription
GITHUB_PATPersonal access token (also used by the github preset)
GITHUB_ORGGitHub organization name
GITHUB_AUTH_CLIENT_IDOAuth App client ID
GITHUB_AUTH_CLIENT_SECRETOAuth App client secret

Docker Compose example (full GitHub setup):

services:
devportal:
image: veecode/devportal:2.0.0
ports:
- "7007:7007"
environment:
- VEECODE_PRESETS=recommended,veecode-theme,github,github-auth
- GITHUB_PAT
- GITHUB_ORG
- GITHUB_AUTH_CLIENT_ID
- GITHUB_AUTH_CLIENT_SECRET
volumes:
- dp-data:/app/data
- dp-plugins:/app/dynamic-plugins-root

volumes:
dp-data:
dp-plugins:

For instructions on creating a GitHub OAuth App, see the GitHub integration guide.


gitlab

GitLab SCM integration + GitLab OAuth sign-in. This single preset covers both catalog discovery and authentication.

Required variables:

VariableDescription
GITLAB_HOSTGitLab hostname — e.g., gitlab.com or gitlab.example.com
GITLAB_AUTH_CLIENT_IDOAuth Application ID
GITLAB_AUTH_CLIENT_SECRETOAuth Application Secret
GITLAB_TOKENPersonal or Group Access Token with read_api scope
GITLAB_GROUPRoot group for org sync and discovery — e.g., my-org

Optional:

VariableDescription
GITLAB_GROUP_PATTERNOptional regex to filter groups during sync. No default — if unset, no group filter is applied.

Docker Compose example:

services:
devportal:
image: veecode/devportal:2.0.0
ports:
- "7007:7007"
environment:
- VEECODE_PRESETS=recommended,veecode-theme,gitlab
- GITLAB_HOST
- GITLAB_AUTH_CLIENT_ID
- GITLAB_AUTH_CLIENT_SECRET
- GITLAB_TOKEN
- GITLAB_GROUP
volumes:
- dp-data:/app/data
- dp-plugins:/app/dynamic-plugins-root

volumes:
dp-data:
dp-plugins:

For instructions on creating a GitLab OAuth Application, see the GitLab integration guide.


azure

Azure DevOps SCM integration: catalog autodiscovery from Azure DevOps repos.

Required variables:

VariableDescription
AZURE_DEVOPS_TOKENAzure DevOps PAT with Code (Read) scope
AZURE_DEVOPS_HOSTAzure DevOps hostname — e.g., dev.azure.com
AZURE_DEVOPS_ORGAzure DevOps organization name
AZURE_DEVOPS_PROJECTDevOps project to scan. Use * to scan all projects in the org.

Combine with azure-auth to add Microsoft Entra ID sign-in.


azure-auth

Azure Entra ID (Microsoft) sign-in (identity provider).

Required variables:

VariableDescription
AZURE_AUTH_TENANT_IDAzure AD tenant ID
AZURE_AUTH_CLIENT_IDApp registration client ID
AZURE_AUTH_CLIENT_SECRETApp registration client secret

Docker Compose example (full Azure setup):

services:
devportal:
image: veecode/devportal:2.0.0
ports:
- "7007:7007"
environment:
- VEECODE_PRESETS=recommended,veecode-theme,azure,azure-auth
- AZURE_DEVOPS_TOKEN
- AZURE_DEVOPS_HOST=dev.azure.com
- AZURE_DEVOPS_ORG
- AZURE_DEVOPS_PROJECT
- AZURE_AUTH_TENANT_ID
- AZURE_AUTH_CLIENT_ID
- AZURE_AUTH_CLIENT_SECRET
volumes:
- dp-data:/app/data
- dp-plugins:/app/dynamic-plugins-root

volumes:
dp-data:
dp-plugins:

For setup instructions, see the Azure integration guide.


keycloak

Keycloak OIDC sign-in and org sync (identity provider).

Required variables:

VariableDescription
KEYCLOAK_BASE_URLFull URL to your Keycloak server — e.g., https://auth.example.com
KEYCLOAK_REALMKeycloak realm name
KEYCLOAK_CLIENT_IDClient ID configured in Keycloak
KEYCLOAK_CLIENT_SECRETClient secret
AUTH_SESSION_SECRETRandom string for session cookie signing

For setup instructions, see the Keycloak integration guide.


ldap

LDAP authentication and org sync for standard LDAP directories (OpenLDAP, FreeIPA, etc.).

Required variables:

VariableDescription
LDAP_URLLDAP server URL — e.g., ldap://ldap.example.com
LDAP_DNBind DN for service account
LDAP_SECRETBind password
LDAP_USERS_BASE_DNBase DN for user search
LDAP_GROUPS_BASE_DNBase DN for group search

For setup instructions, see the LDAP integration guide.


ldap-ad

LDAP authentication tuned for Microsoft Active Directory (and Samba AD). Uses sAMAccountName as the login attribute.

ldap-ad adds no new required variables — it reuses all ldap vars. LDAP_USERS_FILTER and LDAP_GROUPS_FILTER are optional in both presets and default to AD-appropriate filters if unset.

For setup instructions, see the LDAP integration guide.


mcp

MCP (Model Context Protocol) actions server integration. No required variables — see the MCP integration guide for configuration.


mcp-chat

MCP chat provider integration.

Required variables:

VariableDescription
MCP_CHAT_PROVIDERChat provider name — claude or openai
MCP_CHAT_API_KEYAPI key for the chat provider
MCP_CHAT_MODELModel identifier — e.g., claude-sonnet-4-6-latest (check your provider's current model catalogue)

Runtime Variables (any preset)

These variables apply regardless of which presets are selected:

VariableDescriptionDefault
DEVELOPMENTEnable nodemon hot-reload + watch config filesfalse
DEBUG_PORTStart Node.js with --inspect=0.0.0.0:<port>unset
CATALOG_INDEX_REFRESHForce re-download of the marketplace catalog indexfalse
CATALOG_INDEX_IMAGEOCI image for marketplace catalog entitiesquay.io/veecode/plugin-catalog-index:latest
PLUGIN_REGISTRYMirror registry for OCI plugin images (air-gapped deployments)quay.io/veecode
VEECODE_APP_CONFIGBase64-encoded app-config blob, decoded to app-config.saas.yaml (SaaS mode only)unset

Next Steps