Skip to content

Repository files navigation

Qcker Logo

Qcker

A daemonless, rootless container engine written in Rust

License Rust Version Docker Alternative

Qcker is a lightweight, high-performance alternative to Docker.
No daemon. No bloat. Just containers.

Production by PaongLabs


What's New in v1.1

  • Real MicroVM Backend: Full implementation with vsock host-guest communication, container lifecycle management (create/start/kill/delete), exec support, file operations via vsock, and automatic VM startup
  • vsock Protocol: Length-prefixed JSON protocol over vsock for zero-overhead host-guest communication with ping/pong health checks and timeout handling
  • Enhanced VmmManager: QEMU process management with serial console logging, KVM detection, version query, and graceful shutdown
  • Dracula Theme System: Centralized theme.rs with full Dracula color palette, status colors, gauge colors, semantic style helpers, and 20+ pre-built style functions
  • Zero Compiler Warnings: All Rust snake_case, dead_code, unused_import, and clippy warnings resolved across the entire workspace
  • Improved Error Handling: All error constructors now follow Rust naming conventions (snake_case)
  • TUI Refinements: Status bar uses darker background for visual separation, marketplace uses semantic status colors
  • Cleaner Codebase: Removed unused imports, dead code annotated, proper variable scoping

TUI Demo

Qcker TUI Demo

The TUI provides a visual dashboard for managing containers, browsing files, editing configs, and managing extensions with mouse support and auto-refresh.


Quick Start

Build from source

git clone https://github.com/farhanturu/qcker.git
cd qcker
cargo build --release

Run a container

# Simple command
sudo ./target/release/qcker run --rootfs /path/to/rootfs -- /bin/echo "Hello"

# Interactive shell
sudo ./target/release/qcker run --rootfs /path/to/rootfs -t -- /bin/sh

# With resource limits
sudo ./target/release/qcker run --rootfs /path/to/rootfs \
    --cpus 2 --memory 512 --pids-limit 256 \
    -- /bin/sh

# With GPU
sudo ./target/release/qcker run --rootfs /path/to/rootfs \
    --gpu --vram 1024 \
    -- /bin/sh

Open TUI

./target/release/qcker

Features

Container Management

  • Create, start, stop, kill, delete containers
  • List running and stopped containers
  • Execute commands inside running containers
  • Container logs and state inspection
  • Real-time stats (CPU, memory, PIDs)

Resource Limits

  • --cpus <cores> - CPU cores (e.g., 1.5)
  • --memory <MB> - Memory limit
  • --pids-limit <n> - Max processes
  • --gpu - Enable GPU access
  • --vram <MB> - VRAM limit

Security

  • Rootless by default
  • PID, network, mount, UTS, IPC, cgroup namespace isolation
  • Seccomp syscall filtering (BPF-based)
  • Capability dropping (all caps removed by default)
  • pivot_root container isolation (not chroot)
  • Path traversal protection in tar extraction
  • Cryptographic ID generation with getrandom

Error Handling

  • Unique error codes (Q-C001, Q-I001, etc.)
  • Source location tracking
  • Suggestions for fixing errors
  • JSON output for scripting
  • Retryable error detection

TUI (Terminal UI)

  • 7 tabs: Containers, Images, Networks, Volumes, Stats, Logs, Extensions
  • Browse and edit files inside containers
  • Real-time stats with CPU/memory bars
  • Dracula-inspired dark theme with semantic color system
  • Mouse support (click, scroll)
  • Auto-refresh
  • Container actions (stop, kill, delete) from TUI
  • Vim-style navigation (j/k)

Docker-Compatible CLI

  • qcker run, qcker ps, qcker images, qcker build, qcker exec
  • qcker network, qcker volume, qcker compose, qcker extension
  • qcker stats, qcker logs, qcker stop
  • qcker system info/prune

CLI Commands

Command Description
qcker run Run a container
qcker create Create a container
qcker start Start a container
qcker stop Stop a container
qcker kill Kill a container
qcker delete Delete a container
qcker ps List containers
qcker exec Execute in container
qcker images List images
qcker build Build from Dockerfile
qcker pull Pull image from registry
qcker logs View container logs
qcker stats View container stats
qcker network Manage networks
qcker volume Manage volumes
qcker compose Manage compose apps
qcker extension Manage extensions
qcker system System info and prune

Architecture

qcker/
├── crates/
│   ├── qcker-cli/          # CLI binary + TUI
│   ├── qcker-runtime/      # OCI runtime (namespaces, cgroups, seccomp)
│   ├── qcker-backend/      # Runtime backend (native, MicroVM)
│   ├── qcker-engine/       # Image, build, network, volume, compose, extension
│   ├── qcker-common/       # Shared utilities
│   ├── qcker-error/        # Error library with codes and suggestions
│   └── qcker-ext-api/      # Extension SDK
└── target/release/qcker    # Single binary (~7 MB)

Runtime Backends

Backend Platform Description
NativeBackend Linux Direct namespace/cgroup usage
MicroVmBackend macOS/Windows QEMU-based MicroVM

Backend selection is automatic based on platform.


MicroVM Support

Qcker includes a real MicroVM backend for running containers on macOS and Windows without a full Docker Desktop installation.

How it works:

  • On Linux: Uses native namespaces and cgroups (no VM needed)
  • On macOS/Windows: Spawns a minimal MicroVM via QEMU (qemu-system-x86_64 -machine microvm)
  • The MicroVM runs a guest agent that listens on vsock port 7421
  • Host sends commands via vsock (length-prefixed JSON protocol)
  • Container lifecycle: create → start → kill → delete (all via vsock)
  • File operations: read/write/list/delete via exec through vsock
  • Stats collection: CPU, memory, network, PIDs from guest agent
  • Port forwarding: host ports mapped to guest VM ports
  • Lazy VM startup: VM starts on first container creation
  • Auto-shutdown on backend shutdown with graceful guest agent notification

Protocol:

Host → VM (HostToVm):
  ping | container.create | container.start | container.kill
  container.delete | container.exec | container.stats | vm.shutdown

VM → Host (VmToHost):
  vm.ready | pong | container.created | container.started
  container.exited | container.stats | container.log | error

Extensions

Browse and manage extensions in the TUI Extensions tab.

Extension Category Status
bridge network Built-in
overlayfs storage Built-in
trivy security Available
cilium network Available
zfs storage Available
loki logging Available
buildkit build Available

Request new extensions: https://github.com/farhanturu/qcker-extensions/issues


Comparison

Feature Docker Podman Qcker
Daemon Yes No No
Rootless Optional Yes Yes
Language Go Go Rust
Binary size 200 MB 100 MB ~7 MB
TUI No No Yes
GPU support Manual Manual Built-in
Extensions Limited Limited Full SDK
Error codes No No Yes
MicroVM No No Yes

Requirements

  • Linux kernel 5.3+ (for native backend)
  • QEMU (for MicroVM backend on macOS/Windows)
  • Rust 1.70+ (for building)

Build

cargo build --release    # Release build
cargo test               # Run tests
cargo clippy             # Lint

License

Apache License 2.0 - see LICENSE


Author

PaongLabs

About

Qcker - A daemonless, rootless container engine in Rust. Lightweight Docker alternative with built-in TUI, GPU support, and extension system.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages