BitMaelum software suite

logo

Go Report Card BitMaelum CI Coverage Status License GitHub go.mod Go version CII Best Practices Discourse Maintainability Rating


Image if we could redesign email without thinking about backward compatibility. What would it look like? Could we solve the problems we face nowadays like spam, email forgery, phishing emails and, maybe the most important one: privacy?

BitMaelum (old Anglo-Saxon for "bit-by-bit") is an attempt. Instead of trying to figure out how to fix email, we are building a new email system from the ground up. This way, we can design the system to solve mail problems at its core instead of trying to patch up an insecure foundation.

New to BitMaelum? Take a 5-minute tour to read what it is about.

Quickstart

To start with BitMaelum right away, check out Quickstart guide.

To build and test BitMaelum, check out build document.

Join us on our discourse forum: https://discourse.bitmaelum.com

Features

BitMaelum tries to be a system that:

  • Will be designed with privacy first
  • Deal with less to no spam at all
  • Nullifies mail address harvesting (it becomes a useless effort)
  • Host your mail wherever you like
  • Move your messages to another provider without losing your mail address
  • Allows that only you can subscribe and unsubscribe from mailing lists
  • Slow connection / mobile friendly

For more features, please take a look at our wiki

Development

BitMaelum is highly experimental and under heavy development. Do not use it yet in any production environment. We invite early-adopters to try out the system and contribute by testing.


https://bitmaelum.com/logo_and_name.svg.

