]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
📝 Update Library Agent Skill with streaming responses (#15024)
authorSebastián Ramírez <tiangolo@gmail.com>
Fri, 27 Feb 2026 21:03:51 +0000 (13:03 -0800)
committerGitHub <noreply@github.com>
Fri, 27 Feb 2026 21:03:51 +0000 (21:03 +0000)
fastapi/.agents/skills/fastapi/SKILL.md

index 99e2b3b412bdf53b5b37a3e3827ec430ecd5d5a1..ead0f6174929e3331c293bb47f6547798590fb16 100644 (file)
@@ -510,6 +510,60 @@ def read_items():
     return {"message": result}
 ```
 
+## Stream JSON Lines
+
+To stream JSON Lines, declare the return type and use `yield` to return the data.
+
+```python
+@app.get("/items/stream")
+async def stream_items() -> AsyncIterable[Item]:
+    for item in items:
+        yield item
+```
+
+## Stream bytes
+
+To stream bytes, declare a `response_class=` of `StreamingResponse` or a sub-class, and use `yield` to return the data.
+
+```python
+from fastapi import FastAPI
+from fastapi.responses import StreamingResponse
+from app.utils import read_image
+
+app = FastAPI()
+
+
+class PNGStreamingResponse(StreamingResponse):
+    media_type = "image/png"
+
+@app.get("/image", response_class=PNGStreamingResponse)
+def stream_image_no_async_no_annotation():
+    with read_image() as image_file:
+        yield from image_file
+```
+
+prefer this over returning a `StreamingResponse` directly:
+
+```python
+# DO NOT DO THIS
+
+import anyio
+from fastapi import FastAPI
+from fastapi.responses import StreamingResponse
+from app.utils import read_image
+
+app = FastAPI()
+
+
+class PNGStreamingResponse(StreamingResponse):
+    media_type = "image/png"
+
+
+@app.get("/")
+async def main():
+    return PNGStreamingResponse(read_image())
+```
+
 ## Use uv, ruff, ty
 
 If uv is available, use it to manage dependencies.