npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@pojntfx/unisockets

v0.0.23

Published

A universal Berkeley sockets implementation for both WebAssembly (based on WebRTC) and native platforms with bindings for C, Go and TinyGo.

Downloads

26

Readme

unisockets

A universal Berkeley sockets implementation for both WebAssembly (based on WebRTC) and native platforms with bindings for C, Go and TinyGo.

Yarn CI make CI Mirror TypeDoc PkgGoDev npm Demo

Overview

unisockets implements the Berkeley sockets API. On a native environment like Linux, it falls back to the native Berkeley sockets API; on WASM it uses WebRTC for fast peer-to-peer communication instead of the (non-available) native API. This allows you to "just recompile" an existing socket server/client (such as a web server etc.) and run it natively, in a WebAssembly runtime or in the browser, without the need for a WebSocket proxy like in emscripen or some other proxy mechanism. You've heard that right, this library allows you to bind in the browser!

Components

UML Diagram

The system is made up of the following components:

  • Signaling: A WebRTC signaling server, client and protocol has been implemented to allow for nodes to discover each other and exchange candidates, but is not involved in any actual connections. When compiling natively, it is not required.
  • Transport: A minimal wrapper around the WebRTC API. When compiling to WASM, this component manages all actual data transfers and handles incoming/outgoing peer to peer connections. When compiling natively, it is not required.
  • Sockets: A set of WebAssembly imports that satisfy the basic API of the Berkeley sockets, such as socket, bind, listen, accept, connect, send, recv etc. When compiling natively, it falls back to the native implementation.

These components have no hard dependencies on one another, and can be used independendly.

Additionally, a universal C/C++ header for easy usage and Go/TinyGo bindings (see PkgGoDev) have been created.

Signaling Protocol

The signaling components use the following protocol:

Sequence Diagram

A public signaling server instance is running on wss://unisockets.herokuapp.com and used in the demo.

Further Resources

Interested in an implementation of the Go net package based on this package, with TinyGo and WASM support? You might be interested in tinynet!

You want a Kubernetes-style system for WASM, running in the browser and in node? You might be interested in webnetes, which uses unisockets for it's networking layer.

Usage

Check out the universal C/C++ header for the C API docs or PkgGoDev for the Go/TinyGo API. Many examples on how to use it (C, TinyGo & Go clients & servers plus an example WebAssembly runner) can also be found in the cmd folder. Looking for advice on how to build and run natively or using WASM? Check out the Makefile!

License

unisockets (c) 2020 Felix Pojtinger

SPDX-License-Identifier: AGPL-3.0