Skip to main content

Fast, modern microservices framework for Python - Port of Moleculer.js

Project description

MoleculerPy

CI PyPI version Python versions codecov License

🌐 Language / Язык: English | Русский

MoleculerPy is a fast, modern and powerful microservices framework for Python. It helps you to build efficient, reliable & scalable services. MoleculerPy provides many features for building and managing your microservices.

Website: https://moleculerpy.services

Documentation: https://moleculerpy.services/docs

What's included

  • Async/await native (built on asyncio)
  • Request-reply concept
  • Support event driven architecture with balancing
  • Built-in service registry & dynamic service discovery
  • Load balanced requests & events (round-robin, random, cpu-usage, latency, sharding)
  • Many fault tolerance features (Circuit Breaker, Bulkhead, Retry, Timeout, Fallback)
  • Plugin/middleware system (19 built-in middlewares)
  • Support Streams for large data transfer
  • Service mixins
  • Built-in caching solution (Memory, Redis)
  • Pluggable loggers (structlog)
  • Pluggable transporters (NATS, Redis, Memory)
  • Pluggable parameter validator
  • Multiple services on a node/server
  • Master-less architecture, all nodes are equal
  • Built-in metrics feature with Prometheus exporter
  • Built-in tracing feature with Console exporter
  • Official REPL and Channels modules

Installation

pip install moleculerpy

With optional features:

# With Redis transporter
pip install moleculerpy[redis]

# With metrics & tracing
pip install moleculerpy[metrics,tracing]

# All features
pip install moleculerpy[all]

Create your first microservice

This example shows you how to create a small service with an add action which can add two numbers and how to call it.

import asyncio
from moleculerpy import ServiceBroker, Service, action, Context

# Define a service
class MathService(Service):
    name = "math"

    @action
    async def add(self, ctx: Context):
        return ctx.params["a"] + ctx.params["b"]

async def main():
    # Create a broker
    broker = ServiceBroker()

    # Register the service
    await broker.register(MathService())

    # Start the broker
    await broker.start()

    # Call service
    result = await broker.call("math.add", {"a": 5, "b": 3})
    print(f"5 + 3 = {result}")

    # Stop broker
    await broker.stop()

asyncio.run(main())

Command Line Interface

MoleculerPy includes a CLI that allows you to easily start a broker and load services:

moleculerpy <service_directory> [options]

CLI Options

Option Description Default
service_directory Path to directory containing service files -
--broker-id, -b Broker ID node-<current_dir_name>
--transporter, -t Transporter URL nats://localhost:4222
--log-level, -l Log level INFO
--log-format, -f Log format (PLAIN, JSON) PLAIN
--namespace, -n Service namespace default

Example

# Start with services from the 'services' directory
moleculerpy services

# Custom broker ID and transporter
moleculerpy services -b my-broker -t nats://nats-server:4222

# Verbose logging
moleculerpy services -l DEBUG

Official modules

We have official modules for MoleculerPy:

Module Description
moleculerpy-repl Interactive CLI shell for debugging and managing services
moleculerpy-channels Reliable pub/sub messaging with Redis, Kafka, NATS

Middlewares

MoleculerPy provides a powerful middleware system to extend functionality. Middlewares can hook into various stages of request, event, and lifecycle processes.

from moleculerpy.middleware import Middleware
from moleculerpy.context import Context

class LoggingMiddleware(Middleware):
    async def local_action(self, next_handler, action_endpoint):
        async def wrapped_handler(ctx: Context):
            print(f"Before action: {action_endpoint.name}")
            result = await next_handler(ctx)
            print(f"After action: {action_endpoint.name}")
            return result
        return wrapped_handler

# Register middleware
broker = ServiceBroker(middlewares=[LoggingMiddleware()])

Available Hooks

Wrapping Hooks

  • local_action(next_handler, action_endpoint) - Wraps local action handlers
  • remote_action(next_handler, action_endpoint) - Wraps remote action calls
  • local_event(next_handler, event_endpoint) - Wraps local event handlers

