{"id":16032704,"url":"https://github.com/voutilad/dumb-ws","last_synced_at":"2026-01-19T23:02:17.714Z","repository":{"id":38334153,"uuid":"273581418","full_name":"voutilad/dumb-ws","owner":"voutilad","description":"I hate websockets...I really do.","archived":false,"fork":false,"pushed_at":"2024-01-05T14:41:46.000Z","size":164,"stargazers_count":2,"open_issues_count":6,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-02-13T17:54:31.557Z","etag":null,"topics":["c","websocket-client","websockets"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/voutilad.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,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-06-19T20:32:35.000Z","updated_at":"2024-07-25T07:06:32.000Z","dependencies_parsed_at":"2024-01-05T15:54:37.606Z","dependency_job_id":null,"html_url":"https://github.com/voutilad/dumb-ws","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voutilad%2Fdumb-ws","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voutilad%2Fdumb-ws/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voutilad%2Fdumb-ws/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voutilad%2Fdumb-ws/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/voutilad","download_url":"https://codeload.github.com/voutilad/dumb-ws/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247678186,"owners_count":20977814,"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":["c","websocket-client","websockets"],"created_at":"2024-10-08T21:40:21.348Z","updated_at":"2026-01-19T23:02:17.676Z","avatar_url":"https://github.com/voutilad.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dumb-ws - a dumb websocket implementation\n![Make and Test](https://github.com/voutilad/dumb-ws/workflows/Make%20and%20Test/badge.svg?branch=master)\n\nI just need an integration shim for [chocolate-doom](https://github.com/voutilad/chocolate-doom) to talk to a data collector I'm going to run in \"the cloud.\" Sadly, most cloud providers force you to use HTTP if you want to run in their \"serverless\" environments.\n\nUgh, I know...right?\n\n## ughhhhhh\nYeah, this in no way is going to be a fully [RFC6455](https://tools.ietf.org/html/rfc6455) compliant WebSocket client. Don't even bother asking because...\n- **no plan to support Text frames** since they require utf-8 support _(wicked gross)_\n- **super lazy key generation** (have you even _read_ RFC6455?)\n- **no server key verification** (_might_ add this...but not seeing the point yet)\n- **no fragmentation support** _(don't need it)_\n- **no payloads for ping/pong/close** _(just stop it)_\n- **zero extension support** _(figure it out yourself, ok?)_\n\nSeriously, it's _Binary Frames or Bust_ around here so you're on your own and dumb-ws isn't going to hold your hand.\n\n## ok, i'll bite...what's up?\nAs of now, you also need [libtls](https://man.openbsd.org/tls_init.3) from [libressl](https://libressl.org). Depending on your operating system, this might be easy to get via packages or you need to build a release yourself. (It's not hard...honestly...but be careful as `make install` might replace your existing OpenSSL version.)\n\nIf you're integrating dumb-ws (heavens help you), all you should need are `dws.c` and `dws.h` so just drop those into whatever project you want to taint with this abomination. Everything else here is just for testing.\n\nSeriously...if your project already can link to `libtls` all you need to do is copy the 2 files I said and be done with it! You don't need to build anything here.\n\n\u003e Note: on some platforms that provide libressl via package management, `libtls` might be installed as `liblibretls`\n\n## lolwut, testing?\nI'm testing against some popular (for some definition of \"popular\") websocket implementations in:\n- [Go](./go-test) -- run `go build` and run the resulting binary\n- [NodeJS](./nodejs-test) -- run `npm i` and `node index.js`\n- [Rust](./rust-test) -- run `cargo run`\n\n\u003e Note on Rust: you might need to set `OPENSSL_LIB_DIR` and `OPENSSL_INCLUDE_DIR` on OpenBSD to build...ymmv.\n\nI also test on the following platforms:\n- OpenBSD-current\n- Debian 12\n\n# never asked questions (naq)\nThese are mostly here to remind myself why I'm bothering.\n\n## uhhhh, TLS?\nI'm a slacker and only support [libtls](https://man.openbsd.org/tls_init.3) from the [libressl](https://libressl.org) project. If you're using a Linux distro, look for LibreTLS. On Debian 12, you can get it as `libtls-dev`.\n\nI've also started testing with [relayd(8)](http://man.openbsd.org/relayd) as a TLS accelerator.\n\n## soooo, http proxy support?\nYes, this is actually a priority for me after TLS. Which means nowish?\n\n## um, auth?\nMaybe I'll add basic-auth support. After proxy support. Or not...cause if you have TLS why not roll your own protocol post-connection?\n\n## abwaah? close on invalid data?\nPer sec. 10.7, I might add in closure on bad data. _Might._ I'll probably stop caring though.\n\n# soooo, the License?\nWhy would you even think of using this horrible mess? Fine, ISC for my code unless stated otherwise. Buyer beware: you get what you pay for.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvoutilad%2Fdumb-ws","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvoutilad%2Fdumb-ws","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvoutilad%2Fdumb-ws/lists"}