Decentralized Service Ecosystem Orchestrator - Build interconnected microservices from Markdown using markpact
Project description
Pactown ๐๏ธ
Decentralized Service Ecosystem Orchestrator โ Build interconnected microservices from Markdown using markpact.
Overview
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) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Key Features
Core Features
- ๐ 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
New in v0.4.0
- โก 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)
๐ Documentation
Quick Navigation
| 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 |
All Documentation
| 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 |
Source Code Reference
| 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) |
๐ฏ Examples
| 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 |
Installation
pip install pactown
Or install from source:
git clone https://github.com/wronai/pactown
cd pactown
make install
Quick Start
1. Create ecosystem configuration
# 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:8001
2. Create service READMEs
Each 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}
```
3. Start the ecosystem
pactown up saas.pactown.yaml
INFO: 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
Commands
| 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 |
Registry
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
Registry API
| 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 |
Configuration Reference
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_URL
Examples
See the examples/ directory for complete ecosystem examples:
- SaaS Platform โ Web + API + Database + CLI
- Microservices โ Multiple language services
- Event-Driven โ Services with message queues
Architecture
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.md
License
Apache License 2.0 โ see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pactown-0.1.31.tar.gz.
File metadata
- Download URL: pactown-0.1.31.tar.gz
- Upload date:
- Size: 220.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19043919e6a434193d0735afa55fadb6d81deb0ab53b9fdb0e84c3741ca652e9
|
|
| MD5 |
37f167af4e7f61a76c03c28e52d487d1
|
|
| BLAKE2b-256 |
fa5bbde083ea3c245e366841c4b6367b153e5d66224d380bcd32f72e20f86ee4
|
File details
Details for the file pactown-0.1.31-py3-none-any.whl.
File metadata
- Download URL: pactown-0.1.31-py3-none-any.whl
- Upload date:
- Size: 108.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da60ec123e0f36932ffb67040cba1bdd5f865198bf2913a8b7cc86ec42253e7f
|
|
| MD5 |
3edb49f49e9abd50d7f8c09f6dcb645d
|
|
| BLAKE2b-256 |
3b19b0822ed0aeab5e8dcc1c393e550fb4d85c68df78f9fc4c08a82ba24b4bb9
|