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.