Title's "5 minutes" is marketing, not a promise — but ChirpStack v4 has genuinely compressed what used to take an engineer a week down to an afternoon tea break. The part where time still drains is the gateway side: serial logs, USB driver quirks, the regional configuration files. Software cannot remove those — they are wired into the Semtech concentrator's hardware interface spec.

Fx assumption (October 2026): $1 ≈ ¥6.71 CNY, €1 ≈ ¥7.88 CNY.


1. Why This Article Exists

"I want to run a private LoRaWAN network, I don't want TTN, I don't want AWS IoT Core charging me per message."

That is the highest-frequency, highest-abandonment question we see in 2026 across community forums, LinkedIn, Reddit r/LoRa, Hackster, and Chinese-language LoRa Spaces on Zhihu.

In 2024 and earlier, answering it took roughly one engineer-week. The reason was that ChirpStack v3 required four separate services (Network Server, Application Server, Gateway Bridge, Mosquitto), each with its own TOML file, its own database connection, its own systemd unit, and its own port and log to coordinate. That is why the prevailing community wisdom at the time was "use TTN or Helium; don't fight the integrator."

In early 2025, ChirpStack v4.0.0 shipped. By early 2026 we are on v4.12+. Two structural changes: Network Server and Application Server were merged into a single Rust binary; multi-region support is built-in, with no need to hand-edit five configuration files. ChirpStack Gateway OS — an OpenWrt-derived image — packages the gateway-side stack as either an SD card image or a web-UI firmware flash operation.

By October 2026, the common reference for getting a ChirpStack v4 private network running is: a Linux-familiar engineer with a Raspberry Pi 4 and one RAK commercial gateway can have their first OTAA device online within half a day. Readers at or above that line are the target of this article.

A second motivation: the market-side reality. The 2026 IIoT platform retirement wave is still going. In the past 24 months, six of the most-cited platform brands changed hands. In the past 36 months, hyperscale cloud vendors retired at least ten IoT services (Google IoT Core 2023-08-16, AWS IoT Analytics 2025-12-15, AWS IoT Events 2026-05-20, AWS Greengrass V1 2026-10-07, Azure TSI 2024-07-07, Azure IoT Central 2027-03-31 — all on the retirement list). Self-hosting with a strong upstream ecosystem (ChirpStack) is one of the few choices in this unstable market that you can count on still being there in three years.

2. What ChirpStack Is, and Why Choose It: Three Often-Overlooked Facts

Fact 1: ChirpStack is MIT-licensed, full-stack open source, with no Open Core carve-out. This matters. Many "open source" LoRaWAN gateways and platforms ship with hardware-locked Concentratord or Packet Forwarder bits underneath. ChirpStack's repositories on GitHub can be forked, modified, and sold commercially. There is no "buy an annual commercial license to use it commercially" second lock. HiveMQ and EMQX have built business models around that pattern; ChirpStack is not on that list.

Fact 2: v4 is not a progressive upgrade over v3 — it is a wholesale rewrite in Rust. v3 was Go with multiple processes. v4 is one chirpstack Rust binary with a standard gRPC API. The engineering consequences are: (a) performance rises — the same hardware supports more devices and gateways; (b) deployment goes from four services to one, though the supporting cast (PostgreSQL, Redis, Mosquitto, the certificate stack) is unchanged; (c) CLI and debugging tools changed, and a lot of community documentation about REST is now wrong — v4 leads with gRPC, REST runs as a separate bridging process (chirpstack-rest-api).

Fact 3: v4 has built-in multi-region support — one ChirpStack instance can serve EU868, US915, AS923, CN470, AU915, and IN865 simultaneously without separate instances per region. This is unusual. The Things Stack's self-hosted edition defaults to one region per instance and requires deliberate multi-tenant configuration. ChirpStack's approach is to split the configuration into per-region TOML files (region_eu868.toml, region_us915.toml), load all of them on startup, and automatically prefix MQTT topics per region (eu868/gateway/..., us915_0/gateway/...). For an operator running projects across multiple countries, that is a meaningful slice of operational cost removed.

Direct answers to three common anxieties:

