OsmoWeb is an open-source TypeScript library that brings Osmocom's mobile communication capabilities to the web.
OsmoWeb is a TypeScript monorepo for building web apps and services around Osmocom network elements, with a longβterm goal of providing an npm package to run a 2G base station in the browser or in a web environment.
What we are building:
- Web BTS: osmo-bts-trx compiled to WebAssembly (WASM), with its UDP network layer replaced by WebSocket. This enables running the BTS in the browser or WASI while talking to native Osmocom services through a bridge.
- Transport bridge: a WebSocket β UDP router in backend-core that connects the browser-based BTS to the native Osmocom stack (osmo-bsc, osmo-msc, osmo-hlr, osmo-mgw).
- Frontend helpers: frontend-core adds client-side utilities for the WASM BTS transport and device handling.
- UI components: a small Vue 3 set for demos and apps, including log viewer, BTS configuration panel, and WebUSB SDR selection.
Responsibilities by package:
- core β shared types and utilities.
- backend-core β WebSocket β UDP router for Osmocom services, stats and log collection, and service management (e.g., BTS params, subscribers, etc.). All Osmocom services except the WASM osmo-bts-trx remain native.
- nestjs-microservice β NestJS integration that wraps backend-core into DI-ready providers and WebSocket gateways.
- frontend-core and vue3-components β client-side helpers and reusable UI for dashboards and demos.
Use cases:
- Browser-based labs and demos for SDR/Osmocom.
- Web dashboards for BSC/MSC/HLR/MGW state, logs, and control.
- Automation of routine network operations.
This project builds on existing Osmocom services; it does not replace them. Focus areas are developer ergonomics, type safety, and real-time streaming UX.
Monorepo packages and test apps:
.
ββ packages/
β ββ core/ β Shared domain types, utilities, constants
β ββ backend-core/ β Backend router/controllers and common types for Osmocom services
β ββ nestjs-microservice/ β NestJS module + gateways built on top of backend-core
β ββ frontend-core/ β Front-end utilities and client-side helpers
β ββ vue3-components/ β Reusable Vue 3 UI components and styles
ββ test-apps/ β Small scripts to manually test integrations with Osmo services
ββ ...
- packages/core β Core shared library with domain types, utilities, and constants used across all packages.
- packages/backend-core β Backend building blocks: router and controllers to talk to Osmocom daemons; also exposes common types/config like Osmo services and defaults (see packages/backend-core/src/osmo/index.ts).
- packages/nestjs-microservice β NestJS integration that wraps backend-core into DI-ready providers and WebSocket gateways; main entry is
OsmoModuleconfigurable via OSMO_* env vars. - packages/frontend-core β Front-end core utilities and adapters for client apps.
- packages/vue3-components β Vue 3 components library (e.g., LogArea, LogAreaItem); built with Vite and ships types/styles.
- test-apps β Sample scripts for manual testing (e.g., bsc-test.ts, msc-test.ts, hlr-test.ts, mgw-test.ts).
npm installBuild
npm run buildRun unit tests for each workspace
npm run testRun all tests
npm run test:allRun all tests and watch for changes
npm run test:watchRun coverage check
npm run test:coverageAll test applications are located in the test-apps folder. Before running any of them, change into that directory:
cd test-appsRun the BSC test application:
npm run test:bscRun the HLR test application:
npm run test:hlrRun the MGW test application:
npm run test:mgwRun the MSC test application:
npm run test:mscNote: Ensure the required Osmocom services are reachable before running the tests.
OsmoWeb is MIT licensed