Skip to main content

Environment Variables Reference

This page is the canonical environment variable reference for GeoPulse. Every listed variable includes default value, comments, restrictions, and restart guidance.

  • Frontend runtime source: frontend/docker-entrypoint.sh
  • Backend runtime source: backend/src/main/resources/application.properties
  • Deployment source: .env.example, docker-compose*.yml, and Helm templates

Frontend Runtime Vars

VariableDefaultCommentRestrictionsRestart
GEOPULSE_BACKEND_URLhttp://geopulse-backend:8080Backend upstream URL injected into Nginx reverse-proxy config.Reachable HTTP URL from frontend container network.Frontend container restart
CLIENT_MAX_BODY_SIZE200MNginx `client_max_body_size` for uploads.Nginx size format (for example `200M`, `1G`).Frontend container restart
OSM_RESOLVERAuto-detected (\127.0.0.11 8.8.8.8` in Docker)`DNS resolvers used by Nginx for OpenStreetMap tile hosts.Space-separated resolver IPs reachable from container.Frontend container restart

Backend Runtime Vars

Backend runtime currently includes 176 distinct env vars.

Notes:

  • GEOPULSE_AUTH_SIGN_UP_ENABLED is deprecated but still supported for backward compatibility.
  • Runtime env changes require backend restart to take effect.

Core and Database (8)

VariableDefaultCommentRestrictionsRestart
GEOPULSE_CORS_ENABLEDtrueEnables/disables backend CORS handling. Property: quarkus.http.cors.enabled. New .env.example sets this to false for same-origin nginx deployments.true or false.Backend restart
GEOPULSE_CORS_ORIGINS(falls back to GEOPULSE_UI_URL)Comma-separated CORS origins when CORS is enabled. Property: quarkus.http.cors.origins.One URL or comma-separated URLs.Backend restart
GEOPULSE_DATABASE_TRANSACTION_TIMEOUT_MINUTES60Transaction configuration for large imports Property: `quarkus.transaction-manager.default-transaction-timeout`.Non-negative numeric value.Backend restart
GEOPULSE_POSTGRES_PASSWORD(required/no default)PostgreSQL configuration Property: `quarkus.datasource.password`.Sensitive secret. Store in secret manager; do not commit to VCS.Backend restart
GEOPULSE_POSTGRES_URL(required/no default)PostgreSQL configuration Property: `quarkus.datasource.jdbc.url`.Valid PostgreSQL JDBC URL (`jdbc:postgresql://...`).Backend restart
GEOPULSE_POSTGRES_USERNAME(required/no default)PostgreSQL configuration Property: `quarkus.datasource.username`.Required; no default value is provided.Backend restart
GEOPULSE_PUBLIC_BASE_URL(empty)Public base URL used for callback/link generation. Property: geopulse.public-base-url.Valid URL.Backend restart
GEOPULSE_UI_URLhttp://localhost:5555Legacy fallback variable for CORS origins and OIDC callback fallback. Deprecated: use GEOPULSE_CORS_ORIGINS and GEOPULSE_PUBLIC_BASE_URL.One URL or comma-separated URLs.Backend restart

Authentication and Access (18)

VariableDefaultCommentRestrictionsRestart
GEOPULSE_ADMIN_EMAIL(empty)Admin configuration Property: `geopulse.admin.email`.Valid email address.Backend restart
GEOPULSE_AUTH_ADMIN_LOGIN_BYPASS_ENABLEDtrueProperty: `geopulse.auth.admin-login-bypass.enabled`.`true` or `false`.Backend restart
GEOPULSE_AUTH_GUEST_ROOT_REDIRECT_TO_LOGIN_ENABLEDfalseRedirect signed-out users from / to /login instead of rendering Home. Property: `geopulse.auth.guest-root-redirect-to-login.enabled`.`true` or `false`.Backend restart
GEOPULSE_AUTH_LOGIN_ENABLEDtrueProperty: `geopulse.auth.login.enabled`.`true` or `false`.Backend restart
GEOPULSE_AUTH_OIDC_LOGIN_ENABLEDtrueProperty: `geopulse.auth.oidc.login.enabled`.`true` or `false`.Backend restart
GEOPULSE_AUTH_OIDC_REGISTRATION_ENABLEDtrueProperty: `geopulse.auth.oidc.registration.enabled`.`true` or `false`.Backend restart
GEOPULSE_AUTH_PASSWORD_LOGIN_ENABLEDtrueProperty: `geopulse.auth.password-login.enabled`.`true` or `false`.Backend restart
GEOPULSE_AUTH_PASSWORD_REGISTRATION_ENABLEDtrueProperty: `geopulse.auth.password-registration.enabled`.`true` or `false`.Backend restart
GEOPULSE_AUTH_REGISTRATION_ENABLEDtrueProperty: `geopulse.auth.registration.enabled`.`true` or `false`.Backend restart
GEOPULSE_AUTH_SECURE_COOKIESfalseProperty: `geopulse.auth.secure-cookies`.`true` or `false`.Backend restart
GEOPULSE_AUTH_SIGN_UP_ENABLEDtrueDeprecated property, replaced by geopulse.auth.password-registration.enabled Property: `geoupuse.auth.sign-up-enabled`.`true` or `false`.Backend restart
GEOPULSE_COOKIE_DOMAIN(empty)Property: `geopulse.auth.cookie-domain`.Optional; empty value uses fallback behavior.Backend restart
GEOPULSE_INVITATION_BASE_URL(empty)User invitation configuration Base URL for generating invitation links (e.g., https://geopulse.example.com) If empty, frontend will use window.location.origin Property: `geopulse.invitation.base-url`.Valid URL.Backend restart
GEOPULSE_JWT_ACCESS_TOKEN_LIFESPAN1800JWT Property: `smallrye.jwt.new-token.lifespan`.Integer seconds.Backend restart
GEOPULSE_JWT_ISSUERhttp://localhost:8080Property: `smallrye.jwt.new-token.issuer`.String value. Follow subsystem documentation.Backend restart
GEOPULSE_JWT_PRIVATE_KEY_LOCATIONfile:/app/keys/jwt-private-key.pemProperty: `smallrye.jwt.sign.key.location`.Readable path/URI to private key file.Backend restart
GEOPULSE_JWT_PUBLIC_KEY_LOCATIONfile:/app/keys/jwt-public-key.pemProperty: `mp.jwt.verify.publickey.location`.Readable path/URI in container filesystem.Backend restart
GEOPULSE_JWT_REFRESH_TOKEN_LIFESPAN604800JWT Property: `jwt.refresh-token.lifespan`.Integer value.Backend restart

OIDC Core (5)

VariableDefaultCommentRestrictionsRestart
GEOPULSE_OIDC_AUTO_LINK_ACCOUNTSfalseAccount Linking Security When true, automatically links OIDC accounts to existing users with matching emails WARNING: Only enable this if you fully trust your OIDC providers to... Property: `geopulse.oidc.auto-link-accounts`.`true` or `false`.Backend restart
GEOPULSE_OIDC_CALLBACK_BASE_URL(empty)OIDC callback base URL. Fallback order: GEOPULSE_PUBLIC_BASE_URL, then legacy GEOPULSE_UI_URL. Property: geopulse.oidc.callback-base-url.Valid URL.Backend restart
GEOPULSE_OIDC_CLEANUP_ENABLEDtrueOIDC Cleanup Configuration Property: `geopulse.oidc.cleanup.session-states.enabled`.`true` or `false`.Backend restart
GEOPULSE_OIDC_ENABLEDfalseOIDC Configuration Property: `geopulse.oidc.enabled`.`true` or `false`.Backend restart
GEOPULSE_OIDC_JWKS_CACHE_TTL_HOURS24JWKS (signing keys) caching Lower TTL recommended to handle provider key rotation Property: `geopulse.oidc.jwks-cache.ttl-hours`.Non-negative numeric value.Backend restart

AI and Immich (7)

VariableDefaultCommentRestrictionsRestart
GEOPULSE_AI_CHAT_MEMORY_MAX_MESSAGES10AI Feature Configuration Property: `geopulse.ai.chat-memory.max-messages`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_AI_ENCRYPTION_KEY_LOCATIONfile:/app/keys/ai-encryption-key.txtAI Feature Configuration Property: `geopulse.ai.encryption.key.location`.Readable path/URI in container filesystem.Backend restart
GEOPULSE_AI_LOGGING_ENABLEDfalseAI Feature Configuration Property: `geopulse.ai.logging.enabled`.`true` or `false`.Backend restart
GEOPULSE_AI_TOOL_RESULT_MAX_LENGTH12000AI Feature Configuration Property: `geopulse.ai.tool-result.max-length`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_IMMICH_GEONAMES_NORMALIZATION_MAX_DISTANCE_METERS50000Immich search cache Property: `immich.photos.geonames-normalization.max-distance-meters`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_IMMICH_PHOTO_SEARCH_CACHE_MAX_ENTRIES200Immich search cache Property: `immich.photos.search-cache-max-entries`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_IMMICH_PHOTO_SEARCH_CACHE_TTL_SECONDS300Immich search cache Property: `immich.photos.search-cache-ttl-seconds`.Non-negative numeric value.Backend restart

Geocoding and GeoNames (27)

VariableDefaultCommentRestrictionsRestart
GEOPULSE_GEOCODING_DELAY_MS1000Delay between geocoding requests (milliseconds) Property: `geocoding.provider.delay.ms`.Non-negative numeric value.Backend restart
GEOPULSE_GEOCODING_FALLBACK_PROVIDER(empty)Fallback geocoding provider (optional) Property: `geocoding.provider.fallback`.Empty or one of `nominatim`, `photon`, `googlemaps`, `mapbox`.Backend restart
GEOPULSE_GEOCODING_GOOGLE_MAPS_API_KEY(empty)API Keys (can also be set via encrypted storage in admin panel) Property: `geocoding.googlemaps.api-key`.Sensitive secret. Store in secret manager; do not commit to VCS.Backend restart
GEOPULSE_GEOCODING_GOOGLE_MAPS_ENABLEDfalseProperty: `geocoding.provider.googlemaps.enabled`.`true` or `false`.Backend restart
GEOPULSE_GEOCODING_MAPBOX_ACCESS_TOKEN(empty)Property: `geocoding.mapbox.access-token`.Sensitive secret. Store in secret manager; do not commit to VCS.Backend restart
GEOPULSE_GEOCODING_MAPBOX_ENABLEDfalseProperty: `geocoding.provider.mapbox.enabled`.`true` or `false`.Backend restart
GEOPULSE_GEOCODING_NOMINATIM_ENABLEDtrueProvider availability flags Property: `geocoding.provider.nominatim.enabled`.`true` or `false`.Backend restart
GEOPULSE_GEOCODING_NOMINATIM_LANGUAGE(empty)Provider availability flags Nominatim geocoding language preference (BCP 47 format: en-US, de, uk, ja, etc.) If not set, no Accept-Language header will be sent (existing behavior) Property: `geocoding.nominatim.language`.BCP 47 language tag (for example `en-US`) or empty.Backend restart
GEOPULSE_GEOCODING_NOMINATIM_URLhttps://nominatim.openstreetmap.orgProvider availability flags Property: `quarkus.rest-client.nominatim-api.url`.Valid URL.Backend restart
GEOPULSE_GEOCODING_PHOTON_ENABLEDfalseProperty: `geocoding.provider.photon.enabled`.`true` or `false`.Backend restart
GEOPULSE_GEOCODING_PHOTON_LANGUAGE(empty)Photon geocoding language preference (BCP 47 format: en-US, de, uk, ja, etc.) If not set, no Accept-Language header will be sent (existing behavior) Property: `geocoding.photon.language`.BCP 47 language tag (for example `en-US`) or empty.Backend restart
GEOPULSE_GEOCODING_PHOTON_URLhttps://photon.komoot.ioProperty: `quarkus.rest-client.photon-api.url`.Valid URL.Backend restart
GEOPULSE_GEOCODING_PRIMARY_PROVIDERnominatimPrimary geocoding provider (nominatim, photon, googlemaps, mapbox) Property: `geocoding.provider.primary`.One of `nominatim`, `photon`, `googlemaps`, `mapbox`.Backend restart
GEOPULSE_GEONAMES_COUNTRY_IMPORT_BATCH_SIZE200GeoNames country dataset import (ISO2 -> country metadata) Property: `geopulse.geonames.country-import.batch-size`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_GEONAMES_COUNTRY_IMPORT_CONNECT_TIMEOUT_SECONDS20GeoNames country dataset import (ISO2 -> country metadata) Property: `geopulse.geonames.country-import.connect-timeout-seconds`.Non-negative numeric value.Backend restart
GEOPULSE_GEONAMES_COUNTRY_IMPORT_ENABLEDtrueGeoNames country dataset import (ISO2 -> country metadata) Property: `geopulse.geonames.country-import.enabled`.`true` or `false`.Backend restart
GEOPULSE_GEONAMES_COUNTRY_IMPORT_FORCE_REFRESHfalseGeoNames country dataset import (ISO2 -> country metadata) Property: `geopulse.geonames.country-import.force-refresh`.`true` or `false`.Backend restart
GEOPULSE_GEONAMES_COUNTRY_IMPORT_MIN_ROW_THRESHOLD200GeoNames country dataset import (ISO2 -> country metadata) Property: `geopulse.geonames.country-import.min-row-threshold`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_GEONAMES_COUNTRY_IMPORT_READ_TIMEOUT_SECONDS120GeoNames country dataset import (ISO2 -> country metadata) Property: `geopulse.geonames.country-import.read-timeout-seconds`.Non-negative numeric value.Backend restart
GEOPULSE_GEONAMES_COUNTRY_IMPORT_URLhttps://download.geonames.org/export/dump/countryInfo.txtGeoNames country dataset import (ISO2 -> country metadata) Property: `geopulse.geonames.country-import.url`.Valid URL.Backend restart
GEOPULSE_GEONAMES_IMPORT_BATCH_SIZE1000GeoNames cities dataset import (used for city normalization) Property: `geopulse.geonames.import.batch-size`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_GEONAMES_IMPORT_CONNECT_TIMEOUT_SECONDS20GeoNames cities dataset import (used for city normalization) Property: `geopulse.geonames.import.connect-timeout-seconds`.Non-negative numeric value.Backend restart
GEOPULSE_GEONAMES_IMPORT_ENABLEDtrueGeoNames cities dataset import (used for city normalization) Property: `geopulse.geonames.import.enabled`.`true` or `false`.Backend restart
GEOPULSE_GEONAMES_IMPORT_FORCE_REFRESHfalseGeoNames cities dataset import (used for city normalization) Property: `geopulse.geonames.import.force-refresh`.`true` or `false`.Backend restart
GEOPULSE_GEONAMES_IMPORT_MIN_ROW_THRESHOLD100000GeoNames cities dataset import (used for city normalization) Property: `geopulse.geonames.import.min-row-threshold`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_GEONAMES_IMPORT_READ_TIMEOUT_SECONDS300GeoNames cities dataset import (used for city normalization) Property: `geopulse.geonames.import.read-timeout-seconds`.Non-negative numeric value.Backend restart
GEOPULSE_GEONAMES_IMPORT_URLhttps://download.geonames.org/export/dump/cities500.zipGeoNames cities dataset import (used for city normalization) Property: `geopulse.geonames.import.url`.Valid URL.Backend restart

Import (17)

VariableDefaultCommentRestrictionsRestart
GEOPULSE_IMPORT_BULK_INSERT_BATCH_SIZE500Import batch size configuration Property: `geopulse.import.bulk-insert-batch-size`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_IMPORT_CHUNK_SIZE_MB50Chunked upload configuration (for bypassing Cloudflare's 100MB upload limit) Files >80MB are split into chunks on the frontend and reassembled on the backend Property: `geopulse.import.chunk-size-mb`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_IMPORT_CHUNKS_DIR/tmp/geopulse/chunksChunked upload configuration (for bypassing Cloudflare's 100MB upload limit) Files >80MB are split into chunks on the frontend and reassembled on the backend Property: `geopulse.import.chunks-directory`.Readable path/URI in container filesystem.Backend restart
GEOPULSE_IMPORT_DROP_FOLDER_ENABLEDfalseDrop folder import configuration (server-side file pickup) Property: `geopulse.import.drop-folder.enabled`.`true` or `false`.Backend restart
GEOPULSE_IMPORT_DROP_FOLDER_GEOPULSE_MAX_SIZE_MB200Drop folder import configuration (server-side file pickup) Property: `geopulse.import.drop-folder.geopulse-max-size-mb`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_IMPORT_DROP_FOLDER_PATH/data/geopulse-importDrop folder import configuration (server-side file pickup) Property: `geopulse.import.drop-folder.path`.Readable path/URI in container filesystem.Backend restart
GEOPULSE_IMPORT_DROP_FOLDER_POLL_INTERVAL_SECONDS10Drop folder import configuration (server-side file pickup) Property: `geopulse.import.drop-folder.poll-interval-seconds`.Non-negative numeric value.Backend restart
GEOPULSE_IMPORT_DROP_FOLDER_STABLE_AGE_SECONDS10Drop folder import configuration (server-side file pickup) Property: `geopulse.import.drop-folder.stable-age-seconds`.Non-negative numeric value.Backend restart
GEOPULSE_IMPORT_GEOJSON_STREAMING_BATCH_SIZE500GeoJSON streaming parser configuration Batch size for streaming GeoJSON imports - aligns with bulk insert batch size for optimal performance During streaming, batches are flushe... Property: `geopulse.import.geojson.streaming-batch-size`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_IMPORT_GOOGLETIMELINE_STREAMING_BATCH_SIZE500Google Timeline streaming parser configuration Batch size for streaming Google Timeline imports - aligns with bulk insert batch size for optimal performance During streaming, ba... Property: `geopulse.import.googletimeline.streaming-batch-size`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_IMPORT_LARGE_FILE_THRESHOLD_MB100Import temp file configuration (for large file handling) Files larger than this threshold are saved to temp directory instead of loading into memory This prevents OOM errors wit... Property: `geopulse.import.large-file-threshold-mb`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_IMPORT_MAX_FILE_SIZE_GB10Chunked upload configuration (for bypassing Cloudflare's 100MB upload limit) Files >80MB are split into chunks on the frontend and reassembled on the backend Property: `geopulse.import.max-file-size-gb`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_IMPORT_MERGE_BATCH_SIZE250Import batch size configuration Property: `geopulse.import.merge-batch-size`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_IMPORT_TEMP_DIR/tmp/geopulse/importsImport temp file configuration (for large file handling) Files larger than this threshold are saved to temp directory instead of loading into memory This prevents OOM errors wit... Property: `geopulse.import.temp-directory`.Readable path/URI in container filesystem.Backend restart
GEOPULSE_IMPORT_TEMP_FILE_RETENTION_HOURS24Import temp file configuration (for large file handling) Files larger than this threshold are saved to temp directory instead of loading into memory This prevents OOM errors wit... Property: `geopulse.import.temp-file-retention-hours`.Non-negative numeric value.Backend restart
GEOPULSE_IMPORT_UPLOAD_CLEANUP_MINUTES15Chunked upload configuration (for bypassing Cloudflare's 100MB upload limit) Files >80MB are split into chunks on the frontend and reassembled on the backend Property: `geopulse.import.upload-cleanup-minutes`.Non-negative numeric value.Backend restart
GEOPULSE_IMPORT_UPLOAD_TIMEOUT_HOURS2Chunked upload configuration (for bypassing Cloudflare's 100MB upload limit) Files >80MB are split into chunks on the frontend and reassembled on the backend Property: `geopulse.import.upload-timeout-hours`.Non-negative numeric value.Backend restart

Export (8)

VariableDefaultCommentRestrictionsRestart
GEOPULSE_EXPORT_BATCH_SIZE1000Batch sizes for streaming exports Property: `geopulse.export.batch-size`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_EXPORT_CONCURRENT_JOBS_LIMIT3Export configuration Job management settings Property: `geopulse.export.concurrent-jobs-limit`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_EXPORT_JOB_EXPIRY_HOURS24Export configuration Job management settings Property: `geopulse.export.job-expiry-hours`.Non-negative numeric value.Backend restart
GEOPULSE_EXPORT_MAX_JOBS_PER_USER5Export configuration Job management settings Property: `geopulse.export.max-jobs-per-user`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_EXPORT_SCHEDULER_INTERVAL2sExport configuration Job management settings Scheduler interval for processing export jobs (uses Quarkus time expression format) Note: This setting requires application restart... Property: `geopulse.export.scheduler-interval`.Duration format (for example `1s`, `5m`, `1h`).Backend restart
GEOPULSE_EXPORT_TEMP_DIR/tmp/geopulse/exportsExport temp file configuration (for large file handling) Export files are written to temp directory and streamed to clients to prevent OOM Property: `geopulse.export.temp-directory`.Readable path/URI in container filesystem.Backend restart
GEOPULSE_EXPORT_TEMP_FILE_RETENTION_HOURS24Export temp file configuration (for large file handling) Export files are written to temp directory and streamed to clients to prevent OOM Property: `geopulse.export.temp-file-retention-hours`.Non-negative numeric value.Backend restart
GEOPULSE_EXPORT_TRIP_POINT_LIMIT10000Batch sizes for streaming exports Property: `geopulse.export.trip-point-limit`.Numeric value; keep positive unless documented otherwise.Backend restart

Timeline and Trip Intelligence (64)

VariableDefaultCommentRestrictionsRestart
GEOPULSE_TIMELINE_BICYCLE_ENABLEDfalseBicycle (optional - disabled by default) Property: `geopulse.timeline.travel.classification.bicycle.enabled`.`true` or `false`.Backend restart
GEOPULSE_TIMELINE_BICYCLE_MAX_AVG_SPEED25.0Bicycle (optional - disabled by default) Property: `geopulse.timeline.travel.classification.bicycle.max_avg_speed`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_BICYCLE_MAX_MAX_SPEED35.0Bicycle (optional - disabled by default) Property: `geopulse.timeline.travel.classification.bicycle.max_max_speed`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_BICYCLE_MIN_AVG_SPEED8.0Bicycle (optional - disabled by default) Property: `geopulse.timeline.travel.classification.bicycle.min_avg_speed`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_CAR_MIN_AVG_SPEED10.0Car (mandatory) - updated default from 8.0 to 10.0 Property: `geopulse.timeline.travel.classification.car.min_avg_speed`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_CAR_MIN_MAX_SPEED15.0Car (mandatory) - updated default from 8.0 to 10.0 Property: `geopulse.timeline.travel.classification.car.min_max_speed`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_DATA_GAP_MIN_DURATION_SECONDS1800Data Gap Detection Configuration Property: `geopulse.timeline.data_gap.min_duration_seconds`.Non-negative numeric value.Backend restart
GEOPULSE_TIMELINE_DATA_GAP_THRESHOLD_SECONDS10800Data Gap Detection Configuration Property: `geopulse.timeline.data_gap.threshold_seconds`.Non-negative numeric value.Backend restart
GEOPULSE_TIMELINE_FLIGHT_ENABLEDfalseFlight (optional - disabled by default) Property: `geopulse.timeline.travel.classification.flight.enabled`.`true` or `false`.Backend restart
GEOPULSE_TIMELINE_FLIGHT_MIN_AVG_SPEED400.0Flight (optional - disabled by default) Property: `geopulse.timeline.travel.classification.flight.min_avg_speed`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_FLIGHT_MIN_MAX_SPEED500.0Flight (optional - disabled by default) Property: `geopulse.timeline.travel.classification.flight.min_max_speed`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_GAP_STAY_INFERENCE_ENABLEDfalseGap Stay Inference Configuration When enabled, infers a stay instead of creating a data gap when points before/after gap are at same location Property: `geopulse.timeline.gap_stay_inference.enabled`.`true` or `false`.Backend restart
GEOPULSE_TIMELINE_GAP_STAY_INFERENCE_MAX_GAP_HOURS24Gap Stay Inference Configuration When enabled, infers a stay instead of creating a data gap when points before/after gap are at same location Property: `geopulse.timeline.gap_stay_inference.max_gap_hours`.Non-negative numeric value.Backend restart
GEOPULSE_TIMELINE_GAP_TRIP_INFERENCE_ENABLEDfalseGap Trip Inference Configuration When enabled, infers a trip instead of creating a data gap when distance between points exceeds threshold Useful for detecting flights, long-dis... Property: `geopulse.timeline.gap_trip_inference.enabled`.`true` or `false`.Backend restart
GEOPULSE_TIMELINE_GAP_TRIP_INFERENCE_MAX_GAP_HOURS24Gap Trip Inference Configuration When enabled, infers a trip instead of creating a data gap when distance between points exceeds threshold Useful for detecting flights, long-dis... Property: `geopulse.timeline.gap_trip_inference.max_gap_hours`.Non-negative numeric value.Backend restart
GEOPULSE_TIMELINE_GAP_TRIP_INFERENCE_MIN_DISTANCE_METERS100000Gap Trip Inference Configuration When enabled, infers a trip instead of creating a data gap when distance between points exceeds threshold Useful for detecting flights, long-dis... Property: `geopulse.timeline.gap_trip_inference.min_distance_meters`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_GAP_TRIP_INFERENCE_MIN_GAP_HOURS1Gap Trip Inference Configuration When enabled, infers a trip instead of creating a data gap when distance between points exceeds threshold Useful for detecting flights, long-dis... Property: `geopulse.timeline.gap_trip_inference.min_gap_hours`.Non-negative numeric value.Backend restart
GEOPULSE_TIMELINE_JOB_DELAY1mReal-time Timeline Processing Configuration Property: `geopulse.timeline.job.delay`.Duration format (for example `1s`, `5m`, `1h`).Backend restart
GEOPULSE_TIMELINE_JOB_INTERVAL5mReal-time Timeline Processing Configuration Property: `geopulse.timeline.job.interval`.Duration format (for example `1s`, `5m`, `1h`).Backend restart
GEOPULSE_TIMELINE_PATH_SIMPLIFICATION_ADAPTIVEtrueGPS Path Simplification Configuration Property: `geopulse.timeline.path.simplification.adaptive`.`true` or `false`.Backend restart
GEOPULSE_TIMELINE_PATH_SIMPLIFICATION_ENABLEDtrueGPS Path Simplification Configuration Property: `geopulse.timeline.path.simplification.enabled`.`true` or `false`.Backend restart
GEOPULSE_TIMELINE_PATH_SIMPLIFICATION_MAX_POINTS100GPS Path Simplification Configuration Property: `geopulse.timeline.path.simplification.max_points`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_PATH_SIMPLIFICATION_TOLERANCE15.0GPS Path Simplification Configuration Property: `geopulse.timeline.path.simplification.tolerance`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_PROCESSING_THREADS2Real-time Timeline Processing Configuration Property: `geopulse.timeline.processing.thread-pool-size`.Integer value.Backend restart
GEOPULSE_TIMELINE_RUNNING_ENABLEDfalseRunning (optional - disabled by default) Property: `geopulse.timeline.travel.classification.running.enabled`.`true` or `false`.Backend restart
GEOPULSE_TIMELINE_RUNNING_MAX_AVG_SPEED14.0Running (optional - disabled by default) Property: `geopulse.timeline.travel.classification.running.max_avg_speed`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_RUNNING_MAX_MAX_SPEED18.0Running (optional - disabled by default) Property: `geopulse.timeline.travel.classification.running.max_max_speed`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_RUNNING_MIN_AVG_SPEED7.0Running (optional - disabled by default) Property: `geopulse.timeline.travel.classification.running.min_avg_speed`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_SHORT_DISTANCE_KM1.0Car (mandatory) - updated default from 8.0 to 10.0 Property: `geopulse.timeline.travel.classification.short_distance_km`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_STAYPOINT_ACCURACY_THRESHOLD60.0Default timeline configs. They can be overwritten by each user individually or via ENV variables Property: `geopulse.timeline.staypoint.accuracy.threshold`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_STAYPOINT_MERGE_ENABLEDtrueMerge staypoints Property: `geopulse.timeline.staypoint.merge.enabled`.`true` or `false`.Backend restart
GEOPULSE_TIMELINE_STAYPOINT_MERGE_MAX_DISTANCE_METERS400Merge staypoints Property: `geopulse.timeline.staypoint.merge.max_distance_meters`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_STAYPOINT_MERGE_MAX_TIME_GAP_MINUTES15Merge staypoints Property: `geopulse.timeline.staypoint.merge.max_time_gap_minutes`.Non-negative numeric value.Backend restart
GEOPULSE_TIMELINE_STAYPOINT_MIN_ACCURACY_RATIO0.5Default timeline configs. They can be overwritten by each user individually or via ENV variables Property: `geopulse.timeline.staypoint.min_accuracy_ratio`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_STAYPOINT_MIN_DURATION_MINUTES7Default timeline configs. They can be overwritten by each user individually or via ENV variables Property: `geopulse.timeline.staypoint.min_duration_minutes`.Non-negative numeric value.Backend restart
GEOPULSE_TIMELINE_STAYPOINT_RADIUS_METERS50Default timeline configs. They can be overwritten by each user individually or via ENV variables Property: `geopulse.timeline.staypoint.radius_meters`.Integer value.Backend restart
GEOPULSE_TIMELINE_STAYPOINT_USE_VELOCITY_ACCURACYtrueDefault timeline configs. They can be overwritten by each user individually or via ENV variables Property: `geopulse.timeline.staypoint.use_velocity_accuracy`.`true` or `false`.Backend restart
GEOPULSE_TIMELINE_STAYPOINT_VELOCITY_THRESHOLD2.5Default timeline configs. They can be overwritten by each user individually or via ENV variables Property: `geopulse.timeline.staypoint.velocity.threshold`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_TRAIN_ENABLEDfalseTrain (optional - disabled by default) Property: `geopulse.timeline.travel.classification.train.enabled`.`true` or `false`.Backend restart
GEOPULSE_TIMELINE_TRAIN_MAX_AVG_SPEED150.0Train (optional - disabled by default) Property: `geopulse.timeline.travel.classification.train.max_avg_speed`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_TRAIN_MAX_MAX_SPEED180.0Train (optional - disabled by default) Property: `geopulse.timeline.travel.classification.train.max_max_speed`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_TRAIN_MAX_SPEED_VARIANCE15.0Train (optional - disabled by default) Property: `geopulse.timeline.travel.classification.train.max_speed_variance`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_TRAIN_MIN_AVG_SPEED30.0Train (optional - disabled by default) Property: `geopulse.timeline.travel.classification.train.min_avg_speed`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_TRAIN_MIN_MAX_SPEED80.0Train (optional - disabled by default) Property: `geopulse.timeline.travel.classification.train.min_max_speed`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_TRIP_ARRIVAL_MIN_DURATION_SECONDS90Travel Classification Configuration Property: `geopulse.timeline.trip.arrival.min_duration_seconds`.Non-negative numeric value.Backend restart
GEOPULSE_TIMELINE_TRIP_ARRIVAL_MIN_POINTS3Travel Classification Configuration Property: `geopulse.timeline.trip.arrival.min_points`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_TRIP_DETECTION_ALGORITHMsingleTrip Property: `geopulse.timeline.trip.detection.algorithm`.String value. Follow subsystem documentation.Backend restart
GEOPULSE_TIMELINE_TRIP_MOVEMENT_OVERRIDE_MAX_DISTANCE_RATIO1.8Manual trip movement override matching (re-apply overrides after timeline rebuild) Property: `geopulse.timeline.trip.movement_override.matching.max_distance_ratio`.`true` or `false`.Backend restart
GEOPULSE_TIMELINE_TRIP_MOVEMENT_OVERRIDE_MAX_DURATION_RATIO1.8Manual trip movement override matching (re-apply overrides after timeline rebuild) Property: `geopulse.timeline.trip.movement_override.matching.max_duration_ratio`.`true` or `false`.Backend restart
GEOPULSE_TIMELINE_TRIP_MOVEMENT_OVERRIDE_MAX_POINT_DISTANCE_METERS350.0Manual trip movement override matching (re-apply overrides after timeline rebuild) Property: `geopulse.timeline.trip.movement_override.matching.max_point_distance_meters`.`true` or `false`.Backend restart
GEOPULSE_TIMELINE_TRIP_MOVEMENT_OVERRIDE_MAX_TIMESTAMP_DELTA_SECONDS2700Manual trip movement override matching (re-apply overrides after timeline rebuild) Property: `geopulse.timeline.trip.movement_override.matching.max_timestamp_delta_seconds`.`true` or `false`.Backend restart
GEOPULSE_TIMELINE_TRIP_MOVEMENT_OVERRIDE_MIN_DISTANCE_RATIO0.6Manual trip movement override matching (re-apply overrides after timeline rebuild) Property: `geopulse.timeline.trip.movement_override.matching.min_distance_ratio`.`true` or `false`.Backend restart
GEOPULSE_TIMELINE_TRIP_MOVEMENT_OVERRIDE_MIN_DURATION_RATIO0.6Manual trip movement override matching (re-apply overrides after timeline rebuild) Property: `geopulse.timeline.trip.movement_override.matching.min_duration_ratio`.`true` or `false`.Backend restart
GEOPULSE_TIMELINE_TRIP_SUSTAINED_STOP_MIN_DURATION_SECONDS60Travel Classification Configuration Property: `geopulse.timeline.trip.sustained_stop.min_duration_seconds`.Non-negative numeric value.Backend restart
GEOPULSE_TIMELINE_VIEW_ITEM_LIMIT150Timeline View Item Limit - maximum number of items to load on Timeline page For larger datasets, users will be guided to use Timeline Reports Property: `geopulse.timeline.view.item-limit`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_WALKING_MAX_AVG_SPEED6.0Walking (mandatory) Property: `geopulse.timeline.travel.classification.walking.max_avg_speed`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TIMELINE_WALKING_MAX_MAX_SPEED8.0Walking (mandatory) Property: `geopulse.timeline.travel.classification.walking.max_max_speed`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TRIP_SUMMARY_PLACES_PAGE1Trip summary aggregation Property: `geopulse.trip.summary.places.page`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TRIP_SUMMARY_PLACES_PAGE_SIZE10000Trip summary aggregation Property: `geopulse.trip.summary.places.page-size`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TRIP_VISIT_MATCHING_AUTO_APPLY_ON_REGENERATIONtrueTrip visit auto-matching Property: `geopulse.trip.visit-matching.auto-apply-on-timeline-regeneration`.`true` or `false`.Backend restart
GEOPULSE_TRIP_VISIT_MATCHING_AUTO_THRESHOLD0.85Trip visit auto-matching Property: `geopulse.trip.visit-matching.auto-threshold`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TRIP_VISIT_MATCHING_EXACT_NAME_BOOST_DISTANCE_METERS120Trip visit auto-matching Property: `geopulse.trip.visit-matching.exact-name-boost-distance-meters`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TRIP_VISIT_MATCHING_MAX_DISTANCE_METERS400Trip visit auto-matching Property: `geopulse.trip.visit-matching.max-distance-meters`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_TRIP_VISIT_MATCHING_SUGGEST_THRESHOLD0.55Trip visit auto-matching Property: `geopulse.trip.visit-matching.suggest-threshold`.Numeric value; keep positive unless documented otherwise.Backend restart

GPS Filtering and Deduplication (6)

VariableDefaultCommentRestrictionsRestart
GEOPULSE_GPS_DUPLICATE_DETECTION_ENABLEDfalsePer-source duplicate detection defaults (for new sources) Property: `geopulse.gps.duplicate-detection.enabled`.`true` or `false`.Backend restart
GEOPULSE_GPS_DUPLICATE_DETECTION_LOCATION_TIME_THRESHOLD_MINUTES2GPS Point Duplicate Detection Configuration DEPRECATED: This setting is used for fallback when per-source threshold is NULL For new sources, use the per-source settings below in... Property: `geopulse.gps.duplicate-detection.location-time-threshold-minutes`.Non-negative numeric value.Backend restart
GEOPULSE_GPS_DUPLICATE_DETECTION_THRESHOLD_MINUTES2Per-source duplicate detection defaults (for new sources) Property: `geopulse.gps.duplicate-detection.threshold-minutes`.Non-negative numeric value.Backend restart
GEOPULSE_GPS_FILTER_INACCURATE_DATA_ENABLEDfalseGPS Filtering Configuration (per-source defaults) These values are used as defaults when creating new GPS sources Property: `geopulse.gps.filter.inaccurate-data.enabled`.`true` or `false`.Backend restart
GEOPULSE_GPS_MAX_ALLOWED_ACCURACY100GPS Filtering Configuration (per-source defaults) These values are used as defaults when creating new GPS sources Property: `geopulse.gps.max-allowed-accuracy`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_GPS_MAX_ALLOWED_SPEED250GPS Filtering Configuration (per-source defaults) These values are used as defaults when creating new GPS sources Property: `geopulse.gps.max-allowed-speed`.Numeric value; keep positive unless documented otherwise.Backend restart

MQTT (5)

VariableDefaultCommentRestrictionsRestart
GEOPULSE_MQTT_BROKER_HOSTgeopulse-mosquittoMQTT Configuration (optional - only active when GEOPULSE_MQTT_ENABLED true) Property: `geopulse.mqtt.broker.host`.String value. Follow subsystem documentation.Backend restart
GEOPULSE_MQTT_BROKER_PORT1883MQTT Configuration (optional - only active when GEOPULSE_MQTT_ENABLED true) Property: `geopulse.mqtt.broker.port`.Integer in range `1-65535`.Backend restart
GEOPULSE_MQTT_ENABLEDfalseMQTT Configuration (optional - only active when GEOPULSE_MQTT_ENABLED true) Property: `geopulse.mqtt.enabled`.`true` or `false`.Backend restart
GEOPULSE_MQTT_PASSWORDgeopulse_mqtt_pass_123MQTT Configuration (optional - only active when GEOPULSE_MQTT_ENABLED true) Property: `geopulse.mqtt.password`.Sensitive secret. Store in secret manager; do not commit to VCS.Backend restart
GEOPULSE_MQTT_USERNAMEgeopulse_mqtt_adminMQTT Configuration (optional - only active when GEOPULSE_MQTT_ENABLED true) Property: `geopulse.mqtt.username`.String value. Follow subsystem documentation.Backend restart

Notifications / Apprise (8)

VariableDefaultCommentRestrictionsRestart
GEOPULSE_NOTIFICATIONS_APPRISE_ENABLEDfalseEnables/disables external Apprise delivery for geofence alerts. Property: `geopulse.notifications.apprise.enabled`.`true` or `false`.Backend restart
GEOPULSE_NOTIFICATIONS_APPRISE_API_URL(empty)Base URL for Apprise API service. Property: `geopulse.notifications.apprise.api-url`.Valid URL (for example http://apprise-api:8000).Backend restart
GEOPULSE_NOTIFICATIONS_APPRISE_AUTH_TOKEN(empty)Optional API token for Apprise. Property: `geopulse.notifications.apprise.auth-token`.Sensitive secret. Store in secret manager; do not commit to VCS.Backend restart
GEOPULSE_NOTIFICATIONS_APPRISE_TIMEOUT_MS5000HTTP timeout for Apprise requests in milliseconds. Property: `geopulse.notifications.apprise.timeout-ms`.Non-negative numeric value.Backend restart
GEOPULSE_NOTIFICATIONS_APPRISE_VERIFY_TLStrueWhether TLS certificate verification is enabled for Apprise calls. Property: `geopulse.notifications.apprise.verify-tls`.`true` or `false`.Backend restart
GEOPULSE_NOTIFICATIONS_GEOFENCE_EVENTS_CLEANUP_ENABLEDtrueEnables/disables scheduled cleanup of geofence notification events. Property: `geopulse.notifications.geofence-events.cleanup.enabled`.`true` or `false`.Backend restart
GEOPULSE_NOTIFICATIONS_GEOFENCE_EVENTS_CLEANUP_SCHEDULER_CADENCE12hScheduler cadence for cleanup job ticks. Property: `geopulse.notifications.geofence-events.cleanup.scheduler-cadence`.Quarkus duration expression (for example `30m`, `12h`, `1d`).Backend restart
GEOPULSE_NOTIFICATIONS_GEOFENCE_EVENTS_RETENTION_DAYS90Deletes geofence events older than this many days. Property: `geopulse.notifications.geofence-events.retention-days`.Integer >= 1.Backend restart

Prometheus (8)

VariableDefaultCommentRestrictionsRestart
GEOPULSE_PROMETHEUS_ENABLEDfalseCustom Prometheus Metrics Configuration Note: The Prometheus endpoint is always available at build time. Use GEOPULSE_PROMETHEUS_ENABLED to control custom metrics collection at... Property: `geopulse.prometheus.enabled`.`true` or `false`.Backend restart
GEOPULSE_PROMETHEUS_FAVORITES_ENABLEDtruePer-metric-class control (optional - all enabled by default) Property: `geopulse.prometheus.favorites.enabled`.`true` or `false`.Backend restart
GEOPULSE_PROMETHEUS_GEOCODING_ENABLEDtruePer-metric-class control (optional - all enabled by default) Property: `geopulse.prometheus.geocoding.enabled`.`true` or `false`.Backend restart
GEOPULSE_PROMETHEUS_GPS_POINTS_ENABLEDtruePer-metric-class control (optional - all enabled by default) Property: `geopulse.prometheus.gps-points.enabled`.`true` or `false`.Backend restart
GEOPULSE_PROMETHEUS_MEMORY_ENABLEDtruePer-metric-class control (optional - all enabled by default) Property: `geopulse.prometheus.memory.enabled`.`true` or `false`.Backend restart
GEOPULSE_PROMETHEUS_REFRESH_INTERVAL10mCustom Prometheus Metrics Configuration Note: The Prometheus endpoint is always available at build time. Use GEOPULSE_PROMETHEUS_ENABLED to control custom metrics collection at... Property: `geopulse.prometheus.refresh-interval`.Duration format (for example `1s`, `5m`, `1h`).Backend restart
GEOPULSE_PROMETHEUS_TIMELINE_ENABLEDtruePer-metric-class control (optional - all enabled by default) Property: `geopulse.prometheus.timeline.enabled`.`true` or `false`.Backend restart
GEOPULSE_PROMETHEUS_USER_METRICS_ENABLEDtruePer-metric-class control (optional - all enabled by default) Property: `geopulse.prometheus.user-metrics.enabled`.`true` or `false`.Backend restart

Sharing and OwnTracks (2)

VariableDefaultCommentRestrictionsRestart
GEOPULSE_OWNTRACKS_PING_TIMESTAMP_OVERRIDEfalseProperty: `geopulse.owntracks.ping.timestamp.override`.`true` or `false`.Backend restart
GEOPULSE_SHARE_BASE_URL(empty)Sharing Property: `geopulse.share.base-url`.Valid URL.Backend restart

Warmup and Background Jobs (5)

VariableDefaultCommentRestrictionsRestart
GEOPULSE_BADGES_CALCULATION_DELAY5mBadge Calculation Scheduler Configuration Interval for running badge calculations (uses Quarkus time expression format: 1s, 5m, 1h, etc.) Note: This setting requires application... Property: `geopulse.badges.calculation.delay`.Duration format (for example `1s`, `5m`, `1h`).Backend restart
GEOPULSE_BADGES_CALCULATION_INTERVAL30mBadge Calculation Scheduler Configuration Interval for running badge calculations (uses Quarkus time expression format: 1s, 5m, 1h, etc.) Note: This setting requires application... Property: `geopulse.badges.calculation.interval`.Duration format (for example `1s`, `5m`, `1h`).Backend restart
GEOPULSE_WARMUP_ENABLEDtrueWarmup Configuration Enable aggressive warmup on startup (loads real data, then forces GC) Trade-off: Longer startup time (5-8s) for safe first-request handling in 512MB containers Property: `geopulse.warmup.enabled`.`true` or `false`.Backend restart
GEOPULSE_WARMUP_MAX_ITEMS5000Maximum number of items to convert to DTOs during warmup (default: 5000) Prevents memory spikes from users with excessive data (100K+ timeline items) Queries still execute fully... Property: `geopulse.warmup.max-items`.Numeric value; keep positive unless documented otherwise.Backend restart
GEOPULSE_WARMUP_SAMPLE_DAYS30Number of days of timeline data to load during warmup (default: 30) Higher more thorough warmup, but longer startup Lower faster startup, but less comprehensive warmup Set to 0... Property: `geopulse.warmup.sample-days`.Non-negative numeric value.Backend restart

Deployment Vars

These vars are primarily for deployment wiring and image/runtime composition.

Core Deployment and Service Wiring

VariableTypical DefaultCommentRestrictionsRestart
GEOPULSE_VERSION1.22.0Version tag used for backend/frontend image selection in Compose manifests.Must match published image tags.Redeploy backend/postgres services
GEOPULSE_POSTGRES_HOSTgeopulse-postgresPostgres hostname used to build JDBC URL and service wiring.Resolvable host inside deployment network.Redeploy backend/postgres services
GEOPULSE_POSTGRES_PORT5432Postgres TCP port used for service wiring.Integer in range `1-65535`.Redeploy backend/postgres services
GEOPULSE_POSTGRES_DBgeopulsePostgres database name used by app and database container initialization.Valid PostgreSQL database identifier.Redeploy backend/postgres services
GEOPULSE_POSTGRES_USERNAMEgeopulse-userDatabase username used by backend and Postgres initialization.Non-empty PostgreSQL role name.Redeploy backend/postgres services
GEOPULSE_POSTGRES_PASSWORDchange-this-secure-passwordDatabase password used by backend and Postgres initialization.Use strong secret; do not commit real value to VCS.Redeploy backend/postgres services

Predefined OIDC Provider Deployment Vars

VariableTypical DefaultCommentRestrictionsRestart
GEOPULSE_OIDC_PROVIDER_GOOGLE_ENABLEDfalseEnable predefined Google provider in deployment templates.`true` or `false`.Backend redeploy
GEOPULSE_OIDC_PROVIDER_GOOGLE_CLIENT_ID(empty)Google OIDC client ID.Required when Google provider is enabled.Backend redeploy
GEOPULSE_OIDC_PROVIDER_GOOGLE_CLIENT_SECRET(empty)Google OIDC client secret.Sensitive secret.Backend redeploy
GEOPULSE_OIDC_PROVIDER_GOOGLE_DISCOVERY_URLhttps://accounts.google.com/.well-known/openid-configurationGoogle OIDC discovery URL.Must be valid discovery endpoint URL.Backend redeploy
GEOPULSE_OIDC_PROVIDER_GENERIC_ENABLEDfalseEnable predefined generic OIDC provider.`true` or `false`.Backend redeploy
GEOPULSE_OIDC_PROVIDER_GENERIC_NAMECustom OIDCDisplay name for generic provider.Non-empty label when enabled.Backend redeploy
GEOPULSE_OIDC_PROVIDER_GENERIC_CLIENT_ID(empty)Generic OIDC client ID.Required when generic provider is enabled.Backend redeploy
GEOPULSE_OIDC_PROVIDER_GENERIC_CLIENT_SECRET(empty)Generic OIDC client secret.Sensitive secret.Backend redeploy
GEOPULSE_OIDC_PROVIDER_GENERIC_DISCOVERY_URL(empty)Generic OIDC discovery URL.Valid `https://.../.well-known/openid-configuration` URL.Backend redeploy
GEOPULSE_OIDC_PROVIDER_MICROSOFT_ENABLED(from Helm values)Enable predefined Microsoft provider in Helm templates.`true` or `false`.Backend redeploy
GEOPULSE_OIDC_PROVIDER_MICROSOFT_CLIENT_ID(from Helm values)Microsoft OIDC client ID.Required when Microsoft provider is enabled.Backend redeploy
GEOPULSE_OIDC_PROVIDER_MICROSOFT_CLIENT_SECRET(from Helm values)Microsoft OIDC client secret.Sensitive secret.Backend redeploy

PostgreSQL Tuning Vars

These variables are passed to the PostgreSQL container as startup parameters.

VariableStandard DefaultDev DefaultCommentRestrictionsRestart
GEOPULSE_POSTGRES_SHARED_BUFFERS256MB128MBMain PostgreSQL buffer cache size.PostgreSQL memory unit (for example `128MB`, `1GB`).Postgres container restart
GEOPULSE_POSTGRES_WORK_MEM8MB6MBMemory per sort/hash operation per query node.PostgreSQL memory unit.Postgres container restart
GEOPULSE_POSTGRES_MAINTENANCE_WORK_MEM64MB32MBMemory for maintenance operations (vacuum/index build).PostgreSQL memory unit.Postgres container restart
GEOPULSE_POSTGRES_EFFECTIVE_CACHE_SIZE1GB512MBPlanner estimate for available OS cache.PostgreSQL memory unit.Postgres container restart
GEOPULSE_POSTGRES_MAX_WAL_SIZE512MB256MBMaximum WAL size before checkpoints are forced.PostgreSQL memory unit.Postgres container restart
GEOPULSE_POSTGRES_CHECKPOINT_TARGET0.90.9Target fraction of checkpoint interval used for checkpoint completion.Decimal `0.0` to `1.0`.Postgres container restart
GEOPULSE_POSTGRES_WAL_BUFFERS16MB8MBMemory used for WAL buffering.PostgreSQL memory unit.Postgres container restart
GEOPULSE_POSTGRES_RANDOM_PAGE_COST1.11.1Planner random I/O cost estimate (often lower on SSD).Positive decimal.Postgres container restart
GEOPULSE_POSTGRES_IO_CONCURRENCY10050Expected concurrent disk I/O operations.Positive integer.Postgres container restart
GEOPULSE_POSTGRES_AUTOVACUUM_NAPTIME60s60sDelay between autovacuum runs.PostgreSQL duration value.Postgres container restart
GEOPULSE_POSTGRES_VACUUM_SCALE_FACTOR0.20.2Tuple-update fraction threshold before autovacuum.Decimal greater than or equal to `0`.Postgres container restart
GEOPULSE_POSTGRES_LOG_SLOW_QUERIES50001000Minimum duration (ms) before query is logged as slow.Integer milliseconds.Postgres container restart
GEOPULSE_POSTGRES_LOG_STATEMENT(not set)ddlStatement logging level for dev compose profile.One of PostgreSQL accepted values (`none`, `ddl`, `mod`, `all`).Postgres container restart
GEOPULSE_POSTGRES_LOG_CHECKPOINTS(not set)onCheckpoint logging flag for dev profile.`on` or `off`.Postgres container restart
GEOPULSE_POSTGRES_LOG_AUTOVACUUM(not set)0Autovacuum logging threshold in milliseconds for dev profile.Integer milliseconds (or `-1` to disable).Postgres container restart
GEOPULSE_POSTGRES_TRACK_FUNCTIONS(not set)allFunction stats collection level for dev profile.One of `none`, `pl`, `all`.Postgres container restart

Pattern-Based Vars

Dynamic OIDC Provider Pattern

Pattern: GEOPULSE_OIDC_PROVIDER_{PROVIDER}_{PROPERTY}

Pattern PartCommentRestrictions
{PROVIDER}Provider identifier (for example GOOGLE, COMPANY, KEYCLOAK).Uppercase letters, numbers, underscore recommended. Converted to lowercase internally.
{PROPERTY}=ENABLEDProvider activation flag.Must be true to activate provider.
{PROPERTY}=CLIENT_IDOIDC client ID.Required when provider is enabled.
{PROPERTY}=CLIENT_SECRETOIDC client secret.Required when provider is enabled; treat as secret.
{PROPERTY}=DISCOVERY_URLOIDC discovery endpoint.Required when provider is enabled; valid discovery URL expected.
{PROPERTY}=NAMELogin button display name.Optional string.
{PROPERTY}=ICONIcon class or URL for provider branding.Optional string/URL.
{PROPERTY}=SCOPESOAuth scopes requested during auth.Optional, defaults to openid profile email.