Files
Igor Sirotin b28d8c06cf build: run protoc-gen-go as a go tool (#7739)
protobuf v36 added `--<lang>_prefix=COMMAND`, which runs a protoc plugin
through a wrapper command instead of looking it up on PATH. That lets the
Go generator be declared in go.mod like every other tool dependency, so
its version is tracked in one place instead of three.

go-generate-fast rejects protoc flags it doesn't know, so the fork pin
moves to a commit that teaches it about --go_prefix.

Part of #7099.
2026-08-28 16:41:20 +01:00
..

status-go/protocol

This is an implementation of the secure transport and payloads which are a part of the Status Client specification.

This implementation uses SQLite and SQLCipher for persistent storage.

The payloads are encoded using protocol-buffers.

Content

  • messenger.go is the main file which exports Messenger struct. This is a public API to interact with this implementation of the Status Chat Protocol.
  • protobuf/ contains protobuf files implementing payloads described in the Payloads spec.
  • encryption/ implements the Secure Transport spec.
  • transport/ connects the Status Chat Protocol with a wire-protocol which in our case is either Whisper or Waku.
  • datasync/ is an adapter for MVDS.
  • applicationmetadata/ is an outer layer wrapping a payload with an app-specific metadata like a signature.
  • identity/ implements details related to creating a three-word name and identicon.
  • migrations/ contains implementation specific migrations for the sqlite database which is used by Messenger as a persistent data store.

Pinned communities bootstrap

Messenger can preload pinned communities at startup so a community is visible before any network fetch completes.

Source precedence:

  1. If STATUS_GO_PINNED_COMMUNITIES_DIR is set, payloads are loaded from that directory (*.rawpayload.hex).
  2. Otherwise, payloads embedded in the binary from pinned-communities/*.rawpayload.hex are used.

Runtime behavior:

  • Bootstrap runs only when the profile has no communities yet.
  • Bootstrap runs asynchronously during startup to avoid blocking app launch.
  • After import, each pinned community triggers a store-node refresh so pinned metadata is replaced by fresher network data.

History

Originally this package was a dedicated repo called status-protocol-go and was migrated into status-go. The new status-go/protocol package maintained its own dependencies until sub modules were removed and the root go.mod file managed all dependencies for the entire status-go repo.