{"id":2376,"library":"aiostream","title":"aiostream","description":"aiostream provides a collection of stream operators that can be combined to create asynchronous pipelines of operations. It can be seen as an asynchronous version of itertools, although some aspects are are slightly different, offering features like operator pipe-lining, repeatability, and safe iteration contexts. The library is currently at version 0.7.1 and maintains an active development and release cadence.","status":"active","version":"0.7.1","language":"python","source_language":"en","source_url":"https://github.com/vxgmichel/aiostream","tags":["async","stream","generator","asyncio","data processing","reactive programming"],"install":[{"cmd":"pip install aiostream","lang":"bash","label":"Install latest version"}],"dependencies":[],"imports":[{"note":"The primary stream creation methods are exposed directly under 'aiostream.stream'.","wrong":"from aiostream.core import Stream","symbol":"stream","correct":"from aiostream import stream"},{"note":"Pipe operators are available directly from 'aiostream.pipe' for pipe-lining operations.","wrong":"from aiostream.operators import pipe","symbol":"pipe","correct":"from aiostream import pipe"}],"quickstart":{"code":"import asyncio\nfrom aiostream import stream, pipe\n\nasync def main():\n    # Create a counting stream with a 0.1-second interval\n    xs = stream.count(interval=0.1)\n\n    # Operators can be piped using '|' to transform the stream\n    ys = xs \\\n        | pipe.map(lambda x: x**2) \\\n        | pipe.take(5) # Take the first 5 elements\n\n    print(\"Squared stream elements:\")\n    # Use a stream context for proper resource management and iterate\n    async with ys.stream() as streamer:\n        async for y in streamer:\n            print(f\"-> {y}\")\n\n    # Streams can also be awaited to get the last value after processing\n    last_value = await (stream.range(1, 4) | pipe.list())\n    print(f\"List from range stream: {last_value}\")\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n","lang":"python","description":"This quickstart demonstrates creating an asynchronous stream, applying transformations using pipe operators, iterating through the stream, and awaiting a stream to collect its results."},"warnings":[{"fix":"Remove explicit instantiation of operators. For example, change `stream.map(func)` to `stream.map(source, func)` or `source | pipe.map(func)`.","message":"In `aiostream` v0.6.0, stream operators (e.g., `map`, `filter`) transitioned from being classes to singleton objects. This means you should directly call `stream.map(...)` instead of `stream.map().pipe(...)` or `stream.Map().pipe(...)`.","severity":"breaking","affected_versions":">=0.6.0"},{"fix":"Ensure that `stream.merge()`, `stream.chain()`, or `stream.ziplatest()` are always provided with one or more asynchronous iterable sources.","message":"In `aiostream` v0.5.0, the `merge`, `chain`, and `ziplatest` operators no longer accept zero sources. Passing no arguments will now result in an error, as they expect at least one source stream to combine.","severity":"breaking","affected_versions":">=0.5.0"},{"fix":"When using `pipe.map` or similar operators with a synchronous function, omit the `task_limit` and `ordered` arguments. Ensure these arguments are only used with asynchronous functions.","message":"Starting with `aiostream` v0.7.0, a `ValueError` is raised if `task_limit` or `ordered` arguments are provided to an operator (like `pipe.map`) when the supplied function is synchronous. These arguments are only applicable when the function being mapped is an asynchronous coroutine.","severity":"gotcha","affected_versions":">=0.7.0"},{"fix":"Upgrade your Python environment to version 3.9 or later to use `aiostream` versions 0.6.4 and above.","message":"`aiostream` dropped support for Python 3.8 in version 0.6.4. The library now officially requires Python 3.9 or newer.","severity":"breaking","affected_versions":">=0.6.4"}],"env_vars":null,"last_verified":"2026-05-20T21:41:14.338Z","next_check":"2026-07-09T00:00:00.000Z","problems":[{"fix":"Install the package using 'pip install aiostream'.","cause":"The 'aiostream' package is not installed in the Python environment.","error":"ModuleNotFoundError: No module named 'aiostream'"},{"fix":"Ensure the correct import statement: 'from aiostream import stream'.","cause":"The 'stream' module is not available in the 'aiostream' package, possibly due to an incorrect import statement.","error":"ImportError: cannot import name 'stream' from 'aiostream'"},{"fix":"Use 'async for' within an 'async with' context: 'async with stream.stream() as s: async for item in s: ...'.","cause":"Attempting to iterate over a 'Stream' object without using an asynchronous context.","error":"TypeError: 'Stream' object is not iterable"},{"fix":"Import 'pipe' separately: 'from aiostream import pipe'.","cause":"The 'pipe' module is not directly accessible from 'aiostream'.","error":"AttributeError: module 'aiostream' has no attribute 'pipe'"},{"fix":"Use 'await' directly in an async function or use 'nest_asyncio' to allow nested event loops.","cause":"Calling 'asyncio.run()' inside an already running event loop, often in interactive environments like Jupyter notebooks.","error":"RuntimeError: This event loop is already running"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":"0.7.1","cli_name":"","cli_version":null,"type":"library","homepage":null,"github":"https://github.com/vxgmichel/aiostream","docs":null,"changelog":null,"pypi":"https://pypi.org/project/aiostream/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null,"categories":["data","http-networking","workflow"],"install_checks":{"last_tested":"2026-05-20","tag":null,"tag_description":null,"installed_version":"0.7.1","pypi_latest":"0.7.1","is_stale":false,"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"aiostream","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.12,"mem_mb":5,"disk_size":"18.4M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"aiostream","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.16,"mem_mb":5,"disk_size":"18.4M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"aiostream","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.08,"mem_mb":5,"disk_size":"19M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"aiostream","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.09,"mem_mb":5,"disk_size":"19M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"aiostream","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.21,"mem_mb":6,"disk_size":"20.3M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"aiostream","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.38,"mem_mb":6,"disk_size":"20.3M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"aiostream","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.18,"mem_mb":6,"disk_size":"21M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"aiostream","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.19,"mem_mb":6,"disk_size":"21M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"aiostream","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.4,"mem_mb":8.2,"disk_size":"12.2M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"aiostream","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.71,"mem_mb":8.2,"disk_size":"12.2M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"aiostream","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.38,"mem_mb":8.2,"disk_size":"13M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"aiostream","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.47,"mem_mb":8.2,"disk_size":"13M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"aiostream","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.43,"mem_mb":8.7,"disk_size":"11.9M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"aiostream","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.69,"mem_mb":8.7,"disk_size":"11.8M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"aiostream","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.37,"mem_mb":8.7,"disk_size":"12M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"aiostream","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.45,"mem_mb":8.7,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"aiostream","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.11,"mem_mb":4.9,"disk_size":"17.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"aiostream","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.17,"mem_mb":4.9,"disk_size":"17.9M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"aiostream","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.9,"import_time_s":0.09,"mem_mb":4.9,"disk_size":"18M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"aiostream","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.11,"mem_mb":4.9,"disk_size":"18M"}]},"quickstart_checks":{"last_tested":"2026-04-25","tag":null,"tag_description":null,"results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]},"_links":{"self":"https://checklist.day/api/registry/aiostream","v1":"https://checklist.day/v1/registry/aiostream","v1_install":"https://checklist.day/v1/registry/aiostream/install","v1_imports":"https://checklist.day/v1/registry/aiostream/imports","v1_compatibility":"https://checklist.day/v1/registry/aiostream/compatibility","v1_quickstart":"https://checklist.day/v1/registry/aiostream/quickstart","docs":"https://checklist.day/docs"}}