tinyws
Version:
Tiny WebSocket middleware for Node.js based on ws.
68 lines (48 loc) • 2.12 kB
Markdown
<div align="center">
<img src="https://raw.githubusercontent.com/tinyhttp/tinyws/master/logo.svg" alt="tinyws">
<p><sub>🚡 tiny WebSocket middleware for Node.js</sub></p>
<br />
[![Version][v-badge-url]][npm-url] [![Downloads][dl-badge-url]][npm-url] [![GitHub Workflow Status][gh-actions-img]][github-actions] [![Codecov][cov-badge-url]][cov-url]
</div>
_**tinyws**_ is a WebSocket middleware for Node.js based on [ws](https://github.com/websockets/ws), inspired by [koa-easy-ws](https://github.com/b3nsn0w/koa-easy-ws).
Check the [chat example](examples/chat) out to get familiar with tinyws.
## Features
- Small size (**498B**)
- Easy to use (only `req.ws` and nothing else)
- Framework-agnostic (works with tinyhttp, express etc)
- Written in TypeScript
- Pure ESM
## Why not [express-ws](https://github.com/HenningM/express-ws)?
because express-ws is...
- [Abandoned](https://github.com/HenningM/express-ws/issues/135) since 2018 💀
- Doesn't come with types out of the box (have to install `@types/express-ws`)
- Not compatible with tinyhttp and polka
- Buggy as hell
- Doesn't have tests
## Install
```sh
pnpm i ws tinyws
```
## Example
```ts
import { App, Request } from '@tinyhttp/app'
import { tinyws, TinyWSRequest } from 'tinyws'
const app = new App<any, Request & TinyWSRequest>()
app.use(tinyws())
app.use('/ws', async (req, res) => {
if (req.ws) {
const ws = await req.ws()
return ws.send('hello there')
} else {
res.send('Hello from HTTP!')
}
})
app.listen(3000)
```
[v-badge-url]: https://img.shields.io/npm/v/tinyws.svg?style=for-the-badge&color=F55A5A&label=&logo=npm
[npm-url]: https://www.npmjs.com/package/tinyws
[cov-badge-url]: https://img.shields.io/coveralls/github/tinyhttp/tinyws?style=for-the-badge&color=F55A5A
[cov-url]: https://coveralls.io/github/tinyhttp/tinyws
[dl-badge-url]: https://img.shields.io/npm/dt/tinyws?style=for-the-badge&color=F55A5A
[github-actions]: https://github.com/tinyhttp/tinyws/actions
[gh-actions-img]: https://img.shields.io/github/workflow/status/tinyhttp/tinyws/CI?style=for-the-badge&color=F55A5A&label=&logo=github