Skip to content

Tech Stack & Architecture Choices

ArchSmith adopts modern technologies with clear rationale for each choice.

Runtime

TechnologyVersionWhy
JDK25 (Azul Zulu)ScopedValue, Structured Concurrency, Pattern Matching, Stream Gatherers, Virtual Threads
Spring Boot4.0.5Spring Framework 7, Jakarta EE, Observation API, ProblemDetail (RFC 9457)
Gradle9.4.1Configuration cache, Kotlin DSL, java-platform for BOM

Database & Storage

TechnologyVersionWhy
PostgreSQL17GENERATED ALWAYS AS IDENTITY, advanced JSON, row-level security
Flyway11.14Version-controlled schema migration, repeatable and undo support
Redis7Session cache, rate limiting, distributed locks
Dynamic Datasource4.5.0Master/slave routing, @DS annotation, group proxy for JPA
AWS S3 SDK2.31File storage abstraction (works with RustFS in dev)

Web & API

TechnologyVersionWhy
Spring Security7.xSecurityFilterChain, JWT authentication, RBAC
SpringDoc OpenAPI2.8Auto-generated Swagger UI, schema validation
Jackson2.21JSON serialization, custom converters, sensitive data masking
MapStruct1.6Compile-time type-safe DTO mapping, zero reflection

Observability

TechnologyVersionWhy
Micrometer1.16Unified metrics API, Observation for metrics+tracing+logging
OpenTelemetry1.55Distributed tracing, OTLP export
Log4j2(Boot managed)Async logging, structured output, Spring profile support
Spring Actuator4.0Health checks, Prometheus metrics endpoint

Code Quality

TechnologyVersionWhy
Spotless8.4Google Java Style (AOSP) enforcement on build
google-java-format1.35Consistent formatting across team
JSpecify1.0Standard null safety annotations (@NullMarked, @Nullable)
Lombok1.18Reduce boilerplate (@Data, @Builder, @RequiredArgsConstructor)

Testing

TechnologyVersionWhy
JUnit6.0 (Jupiter)Modern assertions, parameterized tests
Spock2.4 (Groovy 5)BDD-style specs, data-driven testing, mocking
Testcontainers2.0Auto-provisioned PostgreSQL, Redis, RustFS in dev/test
RestClient(Spring)Integration tests against running application

Frontend

CategoryTechnologyVersionPurpose
FrameworkVue3.5Reactive UI framework
BuildVite8Next-gen frontend build tool
LanguageTypeScript6Type-safe JavaScript
UI LibraryElement Plus2.13Enterprise UI components
StatePinia3Vue 3 state management
RouterVue Router5SPA routing
CSSTailwindCSS4Utility-first CSS framework
HTTPAxios--HTTP client with interceptors
i18nvue-i18n--Internationalization
Base Templatevue-pure-admin--Enterprise admin template

Deployment

TechnologyWhy
Docker + jlinkMinimal JRE (~60MB vs ~300MB full JDK)
Project Leyden CDSAOT cache for faster startup
Liberica NIK 25Native Image option for instant startup
NginxReverse proxy, static file serving, SSL termination

JDK 25 Features Used

FeatureWhereBenefit
ScopedValueScopedValueContextReplace ThreadLocal, virtual-thread safe, auto-cleanup
Structured ConcurrencyServerMonitorServiceParallel system info collection, bounded lifecycle
Pattern Matching switchJsonUtil, ErrorHandler, ResultValueWrapperCleaner type dispatch, exhaustive checks
Stream GatherersCollectionUtils.partition()Built-in windowing, no external deps
Virtual Threadsapplication.yamlScalable concurrency for I/O-bound work
JSpecify Null SafetyPackage-level @NullMarkedCompile-time null checking

Released under the MIT License.