Open-source project
rogerbush007-a11y/DJOneHub-mac-enhanced avatar
rogerbush007-a11y/DJOneHub-mac-enhanced

DJOneHub turns a first-generation DJI 4G module into a Mac SIM terminal

将大疆第一代 4G 模块变成 Mac 上的实体 SIM 终端:4G、短信、来电、GPS 与通话控制。

524 stars196 forksGoNOASSERTION

At a glance

What is it?
DJOneHub is an unofficial Go and macOS project that exposes SMS, 4G, GPS, eSIM and two-way calling over the module's existing USB interfaces. It installs from a DMG, keeps its HTTP service on 127.0.0.1:7575, and never flashes module firmware.
Who is it for?
Adopt DJOneHub on an Apple Silicon Mac running macOS 13 or newer if you already own a first-generation DJI 4G module, a working physical SIM, and a data-capable USB-C cable, and you want SMS, 4G and calls in one app without touching firmware. Do not adopt it on Windows, where the README says module features are unverified, and do not expect it to work with a charging-only cable or a card the module refuses to read.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 32 days ago.
What is it written in?
Mainly Go, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The gap DJOneHub fills between a DJI 4G module and macOS

A first-generation DJI 4G module is a USB device that normally talks to DJI software. Plugged into a Mac, it exposes a management serial port, a USB network interface and an audio interface, but macOS has no built-in way to place a call, read an SMS or query the SIM. DJOneHub is an unofficial open source project that treats the module as a physical SIM terminal for the Mac. It works through the interfaces the module already presents and, per the README, does not flash or replace module firmware. The audience is narrow and specific: people who already own the module, have a usable physical SIM or a compatible physical eUICC card, and want SMS, 4G, GPS, contact sync and call control on macOS rather than through a phone. It is not a general cellular modem manager, and it does not make an unsupported USB device supported.

Go backend, native app, and a localhost-only HTTP service

The architecture splits into two processes. A Go backend handles USB and AT traffic, SMS, networking, GPS, eSIM and call state. A native macOS app handles the phone, SMS, contacts, settings and system notifications. According to the README, two-way calling on the Mac uses the module's USB Audio, and the app loads a module-side voice runtime only after the user confirms it, verifying the download with SHA-256 and caching it locally. That runtime is not shipped in the source tree, the DMG, the ZIP or any release, so first use depends on a network fetch from a fixed upstream. The repository layout matches this split: cmd/, internal/, pkg/ and tools/ for the Go side, macos/ for the app, packaging/ and scripts/ for distribution, and third_party/ for vendored Go dependencies. The go.mod file replaces several modules with local copies under third_party/, including euicc-go, uicc-go and quectel-qmi-go, which means the build does not pull those from the network. The local HTTP service listens only on 127.0.0.1:7575. The README states that SIM, SMS, contacts, recordings and card data should not leave the user's device.

Installing DJOneHub from the DMG and making a first call

The macOS package is DJOneHub-macOS-universal-v1.2.10.dmg and targets macOS 13 Ventura or newer. The README states the release bundles the required libusb, so Homebrew, Go and Node.js are not needed for normal use. Open the DMG and run the installer command inside it.

text
安装 DJOneHub.command

After installation, launch the DJOneHub app, or start the service from the install directory.

sh
djonehub start

The backend then listens on a fixed loopback address. If you want the compatibility management page, the README gives a second command.

sh
djonehub open

Before any of that, the hardware has to enumerate. Insert the SIM or eUICC card, connect the module with a data-capable USB-C cable, and wait for macOS to finish USB enumeration. The README notes the module usually appears as USB device 2ca3:4006. If macOS sees nothing at all, the README points at charging-only cables, insufficient power and adapter compatibility before anything else. The module LED is a rough guide: solid red means no SIM inserted, blinking red means the SIM is not being read correctly, solid green means the SIM is recognized with generally good signal, and blinking green means the SIM is recognized but signal is weak or registration is still in progress. Firmware varies, so the README says to trust the SIM, signal and registration state shown in the app instead. On first launch, follow the setup page's module check. When the voice runtime prompt appears, read the source and verification information before confirming, because that step downloads executable code onto the module. The first call triggers a microphone permission request. If macOS refuses to open the app, use System Settings, Privacy and Security, and choose Open Anyway at the corresponding prompt. The README is explicit that removing the quarantine attribute should only be considered when the package came from this project's release page and its SHA-256 has been checked.

The Windows build exists but is not the same product

The v1.2.9 release also ships DJOneHub-Windows-amd64-v1.2.9.zip, which contains DJOneHub.exe. The README states plainly that Windows has not been verified against a real module, and that it does not provide the macOS-specific USB AT and eSIM support, the USB 4G automatic policy, native notifications, MapKit or two-way call audio. That is not a caveat bolted onto a working port; it is a list of the features that make the project useful on macOS. Anyone evaluating DJOneHub for a Windows machine is evaluating a different and much thinner tool. The macOS side carries its own unresolved item: the README says the v1.2.10 module-side network wake feature still needs acceptance testing with a real iPhone or iPad left locked for a long period. The mechanism is described, not proven in the documentation.

