Rust ยท MIT License ยท 2026

MQTT Broker
Satu Binary,
Semua Kendali.

Merapi menggabungkan MQTT broker v3.1.1/v5.0, remote client, dan dashboard manajemen lengkap โ€” semuanya dalam satu binary portable tanpa dependensi eksternal.

v3.1.1 & v5.0
4 Platform
QoS 0/1/2 Exactly-once
Zero Dependensi
merapi-mqttbroker โ€” bash
$ ./merapi-mqttbroker-linux-amd64
Kemampuan

Fitur Lengkap
Tanpa Kompromi

Tiga komponen utama dalam satu binary: broker, remote client, dan web UI manajemen.

โšก

Dual Protocol

Mendukung MQTT v3.1.1 dan v5.0 secara bersamaan dengan session expiry (MQTT 5) yang bisa dikonfigurasi.

๐Ÿ”’

Transport Fleksibel

TCP, WebSocket, dan TLS dengan port yang bisa dikonfigurasi per transport layer.

๐Ÿ“ฆ

QoS 0 / 1 / 2

Exactly-once delivery dengan flow control penuh. Retained messages dengan persistensi per-topik.

๐ŸŒฟ

Topic Wildcards

Hierarchical topic tree dengan dukungan wildcard + dan # serta shared subscriptions.

๐Ÿ›ก๏ธ

Auth & ACL

Username/password authentication dengan ACL per-topik: publish, subscribe, pubsub, atau deny.

๐Ÿ’€

Last Will (LWT)

Last Will Testament dengan clean & persistent sessions dan connection limit per client.

๐Ÿ”—

Koneksi Eksternal

Hubungkan ke broker MQTT manapun via TCP. Cocok untuk bridge antara jaringan berbeda.

๐Ÿ”„

Auto-Reconnect

Reconnect otomatis dengan subscription restoration saat koneksi terputus.

๐Ÿ’พ

Persistent Session

Persistent sessions dengan clean_session=false untuk message queuing saat offline.

๐Ÿ“ค

Pub/Sub Penuh

Subscribe dan publish dengan QoS 0/1/2 dan retain flag yang bisa dikonfigurasi.

๐Ÿ“Š

Dashboard Real-time

Status broker/client, subscriptions aktif, message counters, dan quick publish โ€” auto-refresh setiap 3 detik.

๐ŸŒ

Embedded Binary

Web UI tertanam langsung di dalam binary โ€” tidak perlu file eksternal, tidak perlu web server terpisah.

๐ŸŒ™

Dark / Light Mode

Theme toggle dengan preferensi persisten ke localStorage. Sidebar collapsible & resizable.

๐Ÿ”ด

Live WebSocket

Real-time message streaming via WebSocket events langsung ke UI tanpa polling manual.

๐Ÿ‘ฅ

User Management

CRUD pengguna MQTT dengan enable/disable. ACL management berbasis topik per username.

๐Ÿ”

PIN Lock

Opsional PIN untuk akses Web UI. 3 kali gagal = permanent lock, perlu restart untuk reset.

Integrasi

REST API Endpoints

Semua fungsi manajemen tersedia via HTTP API untuk integrasi dengan sistem lain.

Method Endpoint Deskripsi
GET/api/broker/statusStatistik broker
GET/api/broker/clientsDaftar client terhubung
GET/api/broker/topicsTopic tree explorer
GET/api/broker/configAmbil konfigurasi broker
PUT/api/broker/configUpdate konfigurasi broker
POST/api/broker/startStart broker
POST/api/broker/stopStop broker
POST/api/publish/localPublish langsung ke broker lokal
GET/api/client/statusStatus koneksi client
POST/api/client/connectHubungkan ke broker eksternal
POST/api/client/disconnectPutus koneksi remote client
POST/api/client/subscribeSubscribe ke topik
POST/api/client/unsubscribeUnsubscribe dari topik
POST/api/client/publishPublish via remote client
GET/api/usersDaftar pengguna MQTT
POST/api/usersTambah pengguna baru
PUT/api/users/:idUpdate data pengguna
DELETE/api/users/:idHapus pengguna
PUT/api/users/:id/toggleAktifkan / nonaktifkan pengguna
GET/api/aclDaftar ACL rules
POST/api/aclTambah ACL rule baru
DELETE/api/acl/:idHapus ACL rule
POST/api/verify-pinVerifikasi PIN akses Web UI
GET/api/server/infoInfo host, port, dan LAN IP
Keamanan

Proteksi Berlapis

  • ๐Ÿ”
    PIN Lock Web UI

    3 kali gagal = permanent lock. Reset hanya via restart binary.

  • ๐Ÿ”‘
    AES-256-GCM Encryption

    Password tersimpan terenkripsi. Key file settings-merapi.key di-generate otomatis.

  • ๐Ÿ›ก๏ธ
    ACL Authorization

    Kontrol akses berbasis topik: publish, subscribe, pubsub, atau deny per username.

  • ๐ŸŒ
    TLS Transport

    Enkripsi end-to-end untuk koneksi MQTT dengan sertifikat kustom.

