Skip to content

Hexagonal Architecture. By Default, Not by Accident.

Implementing Ports & Adapters correctly takes weeks and deep architecture expertise. Jardis generates the complete hexagonal structure for every Bounded Context automatically: no deviations, no debates about folder structures.

Everyone wants hexagonal architecture. Almost nobody implements it correctly.

The pattern has been around for 20 years. Most teams still struggle with consistent implementation.

Theory is clear, practice is not

Everyone on the team understands Ports & Adapters conceptually. But where exactly is the boundary between Application Service and Domain Service? When does a port need its own interface? Answers vary per developer.

Layer boundaries erode over time

Sprint 1: clean separation. Sprint 10: an adapter reaches directly into domain logic because it was faster. Sprint 20: the architecture only exists in the wiki, not in the code.

Onboarding becomes an architecture seminar

New developers have to learn internal conventions before they can be productive. Every team interprets hexagonal architecture differently. Knowledge about architecture decisions lives in people's heads, not in the code. Ramp-up time eats weeks.

How Jardis Solves Hexagonal Architecture.

Not a guideline in Confluence. A physical structure in the code.

PORTS & ADAPTERS

Every Bounded Context follows the same structure

Jardis generates the complete hexagonal PHP architecture for every Bounded Context: ports as interfaces, adapters as implementations, application services as orchestrators, plus CQRS with separate commands and queries. The structure is identical whether it is the first or the twentieth context.

DOMAIN ISOLATION

The domain layer stays free of infrastructure

Entities, value objects, and domain events live in their own layer with no outward dependencies. The builder ensures no infrastructure imports leak into the domain. Not through code reviews, but through the structure itself.

CONSISTENCY

One architecture for the entire system

Whether three or thirty Bounded Contexts: each follows the same hexagonal pattern. New team members understand one context and understand all of them. No special cases, no historically grown deviations, no team-specific interpretations of the architecture.

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)
ARCHITECTURE
100%
Hexagonal-compliantEvery generated Bounded Context follows hexagonal architecture. Ports, adapters, domain layer: correctly separated, no exceptions.
0
layer violations
3x
faster onboarding of new devs
BUILDER OUTPUT
80%
Infrastructure code generatedPorts, adapters, application services, repository interfaces, and event definitions. Your team writes only the business logic.

Why Teams Choose Jardis for Hexagonal Architecture.

Because architecture should not depend on the experience level of individual developers.

> Structural Consistency

Same Architecture in Every Bounded Context

No Bounded Context is a special case. The hexagonal structure is identical, from folder layout to dependency rules. Know one context, know them all.

> Speed

New Contexts in Minutes Instead of Weeks

Define the schema, start the builder. The entire hexagonal architecture is ready instantly. No manual folder structures, no copy-paste errors, no architecture reviews for repetitive structural code.

> Longevity

Architecture That Does Not Erode

Generated structures do not drift. Every new Bounded Context is as clean as the first. The architecture stays maintainable, even after two years and twenty contexts.

Hexagonal architecture as the standard, not the ideal?

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 hexagonal architecture with Jardis.

Jardis generates the hexagonal PHP layering per Bounded Context: ports as interfaces, adapters as implementations, application services as orchestrators. The domain layer stays free of infrastructure imports. Plus the entity hierarchy with Domain Entity, Aggregate Entity, and BoundedContext Layer. Your team only writes the business logic in the domain.