Where DJOneHub is the wrong tool

DJOneHub assumes a first-generation DJI 4G module. If you have a different cellular modem, or a module whose USB descriptor is not 2ca3:4006, nothing in the README suggests it will work. It also assumes a physical SIM or a physical eUICC card compatible with the current implementation; an unsupported card will show up as a blinking red LED and no registration. The app is macOS 13 or newer only, and the README notes that Apple Silicon is the verified path while Intel is included in the Universal build but should still be checked against real hardware for module connection and calls. There is a second dependency that is easy to miss: two-way calling needs a module-side voice runtime fetched at first use and verified by SHA-256. If that download fails, the README describes a retry chain through Raw and the GitHub Contents API, but an offline or heavily restricted network is still a failure mode for voice. Finally, the project is unofficial. It depends on reverse-engineered behaviour of DJI hardware and on AT command handling; a firmware change on the module side can break assumptions the code makes. The README's own history of USB configuration fixes, including the note that older UAC configurations no longer force the ADB bit and only add IMS and VoLTE, is evidence that this surface moves.

How DJOneHub differs from a generic modem manager

A general-purpose modem manager such as ModemManager is built around standard AT and QMI interfaces and a broad device database; it aims to bring any supported modem online for data, and it does not care about DJI-specific USB compositions or a module-side voice runtime. DJOneHub goes the other way. It targets one device family, keeps the module's firmware untouched, and builds the missing pieces (SMS storage cleanup, contact sync, DTMF, call recording entry points, GPS status, eUICC profile handling, AT debugging) around that single target. The trade-off is reach: ModemManager will talk to hardware DJOneHub has never seen, and DJOneHub will do things ModemManager does not attempt, such as switching the module into an iPhone or iPad USB composition that keeps USB 4G, AT and SMS while dropping USB Audio so the mobile device does not grab the Mac's audio output. If your goal is simply getting a cellular link up on a supported modem, a generic manager is the smaller dependency. If your goal is using this specific module as a SIM terminal, the generic tools do not cover the ground.

Licence, maintenance and the cost of upgrading

The repository's licence identifier is NOASSERTION, which means GitHub could not map the LICENSE file to a known SPDX identifier. That is not the same as having no licence, and it is not the same as a permissive one. Read LICENSE and THIRD_PARTY_NOTICES.md before redistributing anything, and note that the go.mod file vendors several dependencies under third_party/ with replace directives, so redistribution touches more than the project's own code. The module-side voice runtime is a separate case: the README states it is not included in the source, the DMG, the ZIP or any release, and that the app downloads it from a fixed upstream with SHA-256 verification. Anyone packaging DJOneHub for others has to account for that download rather than assume it travels with the installer. On maintenance, the last push was on 2026-08-30, and the most recent release, v1.2.10, was tagged the same day. The release history shows a steady run of fixes through v1.2.4 to v1.2.10, largely around first-time enablement, USB configuration detection and download recovery. Upgrading is not free of risk in one specific way: the README says the app saves the actual USB configuration before any high-risk change and restores it if verification fails, and that it re-reads the real configuration after reconnection instead of trusting a stale ready state. That is the mechanism to rely on, not a promise that every upgrade is inert.

Editorial conclusion

Adopt DJOneHub on an Apple Silicon Mac running macOS 13 or newer if you already own a first-generation DJI 4G module, a working physical SIM, and a data-capable USB-C cable, and you want SMS, 4G and calls in one app without touching firmware. Do not adopt it on Windows, where the README says module features are unverified, and do not expect it to work with a charging-only cable or a card the module refuses to read. Verify the SHA-256 of the DMG against the release page before removing any quarantine attribute, confirm your module enumerates as 2ca3:4006, and test one call and one SMS before relying on it for a number you care about.

Frequently asked questions

What does the iPhone or iPad mode in DJOneHub actually change?

It turns off USB Audio while keeping USB 4G, AT commands and SMS, so a connected mobile device does not take over the Mac's audio output. When the module is plugged back into a Mac running DJOneHub, the full audio interface is restored.

Does DJOneHub modify the module firmware?

The README states the project works through the module's existing USB interfaces and does not flash or replace module firmware. It does install a module-side voice runtime on first confirmation, which is downloaded from a fixed upstream and verified with SHA-256.

Can I use DJOneHub on Windows with my DJI 4G module?

A Windows x64 package exists and contains DJOneHub.exe, but the README says it has not been verified on real Windows hardware with a module. It also lacks the macOS-specific USB AT and eSIM support, USB 4G automatic policy, native notifications, MapKit and two-way call audio.

Official sources

  1. Issues
  2. README
  3. Releases
  4. rogerbush007-a11y/DJOneHub-mac-enhanced on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/rogerbush007-a11y-djonehub-mac-enhanced.svg)](https://hysenlabs.com/projects/rogerbush007-a11y-djonehub-mac-enhanced)