🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@fluojs/websockets

Package Overview
Dependencies
Maintainers
1
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@fluojs/websockets

Decorator-based WebSocket gateway authoring core for Fluo, with explicit Node, Bun, Deno, and Cloudflare Workers raw websocket bindings on dedicated subpaths.

Source
npmnpm
Version
1.0.0-beta.5
Version published
Weekly downloads
28
-87.5%
Maintainers
1
Weekly downloads
 
Created
Source

@fluojs/websockets

English 한국어

Decorator-based WebSocket gateway authoring for the fluo runtime.

Table of Contents

Installation

npm install @fluojs/websockets ws

When to Use

Use this package to add real-time WebSocket capabilities to your fluo application. It provides a clean, decorator-driven API for handling connections, messages, and disconnections, with first-class support for multiple runtimes (Node.js, Bun, Deno, Cloudflare Workers).

Quick Start

Use WebSocketModule.forRoot() when you want the default Node.js-backed websocket runtime.

import { WebSocketGateway, OnConnect, OnMessage, WebSocketModule } from '@fluojs/websockets';
import { Module } from '@fluojs/core';

@WebSocketGateway({ path: '/chat' })
class ChatGateway {
  @OnConnect()
  handleConnect(socket) {
    console.log('Client connected');
  }

  @OnMessage('ping')
  handlePing(payload, socket) {
    socket.send(JSON.stringify({ event: 'pong', data: payload }));
  }
}

@Module({
  imports: [WebSocketModule.forRoot()],
  providers: [ChatGateway],
})
export class AppModule {}

Common Patterns

Shared Path Gateways

Multiple gateways can share the same path; their handlers will execute in discovery order.

@WebSocketGateway({ path: '/events' })
class MetricsGateway {
  @OnMessage('metrics')
  handleMetrics(data) { /* ... */ }
}

Server-Backed Node Adapters

For server-backed Node adapters (Node.js, Express, Fastify), you can opt into a dedicated listener port. Fetch-style runtimes (@fluojs/websockets/bun, @fluojs/websockets/deno, and @fluojs/websockets/cloudflare-workers) reject serverBacked.

@WebSocketGateway({ 
  path: '/chat', 
  serverBacked: { port: 3101 } 
})
class DedicatedChatGateway {}

Pre-upgrade guards and bounded defaults

Use WebSocketModule.forRoot(...) to reject anonymous upgrades before the handshake completes and to tune the shared connection/payload limits.

import { UnauthorizedException } from '@fluojs/http';

WebSocketModule.forRoot({
  limits: {
    maxConnections: 500,
    maxPayloadBytes: 65_536,
  },
  upgrade: {
    guard(request) {
      const authorization = request instanceof Request
        ? request.headers.get('authorization')
        : request.headers.authorization;

      if (authorization !== 'Bearer demo-token') {
        throw new UnauthorizedException('Authentication required.');
      }
    },
  },
});

When omitted, @fluojs/websockets applies bounded defaults for concurrent connections, inbound payload size, pending message buffers, and shutdown cleanup. Default settings are maxConnections: 1000, maxPayloadBytes: 1 MiB, buffer.maxPendingMessagesPerSocket: 256, shutdown.timeoutMs: 5000, Node heartbeat interval 30s, and Node backpressure maxBufferedAmountBytes: 1 MiB with drop behavior. Server-backed Node listeners enable heartbeat timers unless you explicitly set heartbeat.enabled to false. The official fetch-style runtime modules (@fluojs/websockets/bun, @fluojs/websockets/deno, and @fluojs/websockets/cloudflare-workers) close tracked websocket clients during application shutdown and give @OnDisconnect() cleanup a bounded chance to finish within shutdown.timeoutMs.

Public API Overview

  • @WebSocketGateway(options): Marks a class as a WebSocket gateway.
  • @OnConnect(): Decorator for connection handlers.
  • @OnMessage(event?): Decorator for inbound message handlers.
  • @OnDisconnect(): Decorator for disconnection handlers.
  • WebSocketModule: Root module for WebSocket integration.
  • WebSocketModule.forRoot({ upgrade, limits, backpressure, buffer, heartbeat, shutdown }): Configures pre-upgrade guards and bounded runtime defaults.
  • WebSocketGatewayLifecycleService: Root alias for the default Node.js-backed lifecycle service token.
  • Metadata helpers and symbols: defineWebSocketGatewayMetadata, getWebSocketGatewayMetadata, defineWebSocketHandlerMetadata, getWebSocketHandlerMetadata, getWebSocketHandlerMetadataEntries, webSocketGatewayMetadataSymbol, webSocketHandlerMetadataSymbol.

Runtime-Specific Subpaths

Use the runtime subpaths when you want an explicit runtime binding instead of the default root Node.js alias. Each subpath exposes its *WebSocketModule.forRoot(...) entrypoint plus the matching runtime lifecycle service export.

RuntimeSubpathModuleLifecycle service
Node.js@fluojs/websockets/nodeNodeWebSocketModuleNodeWebSocketGatewayLifecycleService
Bun@fluojs/websockets/bunBunWebSocketModuleBunWebSocketGatewayLifecycleService
Deno@fluojs/websockets/denoDenoWebSocketModuleDenoWebSocketGatewayLifecycleService
Workers@fluojs/websockets/cloudflare-workersCloudflareWorkersWebSocketModuleCloudflareWorkersWebSocketGatewayLifecycleService

Example Sources

  • packages/websockets/src/module.test.ts
  • packages/websockets/src/public-surface.test.ts
  • packages/websockets/src/node/node.test.ts
  • packages/websockets/src/bun/bun.test.ts
  • packages/websockets/src/deno/deno.test.ts
  • packages/websockets/src/cloudflare-workers/cloudflare-workers.test.ts

Keywords

fluo

FAQs

Package last updated on 04 May 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts