{"id":13478310,"url":"https://github.com/frankie567/httpx-ws","last_synced_at":"2025-05-15T15:04:39.221Z","repository":{"id":63651138,"uuid":"569161134","full_name":"frankie567/httpx-ws","owner":"frankie567","description":"WebSocket support for HTTPX","archived":false,"fork":false,"pushed_at":"2025-03-28T13:11:32.000Z","size":225,"stargazers_count":127,"open_issues_count":9,"forks_count":23,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-11T20:46:49.979Z","etag":null,"topics":["httpx","websockets"],"latest_commit_sha":null,"homepage":"https://frankie567.github.io/httpx-ws/","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/frankie567.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"dei":null,"publiccode":null,"codemeta":null},"funding":{"polar":"frankie567"}},"created_at":"2022-11-22T08:06:40.000Z","updated_at":"2025-05-03T22:45:52.000Z","dependencies_parsed_at":"2023-11-16T10:27:40.603Z","dependency_job_id":"5f56b506-6756-4961-85dc-7678380dfca3","html_url":"https://github.com/frankie567/httpx-ws","commit_stats":{"total_commits":73,"total_committers":3,"mean_commits":"24.333333333333332","dds":0.06849315068493156,"last_synced_commit":"f0e9eefe643c99ed691e8393df55be6ec14b511b"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frankie567%2Fhttpx-ws","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frankie567%2Fhttpx-ws/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frankie567%2Fhttpx-ws/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frankie567%2Fhttpx-ws/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/frankie567","download_url":"https://codeload.github.com/frankie567/httpx-ws/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254364270,"owners_count":22058878,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["httpx","websockets"],"created_at":"2024-07-31T16:01:55.365Z","updated_at":"2025-05-15T15:04:39.200Z","avatar_url":"https://github.com/frankie567.png","language":"Python","funding_links":["https://polar.sh/frankie567"],"categories":["Python","Websocket Utilities"],"sub_categories":[],"readme":"# HTTPX WS\n\n\u003cp align=\"center\"\u003e\n    \u003cem\u003eWebSockets support for HTTPX\u003c/em\u003e\n\u003c/p\u003e\n\n[![build](https://github.com/frankie567/httpx-ws/workflows/Build/badge.svg)](https://github.com/frankie567/httpx-ws/actions)\n[![codecov](https://codecov.io/gh/frankie567/httpx-ws/branch/main/graph/badge.svg?token=fL49kIvrj6)](https://codecov.io/gh/frankie567/httpx-ws)\n[![All Contributors](https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square)](#contributors-)\n[![PyPI version](https://badge.fury.io/py/httpx-ws.svg)](https://badge.fury.io/py/httpx-ws)\n[![Downloads](https://pepy.tech/badge/httpx-ws)](https://pepy.tech/project/httpx-ws)\n\n---\n\n**Documentation**: \u003ca href=\"https://frankie567.github.io/httpx-ws/\" target=\"_blank\"\u003ehttps://frankie567.github.io/httpx-ws/\u003c/a\u003e\n\n**Source Code**: \u003ca href=\"https://github.com/frankie567/httpx-ws\" target=\"_blank\"\u003ehttps://github.com/frankie567/httpx-ws\u003c/a\u003e\n\n---\n\n## Installation\n\n```bash\npip install httpx-ws\n```\n\n## Features\n\n- [x] Sync and async client\n- [x] Helper methods to send text, binary and JSON data\n- [x] Helper methods to receive text, binary and JSON data\n- [x] Automatic ping/pong answers\n- [x] HTTPX transport to test WebSockets defined in ASGI apps\n- [x] Automatic keepalive ping\n- [x] `asyncio` and [Trio](https://trio.readthedocs.io/) support through [AnyIO](https://anyio.readthedocs.io/)\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://francoisvoron.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1144727?v=4?s=100\" width=\"100px;\" alt=\"François Voron\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eFrançois Voron\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#maintenance-frankie567\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"https://github.com/frankie567/httpx-ws/commits?author=frankie567\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://kousikmitra.github.io\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/15109533?v=4?s=100\" width=\"100px;\" alt=\"Kousik Mitra\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKousik Mitra\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/frankie567/httpx-ws/commits?author=kousikmitra\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/davidbrochart\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/4711805?v=4?s=100\" width=\"100px;\" alt=\"David Brochart\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDavid Brochart\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#platform-davidbrochart\" title=\"Packaging/porting to new platform\"\u003e📦\u003c/a\u003e \u003ca href=\"https://github.com/frankie567/httpx-ws/commits?author=davidbrochart\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/ysmu\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/17018576?v=4?s=100\" width=\"100px;\" alt=\"ysmu\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eysmu\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/frankie567/httpx-ws/issues?q=author%3Aysmu\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://samforeman.me\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/5234251?v=4?s=100\" width=\"100px;\" alt=\"Sam Foreman\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSam Foreman\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/frankie567/httpx-ws/issues?q=author%3Asaforem2\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://maparent.ca/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/202691?v=4?s=100\" width=\"100px;\" alt=\"Marc-Antoine Parent\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMarc-Antoine Parent\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/frankie567/httpx-ws/issues?q=author%3Amaparent\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/frankie567/httpx-ws/commits?author=maparent\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://www.fastapiexpert.com/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/7353520?v=4?s=100\" width=\"100px;\" alt=\"Marcelo Trylesinski\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMarcelo Trylesinski\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/frankie567/httpx-ws/issues?q=author%3AKludex\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"#research-Kludex\" title=\"Research\"\u003e🔬\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://lit.link/MtkN1\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/51289448?v=4?s=100\" width=\"100px;\" alt=\"MtkN1\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMtkN1\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/frankie567/httpx-ws/issues?q=author%3AMtkN1\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"#research-MtkN1\" title=\"Research\"\u003e🔬\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.tomchristie.com/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/647359?v=4?s=100\" width=\"100px;\" alt=\"Tom Christie\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTom Christie\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/frankie567/httpx-ws/issues?q=author%3Atomchristie\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"#research-tomchristie\" title=\"Research\"\u003e🔬\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/dmontagu\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/35119617?v=4?s=100\" width=\"100px;\" alt=\"David Montague\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDavid Montague\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/frankie567/httpx-ws/issues?q=author%3Admontagu\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/WSH032\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/126865849?v=4?s=100\" width=\"100px;\" alt=\"Sean Wang\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSean Wang\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/frankie567/httpx-ws/commits?author=WSH032\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/agronholm\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/130003?v=4?s=100\" width=\"100px;\" alt=\"Alex Grönholm\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAlex Grönholm\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/frankie567/httpx-ws/issues?q=author%3Aagronholm\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/frankie567/httpx-ws/commits?author=agronholm\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/ro-oliveira95\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/27009864?v=4?s=100\" width=\"100px;\" alt=\"Rodrigo de Oliveira Neto\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRodrigo de Oliveira Neto\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/frankie567/httpx-ws/issues?q=author%3Aro-oliveira95\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/frankie567/httpx-ws/commits?author=ro-oliveira95\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://tinymind.me/GreyElaina\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/31543961?v=4?s=100\" width=\"100px;\" alt=\"Elaina\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eElaina\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/frankie567/httpx-ws/commits?author=GreyElaina\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://runsisi.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2339258?v=4?s=100\" width=\"100px;\" alt=\"runsisi\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003erunsisi\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/frankie567/httpx-ws/issues?q=author%3Arunsisi\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"#research-runsisi\" title=\"Research\"\u003e🔬\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n\n## Development\n\n### Setup environment\n\nWe use [Hatch](https://hatch.pypa.io/latest/install/) to manage the development environment and production build. Ensure it's installed on your system.\n\n### Run unit tests\n\nYou can run all the tests with:\n\n```bash\nhatch run test\n```\n\n### Format the code\n\nExecute the following command to apply linting and check typing:\n\n```bash\nhatch run lint\n```\n\n## License\n\nThis project is licensed under the terms of the MIT license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrankie567%2Fhttpx-ws","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrankie567%2Fhttpx-ws","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrankie567%2Fhttpx-ws/lists"}