One fact that does not appear in the ChirpStack documentation: Hernandez et al., in their 2024 IEEE Latin-American Conference paper "Downlink Scheduling in LoRaWAN: ChirpStack vs The Things Stack" (DOI 10.1109/LATINCOM62985.2024.10770676), measured actual downlink scheduling. Under their assumption set (3 gateways, Class A, confirmed traffic only, one packet per device every 150 seconds, 90-minute runs, gateway duty cycle disabled), ChirpStack schedules more downlinks than the gateways can transmit and prioritizes RX1; The Things Stack is more conservative, more accurate, and prioritizes RX2. The authors note that neither server accounted for duty cycle, so the ranking outside that specific traffic mix is not established. ChirpStack fits dense-response downlink scenarios (valve closing, siren activation, command execution); The Things Stack fits ultra-large deployments where billing accuracy matters more.

3. ChirpStack v4: Key Changes Catalog (vs v3)

This section is for engineers coming from v3 or evaluating ChirpStack for the first time. Changes affect five layers.

Dimension ChirpStack v3 (2020-2024 mainstream) ChirpStack v4 (2024 — )
Process model chirpstack-network-server + chirpstack-application-server as two independent processes Merged into a single chirpstack Rust process
Primary API REST (exposed by Application Server) gRPC primary; REST only as an optional bridging process
Configuration organization Single TOML file with master and region keys Configuration directory (configuration/chirpstack/), split by region
Region support One instance per region; needs custom config Multiple regions simultaneously, preconfigured per LoRa Alliance spec
Gateway Bridge ChirpStack Gateway Bridge v3.14 series (independent component) v4 supports Bridge v3.14+ and Gateway OS built-in stack
Device certification library TTN repository must be imported separately TTN LoRaWAN Devices repository natively supported (Codecs included)
Device metrics No native metrics system Device-level metrics dashboard (extracted and aggregated from Codec)
Identifiers Incremental integers (exposes tenant count) All UUID (resists enumeration)
Backend store PostgreSQL + Redis PostgreSQL + Redis (required) + MQTT broker (separate)

Four changes with direct deployment impact:

  1. The REST API is gone, but also still here. v3's REST was the integration surface of choice. v4 moved to gRPC, and REST became an optional process (chirpstack-rest-api) that you start separately in docker-compose. If you have a Python automation layer managing ChirpStack, the v3 REST scripts need to be rewritten as gRPC clients. That is a non-trivial amount of work.

  2. The configuration directory model is a step change. In v3, changing a region field meant editing master [network_server.network_netids], regional config [network_server.band], packet broker config [integration.mqtt.auth], and remembering which file's restart restarts which service. v4 splits regions into separate TOML files; adding a region is "copy region_eu868.toml, rename, add to enabled_regions." You never need to touch the main chirpstack.toml structure.

  3. TTN repository import solves the "where do I find the codec" pain point. The most common place LoRaWAN projects stall is the decoder — translating vendor binary formats into structured JSON at the NS side. Before v4 that meant hand-writing JavaScript. v4 imports the Things Network lorawan-devices repository natively, and tens of thousands of commercial end-device codecs become available out of the box (only for terminals registered in the repository — custom devices still need writing).

  4. The device metrics dashboard has hidden value. You do not need to write InfluxDB queries. The UI shows 7-day and 30-day time series of battery, temperature, uplink counts, directly. Whatever fields the Codec exposes, the dashboard shows automatically.

4. The 5-Minute Install: Real Engineering Time Decomposed

Note: The "5 minutes" in the title refers to the time from the moment the toolchain is ready — docker-compose up, edit four TOML files, log into the web UI, add the first Gateway Profile. It is not end-to-end time from a blank machine to first packet being processed (see the engineering estimate in section 9).

Two standard install paths, often mixed.

Path A: docker-compose (Recommended First Run)

For: Linux servers or a Raspberry Pi; want to see the web UI within an hour.

The community-maintained chirpstack-docker repository (github.com/MontagniAgustin/chirpstackV4-docker) was last updated to May 2025. The docker-compose.yml includes:

Typical timing:

Total about 30 minutes to an hour, dominated by the initial docker pull.

Path B: ChirpStack Gateway OS (Gateway-side Integration)

For: Don't want to configure a Packet Forwarder per gateway; need unified management across many gateways.

ChirpStack Gateway OS is an OpenWrt-derived embedded image that packages all of the stack (Concentratord, MQTT Forwarder, UDP Forwarder, Gateway Bridge) into either an SD card image or a firmware blob. Currently supported hardware:

