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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@elata-biosciences/eeg-web-ble

v0.1.2

Published

Web Bluetooth headband transport that emits normalized headband frames

Readme

@elata-biosciences/eeg-web-ble

Web Bluetooth transport package for EEG headband devices.

Install

Using pnpm (recommended):

pnpm add @elata-biosciences/eeg-web-ble @elata-biosciences/eeg-web

Using npm:

npm install @elata-biosciences/eeg-web-ble @elata-biosciences/eeg-web

Requirements

  • Node.js >= 18 for build and tests.
  • Browser with Web Bluetooth support (typically Chrome/Edge on desktop or Android).
  • Served from a secure context (https://) for Web Bluetooth to work.

What this package owns

  • Web Bluetooth device/session lifecycle.
  • Classic + Athena packet handling.
  • Emission of normalized HeadbandFrameV1 frames via HeadbandTransport.

Key exports

  • BleTransport – main transport class for connecting to a headband over Web Bluetooth.
  • HeadbandTransport types – normalized frame and status shapes shared with @elata-biosciences/eeg-web.

It intentionally depends on @elata-biosciences/eeg-web for shared transport and frame contracts.

Compatibility Notes

  • This package is explicitly built for a family of EEG headband BLE devices and detects both classic and athena protocols in src/museDevice.ts.
  • The classic path targets 4-channel EEG headbands using Muse 2 / Muse S-style UUIDs.
  • The Athena path is supported only when an Athena decoder is provided via athenaDecoderFactory; otherwise startup throws.
  • Tests cover transport behavior, but not every headset/firmware variant in the wild.

Practical Caveats

  • Requires Web Bluetooth in a secure context (https://), typically Chrome/Edge on desktop or Android.
  • Safari/iOS currently does not support Web Bluetooth for this workflow.
  • Firmware variants can differ in command behavior even with matching UUIDs.

Safari / iOS Strategy

Because Safari/iOS lacks usable Web Bluetooth support, use one of these patterns:

  1. Native app shell (recommended): implement BLE in Swift with CoreBluetooth and bridge normalized frames to web UI.
  2. Companion bridge: run BLE in a native app (or desktop helper) and stream frames to the web app over WebSocket/WebRTC.
  3. Hybrid WebView app: package the UI in WKWebView and expose BLE through native message handlers.

In all cases, keep @elata-biosciences/eeg-web frame schema contracts as the interface boundary so browser and native transports emit the same HeadbandFrameV1 shape.

Release Notes

@elata-biosciences/eeg-web-ble depends on @elata-biosciences/eeg-web and should be released after @elata-biosciences/eeg-web when compatibility changes. Full release process and tagging: docs/releasing.md.

Roadmap

Usage

import { BleTransport } from "@elata-biosciences/eeg-web-ble";
import { AthenaWasmDecoder } from "@elata-biosciences/eeg-web";

const transport = new BleTransport({
  deviceOptions: {
    athenaDecoderFactory: () => new AthenaWasmDecoder()
  }
});

transport.onFrame = (frame) => {
  console.log(frame.eeg.samples.length);
};

transport.onStatus = (status) => {
  console.log(status.state, status.reason);
};

await transport.connect();
await transport.start();