Skip to main content

FastPubSub: A high-performance, asyncio-native framework for Google Cloud Pub/Sub applications

Project description

FastPubSub

A high-performance, asyncio-native framework for Google Cloud Pub/Sub applications.

Quality Checks PyPI Downloads PyPI Supported Python versions


Documentation: https://docs.fastpubsub.dev

Source Code: https://github.com/matheusvnm/fastpubsub


Features

FastPubSub is a high-performance framework for building applications that streaming message events on Google Pub/Sub. It combines the Google Pub/Sub Python SDK with FastAPI, Pydantic, and Uvicorn to provide an easy-to-use development experience.

The key features are:

  • Fast: Built on top of FastAPI, uvicorn and the Google Pub/Sub Python SDK for high throughput.
  • Intuitive: It is designed to be intuitive and easy to use, even for beginners.
  • Typed: Provides great editor support and less time reading docs.
  • Robust: Get production-ready code with sensible default values helping you avoid common pitfalls.
  • Asynchronous: It is built on top of asyncio, which allows it to run on fully asynchronous code.
  • Batteries Included: Provides its own CLI and other widely used tools such as pydantic for data validation and log contextualization.

Quick Start

Installation

FastPubSub works on Linux, macOS, Windows and most Unix-style operating systems. You can install it with pip as usual:

pip install fastpubsub

Writing your first application

FastPubSub broker connection provides convenient function decorators (@broker.subscriber) and methods (broker.publisher) to allow you to delegate the actual process of:

  • Creating Pub/Sub subscriptions to receive and process data from topics.
  • Publishing data to other topics downstream in your message processing pipeline.

These decorators make it easy to specify the processing logic for your producers and consumers, allowing you to focus on the core business logic of your application without worrying about the underlying integration.

Also, Pydantic’s BaseModel class allows you to define messages using a declarative syntax for sending messages downstream, making it easy to specify the fields and types of your messages.

Here is an example Python app using FastPubSub that consumes data from an incoming data stream and outputs one message to another one:

from pydantic import BaseModel, Field

from fastpubsub import FastPubSub, Message, PubSubBroker
from fastpubsub.logger import logger


class Address(BaseModel):
    street: str = Field(..., examples=["5th Avenue"])
    number: str = Field(..., examples=["1548"])

broker = PubSubBroker(project_id="fastpubsub-pubsub-local")
app = FastPubSub(broker)

@broker.subscriber(
    alias="my_handler",
    topic_name="in_topic",
    subscription_name="sub_name",
)
async def handle_message(message: Message):
    logger.info(f"The message {message.id} is processed.")
    await broker.publish(topic_name="out_topic", data="Hi!")

@app.after_startup
async def publish_initial_message() -> None:
    address = Address(street="Av. Flores", number="213")
    await broker.publish(topic_name="in_topic", data=address)

Running the application

Before running the command make sure to set one of the variables (mutually exclusive):

  1. Running Pub/Sub on Cloud: The environment variable GOOGLE_APPLICATION_CREDENTIALS with the path of the service-account on your system.
  2. Running Pub/Sub Emulator: The environment variable PUBSUB_EMULATOR_HOST with host:port of your local Pub/Sub emulator.

After that, the application can be started using the built-in FastPubSub CLI which is a core part of the framework. Just execute the command run and pass the module and the app symbol to the command.

fastpubsub run basic:app

After running the command, you should see the following output:

2026-02-04 21:00:07,469 | INFO     | 88674:8702897216 | runner:run:76 | FastPubSub app starting...
2026-02-04 21:00:07,999 | INFO     | 88674:8702897216 | tasks:start:80 | The handle_message handler is waiting for messages.
2026-02-04 21:00:08,028 | INFO     | 88674:8702897216 | pubsub:publish:248 | Message published for topic projects/fastpubsub-pubsub-local/topics/in_topic with id 17
2026-02-04 21:00:08,094 | INFO     | 88674:8702897216 | e1_01_basic_subscriber:handle_message:25 | The message 1 is processed. | message_id=17 | topic_name=in_topic | subscriber_name=handle_message
2026-02-04 21:00:08,125 | INFO     | 88674:8702897216 | pubsub:publish:248 | Message published for topic projects/fastpubsub-pubsub-local/topics/out_topic with id 18 | message_id=17 | topic_name=in_topic | subscriber_name=handle_message
2026-02-04 21:00:08,125 | INFO     | 88674:8702897216 | tasks:_consume:107 | The message successfully processed. | message_id=17 | topic_name=in_topic | subscriber_name=handle_message

Also, FastPubSub provides you with a great hot reload feature to improve your development experience

fastpubsub run basic:app --reload

And multiprocessing horizontal scaling feature as well:

fastpubsub run basic:app --workers 3

We just scratched the surface, but you already get the idea of how the basic structure works. Everything built into FastPubSub is meant to improve the development experience and provide great productivity with high-performance guarantees.

Contact

Feel free to get in touch by:

Sending a email at sandro-matheus@hotmail.com.

Sending a message on my linkedin.

License

This project is licensed under the terms of the Apache 2.0 license.

Download files

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

Source Distribution

fastpubsub-0.9.5.tar.gz (39.5 kB view details)

Uploaded Source

Built Distribution

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

fastpubsub-0.9.5-py3-none-any.whl (52.9 kB view details)

Uploaded Python 3

File details

Details for the file fastpubsub-0.9.5.tar.gz.

File metadata

  • Download URL: fastpubsub-0.9.5.tar.gz
  • Upload date:
  • Size: 39.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastpubsub-0.9.5.tar.gz
Algorithm Hash digest
SHA256 4e889761b9d5fe69ad23926b1e7ba18e45e6f8e63aa385f51e3a63df724150ec
MD5 b2e6cce14f8ba58e09a2e8a67536139b
BLAKE2b-256 ebb3b6c302bb486f5529b20d17b93d5107e1430d9f57971a675f3db09cf9f244

See more details on using hashes here.

File details

Details for the file fastpubsub-0.9.5-py3-none-any.whl.

File metadata

  • Download URL: fastpubsub-0.9.5-py3-none-any.whl
  • Upload date:
  • Size: 52.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastpubsub-0.9.5-py3-none-any.whl
Algorithm Hash digest
SHA256 53c309e7bb0d8c550db68f4390db7f98fcd449ce7c50e30314aed9585e682b0c
MD5 b0ca4a8b0cb3bd524acd846cf73b18c0
BLAKE2b-256 4cc942fe8d2dfa19f14ed3ab01b3436cf838277eb91eb64701415f284a26b46c

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