Skip to content

Technology by Release

Dendra has refined its technology choices with each major release to better address growing demands around scale, reliability, and developer productivity. The table below shows how the stack has progressed from Release 1 through Release 3:

TechnologyRelease 1Release 2Release 3
Web applications
UI frameworkVue 2Vue 2Vue 3
UI component libraryBootstrapVuetify 2Vuetify 3
Frontend languageJavaScriptJavaScriptTypeScript
Build toolWebpackNuxt 2Vite
API clientREST (Feathers)REST (Feathers)Connect
App deliveryNode.js SSRStatic SPAStatic SPA
Authentication
Identity providerAuth0 or KeycloakAuth0 or Keycloak
Browser sign-in & sessionPassport JWTAuth0 / Keycloak → Passport JWTOIDC, encrypted session cookie
API authorizationPassport JWT (Bearer)Passport JWT (Bearer)JWT (Bearer), API keys
Backend services
Platform runtimeNode.jsNode.js (all backend services)Go
API frameworkFeathers (Express)Feathers (Express)Connect
API styleRESTRESTRPC (over HTTP, gRPC)
API schema / contractJSON SchemaJSON SchemaProtocol Buffers (Buf Schema Registry)
API serviceNode.js processNode.js process (+ in-process threads)Dendra API Server
Additional servicesAggregate, Archive, NOAA NWS APIArchive API, NOAA NWS API, Generic Webhook, GitHub Webhook
Job processing
Job processing frameworkMoleculerDendra custom
Job schedulerMoleculer + BullDendra Job Scheduler
Background processingMoleculer nodesDendra workers
Event message brokerNATSNATS
Data pipeline processing
Worker processingNodes.js processesNodes.js processesDendra workers
Worker typesaggregate, annotation, archive, dpe, importarchive, csi, databot, goes, hobo, load, transformbackend, extract, transform, load
Durable message brokerNATS StreamingNATS StreamingNATS JetStream
Languages & libraries
Primary backend languageJavaScriptJavaScriptGo
Primary frontend languageJavaScriptJavaScriptTypeScript
Expression / transformation languageJavaScript (math.js, JSONata)AssemblyScript (TypeScript-like syntax, compiles to WebAssembly)
Units conversionJavaScript (math.js)The Units library
Ops & migration toolingJavaScript, den CLIPython
Data stores
Metadata databaseMongoDBMongoDBMongoDB (replica set)
Time-series databaseInfluxDBInfluxDB (multiple instances)InfluxDB (multiple instances)
Legacy time-series storeMySQLMySQLPossible with Data Layers
Key-value storeRedisNATS JetStream KV
Object / file storageMinIO / S3-compatibleMinIO / S3-compatible, migrating to Google Cloud Storage
Raw data archiveFile system (JSON files)File system (JSON files)djafs (JSON files)
Search & ancillary
Search engineMeilisearch (planned)
MapsGoogle MapsGoogle Maps
Email deliveryBrevoResend
AnalyticsPlausible, PostHogPlausible, PostHog
Other sites
Public information siteAstro
Documentation siteAstro Starlight
Status pagecstatecstate
Infrastructure & deployment
Container orchestrationDocker ComposeKubernetes (K8s)Kubernetes (k0s)
Kubernetes cluster nameShastaTahoe
Container image registryDocker HubDocker HubDocker Hub
Code repositoryGitHubGitHubGitHub
Service hostingUnder-desk serverACCESS Jetstream1 / 2, OpenStackACCESS Jetstream2, OpenStack
Site hostingUnder-desk serverRenderRender
Image processingCloudinaryDendra custom + libvips
Image & file hostingCloudinaryDendra custom + MinIO / S3-compatible
Offsite backupsbup + Google Cloud Storagebup + Google Cloud Storage
Status monitoringDendra Hummingbird MonitorDendra Hummingbird Monitor
Uptime monitoringUptime Kuma, Uptime RobotUptime Kuma, Uptime Robot
VPN accessWireGuardWireGuard

Our production system is hosted on NSF’s ACCESS Jetstream2 where we manage our own Kubernetes clusters at the Indiana University Jetstream2 supercomputing center.

While Dendra is a SaaS platform (meaning we host the system for you and you don’t need to worry about the infrastructure), the core system and many third-party services can be scaled down to run on a home server for development and testing.