Persistensi

Data Aman Tersimpan

  • ๐Ÿ—„๏ธ
    SQLite Embedded

    Database settings-merapi.db untuk users, ACLs, dan konfigurasi broker.

  • โ™ป๏ธ
    Persisten Antar Restart

    Seluruh konfigurasi dan data otomatis tersimpan dan dimuat saat binary dijalankan ulang.

  • ๐Ÿ“Œ
    Retained Messages

    Retained messages persisten per-topik, bisa diaktifkan/nonaktifkan via konfigurasi.

Mulai Sekarang

Quick Start 3 Langkah

01

Download Binary

Pilih binary sesuai platform dari halaman Releases. Tidak perlu instalasi atau runtime tambahan.

๐Ÿง Linux ๐ŸชŸ Windows ๐ŸŽ macOS ๐Ÿค– Android
02

Jalankan Binary

Mode interaktif akan meminta port, bind address, dan PIN opsional.

Interactive Mode
$ ./merapi-mqttbroker-linux-amd64
Non-Interactive Mode
$ ./merapi-mqttbroker-linux-amd64 \
    --non-interactive \
    --port 8082 \
    --host 0.0.0.0
03

Buka Web UI

Akses dashboard manajemen lengkap di browser.

Browser
http://localhost:8082

CLI Options

FlagDefaultKeterangan
--port <PORT>8082Port Web UI
--host <HOST>0.0.0.0Bind address
--pin <PIN>kosongPIN akses (kosong = tanpa PIN)
--non-interactiveโ€”Jalankan tanpa prompt interaktif
Distribusi

Multi-Platform Binary

Binary siap pakai untuk semua platform populer, termasuk Android via shared library.

๐Ÿง

Linux

x86_64 (AMD64)

merapi-mqttbroker-linux-amd64 Download
๐ŸŽ

macOS Intel

x86_64

merapi-mqttbroker-macos-amd64 Download
๐ŸŽ

macOS Apple Silicon

ARM64 (M1/M2/M3)

merapi-mqttbroker-macos-arm64 Download
๐Ÿค–

Android

ARM64 (arm64-v8a)

libmerapi_core.so Download
Desain Sistem

Arsitektur Hexagonal

Clean Architecture memisahkan domain logic dari infrastruktur โ€” mudah diuji dan mudah dikembangkan.

src/
โ”œโ”€โ”€ main.rs              // CLI entry point
โ”œโ”€โ”€ lib.rs               // Library + Android JNI
โ”œโ”€โ”€ bootstrap.rs         // Dependency injection
โ”‚
โ”œโ”€โ”€ domain/
โ”‚   โ”œโ”€โ”€ models.rs        // Entities, value objects
โ”‚   โ””โ”€โ”€ ports.rs         // Port interfaces (traits)
โ”‚
โ”œโ”€โ”€ application/
โ”‚   โ””โ”€โ”€ services.rs      // Use-case services
โ”‚
โ””โ”€โ”€ infrastructure/
    โ”œโ”€โ”€ broker.rs        // MQTT broker (custom)
    โ”œโ”€โ”€ client.rs        // Remote client (rumqttc)
    โ”œโ”€โ”€ api.rs           // Axum HTTP/WebSocket
    โ”œโ”€โ”€ persistence.rs   // SQLite repositories
    โ””โ”€โ”€ crypto.rs        // AES-256-GCM
Domain Layer
Models & Ports (Traits) โ€” pure Rust, zero dependencies
โ†“
Application Layer
Use-case services โ€” orchestrates domain logic
โ†“
Infrastructure Layer
Broker ยท Client ยท HTTP API ยท SQLite ยท Crypto

Technology Stack

๐Ÿฆ€Rust 1.84+
โšกAxum (HTTP/WS)
๐Ÿ“กrumqttc (client)
๐Ÿ—„๏ธSQLite (bundled)
๐Ÿ”AES-256-GCM
๐Ÿ“ฑAndroid JNI
Open Source

Build dari Source

Prerequisites

Instalasi Rust
# Rust 1.84+ (stable)
curl --proto '=https' \
  --tlsv1.2 -sSf \
  https://sh.rustup.rs | sh

Tidak perlu OpenSSL atau C library eksternal โ€” SQLite sudah terbundel.

Build Release

Cargo
cargo build --release

Release build menggunakan opt-level z, LTO, panic=abort, dan stripped symbols untuk ukuran binary sekecil mungkin.

Cross Compile ke Android

cargo-ndk
rustup target add aarch64-linux-android
cargo install cargo-ndk
cargo ndk -t arm64-v8a \
  -o ../android-app/app/src/main/jniLibs \
  build --release

Siap Deploy
Merapi?

Satu binary. Tanpa dependensi. Langsung jalan di Linux, Windows, macOS, dan Android.