Skip to main content

Decentralized Service Ecosystem Orchestrator - Build interconnected microservices from Markdown using markpact

Project description

img.png

Pactown ๐Ÿ˜๏ธ

Decentralized Service Ecosystem Orchestrator โ€“ Build interconnected microservices from Markdown using markpact.

Python 3.10+ License

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 using JSON-based storage (no database required):

# 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

Storage Architecture

The registry uses file-based JSON storage instead of a database:

  • Location: .pactown-registry/index.json in your project directory
  • Format: Single JSON file containing all artifacts and versions
  • Content: Full README content, metadata, checksums, and version history
  • Benefits: No database setup, portable, version-controllable

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

pactown-0.1.141.tar.gz (329.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pactown-0.1.141-py3-none-any.whl (164.6 kB view details)

Uploaded Python 3

File details

Details for the file pactown-0.1.141.tar.gz.

File metadata

  • Download URL: pactown-0.1.141.tar.gz
  • Upload date:
  • Size: 329.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for pactown-0.1.141.tar.gz
Algorithm Hash digest
SHA256 a3e9da10d0c0691ea8949a77e1cbdbffda3de0754c09bcfa722a54e83d491f1d
MD5 99c3123375b5fb44c3df403ede173788
BLAKE2b-256 a26a81379880c1e0f0387a2f4d783fbb4b62ce69d26084d7701eec79d7bb11aa

See more details on using hashes here.

File details

Details for the file pactown-0.1.141-py3-none-any.whl.

File metadata

  • Download URL: pactown-0.1.141-py3-none-any.whl
  • Upload date:
  • Size: 164.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for pactown-0.1.141-py3-none-any.whl
Algorithm Hash digest
SHA256 a29daf7d91f00e42033e7050ce2518d9bcb63df0fa6b215483b6e7bf665e5335
MD5 54b77f0862564db4c86a45c8851170b4
BLAKE2b-256 6651daddc180edc3df330bfd675e515daeff2ff3f75f04155e2e96e2f75327df

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page