Owner
BitMaelum
A proof-of-concept mail system - Privacy is yours again
BitMaelum
Comments
  • See if we can get rid of the scary opentelemetry package

    See if we can get rid of the scary opentelemetry package

    Some package we use, depends on opentelemetry.. this sounds scary (even though harmless, as we don't do any telemetry whatsoever).

    Just to make sure we don't get strange discussions, see if we can remove it somehow..

  • bm-client vault parameters are not clear

    bm-client vault parameters are not clear

    Describe the bug While trying to create a new vault on a specified file the parameters will induce to an error

    To Reproduce

    $ ./bm-client --vault test.vault vault init
    
    Vault already exists. Use --path to create a new vault on a specific path.
    
    $ ./bm-client --vault test.vault vault init --path .
    
    Please enter your new vault password:
    Please retype your new vault password:
    error: cannot create vault:  rename . ..backup: device or resource busy
    

    However this works

    $ ./bm-client  vault init --path test.vault
    
    Please enter your new vault password:
    Please retype your new vault password:
    successfully created a new vault at  test.vault
    

    Expected behavior Either --path or --vault should be used as parameter but not both

  • Resolver changes

    Resolver changes

    Fixes #200

    • Changed the configuration into a more robust resolver configuration system
    • allows to configure the resolvers
    • setting a default_resolver that always works (or gives an error during startup)
    • chaining is only done when asked, and will error when no entries are configured on the chain
  • Updated changelog

    Updated changelog

    Updated changelog to describe the latest changes

    - Service support: Now you can install both bm-bridge and bm-server as system services using bm-config
    - bm-bridge: It now uses a config file instead of parameters
    - bm-bridge: Support for mail relay (aka gateway mode) for organizations, this way an organization can "host" using the BitMaelum protocol.
    
  • Run bm-bridge and bm-server as a service

    Run bm-bridge and bm-server as a service

    This will allow to install a service to run bm-server or bm-bridge automatically.

    It will also use now a config file for bm-bridge and add support to run bm-bridge in your own organization, this way you can host your own mailgateway! account to translate BitMaelum messages to email addresses on your own organization.

  • bm-imap and bm-smtp

    bm-imap and bm-smtp

  • Onboarding process

    Onboarding process

    Even though we do have a lot of documentation, this project is fairly complex with all the moving parts around.

    Let's try and see if we can make an on-boarding process that allows us to easily start with bitmaelum (i think we already have a pretty ok tutorial, but let's double check)

  • messagepack

    messagepack

    Having a separate header.json, catalog.json and 0 or more blocks might not be the best way to manage messages. Instead, having a single file with the message would be "better".

    In that case, we could have a packed-message format. Maybe we shouldn't bother too much with inventing something new, and just use plain tar for this.

    During transmission, we still use all the parts separately, but once stored on a server, we could pack it.

    We have to figure out if this actually would work with things like scanning files etc

  • Multi-recipients

    Multi-recipients

    Implement the multi-recipient setup (see wiki https://github.com/bitmaelum/bitmaelum-suite/wiki/Multiple-recipients-(CC-and-BCC) and https://github.com/bitmaelum/bitmaelum-suite/wiki/Proposal-multi-recipients).

    • [ ] delivery pool configurable pool of workers that will deliver a block either remotely or locally.
    • [ ] proof-of-work pool this pool will either create a proof-of-work ticket, or returns quickly with a "in-progress" status. it should cache tickets so we can later fetch the ticket for uploading other blocks as well.
    • [ ] setup receiving side that will push blocks to the queue
    • [ ] update ticket system on client and server side to add extra info (header, blocks etc)
    func createPool() {
      for i:=0; i!=25; i++ {
        go poolWorker()
      }
    }
    func poolWorker() {
      for {
        data <- queueChannel
        ticket := ticketPool.getTicket(data.Header)
        if ticket == nil {
            // requeue data for later when the ticket is finished
            queueChannel <- data
            continue
        }
        deliver(data.Header, data.Block) // or catalog, or attachment)
    }
    
  • Validate all errors

    Validate all errors

    We should not discard errors with _, but handle them accordingly.

    All code should handle errors. If there is a solid reason not to do this then document on the line why this is not checked. Test code is allowed to disregard errors.

  • Revoke your account/keys

    Revoke your account/keys

    Proposal: we do a soft-delete (deleted_at column to the db). Later we can see if we want to hard-delete old records (say > 6months)

    We also need some kind of tool: bm-client account revoke or something?

A suite of microservices for software-defined networking (SDN) and bare-metal provisioning

M3L is a suite of microservices for software-defined networking (SDN) and bare-metal provisioning, which store their data as Custom Resources in Kubernetes.

Jan 19, 2022
Suite of libraries for IoT devices (written in Go), experimental for x/exp/io

Go libraries/drivers for IoT devices This repo contains a suite of libraries for IoT devices/sensors/actuators. The suite is meant to be as dependency

Sep 26, 2022
Dec 28, 2022
Windows helpers for GnuPG tools suite - OpenSSH, WSL 1, WSL2, Cygwin, MSYS2, Git4Windows, Putty...
Windows helpers for GnuPG tools suite - OpenSSH, WSL 1, WSL2, Cygwin, MSYS2, Git4Windows, Putty...

win-gpg-agent Simple set of tools to make working with GPG and SSH keys easier on Windows 10. Windows 10 has ssh-agent service (with support for persi

Jan 6, 2023
A suite of gRPC debugging tools. Like Fiddler/Charles but for gRPC.

grpc-tools A suite of tools for gRPC debugging and development. Like Fiddler/Charles but for gRPC! The main tool is grpc-dump which transparently inte

Dec 22, 2022
Procmon is a Linux reimagining of the classic Procmon tool from the Sysinternals suite of tools for Windows. Procmon provides a convenient and efficient way for Linux developers to trace the syscall activity on the system.
Procmon is a Linux reimagining of the classic Procmon tool from the Sysinternals suite of tools for Windows. Procmon provides a convenient and efficient way for Linux developers to trace the syscall activity on the system.

Process Monitor for Linux (Preview) Process Monitor (Procmon) is a Linux reimagining of the classic Procmon tool from the Sysinternals suite of tools

Dec 29, 2022
Dec 28, 2022
Extremely flexible golang deep comparison, extends the go testing package, tests HTTP APIs and provides tests suite
Extremely flexible golang deep comparison, extends the go testing package, tests HTTP APIs and provides tests suite

go-testdeep Extremely flexible golang deep comparison, extends the go testing package. Latest news Synopsis Description Installation Functions Availab

Jan 5, 2023
A tool suite for Redis profiling

Insecticide Insecticide is a tool suite for Redis profiling. It finds ambiguous values in your redis configuration.

Dec 13, 2021
A suite of tools for NFT generative art.

nftool A suite of tools for NFT generative art. Features Traits/Attributes/Properties Generation Configure custom rarity Generate collection attribute

Dec 15, 2022
A benchmark suite aims to compare the performance of HTTP request routers for Go

Go HTTP Router Benchmark This benchmark suite aims to compare the performance of HTTP request routers for Go by implementing the routing structure of

Oct 25, 2021
The test suite to demonstrate the chaos experiment behavior in different scenarios

Litmus-E2E The goal of litmus e2e is to provide the test suite to demonstrate the chaos experiment behavior in different scenarios. As the name sugges

Jul 7, 2022
Package zaperations provides a Google Cloud operations suite (formerly Stackdriver) compatible config for the uber-go/zap logger.

Package zaperations provides a Google Cloud Operations (formerly Stackdriver) compatible config for the excellent uber-go/zap logger. Example This exa

Nov 6, 2021
An HTTP request routing benchmark suite for Go.

Go HTTP Request Routing Benchmark An HTTP request routing benchmark suite for Go. Results goos: linux goarch: amd64 pkg: github.com/aofei/go-http-requ

Dec 14, 2021
Randomdata : a tiny help suite for generating random data

go-randomdata randomdata is a tiny help suite for generating random data such as first names (male or female) last names full names (male or female) c

Dec 5, 2021
Bitcoin UTXO & xPub Management Suite
Bitcoin UTXO & xPub Management Suite

BUX Bitcoin UTXO & xPub Management Suite Table of Contents About Installation Documentation Examples & Tests Benchmarks Code Standards Usage Contribut

Dec 19, 2022
Fix Burp Suite's horrible TLS stack & spoof any browser fingerprint
Fix Burp Suite's horrible TLS stack & spoof any browser fingerprint

Awesome TLS This extension hijacks Burp's HTTP and TLS stack to make it more powerful and less prone to fingerprinting by all kinds of WAFs. It does t

Jan 2, 2023
Conception was an experimental project, looking for ways to make software development more efficient.
Conception was an experimental project, looking for ways to make software development more efficient.

Conception Note: All future development is done in the Go version. Conception is an experimental research project, meant to become a modern IDE/Langua

Jul 21, 2022
Software Transactional Locks
Software Transactional Locks

Software Transactional Locks Package stl provides multiple atomic dynamic shared/exclusive locks, based on Software Transactional Memory (STM) concurr

Nov 5, 2022
Uniqush is a free and open source software system which provides a unified push service for server side notification to apps on mobile devices.

Homepage Download Blog/News @uniqush Introduction Uniqush (\ˈyü-nə-ku̇sh\ "uni" pronounced as in "unified", and "qush" pronounced as in "cushion") is

Jan 9, 2023