gRPC API protocol between swarmd-firecracker and swarmcracker CLI / swarmctl.
SwarmCracker uses SwarmKit’s gRPC API via the github.com/moby/swarmkit/v2/api package, extended with a custom API versioning protocol (pkg/apiversion).
┌──────────────────┐ Unix Socket ┌────────────────────────┐
│ swarmcracker │ ───── gRPC (TLS) ────── │ swarmd-firecracker │
│ swarmctl │ /var/run/swarmkit/ │ (manager/worker) │
└────────┬─────────┘ └───────────┬────────────┘
│ X-SwarmCracker-Version: 1 │
│ (gRPC metadata interceptor) │
└─────────────────────────────────────────────────┘
Parameter
Value
Socket path
/var/run/swarmkit/swarm.sock
State directory
/var/lib/swarmkit
Transport
Unix socket + TLS
Certificates
Auto-generated by SwarmKit CA
" github.com/moby/swarmkit/v2/api "
" github.com/restuhaqza/swarmcracker/pkg/apiversion "
" google.golang.org/grpc/credentials "
// Load TLS certificates from state dir
tlsConfig := loadTLSConfig ( " /var/lib/swarmkit " )
" unix:///var/run/swarmkit/swarm.sock " ,
grpc . WithTransportCredentials ( credentials . NewTLS ( tlsConfig )),
apiversion . WithVersion (), // Injects X-SwarmCracker-Version metadata
client := api . NewControlClient ( conn )
SwarmCracker extends SwarmKit with a gRPC unary client interceptor that injects metadata into every outgoing RPC.
Header
Value
Description
x-swarmcracker-version
"1"
Current API version
import " github.com/restuhaqza/swarmcracker/pkg/apiversion "
// Option 1: Use convenience function
conn , err := apiversion . DialUnix ( socketPath , tlsConfig )
// Option 2: Add interceptor manually
conn , err := grpc . Dial ( addr ,
grpc . WithTransportCredentials ( creds ),
apiversion . WithVersion (),
import " github.com/restuhaqza/swarmcracker/pkg/apiversion "
func handleRequest ( ctx context.Context) {
// Extract client version from incoming metadata
if err := apiversion . ValidateVersion ( ctx , " 1 " ); err != nil {
return status . Error ( codes . FailedPrecondition , err . Error ())
Version
Release
Changes
1
v0.8.0+
Initial schema — all v0.x releases share this version
(empty)
pre-v0.8.0
Pre-versioning clients — treated as compatible
SwarmCracker leverages the following SwarmKit gRPC services via api.ControlClient:
RPC
Request
Response
Description
ListClusters
ListClustersRequest
ListClustersResponse
List all clusters (used for token generation)
GetCluster
GetClusterRequest
GetClusterResponse
Get cluster details
RPC
Request
Response
Description
ListNodes
ListNodesRequest
ListNodesResponse
List all nodes with status
GetNode
GetNodeRequest
GetNodeResponse
Get node details
UpdateNode
UpdateNodeRequest
UpdateNodeResponse
Update node labels/spec
RPC
Request
Response
Description
CreateService
CreateServiceRequest
CreateServiceResponse
Deploy a new service
UpdateService
UpdateServiceRequest
UpdateServiceResponse
Update existing service
RemoveService
RemoveServiceRequest
RemoveServiceResponse
Remove a service
ListServices
ListServicesRequest
ListServicesResponse
List all services
GetService
GetServiceRequest
GetServiceResponse
Get service details
InspectService
—
—
(via swarmctl)
RPC
Request
Response
Description
ListTasks
ListTasksRequest
ListTasksResponse
List tasks with optional filters
GetTask
GetTaskRequest
GetTaskResponse
Get individual task details
RPC
Request
Response
Description
CreateSecret
CreateSecretRequest
CreateSecretResponse
Store a secret
GetSecret
GetSecretRequest
GetSecretResponse
Retrieve a secret
ListSecrets
ListSecretsRequest
ListSecretsResponse
List all secrets
RemoveSecret
RemoveSecretRequest
RemoveSecretResponse
Delete a secret
CreateConfig
CreateConfigRequest
CreateConfigResponse
Store config data
GetConfig
GetConfigRequest
GetConfigResponse
Retrieve config data
ListConfigs
ListConfigsRequest
ListConfigsResponse
List all configs
RemoveConfig
RemoveConfigRequest
RemoveConfigResponse
Delete a config
RPC
Request
Response
Description
CreateNetwork
CreateNetworkRequest
CreateNetworkResponse
Create overlay network
ListNetworks
ListNetworksRequest
ListNetworksResponse
List all networks
GetNetwork
GetNetworkRequest
GetNetworkResponse
Get network details
RemoveNetwork
RemoveNetworkRequest
RemoveNetworkResponse
Delete a network
The SwarmKit TaskSpec runtime is used to encode Firecracker-specific configuration:
// SwarmKit container spec is converted to SwarmCracker types:
type NetworkAttachment struct {
ID string // Secret ID from manager
Name string // Secret name
Target string // Mount path in VM
Data [] byte // Fetched by agent from manager
The daemon exposes a local HTTP health endpoint for monitoring:
Attribute
Value
Bind address
127.0.0.1:8080
Endpoint
GET /healthz
Rate limit
10 req/s per client
Request timeout
5s
"timestamp" : " 2026-06-26T23:00:00Z " ,
Each Firecracker microVM exposes a local HTTP API on its socket:
Attribute
Value
Path
/var/run/firecracker/<task-id>/api.sock
Endpoint
GET /machine-config
Endpoint
GET / (info)
Protocol
HTTP via Unix socket
Used by swarmctl for VM introspection and the executor for lifecycle management.
Component
Path
API versioning
pkg/apiversion/
gRPC client helpers
cmd/swarmcracker/token_helper.go
gRPC service handlers
cmd/swarmd-firecracker/main.go
SwarmKit types
github.com/moby/swarmkit/v2/api
Executor bridge
pkg/swarmkit/executor.go (SwarmKit → Firecracker translation)
CNI network allocator
pkg/cni/allocator.go
Network discovery
pkg/discovery/consul.go