libwebsockets features * Provides server and client APIs for RFC6455 v13 ws:// and wss:// websocket protocol, along with http:// and https:// * Can be configured to use OpenSSL, CyaSSL, or WolfSSL to provide fully encrypted client and server links - including client certificate support * Lightweight and fast even at 250K connections per thread and beyond - performance per byte and performance per MIPS many times better than traditional solutions * CMake based project that has been used in a variety of OS contexts including Linux (uclibc and glibc), ARM-based embedded boards, MBED3, MIPS / OpenWRT, Windows, Android, Apple iOS and even Tivo. It's used all over the place including The New York Times customer-facing servers and BMW. * It includes a stub webserver that is enough to deliver your scripts to the browser that open websocket connections back to the same server, so it can solve the entire server side, ws://, wss://, http://, and https:// in one step. Apache, Java or any other server-side support is not needed. * Compliant browsers from the last few years are supported on any platform. * Full-strength SSL suport: A+ on SSLLABS test (this server is powered by lwsws) * Architectural features like nonblockinng event loop, zero-copy for payload data and FSM-based protocol parsers make it ideal for realtime operation on resource-constrained devices * Simple, pure C: user code creates a libwebsockets context with options and a callback, library calls the callback when events occur on the connection - no activity on connections == 0% CPU * Posix poll(), libev (ie, epoll) and libuv event loops supported * Proxy support, including Basic Auth
libwebsockets alternatives and similar libraries
Based on the "Networking" category.
Alternatively, view libwebsockets alternatives based on common mentions on social networks and blogs.
libcurl9.8 9.9 L2 libwebsockets VS libcurlA command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS. libcurl offers a myriad of powerful features
Muduo9.6 2.0 L4 libwebsockets VS MuduoEvent-driven network library for multi-threaded Linux server in C++11
KCP9.5 0.0 libwebsockets VS KCP:zap: KCP - A Fast and Reliable ARQ Protocol
uWebSockets9.5 5.9 libwebsockets VS uWebSocketsSimple, secure & standards compliant web server for the most demanding of applications
Mongoose9.3 9.5 L3 libwebsockets VS MongooseEmbedded Web Server
C++ Workflow9.2 9.6 libwebsockets VS C++ WorkflowC++ Parallel Computing and Asynchronous Networking Engine
cpp-httplib9.2 8.1 libwebsockets VS cpp-httplibA C++ header-only HTTP/HTTPS server and client library
Proxygen9.1 9.5 L4 libwebsockets VS ProxygenA collection of C++ HTTP libraries including an easy to use HTTP server.
POCO9.1 9.5 L2 libwebsockets VS POCOThe POCO C++ Libraries are powerful cross-platform C++ libraries for building network- and internet-based applications that run on desktop, server, mobile, IoT, and embedded systems.
C++ REST SDK9.1 0.0 L1 libwebsockets VS C++ REST SDKThe C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.
WebSocket++8.9 0.0 L2 libwebsockets VS WebSocket++C++ websocket client/server library
cpr8.4 9.6 L2 libwebsockets VS cprC++ Requests: Curl for People, a spiritual port of Python Requests.
RakNet8.3 0.0 libwebsockets VS RakNetRakNet is a cross platform, open source, C++ networking engine for game programmers.
nghttp28.2 8.8 L1 libwebsockets VS nghttp2nghttp2 - HTTP/2 C Library and tools
evpp8.1 0.0 libwebsockets VS evppA modern C++ network library for developing high performance network services in TCP/UDP/HTTP protocols.
boost.beast(new repo)HTTP and WebSocket built on Boost.Asio in C++11
Boost.Beast8.0 7.5 libwebsockets VS Boost.BeastHTTP and WebSocket built on Boost.Asio in C++11
Simple-Web-Server7.7 0.0 L4 libwebsockets VS Simple-Web-ServerA very simple, fast, multithreaded, platform independent HTTP and HTTPS server and client library implemented using C++11 and Boost.Asio. Created to be an easy way to make REST resources available from C++ applications.
wdt7.6 4.2 libwebsockets VS wdtWarp speed Data Transfer (WDT) is an embeddedable library (and command line tool) aiming to transfer data between 2 systems as fast as possible over multiple TCP paths.
PcapPlusPlus7.3 8.4 libwebsockets VS PcapPlusPlusPcapPlusPlus is a multiplatform C++ library for capturing, parsing and crafting of network packets. It is designed to be efficient, powerful and easy to use. It provides C++ wrappers for the most popular packet processing engines such as libpcap, Npcap, WinPcap, DPDK and PF_RING.
cpp-netlib7.1 0.0 L2 libwebsockets VS cpp-netlibThe C++ Network Library Project -- cross-platform, standards compliant networking library.
netcode.io6.9 0.0 libwebsockets VS netcode.ioA protocol for secure client/server connections over UDP
Restbed6.9 1.0 L4 libwebsockets VS RestbedCorvusoft's Restbed framework brings asynchronous RESTful functionality to C++14 applications.
Onion6.8 5.0 L4 libwebsockets VS OnionC library to create simple HTTP servers and Web Applications.
libquic6.8 0.0 libwebsockets VS libquicQUIC, a multiplexed stream transport over UDP
Silicon6.4 0.0 L4 libwebsockets VS SiliconA high performance, middleware oriented C++14 http web framework please use matt-42/lithium instead
Dyad.c6.2 0.0 L3 libwebsockets VS Dyad.cAsynchronous networking for C
dotenv-linter6.0 7.2 libwebsockets VS dotenv-linter⚡️Lightning-fast linter for .env files. Written in Rust 🦀
Simple-WebSocket-Server5.7 0.0 L4 libwebsockets VS Simple-WebSocket-ServerA very simple, fast, multithreaded, platform independent WebSocket (WS) and WebSocket Secure (WSS) server and client library implemented using C++11, Boost.Asio and OpenSSL. Created to be an easy way to make WebSocket endpoints in C++.
libhttpserver5.2 1.0 libwebsockets VS libhttpserverC++ library for creating an embedded Rest HTTP server (and more)
RESTinio5.2 5.6 libwebsockets VS RESTinioCross-platform, efficient, customizable, and robust asynchronous HTTP/WebSocket server C++14 library with the right balance between performance and ease of use
Tufão5.0 0.0 L2 libwebsockets VS TufãoAn asynchronous web framework for C++ built on top of Qt
nope.c4.8 0.0 L1 libwebsockets VS nope.cWAFer is a C language-based software platform for scalable server-side and networking applications. Think node.js for C programmers.
curlcpp4.8 5.4 libwebsockets VS curlcppAn object oriented C++ wrapper for CURL (libcurl)
net_skeleton4.7 0.0 L3 libwebsockets VS net_skeletonAsync non-blocking multi-protocol networking library for C/C++
Seasocks4.7 3.6 libwebsockets VS SeasocksSimple, small, C++ embeddable webserver with WebSockets support
D++4.5 9.5 libwebsockets VS D++C++ Discord API Bot Library - D++ is Lightweight and scalable for small and huge bots!
verdigris4.4 0.0 libwebsockets VS verdigrisQt without moc: set of macros to use Qt without needing moc
IXWebSocket4.0 5.7 libwebsockets VS IXWebSocketwebsocket and http client and server library, with TLS support and very few dependencies
netLink3.4 0.0 L1 libwebsockets VS netLinkSocket and Networking Library using msgpack.org[C++11]
Boost.Http3.3 0.0 libwebsockets VS Boost.HttpEmbeddable C++ HTTP server
bredis2.9 0.0 libwebsockets VS bredisBoost::ASIO low-level redis client (connector)
tntnet2.7 0.0 L1 libwebsockets VS tntnetTntnet is a web application server for web applications written in C++.
Breep2.6 0.0 libwebsockets VS BreepC++ peer to peer library, built on the top of boost
QuantumGate2.5 0.0 libwebsockets VS QuantumGateQuantumGate is a peer-to-peer (P2P) communications protocol, library and API written in C++.
nanoMODBUS2.1 3.5 libwebsockets VS nanoMODBUSA compact MODBUS RTU/TCP C library for embedded/microcontrollers
Barracuda App ServerEmbedded Web Server Library with Integrated Scripting Engine
NetIF1.5 7.5 libwebsockets VS NetIFHeader-only C++14 library for getting addresses associated with network interfaces without name lookups on Windows, macOS, Linux, and FreeBSD
crispy-fortnightThis my first repository in github
Write Clean C++ Code. Always.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of libwebsockets or a related project?
Libwebsockets is a simple-to-use, MIT-license, pure C library providing client and server for http/1, http/2, websockets, MQTT and other protocols in a security-minded, lightweight, configurable, scalable and flexible way. It's easy to build and cross-build via cmake and is suitable for tasks from embedded RTOS through mass cloud serving.
It supports a lot of lightweight ancilliary implementations for things like JSON, CBOR, JOSE, COSE, and supports OpenSSL and MbedTLS v2 and v3 out of the box for everything. It's very gregarious when it comes to event loop sharing, supporting libuv, libevent, libev, sdevent, glib and uloop, as well as custom event libs.
100+ independent minimal examples for various scenarios, CC0-licensed (public domain) for cut-and-paste, allow you to get started quickly.
There are a lot of READMEs on a variety of topics.
We do a huge amount of CI testing per push, currently 582 builds on 30 platforms. You can see the lws CI rack and read about how lws-based Sai is used to coordinate all the testing.
HTML + CSS + JPEG + PNG display stack in lws
Want to drive your EPD or TFT / OLED display using HTML + CSS? Only got an ESP32?
Want remote JPEGs, PNGs, HTML, RGBA composition, gamma, error diffusion if needed?
Realtime render into a line buffer because you don't have enough heap for a framebuffer?
Perl binding for lws available
Thanks to Felipe Gasper, there's now a perl binding for lws available at metacpan, this uses the recent generic event loop support in lws to have lws as a guest on an existing perl event loop.
Lws examples switching to Secure Streams
[Secure Streams direct](./doc-assets/ss-api1.png)
Secure Streams support in lws was introduced a couple of years ago, it's a
higher-level interface to lws
wsi-level apis that simplifies connectivity by
segregating connection policy like protocol and endpoint information into a
separate [JSON policy file](./minimal-examples/client/hello_world/example-policy.json), and just having the [code deal with payloads](./minimal-examples/clients/hello_world/hello_world-ss.c); as many
details of the wire protocol as possible are hidden or moved to the policy, so
user code is almost identical even if the wire protocol changes.
The user code just asks to create a SS by "streamtype name", it is created according to the details (protocol, endpoint, etc) under the same name in the policy.
Key policy entries like endpoint can contain
substitutions to handle runtime adaptations via metadata. h1, h2, ws and mqtt
As a layer on top of the
wsi apis, SS provides a higher-level way to access
the existing wsi-level capabilities, both kinds of API will remain supported.
Secure Streams are longer-lived than a single wsi, so an SS can coordinate
retries by itself. SS-based user code is typically significantly smaller and
more maintainable than wsi layer.
In main branch I have moved the older examples into
and am starting to port more cases from there into SS-based examples.
Comparison between wsi and SS level lws usage
|Feature||"low-level" wsi way||Secure Streams way|
|Loop support, sul scheduler||default, event libs||same|
|Supports comms mode||Client, Server, Raw||same|
|Supports protocols||h1, h2, ws, mqtt (client)||same|
|TLS support||mbedtls (including v3), openssl (including v3), wolfssl, boringssl, libressl||same|
|Serializable, proxiable, muxable, transportable||No||Yes|
|Auto-allocated per-connection user object||pss specified in lws_protocols||Specified in ss info struct|
|Connection User API||Protocol-specific lws_protocols cbs (> 100)||SS API (rx, tx, state callbacks only)|
|Sending adaptation||lws_callback_on_writeable() + WRITEABLE||lws_ss_request_write() + tx() cb|
|Sending buffer||User-chosen + malloc'd partial handling||SS-provided, no partials|
|Create vhosts||code||JSON policy|
|TLS validation||cert bundle or code||JSON policy, or cert bundle|
|Connection retry / backoff||code||JSON policy, Auto|
|Nailing up||code||JSON policy, Auto|
|Endpoint and protocol details||spread around the code||JSON policy|
|Protocol selection, pipeline / stream sharing||code||JSON policy|
|ws subprotocol selection||code||JSON policy|
|ws binary / text||code||JSON policy|
|Protocol-specific metadata||Protocol-specific apis in code (eg, lws_hdr)||JSON policy, generic metadata apis in code|
|Connection validity rules||struct||JSON policy, Auto|
|Stream as Long Poll||code||JSON policy|
|Auth||code||JSON policy + automatic rotation if provider supported, else code|
Serialized Secure Streams
[Secure Streams direct](./doc-assets/ss-api2.png)
Secure Streams APIs are also serializable, the exact same client code can fulfil the connection directly in the same process as you would expect, or forward the actions, metadata and payloads to an [SS Proxy](./minimal-examples/ssproxy/ssproxy-socket) that owns the policy over a Unix Domain or TCP socket connection to be fulfilled centrally. This allows, eg, h2 streams from different processes sharing a single connection.
[Secure Streams direct](./doc-assets/ss-api3.png)
The serialized SS can also travel over generic transports like UART, an [example is provided implementing the Binance example on an RPi Pico](./minimal-examples/embedded/pico/pico-sspc-binance) with a UART transport to a [UART transport SS proxy](./minimal-examples/ssproxy/ssproxy-custom-transport-uart), where the pico itself has no network stack, tls, compression or wss stack, but can send and receive to and from the endpoint as if it did.
lws_trasport_mux is used to interpose between the UART transport
and the SSPC layer, allowing a single pipe to carry many separate SS connections.
The user SS code is identical however it is transported, muxed and fulfilled.
v4.3 is released
See the changelog
Lws work retrospective
The initial commit for lws will have been 11 years ago come Oct 28 2021, it's been a lot of work. There are a total of 4.3K patches, touching 800KLOC cumulatively (this is not the size in the repo, but over the years, how many source lines were changed by patches).
Gratifyingly, it turns out over the years, ~15% of that was contributed by 404 contributors: that's not so bad. Thanks a lot to everyone who has provided patches.
Today at least tens of millions of devices and product features rely on lws to handle their communications including several from FAANG; Google now include lws as part of Android sources.
This is the libwebsockets C library for lightweight websocket clients and servers. For support, visit
and consider joining the project mailing list at
You can get the latest version of the library from git:
Doxygen API docs for development: https://libwebsockets.org/lws-api-doc-main/html/index.html
*Note that all licence references and agreements mentioned in the libwebsockets README section above are relevant to that project's source code only.