Skip to main content

No project description provided

Project description

Modulith

Build once. Use everywhere. Scale effortlessly.

Modulith is a framework for building systems as composable, shareable modules.

Start simple.
Structure as modules.
Scale by distributing them, without rewriting your code.

🚀 What You Get

  • 🧱 Scalable by design — move from local → distributed seamlessly
  • 🔗 Composable architecture — build systems by combining modules
  • 🌐 Shareable modules — publish and reuse across projects
  • 🔌 Unified interface — local and remote calls look identical
  • 🔐 Built-in access control — safely expose your modules

📦 Install

pip install modulith

🚀 Quick Start

Build and run locally. Fast, no latency, easy to debug.

# calculator/module.py
from modulith import Modulith

module = Modulith("calculator")

@module.capability("add")
def add(a: float, b: float) -> float:
    return a + b

result = module("add", kwargs={"a": 1, "b": 2})
# → 3

🌐 Use Anywhere

Serve your module on any machine and use it from anywhere.

# Serve the module with public access and rate limits
modulith run \
--module-source calculator.module \ 
--public \                  # Accessible by anyone
--rate-limit 100 \          # 100 requests per minute (public users)
--burst-limit 20            # Allow short bursts up to 20 requests
🔑 Your authentication token: ...

🌐 Module 'calculator' is live:
- Repository: user3bef3/calculator
- Public URL: https://6ebm5g.instatunnel.my
- Local URL: http://localhost:8000

⚙️ Capabilities:
- add(a: float, b: float) → float

⚡ Public access limits:
- Rate limit: 100 requests/minute
- Burst limit: 20 requests

🛑 Press Ctrl+C to stop

Connect to your module from any machine:

calculator = Modulith.remote(
    "user3bef3/calculator",
    access_token="..."  # Use the same token displayed in the console when you ran the module
)
result = calculator("add", kwargs={"a": 1, "b": 2})
# → 3 (executed remotely)

Same interface. Local or remote, no difference.

⚖️ Effortless Scaling

Scale horizontally by running multiple instances of the same module across machines. Each instance joins a shared pool and serves requests automatically.

# Serve the module on serverless instances (i.e., AWS Fargate)
modulith serve \
--module-source calculator.module \
--instances 5 \                 # Run 5 instances
--num-cores 2 \                 # Each instance uses 2 CPU cores
--memory 1GB \                  # Each instance has 1GB of RAM
--public \                      # Accessible by anyone
--rate-limit 100 \              # 100 requests per minute (public users)
--burst-limit 20 \              # Allow short bursts up to 20 requests
--auth-token <your-auth-token>  # Use the same token to group instances

Tip: Use the same --auth-token across all instances to group them into the same pool. Instances using different tokens will run different pools.

🔗 Compose Modules

Build new modules by calling existing modules, local or remote.

new_module = Modulith()
calculator = Modulith.remote("user3bef3/calculator", access_token="...")

@new_module.capability("double_sum")
def double_sum(a: float, b: float) -> float:
    return calculator("add", kwargs={"a": a, "b": b}) + calculator("add", kwargs={"a": a, "b": b})  # calls remote calculator module

result = new_module("double_sum", kwargs={"a": 1, "b": 2})
#  → 6

Execution flow

inputs → double_sum(1, 2)
       → add(1, 2)   (remote)
       → 3           (return)
       → add(1, 2)   (remote)
       → 3           (cache hit, return)
       → 3 + 3       (local)
       → 6

👤 Optional: Create Account

Avoid manual auth/access tokens management by linking modules to your account.

modulith signup # Create an account (if you don't have one)
modulith login
🌐 Module 'calculator' is live:
- Repository: <your_username>/calculator
...

Your module is now automatically registered and managed under your account.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

modulith-0.1.4.tar.gz (39.9 kB view details)

Uploaded Source

Built Distribution

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

modulith-0.1.4-py3-none-any.whl (64.5 kB view details)

Uploaded Python 3

File details

Details for the file modulith-0.1.4.tar.gz.

File metadata

  • Download URL: modulith-0.1.4.tar.gz
  • Upload date:
  • Size: 39.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for modulith-0.1.4.tar.gz
Algorithm Hash digest
SHA256 f167efc5cde751e1aa86cef26ff7ecd04c9b4ddd1df5310ec8171cc332bdca8e
MD5 bc9b4060f538bb2b97759e4b9c0e2ff7
BLAKE2b-256 36213efe04bd72a8e3b0eb44b8e91186807fca844e6797cd492384b30b802ccd

See more details on using hashes here.

Provenance

The following attestation bundles were made for modulith-0.1.4.tar.gz:

Publisher: python-publish.yml on modulith-labs/modulith

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file modulith-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: modulith-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 64.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for modulith-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 f7105c2dbf218454b9b18ea8f5304b1fb641f61aa3dd738e84f79ea0f29b5711
MD5 dd061b3b23f9be99778a0e457955a648
BLAKE2b-256 626491ee86d7faee025e7ad99cc889ab8a1c51a41e12ad68711f252e7714475b

See more details on using hashes here.

Provenance

The following attestation bundles were made for modulith-0.1.4-py3-none-any.whl:

Publisher: python-publish.yml on modulith-labs/modulith

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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