This is an automated email from the ASF dual-hosted git repository.
popduke pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bifromq-sites.git
The following commit(s) were added to refs/heads/master by this push:
new f1a465c2 1. enable blog 2. add two blog drafts 3. archived
pre-incubation blogs(needs to be re-edited before re-publishing) 4. update
Download page
f1a465c2 is described below
commit f1a465c2752f5ed912f8dde90e8479f381c8a334
Author: Yonny Hao <[email protected]>
AuthorDate: Wed Dec 10 14:18:26 2025 +0800
1. enable blog
2. add two blog drafts
3. archived pre-incubation blogs(needs to be re-edited before re-publishing)
4. update Download page
---
.gitignore | 3 +-
.../2023-07-07-bifromq-opensource-pr.md | 0
.../2023-09-04-bifromq-auth-plugin.mdx | 0
.../2023-09-06-bifromq-architecture-overview.md | 0
.../2023-10-24-bifromq-standardcluster.mdx | 0
.../2023-12-01-bifromq-high-availability.mdx | 0
...-12-04-bifromq-topic-subscription-mechanism.mdx | 0
.../2024-03-14-bifromq-3.0.0.mdx | 0
.../bifromq-architecture-1.png | Bin
.../bifromq-architecture-2-1.png | Bin
.../bifromq-architecture-2-2.png | Bin
.../bifromq-architecture-3.png | Bin
.../BifroMQ-API-Service.png | Bin
.../BifroMQ-Dist-SubCluster.png | Bin
.../BifroMQ-Inbox-LoadBasedSplitter.png | Bin
.../BifroMQ-Inbox-SubCluster.png | Bin
.../BifroMQ-StandardCluster.png | Bin
.../BifroMQ-AutoEviction.png | Bin
.../BifroMQ-BrainSplit.png | Bin
.../BifroMQ-Domain.png | Bin
.../BifroMQ-DynamicConfig.png | Bin
.../BifroMQ-IndependentWorkload.png | Bin
.../BifroMQ-Join.png | Bin
.../BifroMQ-LeaderBalance.png | Bin
.../BifroMQ-RPCCluster.png | Bin
.../BifroMQ-RangeBalancer.png | Bin
.../BifroMQ-RangeLeaderBalancer.png | Bin
.../BifroMQ-RangeSplit.png | Bin
.../BifroMQ-RangeSplitBalancer.png | Bin
.../BifroMQ-RecoveryBalancer.png | Bin
.../BifroMQ-ReplicaCntBalancer.png | Bin
.../DistService.png | Bin
.../MQTT_Topic_TopicFilter.png | Bin
.../OnePass.png | Bin
.../TopicExpansionSet.png | Bin
blog/2025-12-10-introducing-apache-bifromq.mdx | 177 +++++++++++++++++++++
...-announcing-apache-bifromq-4-0-0-incubating.mdx | 47 ++++++
blog/authors.yml | 8 -
.../mqtt-at-the-frontline.png | Bin 0 -> 110505 bytes
.../two-tier-clustering.png | Bin 0 -> 336013 bytes
.../workload-independent-architecture.png | Bin 0 -> 195480 bytes
.../workload-migration.png | Bin 0 -> 226639 bytes
docs/cluster/standardcluster.md | 2 +-
docusaurus.config.ts | 10 +-
src/pages/download.mdx | 16 +-
45 files changed, 240 insertions(+), 23 deletions(-)
diff --git a/.gitignore b/.gitignore
index 5bb8efc9..3a6d257d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,4 +10,5 @@ package-lock.json
yarn.lock
.yarn
pnpm-lock.yaml
-build/
\ No newline at end of file
+build/
+AGENTS.md
\ No newline at end of file
diff --git a/blog/2023-07-07-bifromq-opensource-pr.md
b/archived_blogs/2023-07-07-bifromq-opensource-pr.md
similarity index 100%
rename from blog/2023-07-07-bifromq-opensource-pr.md
rename to archived_blogs/2023-07-07-bifromq-opensource-pr.md
diff --git a/blog/2023-09-04-bifromq-auth-plugin.mdx
b/archived_blogs/2023-09-04-bifromq-auth-plugin.mdx
similarity index 100%
rename from blog/2023-09-04-bifromq-auth-plugin.mdx
rename to archived_blogs/2023-09-04-bifromq-auth-plugin.mdx
diff --git a/blog/2023-09-06-bifromq-architecture-overview.md
b/archived_blogs/2023-09-06-bifromq-architecture-overview.md
similarity index 100%
rename from blog/2023-09-06-bifromq-architecture-overview.md
rename to archived_blogs/2023-09-06-bifromq-architecture-overview.md
diff --git a/blog/2023-10-24-bifromq-standardcluster.mdx
b/archived_blogs/2023-10-24-bifromq-standardcluster.mdx
similarity index 100%
rename from blog/2023-10-24-bifromq-standardcluster.mdx
rename to archived_blogs/2023-10-24-bifromq-standardcluster.mdx
diff --git a/blog/2023-12-01-bifromq-high-availability.mdx
b/archived_blogs/2023-12-01-bifromq-high-availability.mdx
similarity index 100%
rename from blog/2023-12-01-bifromq-high-availability.mdx
rename to archived_blogs/2023-12-01-bifromq-high-availability.mdx
diff --git a/blog/2023-12-04-bifromq-topic-subscription-mechanism.mdx
b/archived_blogs/2023-12-04-bifromq-topic-subscription-mechanism.mdx
similarity index 100%
rename from blog/2023-12-04-bifromq-topic-subscription-mechanism.mdx
rename to archived_blogs/2023-12-04-bifromq-topic-subscription-mechanism.mdx
diff --git a/blog/2024-03-14-bifromq-3.0.0.mdx
b/archived_blogs/2024-03-14-bifromq-3.0.0.mdx
similarity index 100%
rename from blog/2024-03-14-bifromq-3.0.0.mdx
rename to archived_blogs/2024-03-14-bifromq-3.0.0.mdx
diff --git
a/blog/images/2023-09-06-bifromq-architecture-overview/bifromq-architecture-1.png
b/archived_blogs/images/2023-09-06-bifromq-architecture-overview/bifromq-architecture-1.png
similarity index 100%
rename from
blog/images/2023-09-06-bifromq-architecture-overview/bifromq-architecture-1.png
rename to
archived_blogs/images/2023-09-06-bifromq-architecture-overview/bifromq-architecture-1.png
diff --git
a/blog/images/2023-09-06-bifromq-architecture-overview/bifromq-architecture-2-1.png
b/archived_blogs/images/2023-09-06-bifromq-architecture-overview/bifromq-architecture-2-1.png
similarity index 100%
rename from
blog/images/2023-09-06-bifromq-architecture-overview/bifromq-architecture-2-1.png
rename to
archived_blogs/images/2023-09-06-bifromq-architecture-overview/bifromq-architecture-2-1.png
diff --git
a/blog/images/2023-09-06-bifromq-architecture-overview/bifromq-architecture-2-2.png
b/archived_blogs/images/2023-09-06-bifromq-architecture-overview/bifromq-architecture-2-2.png
similarity index 100%
rename from
blog/images/2023-09-06-bifromq-architecture-overview/bifromq-architecture-2-2.png
rename to
archived_blogs/images/2023-09-06-bifromq-architecture-overview/bifromq-architecture-2-2.png
diff --git
a/blog/images/2023-09-06-bifromq-architecture-overview/bifromq-architecture-3.png
b/archived_blogs/images/2023-09-06-bifromq-architecture-overview/bifromq-architecture-3.png
similarity index 100%
rename from
blog/images/2023-09-06-bifromq-architecture-overview/bifromq-architecture-3.png
rename to
archived_blogs/images/2023-09-06-bifromq-architecture-overview/bifromq-architecture-3.png
diff --git
a/blog/images/2023-10-24-bifromq-standardcluster/BifroMQ-API-Service.png
b/archived_blogs/images/2023-10-24-bifromq-standardcluster/BifroMQ-API-Service.png
similarity index 100%
rename from
blog/images/2023-10-24-bifromq-standardcluster/BifroMQ-API-Service.png
rename to
archived_blogs/images/2023-10-24-bifromq-standardcluster/BifroMQ-API-Service.png
diff --git
a/blog/images/2023-10-24-bifromq-standardcluster/BifroMQ-Dist-SubCluster.png
b/archived_blogs/images/2023-10-24-bifromq-standardcluster/BifroMQ-Dist-SubCluster.png
similarity index 100%
rename from
blog/images/2023-10-24-bifromq-standardcluster/BifroMQ-Dist-SubCluster.png
rename to
archived_blogs/images/2023-10-24-bifromq-standardcluster/BifroMQ-Dist-SubCluster.png
diff --git
a/blog/images/2023-10-24-bifromq-standardcluster/BifroMQ-Inbox-LoadBasedSplitter.png
b/archived_blogs/images/2023-10-24-bifromq-standardcluster/BifroMQ-Inbox-LoadBasedSplitter.png
similarity index 100%
rename from
blog/images/2023-10-24-bifromq-standardcluster/BifroMQ-Inbox-LoadBasedSplitter.png
rename to
archived_blogs/images/2023-10-24-bifromq-standardcluster/BifroMQ-Inbox-LoadBasedSplitter.png
diff --git
a/blog/images/2023-10-24-bifromq-standardcluster/BifroMQ-Inbox-SubCluster.png
b/archived_blogs/images/2023-10-24-bifromq-standardcluster/BifroMQ-Inbox-SubCluster.png
similarity index 100%
rename from
blog/images/2023-10-24-bifromq-standardcluster/BifroMQ-Inbox-SubCluster.png
rename to
archived_blogs/images/2023-10-24-bifromq-standardcluster/BifroMQ-Inbox-SubCluster.png
diff --git
a/blog/images/2023-10-24-bifromq-standardcluster/BifroMQ-StandardCluster.png
b/archived_blogs/images/2023-10-24-bifromq-standardcluster/BifroMQ-StandardCluster.png
similarity index 100%
rename from
blog/images/2023-10-24-bifromq-standardcluster/BifroMQ-StandardCluster.png
rename to
archived_blogs/images/2023-10-24-bifromq-standardcluster/BifroMQ-StandardCluster.png
diff --git
a/blog/images/2023-12-01-bifromq-high-availability/BifroMQ-AutoEviction.png
b/archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-AutoEviction.png
similarity index 100%
rename from
blog/images/2023-12-01-bifromq-high-availability/BifroMQ-AutoEviction.png
rename to
archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-AutoEviction.png
diff --git
a/blog/images/2023-12-01-bifromq-high-availability/BifroMQ-BrainSplit.png
b/archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-BrainSplit.png
similarity index 100%
rename from
blog/images/2023-12-01-bifromq-high-availability/BifroMQ-BrainSplit.png
rename to
archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-BrainSplit.png
diff --git
a/blog/images/2023-12-01-bifromq-high-availability/BifroMQ-Domain.png
b/archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-Domain.png
similarity index 100%
rename from blog/images/2023-12-01-bifromq-high-availability/BifroMQ-Domain.png
rename to
archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-Domain.png
diff --git
a/blog/images/2023-12-01-bifromq-high-availability/BifroMQ-DynamicConfig.png
b/archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-DynamicConfig.png
similarity index 100%
rename from
blog/images/2023-12-01-bifromq-high-availability/BifroMQ-DynamicConfig.png
rename to
archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-DynamicConfig.png
diff --git
a/blog/images/2023-12-01-bifromq-high-availability/BifroMQ-IndependentWorkload.png
b/archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-IndependentWorkload.png
similarity index 100%
rename from
blog/images/2023-12-01-bifromq-high-availability/BifroMQ-IndependentWorkload.png
rename to
archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-IndependentWorkload.png
diff --git a/blog/images/2023-12-01-bifromq-high-availability/BifroMQ-Join.png
b/archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-Join.png
similarity index 100%
rename from blog/images/2023-12-01-bifromq-high-availability/BifroMQ-Join.png
rename to
archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-Join.png
diff --git
a/blog/images/2023-12-01-bifromq-high-availability/BifroMQ-LeaderBalance.png
b/archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-LeaderBalance.png
similarity index 100%
rename from
blog/images/2023-12-01-bifromq-high-availability/BifroMQ-LeaderBalance.png
rename to
archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-LeaderBalance.png
diff --git
a/blog/images/2023-12-01-bifromq-high-availability/BifroMQ-RPCCluster.png
b/archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-RPCCluster.png
similarity index 100%
rename from
blog/images/2023-12-01-bifromq-high-availability/BifroMQ-RPCCluster.png
rename to
archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-RPCCluster.png
diff --git
a/blog/images/2023-12-01-bifromq-high-availability/BifroMQ-RangeBalancer.png
b/archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-RangeBalancer.png
similarity index 100%
rename from
blog/images/2023-12-01-bifromq-high-availability/BifroMQ-RangeBalancer.png
rename to
archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-RangeBalancer.png
diff --git
a/blog/images/2023-12-01-bifromq-high-availability/BifroMQ-RangeLeaderBalancer.png
b/archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-RangeLeaderBalancer.png
similarity index 100%
rename from
blog/images/2023-12-01-bifromq-high-availability/BifroMQ-RangeLeaderBalancer.png
rename to
archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-RangeLeaderBalancer.png
diff --git
a/blog/images/2023-12-01-bifromq-high-availability/BifroMQ-RangeSplit.png
b/archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-RangeSplit.png
similarity index 100%
rename from
blog/images/2023-12-01-bifromq-high-availability/BifroMQ-RangeSplit.png
rename to
archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-RangeSplit.png
diff --git
a/blog/images/2023-12-01-bifromq-high-availability/BifroMQ-RangeSplitBalancer.png
b/archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-RangeSplitBalancer.png
similarity index 100%
rename from
blog/images/2023-12-01-bifromq-high-availability/BifroMQ-RangeSplitBalancer.png
rename to
archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-RangeSplitBalancer.png
diff --git
a/blog/images/2023-12-01-bifromq-high-availability/BifroMQ-RecoveryBalancer.png
b/archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-RecoveryBalancer.png
similarity index 100%
rename from
blog/images/2023-12-01-bifromq-high-availability/BifroMQ-RecoveryBalancer.png
rename to
archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-RecoveryBalancer.png
diff --git
a/blog/images/2023-12-01-bifromq-high-availability/BifroMQ-ReplicaCntBalancer.png
b/archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-ReplicaCntBalancer.png
similarity index 100%
rename from
blog/images/2023-12-01-bifromq-high-availability/BifroMQ-ReplicaCntBalancer.png
rename to
archived_blogs/images/2023-12-01-bifromq-high-availability/BifroMQ-ReplicaCntBalancer.png
diff --git
a/blog/images/2023-12-03-bifromq-topic-subscription-mechanism/DistService.png
b/archived_blogs/images/2023-12-03-bifromq-topic-subscription-mechanism/DistService.png
similarity index 100%
rename from
blog/images/2023-12-03-bifromq-topic-subscription-mechanism/DistService.png
rename to
archived_blogs/images/2023-12-03-bifromq-topic-subscription-mechanism/DistService.png
diff --git
a/blog/images/2023-12-03-bifromq-topic-subscription-mechanism/MQTT_Topic_TopicFilter.png
b/archived_blogs/images/2023-12-03-bifromq-topic-subscription-mechanism/MQTT_Topic_TopicFilter.png
similarity index 100%
rename from
blog/images/2023-12-03-bifromq-topic-subscription-mechanism/MQTT_Topic_TopicFilter.png
rename to
archived_blogs/images/2023-12-03-bifromq-topic-subscription-mechanism/MQTT_Topic_TopicFilter.png
diff --git
a/blog/images/2023-12-03-bifromq-topic-subscription-mechanism/OnePass.png
b/archived_blogs/images/2023-12-03-bifromq-topic-subscription-mechanism/OnePass.png
similarity index 100%
rename from
blog/images/2023-12-03-bifromq-topic-subscription-mechanism/OnePass.png
rename to
archived_blogs/images/2023-12-03-bifromq-topic-subscription-mechanism/OnePass.png
diff --git
a/blog/images/2023-12-03-bifromq-topic-subscription-mechanism/TopicExpansionSet.png
b/archived_blogs/images/2023-12-03-bifromq-topic-subscription-mechanism/TopicExpansionSet.png
similarity index 100%
rename from
blog/images/2023-12-03-bifromq-topic-subscription-mechanism/TopicExpansionSet.png
rename to
archived_blogs/images/2023-12-03-bifromq-topic-subscription-mechanism/TopicExpansionSet.png
diff --git a/blog/2025-12-10-introducing-apache-bifromq.mdx
b/blog/2025-12-10-introducing-apache-bifromq.mdx
new file mode 100644
index 00000000..c510ea1c
--- /dev/null
+++ b/blog/2025-12-10-introducing-apache-bifromq.mdx
@@ -0,0 +1,177 @@
+---
+slug: introducing-apache-bifromq
+title: "Introducing Apache BifroMQ (Incubating)"
+authors: [HaoYu]
+tags: [MQTT, Multi-Tenant, Serverless, Decentralized Cluster]
+---
+
+import MQTTAtTheFrontline from
'./images/2025-12-10-introducing-apache-bifromq/mqtt-at-the-frontline.png';
+import TwoTierClustering from
'./images/2025-12-10-introducing-apache-bifromq/two-tier-clustering.png';
+import WorkloadIndependentArchitecture from
'./images/2025-12-10-introducing-apache-bifromq/workload-independent-architecture.png';
+import WorkloadMigration from
'./images/2025-12-10-introducing-apache-bifromq/workload-migration.png';
+
+# Introducing Apache BifroMQ (Incubating): A High-Performance, Multi-Tenant
MQTT Broker
+
+When teams move from a few thousand devices to millions of always-on
connections, MQTT usually becomes a key piece of infrastructure. It offers a
simple publish/subscribe model, works well on constrained networks, and has
wide client support.
+
+But at cloud scale, the broker itself turns into frontline infrastructure: it
is the entry point for business traffic, it must handle massive numbers of
long-lived connections, and it has to remain reliable under bursty and
unpredictable workloads.
+
+Apache BifroMQ (Incubating) was built in this environment. In this post, we
give a high-level overview of what BifroMQ is, why another MQTT broker is
needed, and how its architecture is shaped by real large-scale IoT deployments.
+
+<!--truncate-->
+
+## What is Apache BifroMQ (Incubating)?
+
+Apache BifroMQ (Incubating) is a high-performance, distributed, Java-based
MQTT broker, designed from the ground up for cloud systems rather than
single-node or small-cluster deployments.
+
+At a glance:
+
+* **Standards-compliant MQTT**
+ Full support for MQTT 3.1, 3.1.1, and 5.0.
+
+* **Native multi-tenancy**
+ Resource and workload isolation for multiple tenants sharing the same
physical cluster.
+
+* **Elastic scalability**
+ Horizontally scalable for both concurrent connections and message throughput.
+
+* **Built-in distributed state store**
+ A storage layer optimized for MQTT-specific workloads such as persistent
sessions, inflight messages, and retained data.
+
+BifroMQ currently resides in the Apache Incubator. As an incubating project,
it follows the Apache way: open governance, community-driven decision-making,
and formal release processes.
+
+## Why another MQTT broker?
+
+While existing brokers serve a wide range of scenarios, BifroMQ is built
around a particular architectural viewpoint: the MQTT broker itself can and
should be engineered as a dedicated, distributed system with clear boundaries
and responsibilities.
+
+### MQTT at the frontline
+
+<img src={MQTTAtTheFrontline} style={{width: '100%'}} />
+
+In large deployments, the MQTT broker is not simply a protocol endpoint. It
sits at the frontline between the internet or intranet and downstream systems:
+
+* It must sustain massive numbers of long-lived client connections.
+* It must provide low-latency, bidirectional communication.
+* It must tolerate sudden bursts of traffic, such as when a large fleet
reconnects after an outage or a firmware rollout.
+
+In this role, the broker behaves more like a core piece of cloud
infrastructure than a traditional message queue.
+
+### Limitations of common approaches
+
+In practice, platform teams often try three patterns:
+
+1. **MQTT adapters over something else**
+ Implement MQTT as an adapter on top of another protocol or messaging
system.
+ *Pros*: reuses existing infrastructure.
+ *Cons*: protocol translation friction, limited control over
connection-level behavior, and an impedance mismatch between MQTT workloads and
the underlying system.
+
+2. **All-in-one IoT platforms**
+ Use a monolithic platform where MQTT is tightly embedded.
+ *Pros*: integrated feature set.
+ *Cons*: strong coupling makes it harder to evolve the MQTT layer
independently and often increases operational burden.
+
+3. **Non-clustered or single-tenant brokers**
+ Run multiple broker instances for different products or tenants.
+ *Pros*: simple to start.
+ *Cons*: lack of multi-tenant support, weak or absent clustering, and
difficulty in managing shared capacity at scale.
+
+These approaches often fall short when multiple tenants need to share the same
infrastructure with clear isolation, fleets grow into tens of millions of
devices, or operational teams aim for serverless-like elasticity on the data
plane while the control plane (identity, billing, policy) remains decoupled.
+
+BifroMQ takes a different angle: it is **MQTT-only**, **designed for
integration**, and **operations-oriented**.
+
+## The broker-first approach
+
+BifroMQ is built as a broker-first system:
+
+* **MQTT-only, purpose-built**
+ The system focuses on MQTT workloads instead of being a generic message bus.
This allows optimizations that are difficult in multi-protocol systems.
+
+* **Multi-tenancy as a core design**
+ Tenants share physical resources but have isolated workloads, making it
easier to host many customers or internal business units on the same cluster.
+
+* **Designed for integration**
+ Control-plane concerns (authentication, authorization, tenant management,
billing) are integrated through plugins and APIs, rather than hard-coded into
the broker. The data plane remains focused on MQTT.
+
+* **Operations-aware**
+ Self-healing mechanisms, customizable load-scheduling strategies, and
decentralized control help keep the system available under failure and load
spikes.
+
+The goal is to make BifroMQ a strong building block for IoT platforms and
internal device backbones, rather than a monolithic platform itself.
+
+## Architecture highlights
+
+BifroMQ's architecture reflects its focus on scale, multi-tenancy, and
operations.
+
+### Decentralized two-tier clustering
+
+<img src={TwoTierClustering} style={{width: '40%'}} />
+
+At a high level, BifroMQ distinguishes between two logical layers:
+
+1. **Host cluster (underlay)**
+ Represents the physical cluster composed of BifroMQ processes. It uses
gossip-based failure detection to track node health and CRDT-based anti-entropy
for membership and metadata convergence. The underlay provides a logically
addressable substrate on which services run.
+
+2. **Agent clusters (overlay)**
+ Represent logical service clusters that run within each BifroMQ process
(for example, MQTT service, distribution service, inbox service, retain
service). They communicate using a mix of peer-to-peer and broadcast patterns
and also employ CRDT-based metadata synchronization.
+
+This separation decouples engineering logic from the runtime environment.
Deployment becomes flexible: you can run different services together or apart,
depending on workload. There is no single point of failure for control; the
system favors decentralized coordination and self-healing.
+
+### Workload-independent architecture
+<img src={WorkloadIndependentArchitecture} style={{width: '50%'}} />
+Several internal services correspond to different aspects of MQTT behavior:
+
+* **MQTT Service**
+ Handles client connections, protocol parsing, and basic session management.
+
+* **Distribution Service**
+ Manages routing of published messages to subscribers across nodes and
tenants.
+
+* **Inbox Service**
+ Deals with queued messages and persistent sessions.
+
+* **Retain Service**
+ Handles retained messages and their lifecycle.
+
+A key design goal is workload independence: each service can scale and evolve
based on the specific resource profile it needs (CPU, memory, storage,
network).
+
+This enables deployment patterns such as on-demand workload scale-out, hybrid
workload deployments, and independent workload clusters with dedicated
resources and lifecycle.
+<img src={WorkloadMigration} style={{width: '75%'}} />
+
+### Extensibility: plugins, SPIs, and APIs
+
+In real deployments, the MQTT broker must be integrated into a broader
ecosystem:
+
+* Device identity and credential management
+* Authorization and policy engines
+* Billing, quota, and tenant administration
+* External control planes and automation tools
+
+BifroMQ addresses this with a set of extension mechanisms:
+
+* **Plugins** provide integration points for authentication, authorization,
client balancing, and other behaviors that vary between environments.
+* **SPIs** are the primary mechanism for deep customization and secondary
development, allowing advanced users to plug in their own implementations for
key behaviors without modifying the broker core.
+* **HTTP APIs and control endpoints** allow external systems such as a cloud
control panel or internal platform to manage tenants, configurations, and
operational actions through well-defined interfaces.
+
+The intent is to keep the MQTT data plane stable and focused, while still
making it straightforward to adapt BifroMQ to different organizational and
business requirements.
+
+### Roadmap and what is next
+
+The project roadmap can be viewed in two dimensions:
+
+1. **Core project**
+ Runtime efficiency and performance tuning, integration and extensibility
improvements, and operational resilience including self-healing and adaptive
scheduling.
+
+2. **Satellite projects**
+ Website, documentation, and blog content; tooling such as GUI or CLI for
operations; load simulation and benchmarking tools; and plugins for specific
industry scenarios.
+
+As an Apache Incubator project, BifroMQ's roadmap is expected to evolve with
community input. Early adopters, operators, and contributors can have a
significant impact on priorities.
+
+## Getting involved
+
+If BifroMQ matches challenges you face in your own IoT or device connectivity
platform, there are several ways to get involved:
+
+* Try out the latest Apache Incubator release in a test environment.
+* Explore the architecture and design documents to see how it fits your stack.
+* Join the mailing lists to ask questions, share experience, or propose
improvements.
+* Contribute bug reports, documentation, tests, or code.
+
+Apache BifroMQ (Incubating) aims to be a practical, operations-friendly MQTT
broker for large-scale, multi-tenant workloads. We look forward to feedback and
collaboration from the wider community as the project grows.
diff --git a/blog/2025-12-31-announcing-apache-bifromq-4-0-0-incubating.mdx
b/blog/2025-12-31-announcing-apache-bifromq-4-0-0-incubating.mdx
new file mode 100644
index 00000000..8a0d6244
--- /dev/null
+++ b/blog/2025-12-31-announcing-apache-bifromq-4-0-0-incubating.mdx
@@ -0,0 +1,47 @@
+---
+slug: announcing-apache-bifromq-4-0-0-incubating
+title: "Announcing Apache BifroMQ 4.0.0-incubating"
+authors: [HaoYu]
+tags: [BifroMQ, Apache, Incubator, Release, MQTT]
+---
+
+# Announcing Apache BifroMQ 4.0.0-incubating: The First Release in the Apache
Incubator
+
+We are pleased to announce the availability of Apache BifroMQ
4.0.0-incubating, the project's first release in the Apache Incubator.
+
+This release marks an important milestone: it represents the transition of
BifroMQ's pre-Apache development history and production experience into an
Apache-governed project, with community-driven development, transparent
processes, and formal release procedures.
+
+This blog post provides a high-level overview of the release. For full
details, please refer to the official release notes and latest online documents.
+
+<!--truncate-->
+
+## What this release represents
+
+Before entering the Apache Incubator, BifroMQ evolved as an internal system
and later as an open-source project driven by a small group of maintainers.
Joining the Apache Incubator changes the project in several important ways:
+
+- **Community over individuals or organizations:** Development, design
decisions, and releases are discussed and decided on public mailing lists under
the Apache way.
+- **Formalized release process:** Artifacts are produced, voted on, and
published according to Apache's policies, with clear provenance and
verification procedures.
+- **Clear licensing and branding:** The project adopts Apache License 2.0 and
aligns with Apache's branding and trademark guidelines.
+
+Version 4.0.0-incubating is the first release that fully reflects this
transition. It continues the technical lineage of earlier versions but should
be considered a major upgrade from a user's perspective.
+
+## Highlights in 4.0.0-incubating
+
+This release focuses on consolidating the architecture, improving operational
capabilities, and preparing the project for broader adoption. Key highlights
include:
+
+- **Independent workload cluster deployment mode:** MQTT frontends,
distribution services, session storage, and other components can run as
separate workload clusters so operators can scale and allocate resources
independently based on workload characteristics.
+- **Extensible client balancing:** A new client balancer plugin interface
enables custom strategies for distributing client connections across nodes or
clusters, which is particularly useful in multi-region and multi-tenant
environments.
+- **Additional extension points for deep customization:** More SPIs and hook
points have been introduced across the stack to support deep customization and
secondary development within BifroMQ.
+- **Operational improvements:** Enhancements to metrics, logging, and
administrative APIs support observability, troubleshooting, and automation.
+
+## Compatibility and upgrade notes
+
+Due to substantial internal refactoring and adjustments required to meet
Apache Incubator requirements, 4.0.0-incubating is not backward-compatible with
previous non-Apache releases of BifroMQ. If you are running a pre-Incubator
version of BifroMQ, treat this as a major upgrade:
+
+- Test 4.0.0-incubating in a separate environment first.
+- Review the release notes for behavior changes that affect your deployment.
+- Plan any configuration or operational adjustments before switching
production traffic.
+
+## Acknowledgements
+
+We would like to thank everyone who contributed code, reviews, testing, and
feedback, as well as the Apache Incubator mentors and community members who
helped guide the project through the initial steps of incubation.
diff --git a/blog/authors.yml b/blog/authors.yml
index 88459a67..4bcf4840 100644
--- a/blog/authors.yml
+++ b/blog/authors.yml
@@ -2,11 +2,3 @@ HaoYu:
name: Yonny(Yu) Hao
url: https://github.com/popduke
image_url: https://github.com/popduke.png
-MaFei:
- name: Ma Fei
- url: https://github.com/mafei6827
- image_url: https://github.com/mafei6827.png
-Jiawei:
- name: Gu Jiawei
- url: https://github.com/Gujiawei-Edinburgh
- image_url: https://github.com/Gujiawei-Edinburgh.png
diff --git
a/blog/images/2025-12-10-introducing-apache-bifromq/mqtt-at-the-frontline.png
b/blog/images/2025-12-10-introducing-apache-bifromq/mqtt-at-the-frontline.png
new file mode 100644
index 00000000..c134f0c2
Binary files /dev/null and
b/blog/images/2025-12-10-introducing-apache-bifromq/mqtt-at-the-frontline.png
differ
diff --git
a/blog/images/2025-12-10-introducing-apache-bifromq/two-tier-clustering.png
b/blog/images/2025-12-10-introducing-apache-bifromq/two-tier-clustering.png
new file mode 100644
index 00000000..3cbb3dfe
Binary files /dev/null and
b/blog/images/2025-12-10-introducing-apache-bifromq/two-tier-clustering.png
differ
diff --git
a/blog/images/2025-12-10-introducing-apache-bifromq/workload-independent-architecture.png
b/blog/images/2025-12-10-introducing-apache-bifromq/workload-independent-architecture.png
new file mode 100644
index 00000000..b46d9e72
Binary files /dev/null and
b/blog/images/2025-12-10-introducing-apache-bifromq/workload-independent-architecture.png
differ
diff --git
a/blog/images/2025-12-10-introducing-apache-bifromq/workload-migration.png
b/blog/images/2025-12-10-introducing-apache-bifromq/workload-migration.png
new file mode 100644
index 00000000..9815f2b2
Binary files /dev/null and
b/blog/images/2025-12-10-introducing-apache-bifromq/workload-migration.png
differ
diff --git a/docs/cluster/standardcluster.md b/docs/cluster/standardcluster.md
index 8a90466d..c35e3b70 100644
--- a/docs/cluster/standardcluster.md
+++ b/docs/cluster/standardcluster.md
@@ -3,7 +3,7 @@ sidebar_position: 1
title: "StandardCluster"
---
-This section illustrates the deployment process for a 3-node cluster. Similar
to [deployment on Linux](../installation/linux.md), you need to extract the
downloaded tar file first.
+This section illustrates the deployment process for a 3-node cluster. Similar
to [deployment on Linux](../installation/linux.mdx), you need to extract the
downloaded tar file first.
### Configurations
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index 22eeb9d0..cbc780c3 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -113,11 +113,11 @@ const config = {
position: "right",
label: "Docs",
},
- // {
- // to: "/blog",
- // label: "Blog",
- // position: "right",
- // },
+ {
+ to: "/blog",
+ label: "Blog",
+ position: "right",
+ },
{
to: "/community",
label: "Community",
diff --git a/src/pages/download.mdx b/src/pages/download.mdx
index 9df9cb73..9aa47fa9 100644
--- a/src/pages/download.mdx
+++ b/src/pages/download.mdx
@@ -76,26 +76,26 @@ Current release: **{releaseVersion}**(<a
href={releaseNoteUrl}>Release Note</a>)
If verification fails, discard the artifact and contact
`[email protected]`.
-## Docker image (convenience)
+## Docker image
Run quickly with the published image (source release remains authoritative):
-<CodeBlock language="bash">{`docker run -d --name bifromq -p 1883:1883
bifromq/bifromq:latest`}</CodeBlock>
+<CodeBlock language="bash">{`docker run -d --name bifromq -p 1883:1883
apache/bifromq:${releaseVersion}`}</CodeBlock>
Set memory limits:
-<CodeBlock language="bash">{`docker run -d -m 10G -e MEM_LIMIT='10737418240'
--name bifromq -p 1883:1883 bifromq/bifromq:latest`}</CodeBlock>
+<CodeBlock language="bash">{`docker run -d -m 2G -e MEM_LIMIT='2147483648'
--name bifromq -p 1883:1883 apache/bifromq:${releaseVersion}`}</CodeBlock>
Pass custom JVM options with `JVM_HEAP_OPTS` as needed.
-## Plugin packages (Maven Central)
+## Plugin Interface Modules (Maven Central)
-Java plugins are published under `org.apache.bifromq`. Match the plugin
version to your BifroMQ deployment:
+Java plugins interface modules are published under `org.apache.bifromq`. Match
the plugin version to your BifroMQ deployment:
<CodeBlock language="xml">{`<dependency>
- <groupId>org.apache.bifromq</groupId>
- <artifactId>bifromq-plugin-[NAME]</artifactId>
- <version>${releaseVersion}</version>
+ <groupId>org.apache.bifromq</groupId>
+ <artifactId>bifromq-plugin-[NAME]</artifactId>
+ <version>${releaseVersion}</version>
</dependency>`}</CodeBlock>
[Browse on Maven
Central](https://search.maven.org/search?q=g:org.apache.bifromq%20AND%20a:bifromq-plugin-*)