Decentralized Service Ecosystem Orchestrator β Build interconnected microservices from Markdown using markpact.
Pactown enables you to compose multiple independent markpact projects into a unified, decentralized service ecosystem. Each service is defined in its own README.md, runs in its own sandbox, and communicates with other services through well-defined interfaces.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Pactown Ecosystem β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
β β Web βββββΆβ API βββββΆβ Database β β CLI β β
β β :8002 β β :8001 β β :8003 β β shell β β
β β React β β FastAPI β β Postgres β β Python β β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
β β β β β β
β βΌ βΌ βΌ βΌ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β markpact sandboxes (isolated) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- π Service Composition β Combine multiple markpact READMEs into one ecosystem
- π¦ Local Registry β Store and share markpact artifacts across projects
- π Dependency Resolution β Automatic startup order based on service dependencies
- π₯ Health Checks β Monitor service health with configurable endpoints
- π Multi-Language β Mix Python, Node.js, Go, Rust in one ecosystem
- π Isolated Sandboxes β Each service runs in its own environment
- π Dynamic Ports β Automatic port allocation when preferred ports are busy
- π Service Discovery β Name-based service lookup, no hardcoded URLs
- β‘ Config Generator β Auto-generate config from folder of READMEs
- β‘ Fast Start β Dependency caching for millisecond startup times (docs)
- π‘οΈ Security Policy β Rate limiting, user profiles, anomaly logging (docs)
- π€ User Isolation β Linux user-based sandbox isolation for multi-tenant SaaS (docs)
- π Detailed Logging β Structured logs with error capture (docs)
| Category | Documents |
|---|---|
| Getting Started | Quick Start Β· Installation Β· Commands |
| Core Concepts | Specification Β· Configuration Β· Network |
| Deployment | Deployment Guide Β· Quadlet/VPS Β· Generator |
| Security | Security Policy Β· Quadlet Security Β· User Isolation |
| Performance | Fast Start Β· Logging |
| Comparisons | vs Cloudflare Workers |
| Document | Description |
|---|---|
| Specification | Architecture and design |
| Configuration | YAML config reference |
| Deployment | Production deployment guide (Compose/Kubernetes/Quadlet) |
| Network | Dynamic ports & service discovery |
| Generator | Auto-generate configs |
| Quadlet | Podman Quadlet deployment for VPS production |
| Security | Quadlet security hardening and injection test suite |
| Security Policy | Rate limiting, user profiles, resource monitoring |
| Fast Start | Dependency caching for fast startup |
| User Isolation | Linux user-based sandbox isolation |
| Logging | Structured logging and error capture |
| Cloudflare Workers comparison | When to use Pactown vs Cloudflare Workers |
| Module | Description |
|---|---|
config.py |
Configuration models |
orchestrator.py |
Service lifecycle management |
resolver.py |
Dependency resolution |
network.py |
Port allocation & discovery |
generator.py |
Config file generator |
service_runner.py |
High-level service runner API |
security.py |
Security policy & rate limiting |
fast_start.py |
Dependency caching & fast startup |
user_isolation.py |
Linux user isolation for multi-tenant |
sandbox_manager.py |
Sandbox lifecycle management |
registry/ |
Local artifact registry |
deploy/ |
Deployment backends (Docker, Podman, K8s, Quadlet) |
| Example | What it shows |
|---|---|
examples/saas-platform/ |
Complete SaaS with Web + API + Database + Gateway |
examples/quadlet-vps/ |
VPS setup and Quadlet workflow |
examples/email-llm-responder/ |
Email automation with LLM integration |
examples/api-gateway-webhooks/ |
API gateway / webhook handler |
examples/realtime-notifications/ |
WebSocket + SSE real-time notifications |
examples/microservices/ |
Multi-language microservices |
examples/fast-start-demo/ |
NEW: Fast startup with dependency caching |
examples/security-policy/ |
NEW: Rate limiting and user profiles |
examples/user-isolation/ |
NEW: Multi-tenant user isolation |
pip install pactownOr install from source:
git clone https://github.com/wronai/pactown
cd pactown
make install# saas.pactown.yaml
name: my-saas
version: 0.1.0
services:
api:
readme: services/api/README.md
port: 8001
health_check: /health
web:
readme: services/web/README.md
port: 8002
depends_on:
- name: api
endpoint: http://localhost:8001Each service is a standard markpact README:
# API Service
REST API for the application.
---
```python markpact:deps
fastapi
uvicorn
```
```python markpact:file path=main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/health")
def health():
return {"status": "ok"}
```
```bash markpact:run
uvicorn main:app --port ${MARKPACT_PORT:-8001}
```pactown up saas.pactown.yamlINFO: 127.0.0.1:57432 - "GET /health HTTP/1.1" 200 OK
INFO: 127.0.0.1:59272 - "GET /health HTTP/1.1" 200 OK
127.0.0.1 - - [15/Jan/2026 14:15:17] "GET /health HTTP/1.1" 200 -
INFO: 127.0.0.1:59300 - "GET /health HTTP/1.1" 200 OK
Ecosystem: saas-platform
ββββββββββββ³ββββββββ³βββββββββββββ³βββββββββ³βββββββββββββββ
β Service β Port β Status β PID β Health β
β‘ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
β database β 10000 β π’ Running β 534102 β β 22ms β
β api β 10001 β π’ Running β 534419 β β 23ms β
β web β 10002 β π’ Running β 534424 β β 29ms β
β cli β 10003 β π΄ Stopped β 534734 β Process died β
β gateway β 10004 β π’ Running β 535242 β β 23ms β
ββββββββββββ΄ββββββββ΄βββββββββββββ΄βββββββββ΄βββββββββββββββ
Press Ctrl+C to stop all services
127.0.0.1 - - [15/Jan/2026 14:15:29] "GET / HTTP/1.1" 200 -
INFO: 127.0.0.1:42964 - "GET / HTTP/1.1" 200 OK
INFO: 127.0.0.1:53998 - "GET /health HTTP/1.1" 200 OK
INFO: 127.0.0.1:54008 - "GET /api/stats HTTP/1.1" 200 OK
INFO: 127.0.0.1:36100 - "GET /records/users HTTP/1.1" 200 OK
INFO: 127.0.0.1:54012 - "GET /api/users HTTP/1.1" 200 OK| Command | Description |
|---|---|
pactown up <config> |
Start all services |
pactown down <config> |
Stop all services |
pactown status <config> |
Show service status |
pactown validate <config> |
Validate configuration |
pactown graph <config> |
Show dependency graph |
pactown init |
Initialize new ecosystem |
pactown publish <config> |
Publish to registry |
pactown pull <config> |
Pull dependencies |
Pactown includes a local registry for sharing markpact artifacts:
# Start registry
pactown-registry --port 8800
# Publish artifact
pactown publish saas.pactown.yaml --registry http://localhost:8800
# Pull dependencies
pactown pull saas.pactown.yaml --registry http://localhost:8800| Endpoint | Method | Description |
|---|---|---|
/v1/artifacts |
GET | List artifacts |
/v1/artifacts/{ns}/{name} |
GET | Get artifact info |
/v1/artifacts/{ns}/{name}/{version}/readme |
GET | Get README content |
/v1/publish |
POST | Publish artifact |
name: ecosystem-name # Required: ecosystem name
version: 0.1.0 # Semantic version
description: "" # Optional description
base_port: 8000 # Starting port for auto-assignment
sandbox_root: ./.pactown-sandboxes # Sandbox directory
registry:
url: http://localhost:8800
namespace: default
services:
service-name:
readme: path/to/README.md # Path to markpact README
port: 8001 # Service port
health_check: /health # Health check endpoint
timeout: 60 # Startup timeout (seconds)
replicas: 1 # Number of instances
auto_restart: true # Restart on failure
env: # Environment variables
KEY: value
depends_on: # Dependencies
- name: other-service
endpoint: http://localhost:8000
env_var: OTHER_SERVICE_URLSee the examples/ directory for complete ecosystem examples:
- SaaS Platform β Web + API + Database + CLI
- Microservices β Multiple language services
- Event-Driven β Services with message queues
pactown/
βββ src/pactown/
β βββ __init__.py # Package exports
β βββ cli.py # CLI commands
β βββ config.py # Configuration models
β βββ orchestrator.py # Service orchestration
β βββ resolver.py # Dependency resolution
β βββ sandbox_manager.py # Sandbox management
β βββ registry/
β βββ __init__.py
β βββ server.py # Registry API server
β βββ client.py # Registry client
β βββ models.py # Data models
βββ examples/
β βββ saas-platform/ # Complete SaaS example
β βββ microservices/ # Microservices example
βββ tests/
βββ Makefile
βββ pyproject.toml
βββ README.mdApache License 2.0 β see LICENSE for details.