Lifecycle Hooks

  • broker_created(broker) - Called after broker initialization
  • broker_started(broker) - Called after broker startup
  • broker_stopped(broker) - Called after broker shutdown
  • service_created(service) - Called after service registration
  • service_started(service) - Called after service startup

Roadmap

Current status (v0.14.18)

  • Core framework with full service lifecycle
  • 7 Transporters: NATS, Redis/Valkey, Memory, MQTT, AMQP, Kafka, TCP+Gossip (P2P)
  • 4 Serializers: JSON, MsgPack, CBOR (-29% vs JSON), ProtoBuf (-25% vs JSON)
  • TCP Transporter — peer-to-peer without external broker, Gossip protocol for discovery
  • Service versioningv1.users.get, v2.users.get coexistence, $noVersionPrefix
  • Pluggable serializers (JSON, MsgPack) — MsgPack 2x faster on large payloads
  • Balanced request/event handling via NATS queue groups (disable_balancer=True)
  • 4/4 transit middleware hooks (publish, send, receive, message handler)
  • 22 built-in middlewares
  • 6 load balancing strategies (including Shard)
  • Circuit breaker, bulkhead, retry patterns
  • Pluggable metrics (Console, Prometheus) & tracing (Console, Event, Jaeger, Zipkin)
  • Pluggable validators (BaseValidator + DefaultValidator)
  • LRU memory cacher with eviction
  • $node service (7 actions), broker.mcall(), ping, health check
  • Streaming support
  • Protocol v4 safety: version check, NodeID conflict detection
  • REPL (18 commands) & Channels (Redis, NATS) modules
  • API Gateway (moleculerpy-web v0.1.0)

Planned features

  • TCP transporter TLS/shared_secret security
  • CBOR + ProtoBuf serializers
  • Database adapters (moleculerpy-db)
  • GraphQL gateway
  • gRPC support

Documentation

You can find the documentation at https://moleculerpy.services/docs.

Changelog

See CHANGELOG.md.

Contributing

We welcome you to join in the development of MoleculerPy. Please read our contribution guide.

Credits

This project is based on pylecular by Alvaro Inckot, licensed under MIT License.

Inspired by Moleculer.js - the original Node.js microservices framework.

License

MoleculerPy is available under the MIT license.

Contact

Copyright (c) 2026 MoleculerPy

@MoleculerPy

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

moleculerpy-0.14.18.tar.gz (1.2 MB view details)

Uploaded Source

Built Distribution

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

moleculerpy-0.14.18-py3-none-any.whl (291.5 kB view details)

Uploaded Python 3

File details

Details for the file moleculerpy-0.14.18.tar.gz.

File metadata

  • Download URL: moleculerpy-0.14.18.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for moleculerpy-0.14.18.tar.gz
Algorithm Hash digest
SHA256 d1bcd7fd9da2ea0634a1c99387017f1b1b09b41f11928ffb2d4e931d5cb64a44
MD5 b55a318e063ef938a947bd5ef2d1ff25
BLAKE2b-256 e90b1c1ebc97c722b1b0337ce9214a3c165e91865a8ec12322e2a13b34cdb18b

See more details on using hashes here.

Provenance

The following attestation bundles were made for moleculerpy-0.14.18.tar.gz:

Publisher: publish.yaml on MoleculerPy/moleculerpy

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

File details

Details for the file moleculerpy-0.14.18-py3-none-any.whl.

File metadata

  • Download URL: moleculerpy-0.14.18-py3-none-any.whl
  • Upload date:
  • Size: 291.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for moleculerpy-0.14.18-py3-none-any.whl
Algorithm Hash digest
SHA256 174c4675744f093fbfe12d2d5eb7aa13064f8f2abedfcad4a9a0316f2cd24995
MD5 d86d4118d7db4ee11959e94434e52643
BLAKE2b-256 6c364b53f05226c69a31818f836768029cc8ed83c1b73431bc6c15992bb24a3e

See more details on using hashes here.

Provenance

The following attestation bundles were made for moleculerpy-0.14.18-py3-none-any.whl:

Publisher: publish.yaml on MoleculerPy/moleculerpy

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