Skip to content

Extract Microservices. Service by Service.

You know which domains need to come out, but the first cut is missing. Jardis generates the target architecture and API contracts for each service before you migrate a single line.

The monolith is analyzed. Now what?

Most extractions don't fail at analysis, they fail at execution. Between 'we know which services we need' and 'the first service is running' lie months.

No defined target state per service

The domain analysis is on the whiteboard. But which entities belong in which service? What does the internal architecture look like? Without a target structure, every team builds their service differently.

Communication between old and new is undefined

The extracted service needs data from the monolith. But how? Synchronous REST calls, events, shared database? Without defined contracts, the interface becomes the bottleneck.

Weeks of boilerplate per service

Every extracted service needs entities, repositories, command handlers, query handlers, event publishing, API endpoints. Setting this up manually takes weeks. For ten services, that is months of pure infrastructure work.

How Jardis Microservices Extraction Works in Practice.

Three steps: define the domain, start the builder, migrate business logic. For each service individually.

STEP 1: DEFINE

Set schema and aggregates per service

You define the database schema and aggregate structure for the service to be extracted. The builder imports your existing schema as a starting point. You decide which tables and entities move into the new service.

STEP 2: GENERATE

Target architecture and API contracts from the builder

Jardis generates the complete target structure: 3-layer entities, CQRS with commands and queries, domain events, the repository pipeline, and API contracts in OpenAPI and gRPC. The contract defines exactly how monolith and new service communicate.

STEP 3: MIGRATE

Move business logic into the generated structure

The infrastructure is in place. Your team moves domain logic from the monolith into the generated commands, queries, and event handlers. The monolith calls the new service through the generated contract. Next service: back to step 1.

See what three files turn into.

Three definition files in, a complete bounded context out. Browse the generated code.

E-Commerce / Sales
schema.yaml
# Database Schema — Sales Bounded Context
# This file defines the persistent storage structure.

schema:
  domain: ECommerce
  boundedContext: Sales

tables:
  order:
    columns:
      id:
        type: integer
        primary: true
        autoIncrement: true
      public_id:
        type: uuid7
        unique: true
      customer_email:
        type: string
        length: 255
      status:
        type: string
        length: 32
        default: "draft"
      total_amount:
        type: integer
      currency:
        type: string
        length: 3
        default: "EUR"
      created_at:
        type: datetime
      updated_at:
        type: datetime
        nullable: true

  order_item:
    columns:
      id:
        type: integer
        primary: true
        autoIncrement: true
      order_id:
        type: integer
        foreignKey:
          table: order
          column: id
          onDelete: cascade
      product_name:
        type: string
        length: 255
      sku:
        type: string
        length: 64
      quantity:
        type: integer
      unit_price:
        type: integer
      line_total:
        type: integer
Files
Definitions (Input)
Generated Code (Output)
PER SERVICE
80%
Service infrastructure generatedEntities, commands, queries, events, API contracts (OpenAPI + gRPC), and the repository pipeline. Per service, in minutes.
3x
faster service extraction
0
undocumented service interfaces
API CONTRACTS
100%
Contract coverageEvery extracted service has complete OpenAPI and gRPC contracts. Communication is defined before the service goes live.

Why Teams Extract Services with Jardis.

Because infrastructure should not be the hard part.

> Defined Target Architecture

Every Service Has the Same Structure

Hexagonal architecture with CQRS, domain events, and repository pipeline. Generated, not interpreted. The third extracted service looks exactly like the first.

> Repeatable Process

Same Workflow for Every Service

Define the schema, start the builder, migrate business logic. The process is identical for order, payment, shipping, or any other domain. No service is a special case.

> Contracts First

API Interface Defined Before the Code

OpenAPI and gRPC contracts are generated together with the service. Frontend, monolith, and other services know exactly how to call the new service. No surprises at go-live.

Ready to extract the first service from your monolith?

Join the Waitlist

Structure costs less than chaos.

Free Trial

Try Jardis 7 Days Free

Point Jardis at your real domain. Discovery, structure, and your first platform build.

Join Waitlist
20 Discovery Runs
5 Structure Builds
1 Platform Build
All Jardis packages as open source
Jardis Base
€29per month

The complete DDD architecture with all classes and contracts. Your team ships features, not infrastructure.

Join Waitlist
Unlimited Discovery Runs
Unlimited Structure Builds
All 26 Jardis packages included
PHPStan Level 8 from day one
Jardis Pro
€180per month

The complete business logic with handlers, validation, and pipelines. What used to be a sprint is now a build.

Join Waitlist
Everything from Jardis Base
Commands, queries, and events fully implemented
Platform code in seconds instead of weeks
Additional Runs for €89 each
Enterprise

More than 20 Platform Builds per month?

Let's talk

Be there when Jardis launches.

Sign up. You'll get access as soon as we go live. Including a free trial.

100+ developers are already waiting for launch

Curious how Jardis works?

Discover Jardis

Frequently Asked Questions

Answers about microservices extraction with Jardis.

The one with the clearest domain boundaries and the highest pain potential. Jardis helps with the target structure, not the domain analysis. Start with a bounded context that has few incoming dependencies, for example notifications or billing.