A Haskell implementation of Engine.IO


Version on this page:1.2.17
LTS Haskell 9.21:1.2.17
Stackage Nightly 2017-07-25:1.2.17
Latest on Hackage:1.2.23

See all snapshots engine-io appears in

BSD-3-Clause licensed by Oliver Charles
Maintained by ollie@ocharles.org.uk
This version can be pinned in stack with:engine-io-1.2.17@sha256:82d71ede65c3ef8c260d2e00d90936f759bd7a9b8dd50b472200bc1edf966504,1482

Module documentation for 1.2.17

This library provides a Haskell implementation of Engine.IO, a library for real-time client-server communication on the web. Engine.IO works with old browsers via XHR long-polling, and seamlessy upgrades to web sockets. This implementation supports the majority of the Engine.IO protocol, including text and binary packets and the upgrading protocol.



Other Changes

  • Increased the upper-bound of aeson to < 1.3.
  • Increased the upper-bound of websockets to < 0.13.


Other Changes

  • Increased the upper-bound of aeson to < 1.2.


  • Increased the upper-bound of aeson, vector and websockets.


  • Increased the upper-bound of base and transformers.


  • Increased the upper-bound of aeson to allow < 0.12.


  • Increased the upper-bound of async to allow < 2.2.


  • Increased the upper-bound of aeson to allow < 0.11.


  • Increase upper-bound of vector to < 0.12.


  • Same changes as 1.2.8, but the 1.2.8 release was formed incorrectly and didn’t compile.


  • Fixed a bug in the heartbeat monitor. The heartbeat thread exists to ensure that all connections are still active, so we can detect when a long-polling connection is closed. However, older versions of engine-io, the timer would be reset whenever we sent the client a message, rather than only when we received a message from the client. This meant that for high-traffic applications, old connections might never be removed, resulting in a memory leak.


  • Support decoding payloads coming through XHR polling transport. Previously, this scenario would lead to HTTP 400 responses.
  • Increased upper bound on either to < 4.5.


  • Increased upper-bounds of aeson to < 0.10 and of attoparsec to < 0.14.


  • Increased the upper-bound of base to allow < 4.9. Now builds on GHC 7.10.1.


  • Add a 100ms delay in the WebSocket upgrade process. This matches the behavior of the reference engine.io implementation (in NodeJS), and avoids a race condition on slower machines. Without this, it was possible for the client to experience a up-to-45s delay before upgrading.


  • Revert double-encoding introduced in 1.0.1. This now requires that you use a modern version of the socket.io client library. This work was tested against socket.io-1.2.1.js.


  • We now use stm-delay to implement a timeout, if we don’t receive network traffic from the client. Under normal operation, the Socket.io client should ping the server, so an idle session should remain alive.


  • Fixed a potential race condition in session allocation, where we could clobber existing session ids.


  • ServerAPI’s srvParseParseRequestBody has changed its return type to Either String a. This allows API providers to catch exceptions that may happen when attempting to perform this parse.


  • 1.1.1 accidently removed websockets from the list of available upgrades. This release reverts that change.


  • Long-polling connections now emit a ping message after 45 seconds, if no data is written to them.

  • There is a new dupRawReader function, which lets you create a read-only stream of raw communication with a socket.


  • The ServerAPI functions srvWriteBuilder, srvSetContentType and srvSetResponseCode have been merged into a single function: srvTerminateWithResponse. This should allow ServerAPI to be provided for Yesod.

    Thanks to Tim Baumann (@timjb) for this change.




  • Initial release