Welcome to the Bee Docs 🐝 📖

A framework for building IOTA nodes, clients, and applications in Rust.

Discord StackExchange Apache 2.0 license

AboutDesignSupporting the projectJoining the discussion


About

The IOTA Foundation aims to allow machines of all performance levels to contribute to the IOTA network, from microcontrollers to phones, web browsers, and servers.

Therefore, Bee is being developed as a modular collection of extendable crates, which expose foreign function interfaces (FFIs) for the next iteration of client libraries.

Note: You can find details about future development plans in our roadmap.

Design

Bee will be a central reference implementation for the most important data structures and algorithms. This implementation will be verified during a Request for Comments (RFC) process and eventually certified.

By using this approach, we hope that improvements to core components will quickly propagate to all other client libraries, rather than having to fix each one individually.

Note: The Rust programming language was chosen for Bee because of its C/C++ like performance and its strong memory safety guarantees. Learn more about Rust.

Supporting the project

If you want to discuss Bee or have some questions about it, join us on the IOTA Discord server in the #bee-dev and #bee-discussion channels.

If you want to be a part of development, please see the contributing guidelines for information on how to contribute.

Joining the discussion

If you want to get involved in the community, need help getting started, have any issues related to the repository or just want to discuss blockchain, distributed ledgers, and IoT with other people, feel free to join our Discord.

Overview

[TODO]

  • List all Crates

Setup a node

Installing from source

Dependencies

Debian

apt-get update
apt-get upgrade
apt-get install git npm build-essential cmake pkg-config librocksdb-dev llvm clang libclang-dev libssl-dev

MacOS

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install cmake npm

Windows

Open Powershell and execute the following commands:

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
choco install git --params '/NoAutoCrlf' nodejs-lts cmake --installargs 'ADD_CMAKE_TO_PATH=System' llvm

Restart Powershell

Rust

Minimum required version 1.51.

Installation (Debian, MacOS)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
Installation (Windows)

Install Rust from here.

Update
rustup update

Compilation

git clone https://github.com/iotaledger/bee.git --branch chrysalis-pt-2
cd bee/bee-node

With dashboard

git submodule update --init
cd src/plugins/dashboard/frontend
npm install
npm run build-bee
cd ../../../../
cargo build --release --features dashboard

Without dashboard

cargo build --release

Running

cp config.example.toml config.toml
../target/release/bee

Contribute to Bee

This document describes how to contribute to Bee.

We encourage everyone with knowledge of IOTA technology to contribute.

Thanks! :heart:

Do you have a question :question:

If you have a general or technical question, you can use one of the following resources instead of submitting an issue:

  • Developer documentation: For official information about developing with IOTA technology
  • Discord: For real-time chats with the developers and community members
  • IOTA cafe: For technical discussions with the Research and Development Department at the IOTA Foundation
  • StackExchange: For technical and troubleshooting questions

Ways to contribute :mag:

To contribute to Bee on GitHub, you can:

  • Report a bug
  • Suggest a new feature
  • Build a new feature
  • Join the Bee Initiative

Report a bug :bug:

This section guides you through reporting a bug. Following these guidelines helps maintainers and the community understand the bug, reproduce the behavior, and find related bugs.

Before reporting a bug

Please check the following list:

  • Do not open a GitHub issue for security vulnerabilities, instead, please contact us at security@iota.org.

  • Ensure the bug was not already reported by searching on GitHub under Issues. If the bug has already been reported and the issue is still open, add a comment to the existing issue instead of opening a new one.

Note: If you find a Closed issue that seems similar to what you're experiencing, open a new issue and include a link to the original issue in the body of your new one.

Submitting A Bug Report

To report a bug, open a new issue, and be sure to include as many details as possible, using the template.

Note: Minor changes such as fixing a typo can but do not need an open issue.

If you also want to fix the bug, submit a pull request and reference the issue.


Suggest a new feature :bulb:

This section guides you through suggesting a new feature. Following these guidelines helps maintainers and the community collaborate to find the best possible way forward with your suggestion.

Before suggesting a new feature

Ensure the feature has not already been suggested by searching on GitHub under Issues.

Suggesting a new feature

To suggest a new feature, talk to the IOTA community and IOTA Foundation members in the #bee-discussion channel on Discord.

Or, you can submit an official Request for Comments (RFC).


Build a new feature :hammer:

This section guides you through building a new feature. Following these guidelines helps give your feature the best chance of being approved and merged.

Before building a new feature

Make sure to discuss the feature in the #bee-discussion channel on Discord.

Otherwise, your feature may not be approved at all.

Building a new feature

To build a new feature, check out a new branch based on the master branch, and be sure to document any public-facing APIs, using Rust code comments.


Join the Bee Initiative :deciduous_tree:

The Bee Initiative is a collaborative effort to improve the Bee developer experience by focussing on the following goals:

  • Quality Assurance and Quality Control
  • Documentation
  • Benchmarks
  • RFCs
  • Node usability
  • Improvements to modules and libraries

How much time is involved

You can invest as much or as little time as you want into the initiative.

What's in it for you

In return for your time, not only do you get to be a part of the future of IOTA technology, you will also be given a badge on Discord to show others that you're a valuable member of the IOTA community.

How to join

If you're interested in joining, chat to us in the #experience channel on Discord.


Pull requests :mega:

This section guides you through submitting a pull request (PR). Following these guidelines helps give your PR the best chance of being approved and merged.

Before submitting a pull request

Before submitting a pull request, please follow these steps to have your contribution considered by the maintainers:

  • A pull request should have exactly one concern (for example one feature or one bug). If a PR addresses more than one concern, it should be split into two or more PRs.

  • A pull request can be merged only if it references an open issue

    Note: You don't need to open an issue for minor changes such as typos, but you can if you want.

  • All public interfaces should have descriptive documentation, including an example that compiles and passes documentation tests

  • All instances of unsafe should have a comment that explains why its use was unavoidable

  • All code should be well tested, using unit tests and integration tests

  • Code must compile and pass our continuous integration tests

  • To be compatible with the guidelines of the Eclipse foundation, all code must be licensed under the Apache License, Version 2.0. This license must be referenced in every crate of the workspace (add [./LICENSE] to the crate's top level directory). For Rust crates, every Cargo.toml must contain the line license = "Apache-2.0".

Submitting a pull request

The following is a typical workflow for submitting a new pull request:

  1. Fork this repository
  2. Create a new branch based on your fork. For example, git checkout -b fix/my-fix or git checkout -b feat/my-feature.
  3. Run the rustfmt command to make sure your code is well formatted
  4. Commit changes and push them to your fork
  5. Target your pull request to be merged with master

If all status checks pass, and the maintainer approves the PR, it will be merged.

Note: Reviewers may ask you to complete additional work, tests, or other changes before your pull request can be approved and merged.


Code of Conduct :clipboard:

This project and everyone participating in it is governed by the IOTA Code of Conduct.