Two image flavors: Base image is gateway-side components only (you bring your own NS); Full image additionally packages ChirpStack v4 NS plus Node-RED v3.1.15 — this is the actual "flash and run."

For a Raspberry Pi 4 with Full image plus one RAK7289v2 commercial gateway, field-tested timing:

Total about 1 to 1.5 hours from blank to first payload reported.

A common misconception: many people think Gateway OS is bound to ChirpStack. The Base image only contains gateway-side components and forwards data to any NS (TTN, self-hosted ChirpStack, ThinkLink, AWS IoT Core for LoRaWAN). The convenience of the Full image is mostly for personal/small-team PoC — you do not need to maintain a separate NS server.

Path C: Manual systemd + APT Repository (Production-recommended)

For: Going to production, running SLA, no desire to carry docker-compose's hidden "upgrade compatibility" debt.

The community Ansible playbook chirpstack/chirpstack-ansible-playbook covers the entire production-grade deployment:

Production hardware reference:

The benefit of going Ansible is idempotency: a configuration change will not be silently overwritten if a teammate hand-edited some file and the next ansible-playbook runs. This matters enormously for "operations handover to a new team member" — they can run the playbook once and the system returns to the documented state.

5. Gateway Side: How GD6 Connects to ChirpStack (Configuration Checklist)

ManThink GD6's strong point is that the entire protocol stack is supported out of the box — Semtech UDP Packet Forwarder, ChirpStack MQTT Forwarder (replacing UDP), Basic Station. This means there are two standard paths for connecting to ChirpStack v4:

Path 1: UDP Packet Forwarder → ChirpStack Gateway Bridge (v3.14+) → ChirpStack

This is the classic chain, and most commercial gateways ship with this configuration as the default.

GD6's UDP forwarder config sits at /etc/lora/global_conf.json (the regional section) plus /etc/lora/local_conf.json (per-gateway section). The fields you need to change:

Path 2: ChirpStack Gateway Bridge Installed Directly on the Gateway → Connect to Mosquitto

This is the more modern approach. The ChirpStack Gateway OS approach on RAK / Seeed commercial gateways is exactly to put the Bridge on the gateway itself, eliminating the uncontrollable UDP-back-network segment.

For GD6 — built on ESP32-S3 + SX1302 with open hardware — users can compile the GD6 community firmware and bring up chirpstack-gateway-bridge as a child process (via OpenWrt buildroot or as an ESP-IDF subproject). This takes about 1 to 2 engineering weeks for the porting and testing.

Path 3: Basic Station (Recommended for Production)

Basic Station is Semtech's next-generation backhaul protocol — WebSocket + mTLS. More secure than UDP (uplink frames are encrypted, client certificates authenticate the gateway). ChirpStack's Gateway Bridge has supported the Basic Station backend via reverse-proxy TLS since v4.1.0 (via PR #241 in August 2024).

GD6's Basic Station path requires:

If the gateway is shared by multiple users / teams, or if data traverses a carrier network, Basic Station becomes mandatory. v4's default recommendation is also Basic Station.

Minimum-viable Configuration Checklist

Six items you must verify when integrating GD6 with ChirpStack v4 — any one missed produces the classic "gateway connected but no uplink" symptom:

  1. Gateway ID must be EUI-formatted: The ID entered in the ChirpStack web UI when adding a gateway must match the EUI emitted by the gateway exactly. Copy-paste is safer than retyping to avoid case errors and stray colons.
  2. Region topic prefix consistency: region_eu868.toml and chirpstack-gateway-bridge-eu868.toml must agree on topic_prefix. If they do not, the MQTT message will never reach the consumer.
  3. MQTT broker credentials: v3 Bridge defaulted to unauthenticated broker connections; v4 Bridge recommends mTLS for production; password mode is only for PoC/demo environments.
  4. Firewall allow list for 1700/3001/8080: Local docker defaults open them; on a production host use ufw / nftables to allow them explicitly; on CentOS / RHEL also check firewalld.
  5. Clock synchronization: The time delta between gateway and server must stay within the tolerance the LoRaWAN MAC layer permits — a few seconds. On Linux use chrony; on OpenWrt use ntpclient. A large gap shows up as Join Accept timing misalignment.
  6. Do not enable GPS if there is no antenna: Many sites remove the GPS antenna to save cost, but ChirpStack NS defaults to reading latitude / longitude from UDP for scheduling. If you have no GPS, disable location in the Gateway Profile.

6. Coexistence with ThinkLink: Decoupling the Application Layer from the NS

Many readers ask: I'm already running ThinkLink (ManThink's homegrown platform), why would I need ChirpStack?

