Skip to content

u-bmc/u-bmc

Repository files navigation

u-bmc

u-bmc is a modern, service-oriented Baseboard Management Controller (BMC) written in Go. It emphasizes reliability, clear separation of concerns, and production-grade APIs.

  • Communication: embedded NATS for inter-service IPC
  • APIs: ConnectRPC with HTTP/1.1, HTTP/2, and HTTP/3 support, JSON and protobuf
  • State: lightweight, supervised services with focused responsibilities
  • Hardware: GPIO, I2C/SMBus/PMBus, HWMON, and platform abstractions

This repository contains the services, packages, protobuf API, and documentation for the system. The software and API are currently in alpha (v1alpha1 schema).

Quick orientation

Architecture in brief

  • Operator orchestrates service lifecycle and supervision
  • Embedded NATS provides fast, reliable IPC with request/reply and pub/sub
  • Web server (websrv) exposes ConnectRPC APIs, with REST transcoding
  • Managers handle domains: power, thermal, sensors, inventory, users, security, updates
  • Telemetry integrates tracing and metrics across services

For a deeper dive, see System Overview and Architecture. Those documents include mermaid diagrams of service relationships and message flow.

API

  • Primary API: ConnectRPC served over HTTPS; supports JSON and protobuf content types
  • REST endpoints via HTTP annotations in the protobuf schema
    • Stable base path: /api/v1alpha1/…
    • See schema/v1alpha1/*.proto for the authoritative definitions
  • Protocol roadmap:
    • ConnectRPC (available now)
    • REST via transcoding (available now)
    • Redfish (planned)
    • IPMI (legacy compatibility; in progress)

A dedicated guide with request examples and schema pointers is available in API Guide.

Platforms and targets

  • Hardware targets live under targets/
    • Each real hardware target may include its own README (allowed)
  • To port a new platform:
    • Follow the step-by-step guide in Porting Guide
    • Provide platform wiring and capabilities (GPIO/I2C sensors, power rails)
    • Implement target bootstrap and service configuration
    • Add non-userspace and rootfs builder items to the TODOs as noted in the guide

Future work: a rootfs builder under dagger/ (this directory may contain its own README).

Web UI

  • A modern Web UI communicates via the same public API
  • Development and packaging are tracked in Web UI Guide (with a short README allowed in webui/)

Documentation policy

  • Package documentation is in Go source via doc.go and type/function comments
    • These render on pkg.go.dev and serve as the canonical package references
    • Packages should not contain markdown files
  • Project-wide and user-facing guides live under docs/ (file names are lowercase)
  • Exceptions for README files:
    • Hardware targets in targets/
    • The future rootfs builder in dagger/
    • The webui/

Contributing and licensing

Getting started

Links to additional documents:

About

Greenfield BMC Software Distribution using Linux and Go.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Generated from u-bmc/go-project-template