Skip to content

Import from .ec files

As your architecture grows, you can split your model across multiple .ec files and import resources between them. This keeps files focused and avoids duplication.

Import resources

Pull any resources from another .ec file by name. No type keywords needed:

import { OrderService } from "./services/orders.ec"
import { OrderCreated, OrderShipped } from "./events/order-events.ec"
import { orderEvents } from "./channels.ec"
visualizer main {
name "Order System"
service OrderService
service ShippingService {
version 1.0.0
receives event OrderCreated from orderEvents
sends event OrderShipped to orderEvents
}
}

Import many resources at once

Group all the resources you need in a single import block:

import {
OrderCreated, OrderShipped, OrderCancelled,
PaymentProcessed, PaymentFailed,
CreateOrder, GetOrderStatus
} from "./messages.ec"
import {
OrderService, PaymentService, InventoryService,
NotificationService
} from "./services.ec"
visualizer main {
name "Order Processing"
service OrderService
service PaymentService
service InventoryService
service NotificationService
}

Organize by domain

A common pattern is one file per domain or bounded context:

import { OrderService, PaymentService, OrderCreated, PaymentProcessed } from "./domains/commerce.ec"
import { ShippingService } from "./domains/logistics.ec"
visualizer main {
name "Full System Overview"
domain Commerce {
version 1.0.0
service OrderService
service PaymentService
}
domain Logistics {
version 1.0.0
service ShippingService
}
}

Mix .ec imports with spec imports

You can import from .ec files and spec files in the same model:

main.ec
import { PaymentService } from "./domains/payments.ec"
import OrderService from "./orders-openapi.yml"
import events { InventoryReserved } from "./inventory-asyncapi.yml"
visualizer main {
name "Checkout Flow"
service OrderService
service PaymentService
service InventoryService {
version 1.0.0
receives event OrderCreated
sends event InventoryReserved
}
}

When to split files

ScenarioApproach
Small system (< 5 services)One main.ec file is fine
Medium system (5-15 services)Split by domain or team
Large system (15+ services)One file per domain, shared events/channels in separate files
Multi-team collaborationEach team owns their .ec files, main file imports from all