sbp alternatives and similar packages
Based on the "Networking" category.
Alternatively, view sbp alternatives based on common mentions on social networks and blogs.
gitit10.0 0.0 sbp VS gititA wiki using HAppS, pandoc, and git
snap-core9.8 0.0 sbp VS snap-coreCore type definitions (Snap monad, HTTP types, etc) and utilities for web handlers.
network9.8 0.0 sbp VS networkLow-level networking interface
websockets9.8 0.0 sbp VS websocketsA Haskell library for creating WebSocket-capable servers
grpc-haskell9.7 0.0 sbp VS grpc-haskellHaskell gRPC support
haskell-tor9.7 0.0 sbp VS haskell-torA Haskell implementation of the Tor protocol.
ekg9.7 0.0 sbp VS ekgRemote monitoring of running processes over HTTP
snap-server9.7 0.0 sbp VS snap-serverA fast HTTP server library, which runs Snap web handlers.
call-haskell-from-anythingCall Haskell functions from any programming language via serialization and dynamic libraries
discord-haskell9.6 7.3 sbp VS discord-haskellHaskell library for writing Discord bots
PortFusion9.6 0.0 sbp VS PortFusionHaskell-powered cross-platform transport-layer distributed reverse / forward proxy & tunneling solution – currently available for all TCP protocols (RDP, VNC, HTTP(S), SSH, ...).
web39.6 6.3 sbp VS web3Web3 API for Haskell.
HTTP9.6 0.0 sbp VS HTTPHaskell HTTP package
Combinatorrent9.6 0.0 sbp VS CombinatorrentA bittorrent client written in Haskell
hans9.5 0.0 sbp VS hansThe haskell network stack
amqp9.4 0.0 sbp VS amqpHaskell AMQP client library
glirc9.4 0.0 sbp VS glircHaskell IRC library and console client - Join us on libera.chat #glirc
network-transport-zeromq9.4 0.0 sbp VS network-transport-zeromqZeroMQ transport for distributed-process (aka Cloud Haskell)
io-streams9.4 0.0 sbp VS io-streamsSimple, composable, and easy-to-use stream I/O for Haskell
hoauth29.4 0.0 sbp VS hoauth2Haskell oauth2 binding
docker9.3 2.8 sbp VS dockerA Haskell library for the Docker Engine API
mighttpd29.3 0.0 sbp VS mighttpd2File/CGI web server on Warp
HaskellNet9.3 0.0 sbp VS HaskellNetHaskell library which provides client support for POP3, SMTP, and IMAP protocols.
graphula9.1 0.0 sbp VS graphulaA simple interface for generating persistent data and linking its dependencies
http-types9.1 0.0 sbp VS http-typesGeneric HTTP types for Haskell (for both client and server code)
http-streams9.1 0.0 sbp VS http-streamsHaskell HTTP client library for use with io-streams
mime-mail9.1 0.0 sbp VS mime-mailCompose MIME email messages.
http-server9.1 0.0 sbp VS http-serverA Haskell HTTP server
ngx-export9.1 0.0 L1 sbp VS ngx-exportNginx module for binding Haskell code in configuration files for great good!
smtp-mail9.1 0.0 sbp VS smtp-mailMaking it easy to send SMTP email from Haskell
dns9.1 3.3 sbp VS dnsDNS libary in Haskell
9.1 0.0 sbp VS redditreddit api for haskell
toxcore9.1 0.0 sbp VS toxcoreHaskell Tox protocol implementation
discord-hs9.0 0.0 sbp VS discord-hsHave you heard of our lord and savior Haskell?
haskakafka9.0 0.0 sbp VS haskakafkaKafka bindings for Haskell
http-kit9.0 0.0 sbp VS http-kitA low-level HTTP library
secure-sockets9.0 0.0 sbp VS secure-socketsA library for making secure connections between servers.
octohat9.0 0.0 sbp VS octohatAPI wrapper for Github's API in Haskell with tests
pontarius-xmpp8.9 0.0 sbp VS pontarius-xmppAn XMPP client library for Haskell.
ntp-control8.9 0.0 sbp VS ntp-controlClient library for NTP control messaging
network-transport-tcp8.9 0.0 sbp VS network-transport-tcpTCP Realisation of Network.Transport
network-uri8.8 2.2 sbp VS network-uriURI manipulation facilities
linklater8.8 0.0 sbp VS linklaterA Haskell library for the Slack API (including real-time messaging!)
twilio8.8 0.0 sbp VS twilioTwilio library for Haskell
network-transport8.8 0.0 sbp VS network-transportGeneric Network.Transport API
imap8.7 0.0 sbp VS imapA performant IMAP client library
montage8.7 0.0 sbp VS montageRiak resolution proxy
libmpd8.7 0.0 sbp VS libmpdA client library for MPD, the Music Player Daemon
http-client-streams8.5 0.0 sbp VS http-client-streamshttp-client for io-streams supporting openssl
websockets-snap8.5 0.0 sbp VS websockets-snapSnap integration for the websockets library
Access the most powerful time series database as a service
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of sbp or a related project?
Specification and Bindings for Swift Binary Protocol
<!-- toc -->
- Installing sbp2json, json2sbp, json2json and related tools
- Building / installing
- SBP Development Procedures
- SBP Protocol Specification
- JSON Schema Definitions
<!-- tocstop -->
The Swift Navigation Binary Protocol (SBP) is a fast, simple, and minimal binary protocol for communicating with Swift devices. It is the native binary protocol used by the Piksi GPS receiver to transmit solutions, observations, status and debugging messages, as well as receive messages from the host operating system, such as differential corrections and the almanac.
This project provides language-agnostic specification and documentation for messages used with SBP, a compiler for generating message bindings, and client libraries in a variety of languages. This repository is organized into the following directory structure:
docs](./docs): Protocol documentation and message definitions.
spec](./spec): Machine readable protocol specification in YAML.
generator](./generator): Simple, template-based generator for different languages.
python](./python): Python client and examples.
c](./c): C client library and examples.
haskell](./haskell): Haskell client and examples.
java](./java): Java client library and examples.
rust](./rust): Rust client library and examples.
sbpjson](./sbpjson): Tools for parsing SBP-JSON.
Except for the
generator, all of the above are generated and should not be modified directly.
Installing sbp2json, json2sbp, json2json and related tools
This repository also provides the following utilities for comprehending and inspecting SBP data:
sbp2json: converts SBP binary into a JSON representation, in which field names and values are expanded into JSON objects, common fields such as "message type" and "payload" are included as well.
json2sbp: uses the "message type", "payload" and related fields from an SBP JSON stream to reconstruct the binary representation.
json2json: some tools (notably the Swift GUI Console) produce abbreviated JSON logs with only common fields such as "message type" and "payload", the
json2jsontool expands these JSON objects to include fields specific the individual message.
To install a released version of these tools, visit the releases page and download an archive for your platform.
To install from source, you can use Rust's cargo tool (first install Rust), then run:
cargo install --git https://github.com/swift-nav/libsbp.git --bins
There's also a [Haskell version](./haskell) available which can be installed by
stack install in the [./haskell](./haskell) directory of a checkout
of this repo (after installing
stack) or by visiting the
releases by and downloading an
sbp_tools_haskell archive. This variant of
the tools predate the Rust and Python versions, and also includes an
tool as well as a
Finally, a Python version of the
sbp2json tool exists, which is installable
on any platform that supports Python via pip, e.g.:
pip3 install sbp
The tool can then be invoked as follows:
python3 -m sbp2json <sbp.bin
The performance of the Python version is significantly slower than Rust and Haskell, but works on all platforms that Python itself supports.
Building / installing
Before you start, run
git pull --tags
in you local libsbp repository to pull the tags. This will ensure the correct version number is generated.
Before you begin, make sure you have Docker installed. Start Docker desktop.
Fetching the prebuilt image from DockerHub
The quickest method to get going is to just pull a prebuilt copy from DockerHub (no guarantees on freshness) by running the following on your command line:
docker run --rm -v $PWD:/mnt/workspace -i -t swiftnav/libsbp-build:2022-06-14 /bin/bash
This will mount your local copy of the libsbp repository onto the image.
Check this link for newer tags. Alternatively, you could run
docker run --rm -v $PWD:/mnt/workspace -i -t swiftnav/libsbp-build:latest-master /bin/bash
if you are facing issues with compilation and the tags are out of date as well.
Creating your own image
Dockerfile will create a docker image that contains all the
necessary dependencies to build libsbp. You can make a local image fresh from
this file by running
docker build as such:
docker build -t libsbp-build - <Dockerfile
Reading the Dockerfile from STDIN prevents docker from pulling in the whole
repostory into the build context (which is then immediately discarded anyway).
You can customize the UID of the user that's created with the docker image
by passing the desired
UID value to the build:
docker build -t libsbp-build --build-arg UID=1234 - <Dockerfile
You can then make this image operate on your local workspace like this:
docker run --rm -v $PWD:/mnt/workspace -i -t libsbp-build:latest /bin/bash
Using the docker image
Once in the image, simply type
make all to generate all the libsbp bindings.
This could take several hours to run. Alternately, the docker image will run
make all command by default, so you can kick off the
make all process
by simply running the following command:
docker run --rm -v $PWD:/mnt/workspace -i -t libsbp-build:2022-06-14
To speed up this process you can attempt to run Python environment tests in paralell with:
docker run --rm -v $PWD:/mnt/workspace -i -t -e SBP_TOX_PARALLEL=auto libsbp-build:2022-06-14
When you are finished, quit Docker so that it would not unnecessarily use up resources on your machine.
If you run into issues during the generation process, try running
Alternatively, you could recompile from a clean, newly-cloned libsbp repository
on your machine, which would minimize the chance of running into compilation
issues from an old build.
Installing from package managers
Some bindings are available on package managers:
python: available on pip
haskell: available on Hackage
Installing development Python versions
To install the Python binding from source (using pip) run the following command:
pip install 'file:///path/to/libsbp#subdirectory=python'
Or via setuptools directly:
cd /path/to/libsbp cd python python setup.py
Adding development version as a pip dependency
Run the following command:
pip install git+https://github.com/swift-nav/[email protected]<GIT_REVISION>#egg=sbp&subdirectory=python
Or add this to
Installing from source
You can build one binding at a time or update all at once:
are both valid. To see a list of all valid targets, run
Python version notes:
- By default the Python targets
make test-python(as well as
make all) run tests on all Python versions officially supported by the libsbp Python bindings, currently 3.6-3.9, skipping any versions not installed. To run tests on just specific Python version(s), specify the
TOXENVenvironment variable, e.g.,
TOXENV=py36 make python. Travis runs Python tests on all supported versions.
- By default the code generators are run on the system's (or virtual env's)
default Python interpreter. Currently Python versions 2.7, 3.5, and 3.7
are officially supported, other versions may or may not work. The generated
libsbp bindings should be the same on all supported Python versions. To use
a different version than your default Python interpreter, specify the
GENENVenvironment variable, e.g.,
GENENV=py27 make all(you must have that version of Python installed beforehand).
- To run both the generator and the Python tests on specific Python versions,
specify both envs, e.g.,
GENENV=py37 TOXENV=py37 make python
SBP Development Procedures
See the ["how to"](HOWTO.md) page for instructions on adding new messages, updating the [documentation](docs/sbp.pdf), and releasing new versions of this library.
SBP Protocol Specification
SBP consists of two pieces: (i) an over-the-wire message framing format and (ii) structured payload definitions. As of Version 1.0, the packet consists of a 6-byte binary header section, a variable-sized payload field, and a 16-bit CRC value. SBP uses the CCITT CRC16 (XMODEM implementation) for error detection.
Please see [the docs](docs/sbp.pdf) for a full description of the packet structure and the message types. Developer documentation for the language-specific sbp libraries is here. Please refer to [the changelog](CHANGELOG.md) for more information about the evolution of the library and its messages.
JSON Schema Definitions
Copyright © 2015-2022 Swift Navigation
Distributed under the [MIT open source license](LICENSE).
*Note that all licence references and agreements mentioned in the sbp README section above are relevant to that project's source code only.