{"id":39845494,"url":"https://github.com/arnavdas88/fastwave","last_synced_at":"2026-01-18T13:35:39.518Z","repository":{"id":214332512,"uuid":"735616299","full_name":"arnavdas88/fastwave","owner":"arnavdas88","description":"Build UIs faster, with h2o-wave and fastapi.","archived":false,"fork":false,"pushed_at":"2024-01-15T19:55:54.000Z","size":335,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-05-14T00:27:13.931Z","etag":null,"topics":["api","async","asyncio","dashboard","fastapi","json","python","python3","realtime","rest","visualization","web"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arnavdas88.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-12-25T15:00:14.000Z","updated_at":"2024-01-20T05:22:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"9c1c5d33-2bb5-4973-a4fa-0c2654999e52","html_url":"https://github.com/arnavdas88/fastwave","commit_stats":null,"previous_names":["arnavdas88/fastwave"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/arnavdas88/fastwave","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnavdas88%2Ffastwave","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnavdas88%2Ffastwave/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnavdas88%2Ffastwave/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnavdas88%2Ffastwave/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arnavdas88","download_url":"https://codeload.github.com/arnavdas88/fastwave/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnavdas88%2Ffastwave/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28536761,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T13:04:05.990Z","status":"ssl_error","status_checked_at":"2026-01-18T13:01:44.092Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","async","asyncio","dashboard","fastapi","json","python","python3","realtime","rest","visualization","web"],"created_at":"2026-01-18T13:35:39.198Z","updated_at":"2026-01-18T13:35:39.485Z","avatar_url":"https://github.com/arnavdas88.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FastWave\n\n\u003cimg src=\"imgs/FastWave - Cover.png\" alt=\"FastWave logo\"\u003e\n\n### Build UIs faster, with h2o-wave and fastapi.\n\nFastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.8+ based on standard Python type hints.\n\nH2O Wave is a software stack for building beautiful, low-latency, realtime, browser-based applications and dashboards entirely in Python/R without using HTML, Javascript, or CSS.\n\nH2O Wave excels at capturing information from multiple sources and broadcasting them live over the web, letting you build and deploy realtime analytics with dramatically less effort.\n\n__FastWave, bridges the gap, bringing H2O Wave support to the FastAPI world.__\n\n### Todo List: Planning the next in Wave\n\n- [x] Implement decorator-based setup\n- [x] Provide illustrative examples\n- [x] Enable accessing path parameters when using FastWave\n- [ ] Enable accessing query parameters when using FastWave\n- [ ] Enable accessing request parameters when using FastWave\n- [ ] Documentation\n- [ ] Unit Tests\n- [ ] Dockerized Enviornment\n\n### Installation : Ride the Wave Locally\nInstall the FastWave experience locally with a simple command:\n```sh\n$ pip install git+https://github.com/arnavdas88/fastwave.git\n```\n\n### Usage : Catch the Wave in Your Code\nStarting with the very basic fastapi server,\n\n```python\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n@app.get(\"/\")\nasync def index():\n    return {\"description\": \"The Index Page!!!\"}\n\n@app.get(\"/hello\")\nasync def hello():\n    return {\"description\": \"The Hello World Page!!!\"}\n```\n\nUpgrade your code coolness:\n\n```python\nfrom fastapi import FastAPI, WebSocket\nfrom h2o_wave import Q\nfrom fastwave import wave, wave_collector\n\napp = FastAPI()\n\n@app.get(\"/\")\nasync def index():\n    return {\"description\": \"The Index Page!!!\"}\n\n@app.get(\"/hello\")\nasync def hello():\n    return {\"description\": \"The Hello World Page!!!\"}\n\n@app.get(\"/ui_1/{title}\")\n@wave\nasync def ui_1(title: str, sock: WebSocket, q: Q):\n    # ... H2O Wave UI Code ...\n    await q.page.save()\n\n\n@app.get(\"/ui_2\")\n@wave\nasync def ui_2(q: Q):\n    # ... H2O Wave UI Code ...\n    await q.page.save()\n\nwave_collector(app)\n```\n\nAnd it will render the `ui_1` and `ui_2` in the respective endpoint.\n\n### Structure : The FastWave Blueprint\n\nA practical FastWave implementation looks like a work of art, with FastAPI and Wave segments elegantly intertwined:\n\n\u003cimg src=\"imgs/FastWave - Code FastAPI Wave.png\" alt=\"FastWave FastAPI \u0026 Wave Segments\" width=\"63%\"\u003e\n\nThe code schema follows a logical and clean structure:\n\n\u003cimg src=\"imgs/FastWave - Code Example.png\" alt=\"FastWave Code Schema\"\u003e\n\n### How FastWave Works: Behind the Scenes\nWondering what's happening behind the curtain? FastWave orchestrates the magic:\n\nThe @wave decorator is the secret sauce. It registers a separate but unique rendering handle to FastAPI, capturing the essence of H2O Wave. It also registers the original H2O Wave handle in a global registry.\n\nWhen wave_collector is called at the end, it unleashes the magic. It registers all the H2O Wave handles from the global registry to FastAPI, bringing the UIs to life.\n\n\u003cimg src=\"imgs/FastWave - Working.png\" alt=\"How FastWave Works?\"\u003e\n\n### Example : A Fast Wave\n\n```python\n# H2O Imports\nfrom h2o_lightwave import ui, data, Q\n# FastAPI Imports\nfrom fastapi import FastAPI, WebSocket\n# FastWave\nfrom fastwave import wave, wave_collector\n\n# Initializing the FastAPI server\napp = FastAPI()\n\n# Define a global variable `bean_count` to\n# be rendered\nglobal bean_count\nbean_count = 0\n\n@app.get(\"/{name}\")\n@wave\nasync def show_cyan_dashboard(name:str, sock:WebSocket, q: Q):\n    global bean_count\n    # Was the 'increment' button clicked?\n    if q.args.increment:\n        bean_count += 1\n\n    # Display a form on the page\n    q.page['beans'] = ui.form_card(\n        box='1 1 5 2',\n        items=[\n            ui.text_xl(f'{name} Beans!'),\n            ui.button(name='increment', label=f'{name} has {bean_count} beans'),\n        ],\n    )\n    # Save the page\n    await q.page.save()\n\n# Make sure to collect the `WaveFunc` using\n# this command. This will register the original\n# ui renderer\nwave_collector(app)\n```\n\n\u003cimg src=\"imgs/FastWave - Minimalist Example Render.png\" alt=\"FastWave Minimalist Render Example\"\u003e\n\n### Contributing : Dive In\n\nWe welcome contributions from the community! To contribute to FastWave, follow the guidelines in the [Contribution](CONTRIBUTING.md) Guide. Your contributions help make FastWave even more awesome! 🚀\n\n### License : FastWave is All Yours\nFastWave is licensed under the MIT License, giving you the freedom to ride the code wave however you like. 🏄‍♂️","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farnavdas88%2Ffastwave","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farnavdas88%2Ffastwave","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farnavdas88%2Ffastwave/lists"}