No description
  • Rust 65.9%
  • Go 28.2%
  • Cap'n Proto 2%
  • Shell 1.7%
  • Makefile 1.5%
  • Other 0.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
openshift-merge-bot[bot] b2dbe8c79b
Merge pull request #3361 from containers/dependabot/cargo/rust-dependencies-b89d7de20d
build(deps): bump the rust-dependencies group with 5 updates
2026-07-22 11:37:06 +00:00
.github build(deps): bump actions/checkout from 7.0.0 to 7.0.1 2026-07-21 12:02:54 +00:00
conmon-rs release: bump version to v1.0.1 2026-07-06 09:56:41 +02:00
contrib/tracing Update version to v0.7.3 and update linter 2025-11-17 14:16:33 +01:00
internal/proto enhancement: adopt conmon-rs as default container monitor 2026-06-09 08:43:44 +02:00
nix Modernize nix environment to use flakes 2026-03-26 09:45:49 +01:00
pkg/client ci: fix gci lint and get script GCS caching 2026-07-06 09:21:27 +02:00
scripts fix: use query parameter for GCS cache busting in get script 2026-07-06 09:24:46 +02:00
.codecov.yml enhancement: adopt conmon-rs as default container monitor 2026-06-09 08:43:44 +02:00
.gitignore Add cargo dependency update job 2024-08-14 15:13:22 +02:00
.golangci.yml Update version to v0.7.3 and update linter 2025-11-17 14:16:33 +01:00
.packit.sh Packit: Fix sed for release tag update in rpm spec 2023-03-09 19:43:04 +05:30
.packit.yaml Disable epel 9 builds for now 2025-06-25 08:14:17 +02:00
.rustfmt.toml Update rustfmt config 2025-06-26 13:27:45 +02:00
Cargo.lock build(deps): bump the rust-dependencies group with 5 updates 2026-07-22 11:05:59 +00:00
Cargo.toml optimize: remove getset, shadow-rs, once_cell and improve types 2026-02-10 13:06:19 +01:00
conmon-rs.spec.rpkg [CI:DOCS] Packit: fix comments 2023-02-14 17:52:35 +05:30
CONTRIBUTING.md Add issue and PR templates 2022-05-10 14:00:26 +02:00
Cross.toml ci: remove unnecessary cross build dependencies 2026-07-03 14:49:42 +02:00
deny.toml optimize: remove getset, shadow-rs, once_cell and improve types 2026-02-10 13:06:19 +01:00
dependencies.yaml build(deps): sync Go dependencies with CRI-O main 2026-07-02 12:36:17 +02:00
flake.lock enhancement: adopt conmon-rs as default container monitor 2026-06-09 08:43:44 +02:00
flake.nix build(deps): bump nixpkgs to fix static builds 2026-05-28 15:08:13 +02:00
go.mod build(deps): sync Go dependencies with CRI-O main 2026-07-02 13:00:20 +02:00
go.sum build(deps): sync Go dependencies with CRI-O main 2026-07-02 13:00:20 +02:00
LICENSE Add license 2021-11-08 13:08:21 +01:00
Makefile Modernize nix environment to use flakes 2026-03-26 09:45:49 +01:00
OWNERS Add CRI-O OWNERS 2024-08-26 10:00:48 +02:00
OWNERS_ALIASES Add @bitoku as reviewer 2025-07-03 08:56:43 +00:00
README.md enhancement: adopt conmon-rs as default container monitor 2026-06-09 08:43:44 +02:00
release.md optimize: remove getset, shadow-rs, once_cell and improve types 2026-02-10 13:06:19 +01:00
usage.md Fix typos 2025-10-01 14:44:54 +02:00

ci gh-pages codecov dependencies builds docs go-docs

A pod level OCI container runtime monitor.

The goal of this project is to provide a container monitor in Rust. The scope of conmon-rs encompasses the scope of the c iteration of conmon, including daemonizing, holding open container standard streams, writing the exit code.

However, the goal of conmon-rs also extends past that of conmon, attempting to become a monitor for a full pod (or a group of containers). Instead of a container engine creating a conmon per container (as well as subsequent conmons per container exec), the engine will spawn a conmon-rs instance when a pod is created. That instance will listen over an UNIX domain socket for new requests to create containers, and exec processes within them.

Obtain the latest version

We provide statically linked binaries for every successfully built commit on main via our Google Cloud Storage Bucket. Our provided get script can be used to download the latest version:

> curl https://raw.githubusercontent.com/containers/conmon-rs/main/scripts/get | bash

It is also possible to select a specific git SHA or the output binary path by:

> curl https://raw.githubusercontent.com/containers/conmon-rs/main/scripts/get | \
    bash -s -- -t $GIT_SHA -o $OUTPUT_PATH

The script automatically verifies the created sigstore signatures if the local system has cosign available in its $PATH.

More information about how to use conmon-rs can be found in the usage documentation.

If you want to create a new conmon-rs release, please refer to the release documentation.

Architecture

The whole application consists of two main components:

  1. The Rust server: conmon-rs/server (docs)
  2. A golang client: pkg/client (docs)

The golang client should act as main interface while it takes care of creating the server instance via the Command Line Interface (CLI) as well as communicating to the server via Capn Proto. The client itself hides the raw Capn Proto parts and exposes dedicated golang structures to provide a clean API surface.

The following flow chart explains the client and container creation process:

Goals

  • Single conmon per pod (post MVP/stretch)
  • Keeping RSS under 3-4 MB
  • Support exec without respawning a new conmon
  • API with RPC to make it extensible (should support golang clients)
  • Use pidfds for async process exit waiting
  • Act as pid namespace init
  • Join network namespace to solve running hooks inside the pod context
  • Use io_uring
  • Plugin support for seccomp notification
  • Logging rate limiting (double buffer?)
  • Stats
  • IPv6 port forwarding

Future development

In the future, conmon-rs may:

  • Be extended to mirror the functionality for each runtime operation.
    • Thus reducing the amount of exec calls that must happen in the container engine, and reducing the amount of memory it uses.
  • Be in charge of configuring the namespaces for the pod
    • Taking over functionality that pinns has historically done.