Skip to content


Welcome to the Bumble Hive. This is a collection of apps and virtual devices that can run entirely in a browser page. The code for the apps and devices, as well as the Bumble runtime code, runs via Pyodide. Pyodide is a Python distribution for the browser and Node.js based on WebAssembly.

The Bumble stack uses a WebSocket to exchange HCI packets with a virtual or physical Bluetooth controller.

The apps and devices in the hive can be accessed by following the links below. Each page has a settings button that may be used to configure the WebSocket URL to use for the virtual HCI connection. This will typically be the WebSocket URL for a netsim daemon. There is also a TOML index that can be used by tools to know at which URL to access each of the apps and devices, as well as their names and short descriptions.

Using netsim

When the netsimd daemon is running (for example when using the Android Emulator that is included in Android Studio), the daemon listens for connections on a TCP port. To find out what this TCP port is, you can read the netsim.ini file that netsimd creates, it includes a line with web.port=<tcp-port> (for example web.port=7681). The location of the netsim.ini file is platform-specific.

On macOS, the directory where netsim.ini is stored is $TMPDIR

    $ cat $TMPDIR/netsim.ini

On Linux, the directory where netsim.ini is stored is $XDG_RUNTIME_DIR

    $ cat $XDG_RUNTIME_DIR/netsim.ini

Using a local radio

You can connect the hive virtual apps and devices to a local Bluetooth radio, like, for example, a USB dongle. For that, you need to run a local HCI bridge to bridge a local HCI device to a WebSocket that a web page can connect to. Use the bumble-hci-bridge app, with the host transport set to a WebSocket server on an available port (ex: ws-server:_:7682) and the controller transport set to the transport name for the radio you want to use (ex: usb:0 for the first USB dongle)


Virtual Devices