Two layers of answer:

Layer 1: NS vs Platform. ChirpStack is an NS (Network Server). Its job is device activation, ADR, deduplication, downlink scheduling. ThinkLink is a platform. Its job is device management, rules engine, integration, visualization. They do not conflict — ChirpStack handles the LoRaWAN protocol at the bottom; ThinkLink does data routing and business integration at the top.

Layer 2: MQTT forwarding lets both coexist. ChirpStack publishes device uplinks onto an MQTT broker. ThinkLink subscribes via MQTT Forwarder to perform application-layer processing. A typical deployment:

This "NS + Platform" dual-stack deployment's key advantage: no single point of dependency. If any one component falls over, the other can keep going short-term. The same logic applied to the TTN era, but the difference is that ThinkLink is fully self-hostable, while TTN is not.

The ManThink GD6 series firmware now supports configuring three backhaul destination addresses simultaneously — one gateway can ship to both ChirpStack (for production) and ThinkLink (for business visualization). This is a capability ManThink added incrementally after the article 16 platform landscape piece.

Counter-thinking: when should you run only ChirpStack, without ThinkLink?

When you must connect to ThinkLink or an equivalent application layer:

7. Operations: Monitoring, Backup, Upgrade

Once a private ChirpStack deployment is up, the biggest anxiety is "who finds out first when it goes down?"

Three minimum-viable health signals:

  1. Is chirpstack.service alive? systemctl is-active chirpstack, or curl http://localhost:8080/api/ returning 200. Ansible playbooks typically install a cron job pinging every 5 minutes and sending WeCom / Slack / email on failure.
  2. PostgreSQL data growth rate: All gateway state, device profile, event logs land in Postgres. Healthy week-over-week growth is below 100 MB; abnormal expansion usually means the log level was set too verbose (debug instead of info). Monitor this with cron running SELECT pg_database_size('chirpstack');.
  3. Active device count / daily uplink count anomalies: A device silent for >7 days with uplink count below threshold can be a Class A device caught in a join loop (failed join attempts, no payloads) or an RF problem (broken antenna, band interference). ChirpStack v4's device dashboard shows this directly.

Backup and recovery:

Upgrades:

One hidden gotcha: v4 removed the Concentratord backend from Gateway Bridge (Bridge v4.1.0 changelog explicitly states). So if you are using the Semtech SX1302 + Concentratord path (the legacy one), v4 Bridge no longer supports it directly — you must either switch to ChirpStack MQTT Forwarder installed on the gateway, or move to ChirpStack Gateway OS. GD6 users do not need to worry — GD6 defaults to the UDP Packet Forwarder path and is unaffected.

8. Before You Close It: Common Pitfall List

The 10 most-reported root causes from 2024 to 2026 GitHub issues, Hackaday comments, and community forums:

Rank Symptom Real cause
1 "Gateway added but no uplink" Gateway ID case or colon copy-paste error
2 "Device join 100% fails" DevEUI and AppKey are not a matching pair (OTAA must match)
3 "Uplink works, downlink never arrives" In Class A mode, the device must uplink first; the RX1 / RX2 window opens after
4 "Same frame appears twice" Two gateways both covered the device; ChirpStack internal deduplication is working as intended
5 "Mosquitto disconnects the bridge" mTLS certificate expired; systemd did not restart
6 "PG slow query" Device metrics dashboard never reindexed after large-scale delivery
7 "v4 cannot find device codec" Codec name case mismatch; v4 resolves by path, not by registration number
8 "In-container config edits are lost on restart" docker-compose did not bind-mount; the config is read-only and the container must be recreated
9 "Basic Station CUPS auth fails" TC URI is missing quotes; certificate path contains special characters
10 "v3 API errors after upgrading to v4" REST API runs as a separate process in v4; chirpstack-rest-api must be started separately

