Skip to main content

🚀 FlowKit - Simplify Async Workflows

PyPI version Python 3.8+ License: MIT Tests

FlowKit provides fluent async workflows with lazy execution and minimal boilerplate.

⚡ Why FlowKit?

Before (Traditional Async):

async def fetch_user_data(user_id):
    async with aiohttp.ClientSession() as session:
        async with session.get(f"https://api.example.com/users/{user_id}") as response:
            user = await response.json()
            async with session.get("https://api.example.com/posts", params={"userId": user_id}) as posts_response:
                posts = await posts_response.json()
                return {"user": user, "posts": posts}

After (FlowKit):

@flowkit.simple
def fetch_user_data(user_id):
    user = flowkit.get(f"https://api.example.com/users/{user_id}").json()
    posts = flowkit.get("https://api.example.com/posts", params={"userId": user_id}).json()
    return {"user": user, "posts": posts}

🎯 Key Features

  • 🔗 Fluent API - Chain operations with .pipe() method
  • 🛡️ Type Safe - Full IDE support and type hints
  • 🚀 Modern Foundation - Built on battle-tested httpx
  • 🔧 Framework Ready - FastAPI, Django, Flask examples
  • 📦 Simple Installation - pip install flowkit-async

📦 Installation

pip install flowkit-async

🔧 How FlowKit Works

FlowKit provides lazy async pipelines - operations are queued and executed when awaited.

import flowkit

# FlowKit operations return awaitable Flow objects
user_flow = flowkit.get("https://api.example.com/users/1")
posts_flow = flowkit.get("https://api.example.com/posts")

# Execute both operations
user = await user_flow.json()
posts = await posts_flow.json()

Core Concept: Flow Objects

Flow objects are awaitable pipelines that:

  • Chain operations without immediate execution
  • Execute when awaited in the current event loop
  • Enable fluent, readable async patterns

This is structured async workflows, not sync-to-async magic.

🔧 How FlowKit Works

FlowKit provides lazy async pipelines. API calls return awaitable Flow objects that record operations and execute asynchronously when awaited.

FlowKit does NOT:

  • convert blocking code into async
  • use threads or greenlets
  • bypass the event loop

This is structured async composition, not async magic.

🏆 Real-World Examples

Data Processing Pipeline

@flowkit.simple
def fetch_user_data(user_id: int):
    """Fetch and process user data."""
    return (flowkit.get(f"https://jsonplaceholder.typicode.com/users/{user_id}")
              .json()
              .pipe(lambda user: {**user, "processed": True}))

Note: @flowkit.simple is intended for synchronous functions. If used on async functions, it acts as a pass-through wrapper.

Concurrent Operations

@flowkit.simple
def fetch_dashboard():
    """Fetch multiple data sources concurrently."""
    users = flowkit.get("https://jsonplaceholder.typicode.com/users").json()
    posts = flowkit.get("https://jsonplaceholder.typicode.com/posts").json()
    comments = flowkit.get("https://jsonplaceholder.typicode.com/comments").json()
    
    # These execute concurrently when awaited
    return {"users": users, "posts": posts, "comments": comments}

🛠 When to Use FlowKit

FlowKit is ideal for:

  • API-heavy applications with multiple calls
  • Data pipelines and processing workflows
  • Teams wanting consistent async patterns
  • Rapid prototyping with clean syntax

⚠️ Important Notes

FlowKit does NOT:

  • Block the event loop or use thread pools
  • Make synchronous code magically non-blocking
  • Replace understanding of asyncio fundamentals
  • Work with CPU-bound operations

Always use async/await with CPU-intensive tasks.

🆚 How FlowKit Compares

Feature FlowKit aiohttp httpx requests
Fluent API ✅ ❌ ❌ ❌
Type Safe ✅ ✅ ✅ ✅
Sessions ✅ ✅ ✅ ❌
Pipelines ✅ ❌ ❌ ❌

FlowKit provides structured async workflows with minimal overhead on top of httpx and is comparable in performance for typical I/O-bound workloads.

📋 License

MIT License - see LICENSE file for details.

🤝 Contributing

We welcome contributions! Please see our Contributing Guide for details.


🚀 Try FlowKit today for cleaner async workflows:

pip install flowkit-async

⭐ Star us on GitHub! github.com/flowkit/flowkit

Metadata

Release files for flowkitx 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for flowkitx 1.0.1
File Size Uploaded Provenance Actions
flowkitx-1.0.1.tar.gz 11.8 kB Without provenance Details for flowkitx-1.0.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for flowkitx 1.0.1
File Interpreter ABI Platform Actions
flowkitx-1.0.1-py3-none-any.whl Python 3 none any Details for flowkitx-1.0.1-py3-none-any.whl

Total release size: 19.9 kB

Release files / flowkitx-1.0.1.tar.gz

Download URL flowkitx-1.0.1.tar.gz
Size 11.8 kB
Tags Source
SHA-256 checksum
How to use checksums
eaaf42055ed49e95ba42d9a9d3c983da89d82614f725811c84c33998e2908fa9
BLAKE2b-256 checksum
How to use checksums
df099b7b1f08eb311297df84bc51187fb482ffee315329aa7f9d7743f7089fb7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.11

Release files / flowkitx-1.0.1-py3-none-any.whl

Download URL flowkitx-1.0.1-py3-none-any.whl
Size 8.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4d46fc41c04b98eae5670d0a5928f5522b6f942dfa5487a5846c037a9160510d
BLAKE2b-256 checksum
How to use checksums
60160d377ef301977dc3e04e658e9f41fba42ce7d4ba3556bd66bd22f03bc2c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.11

Security for flowkitx 1.0.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page