FractalX reads your Spring Boot source tree, finds module boundaries from annotations, and generates a fully operational microservice platform — with gRPC communication, observability, service discovery, and Docker deployment included.
FractalX is a build-time tool. It reads source files, never runs them. No agent, no bytecode manipulation, no framework lock-in.
@DecomposableModule per bounded context. Declare cross-module dependencies as fields — or let FractalX detect them from imports automatically.docker-compose.yml is generated alongside each service. Start everything with one command — services, gateway, registry, admin, and Jaeger all included.The FractalX CLI generates a Spring Boot modular monolith — pre-annotated and ready to decompose — from an interactive wizard or a fractalx.yaml spec. No browser required.
fractalx binary via Homebrew. Updates automatically with brew upgrade./usr/local/bin.fractalx to launch the wizard ·
Full CLI docs →
Your domain code stays untouched. FractalX generates all inter-service wiring, resilience, and observability code alongside your business logic.
// One annotation per module. That is it.
@DecomposableModule(
serviceName = "order-service",
port = 8081,
ownedSchemas = {"orders"}
)
public class OrderModule {
private PaymentService paymentService;
}
// Saga orchestration from one annotation
@DistributedSaga(
sagaId = "checkout",
compensation = "cancelCheckout"
)
public void processCheckout(Long orderId) {
paymentService.charge(orderId);
inventoryService.reserve(orderId);
}
// Mark methods explicitly if needed
@ServiceBoundary
public boolean isConfirmed(Long id) {
return repo.existsById(id);
}// order-service/PaymentServiceClient.java
@NetScopeClient(
server = "payment-service",
beanName = "paymentService"
)
public interface PaymentServiceClient {
boolean charge(Long orderId);
}
// order-service/OtelConfig.java
public class OtelConfig {
// OTLP/gRPC -> Jaeger, W3C traceparent
// BatchSpanProcessor, auto service.name
}
// fractalx-saga-orchestrator/
// CheckoutSagaService.java
// SagaInstance.java (JPA entity)
// POST /saga/checkout/start
// GET /saga/status/{correlationId}
// payment-service/OrderService.java
@NetworkPublic // added automatically
public boolean isConfirmed(Long id) {
return repo.existsById(id);
}Every non-functional requirement is generated automatically. No boilerplate to write, no configuration to copy-paste.
@NetScopeClient interfaces replace Feign. Strongly typed, resilience-wrapped, with dynamic host resolution from the registry. gRPC port = HTTP + 10,000.For a monolith with N annotated modules, FractalX generates N independent Spring Boot services plus four shared infrastructure services.
A manual migration involves weeks of repetitive scaffolding. FractalX generates it all correctly and consistently in under two seconds.
| Concern | Manual migration | With FractalX |
|---|---|---|
| Service scaffolding | Days per service — pom.xml, main class, config profiles | Generated in milliseconds per service |
| Inter-service communication | Write Feign clients or gRPC stubs manually | @NetScopeClient interfaces auto-generated |
| Distributed tracing | Add OTel dependency + configure each service | OtelConfig.java generated per service |
| Circuit breaking & retry | Configure Resilience4j per service per dependency | Auto-generated per cross-module call |
| Service discovery | Set up Eureka or Consul, configure all clients | fractalx-registry generated + all registration code |
| Database isolation | Split schemas, rewire JPA, handle FK integrity | DataIsolationGenerator + ReferenceValidator |
| Saga orchestration | Design and build orchestrator service from scratch | Full service from @DistributedSaga annotation |
| Container deployment | Write Dockerfiles, docker-compose, env vars | Multi-stage Dockerfiles + compose generated |
| Admin & observability | Build dashboards, alert rules, topology views | 14-section dashboard auto-generated |
FractalX is opinionated where it saves you time and stays out of the way everywhere else.
@DecomposableModule per module is the entire developer contract. Cross-module dependencies are detected automatically from imports and field types.mvn fractalx:decompose replaces the output directory cleanly. Iterate on module boundaries without side effects.ServiceFileGenerator interface and register it in the pipeline. Each step receives a full GenerationContext with no coupling to existing steps.FractalX was evaluated against three purpose-built Spring Boot systems ranging from 4 to 9 modules, demonstrating consistent decomposition correctness and sub-second generation across all scales.
Add two XML blocks to your pom.xml, annotate your module boundaries, and run one command. The entire platform is waiting in fractalx-output/.