Do not try to memorize this checklist — you cannot — but work through it row by row when something is not working. 90% of "why won't it come up" issues live in this table.

9. Extending "5 minutes" into Actual Engineering Load

Back to the title's "5 minutes" — actual delivery time by role:

Engineering role Workload Main steps
DevOps / SRE, knows Docker but not LoRaWAN Half a day docker-compose up → edit region TOML → browser add gateway
LoRaWAN engineer, knows hardware but not operations 1 day GD6 firmware flash + band file + add first end device + verify
Full-stack developer, knows both 2 hours Run docker + write a script to batch-add device profiles
Embedded developer, knows only C, not Python 1 week Must first learn Docker, write codec, configure PG backup
No Linux experience at all 2-3 days Starts from Raspberry Pi image flashing; first time seeing the web UI

Real engineering load = install time + four things:

  1. Source one real end device (off-the-shelf LoRaWAN nodes run ¥670-1,340 / ~$100-200 each; second-hand SX1278 modules are ¥200-335 / ~$30-50 each but require you to write the LoRaWAN MAC layer yourself)
  2. Write or import the device codec (30 minutes to 2 hours)
  3. Design the payload protocol (which fields, how many bytes, how to compress; many projects spend a week on this step alone)
  4. Wire up the business integration (MQTT subscriber, HTTPS webhook feeding the data warehouse; 4 hours the first time)

Typical production private-network build cycle: 2 weeks to 2 months — covering hardware validation, capacity stress testing, disaster recovery drills, SLA documentation, training.

"5 minutes" is the time after the toolchain is ready until you first see the dashboard. It is not end-to-end "to production" time. But compared to v3, "toolchain ready" is now a very friendly concept.

10. ManThink Perspective: Why This Article Earns Its Place

The ManThink GD6 series has an often-overlooked word in its positioning: open source. This implies two things:

  1. Competitive direction — Different from industrial competitors RAK / Dragino / SenseCAP / TTIG, GD6 has its hardware design files, firmware source, and Buildroot configuration all publicly available. This product-level alignment with ChirpStack (also open source) is deliberate.
  2. Value proposition — Customers buy GD6, run ChirpStack, see the dashboard in 5 minutes. Buying TTIG out of the box means TTN by default; buying RAK for a private network means paying extra for consulting. This is GD6's most underappreciated differentiation in the private-network scenario.

Recommendations for integrators and end users:

ManThink's perspective: we do not sell cloud, we do not sell subscriptions. GD6 gateway + ThinkLink platform + ChirpStack ecosystem together are an engineering path where "you can read every line of code, all your data lives on your machines, and in three years the supply chain will not be interrupted by a platform deprecation."

11. A Sourced Final Word

Is installing ChirpStack v4 actually "5 minutes"? Yes, and no.

Yes: docker-compose one-liner to the browser dashboard is achievable in 5 minutes.

No: from a blank slate to the first reliable, end-to-end data-into-business pipeline is at least 1-2 weeks. 95% of that time is not in ChirpStack; it is in the device codec, in business integration, in disaster recovery drills, in capacity verification.

When we say "5 minutes to set up," what we really want to say is: make the cost of trying and failing as low as 5 minutes; make the cost of giving up as low as an afternoon coffee. That is the value of open source private networking — it is not cheaper than commercial, it lets you fail often.

That is the shared baseline between ManThink and projects like ChirpStack.


Appendix A: Glossary

Appendix B: References

  1. ChirpStack v4.0.0 release notes — GitHub newreleases.io mirror
  2. Hivebook Wiki "ChirpStack open-source LoRaWAN network server" edited 2026-09-19
  3. ChirpStack Gateway Bridge v4.1.0 changelog (Concentratord backend removed)
  4. ChirpStack Gateway OS installation documentation (DeepWiki mirror)
  5. chirpstack-ansible-playbook GitHub repository
  6. MontagniAgustin/chirpstackV4-docker example repository (May 2025)
  7. Aplus Technology — ChirpStack Services commercial support vendor
  8. Robustel R1520LG ChirpStack deployment blog
  9. Hernandez, Iova, Valois — "Downlink Scheduling in LoRaWAN: ChirpStack vs The Things Stack," IEEE LATINCOM 2024
  10. ManThink official documentation — GD6 Configuration Guide