Add stunning real-time features to your applications without limits or privacy trade-offs. Hotsock is a fully-private WebSocket messaging service that runs in your AWS account . Add chat, notifications, live updates, and presence to your applications with simple APIsβno servers to manage, no scaling complexity, and your data stays yours. Installs in minutes.
Automatically scales to your workload
Supported in 22 AWS regions
β Free forever tier
aws cloudformation create-stack \ --stack-name HotsockInstallerPermissions \ --template-url https://hotsock-stack-templates-us-west-2.s3.us-west-2.amazonaws.com/installer-permissions.yml \ --capabilities CAPABILITY_NAMED_IAM \ --tags Key=hotsock:service,Value=Hotsock
aws cloudformation create-stack \ --stack-name Hotsock \ --template-url https://hotsock-stack-templates-${AWS_REGION}.s3.${AWS_REGION}.amazonaws.com/hotsock-v1.x.yml \ --capabilities CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND \ --role-arn arn:aws:iam::$(aws sts get-caller-identity --query "Account" --output text):role/hotsock/HotsockInstallerRole \ --tags Key=hotsock:service,Value=Hotsock
lambda_client . invoke ( FunctionName = 'Hotsock-PublishFunction-AAABBBCCCDDD' , Payload = json . dumps ( { 'channel' : 'my-channel' , 'event' : 'my-event' , 'data' : 'π' } ) )
lambdaClient . send ( new InvokeCommand ( { FunctionName : "Hotsock-PublishFunction-AAABBBCCCDDD" , Payload : JSON . stringify ( { channel : "my-channel" , event : "my-event" , data : "π" , } ) , } ) )
lambdaClient . Invoke ( context . TODO ( ) , & lambda . InvokeInput { FunctionName : aws . String ( "Hotsock-PublishFunction-AAABBBCCCDDD" ) , Payload : [ ] byte ( `{"channel": "my-channel", "event": "my-event", "data": "π"}` ) , } )
lambdaClient . invoke ( new InvokeRequest ( ) . withFunctionName ( "Hotsock-PublishFunction-AAABBBCCCDDD" ) . withPayload ( "{\"channel\":\"my-channel\",\"event\":\"my-event\",\"data\":\"π\"}" ) ) ;
lambda_client . invoke ( { function_name : 'Hotsock-PublishFunction-AAABBBCCCDDD' , payload : { channel : 'my-channel' , event : 'my-event' , data : 'π' } . to_json } )
$lambdaClient -> invoke ( [ 'FunctionName' => 'Hotsock-PublishFunction-AAABBBCCCDDD' , 'Payload' => json_encode ( [ 'channel' => 'my-channel' , 'event' => 'my-event' , 'data' => 'π' ] ) , ] ) ;
await lambdaClient . Invoke ( new InvokeRequest { FunctionName = "Hotsock-PublishFunction-AAABBBCCCDDD" , Payload = "{\"channel\":\"my-channel\",\"event\":\"my-event\",\"data\":\"π\"}" } ) ;
const hotsock = new HotsockClient ( "wss://real-time.example.com" , { connectTokenFn : ( ) => "eyJhbGciOiJFUzI1NiIsIm..." , } ) hotsock . channels ( "my-channel" ) . bind ( "my-event" , ( message ) => { console . log ( "Received message:" , message ) } ) 2. Publish Publish messages from your backend in any language with the AWS SDK you already use. Or allow connected WebSocket clients to publish to channels directly.
View publish docs Python JS Go Java Ruby PHP C#
aws cloudformation create-stack \ --stack-name HotsockInstallerPermissions \ --template-url https://hotsock-stack-templates-us-west-2.s3.us-west-2.amazonaws.com/installer-permissions.yml \ --capabilities CAPABILITY_NAMED_IAM \ --tags Key=hotsock:service,Value=Hotsock
aws cloudformation create-stack \ --stack-name Hotsock \ --template-url https://hotsock-stack-templates-${AWS_REGION}.s3.${AWS_REGION}.amazonaws.com/hotsock-v1.x.yml \ --capabilities CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND \ --role-arn arn:aws:iam::$(aws sts get-caller-identity --query "Account" --output text):role/hotsock/HotsockInstallerRole \ --tags Key=hotsock:service,Value=Hotsock
lambda_client . invoke ( FunctionName = 'Hotsock-PublishFunction-AAABBBCCCDDD' , Payload = json . dumps ( { 'channel' : 'my-channel' , 'event' : 'my-event' , 'data' : 'π' } ) )
lambdaClient . send ( new InvokeCommand ( { FunctionName : "Hotsock-PublishFunction-AAABBBCCCDDD" , Payload : JSON . stringify ( { channel : "my-channel" , event : "my-event" , data : "π" , } ) , } ) )
lambdaClient . Invoke ( context . TODO ( ) , & lambda . InvokeInput { FunctionName : aws . String ( "Hotsock-PublishFunction-AAABBBCCCDDD" ) , Payload : [ ] byte ( `{"channel": "my-channel", "event": "my-event", "data": "π"}` ) , } )
lambdaClient . invoke ( new InvokeRequest ( ) . withFunctionName ( "Hotsock-PublishFunction-AAABBBCCCDDD" ) . withPayload ( "{\"channel\":\"my-channel\",\"event\":\"my-event\",\"data\":\"π\"}" ) ) ;
lambda_client . invoke ( { function_name : 'Hotsock-PublishFunction-AAABBBCCCDDD' , payload : { channel : 'my-channel' , event : 'my-event' , data : 'π' } . to_json } )
$lambdaClient -> invoke ( [ 'FunctionName' => 'Hotsock-PublishFunction-AAABBBCCCDDD' , 'Payload' => json_encode ( [ 'channel' => 'my-channel' , 'event' => 'my-event' , 'data' => 'π' ] ) , ] ) ;
await lambdaClient . Invoke ( new InvokeRequest { FunctionName = "Hotsock-PublishFunction-AAABBBCCCDDD" , Payload = "{\"channel\":\"my-channel\",\"event\":\"my-event\",\"data\":\"π\"}" } ) ;
const hotsock = new HotsockClient ( "wss://real-time.example.com" , { connectTokenFn : ( ) => "eyJhbGciOiJFUzI1NiIsIm..." , } ) hotsock . channels ( "my-channel" ) . bind ( "my-event" , ( message ) => { console . log ( "Received message:" , message ) } ) aws cloudformation create-stack \ --stack-name HotsockInstallerPermissions \ --template-url https://hotsock-stack-templates-us-west-2.s3.us-west-2.amazonaws.com/installer-permissions.yml \ --capabilities CAPABILITY_NAMED_IAM \ --tags Key=hotsock:service,Value=Hotsock
aws cloudformation create-stack \ --stack-name Hotsock \ --template-url https://hotsock-stack-templates-${AWS_REGION}.s3.${AWS_REGION}.amazonaws.com/hotsock-v1.x.yml \ --capabilities CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND \ --role-arn arn:aws:iam::$(aws sts get-caller-identity --query "Account" --output text):role/hotsock/HotsockInstallerRole \ --tags Key=hotsock:service,Value=Hotsock
lambda_client . invoke ( FunctionName = 'Hotsock-PublishFunction-AAABBBCCCDDD' , Payload = json . dumps ( { 'channel' : 'my-channel' , 'event' : 'my-event' , 'data' : 'π' } ) )
lambdaClient . send ( new InvokeCommand ( { FunctionName : "Hotsock-PublishFunction-AAABBBCCCDDD" , Payload : JSON . stringify ( { channel : "my-channel" , event : "my-event" , data : "π" , } ) , } ) )
lambdaClient . Invoke ( context . TODO ( ) , & lambda . InvokeInput { FunctionName : aws . String ( "Hotsock-PublishFunction-AAABBBCCCDDD" ) , Payload : [ ] byte ( `{"channel": "my-channel", "event": "my-event", "data": "π"}` ) , } )
lambdaClient . invoke ( new InvokeRequest ( ) . withFunctionName ( "Hotsock-PublishFunction-AAABBBCCCDDD" ) . withPayload ( "{\"channel\":\"my-channel\",\"event\":\"my-event\",\"data\":\"π\"}" ) ) ;
lambda_client . invoke ( { function_name : 'Hotsock-PublishFunction-AAABBBCCCDDD' , payload : { channel : 'my-channel' , event : 'my-event' , data : 'π' } . to_json } )
$lambdaClient -> invoke ( [ 'FunctionName' => 'Hotsock-PublishFunction-AAABBBCCCDDD' , 'Payload' => json_encode ( [ 'channel' => 'my-channel' , 'event' => 'my-event' , 'data' => 'π' ] ) , ] ) ;
await lambdaClient . Invoke ( new InvokeRequest { FunctionName = "Hotsock-PublishFunction-AAABBBCCCDDD" , Payload = "{\"channel\":\"my-channel\",\"event\":\"my-event\",\"data\":\"π\"}" } ) ;
const hotsock = new HotsockClient ( "wss://real-time.example.com" , { connectTokenFn : ( ) => "eyJhbGciOiJFUzI1NiIsIm..." , } ) hotsock . channels ( "my-channel" ) . bind ( "my-event" , ( message ) => { console . log ( "Received message:" , message ) } )
Just some of the features... Security on your terms No one wants to learn their data was used for AI training or part of a multi-tenant breach. All services are run privately in your AWS account. Your data always remains yours , only accessible by you .
Presence Channels Track who's online or what devices are currently subscribed to the same channel. Great for chat rooms and document collaboration where you need awareness of other active participants.
Custom Domains Maintain consistent branding and customer trust by keeping WebSocket connections on your own domain name.
Web Console Easily debug and test JWT validation, token claims, connections, channel subscriptions, and messages.
Serverless Powered by on-demand services such as API Gateway , DynamoDB , Lambda , EventBridge , SNS , and SQS . It scales to zero when you're not using it or can handle millions of connections and billions of messages for high-volume production workloads.
Start for free, upgrade to a license for unlimited usage! New, unlicensed installations have Free Tier access forever , which includes all features but is capped at 1 million WebSocket messages per month. Paid licenses provide unlimited messages and premium support! Learn more
Billed Monthly $99 / month
per AWS account
Buy Now Billed Annually $999 / year
per AWS account
Buy Now π‘ Pricing note: Hotsock licensing fees are separate from AWS service costs. Your AWS costs will vary based on actual usage.