Skip to content

Tech Stack & Architecture Choices

ArchForge 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.1.0Spring Framework 7, Jakarta EE, Observation API, ProblemDetail (RFC 9457)
Gradle9.5.1Configuration cache, Kotlin DSL, java-platform for BOM

Database & Storage

TechnologyVersionWhy
PostgreSQL17GENERATED ALWAYS AS IDENTITY, advanced JSON, row-level security
Flyway12.4.0Version-controlled schema migration, PostgreSQL dialect module
Redis7Session cache, rate limiting, distributed locks
Dynamic Datasource4.5.0Master/slave routing, @DS annotation, group proxy for JPA
AWS S3 SDK2.xFile storage abstraction (works with RustFS in dev)

ORM & Query

TechnologyVersionWhy
Spring Data JPA4.xRepository abstraction, Specification for dynamic queries
Hibernate Static Metamodel7.xCompile-time type-safe field references (Entity_ classes)
SafeExpr / AliasExpr--Type-safe JPQL expression builder using SingularAttribute
JPA Criteria API3.2Type-safe query construction with metamodel, no raw JPQL strings
QueryHelp--Annotation-driven dynamic predicate builder for list/search endpoints

Web & API

TechnologyVersionWhy
Sa-Token1.45.0Dual STP types: StpAdminUtil (admin) and StpWebUtil (web). Not JWT / Spring Security
SpringDoc OpenAPI3.0.xAuto-generated Swagger UI, schema validation
Jackson(Boot managed)JSON serialization, custom converters, sensitive data masking
MapStruct1.6Compile-time type-safe DTO mapping, zero reflection

Observability

TechnologyVersionWhy
Micrometer(Boot managed)Unified metrics API, Observation for metrics+tracing+logging
OpenTelemetry1.62.0Distributed tracing, OTLP export
Log4j2(Boot managed)Async logging, structured output, Spring profile support
Spring Actuator4.1Health 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.18.46Reduce 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
Dev port8848--Proxies to admin API :8080

Frontend (C-end)

CategoryTechnologyVersionPurpose
FrameworkNext.js16.xReact framework with App Router
UIReact19.xComponent library
LanguageTypeScript5.8.xType-safe JavaScript
StylingTailwind CSS4.xUtility-first CSS
Componentsshadcn/ui + lucide-react--Headless UI primitives and icons
i18nnext-intl--English / Chinese localization
AuthSa-Token (StpWebUtil)1.45.0C-end token-based authentication
Markdownreact-markdown + remark-gfm + rehype-highlight--Article content rendering
E2E TestsPlaywright--End-to-end testing
BuildTurborepo + pnpm workspaces--Monorepo orchestration
Dev port3000--Talks to web API :8081

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
./archforgeDeveloper CLI for init / infra / db / up

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.