{"id":50319471,"url":"https://github.com/arcboxlabs/firecracker-client","last_synced_at":"2026-05-29T02:30:20.555Z","repository":{"id":337865100,"uuid":"1148102076","full_name":"arcboxlabs/firecracker-client","owner":"arcboxlabs","description":"Rust SDK for the Firecracker microVM API.","archived":false,"fork":false,"pushed_at":"2026-03-05T06:13:44.000Z","size":135,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-26T01:34:36.805Z","etag":null,"topics":["firecrakcer","microvm"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arcboxlabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-02T15:25:34.000Z","updated_at":"2026-03-22T21:46:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/arcboxlabs/firecracker-client","commit_stats":null,"previous_names":["arcbox-labs/firecracker-client","arcboxlabs/firecracker-client"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/arcboxlabs/firecracker-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcboxlabs%2Ffirecracker-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcboxlabs%2Ffirecracker-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcboxlabs%2Ffirecracker-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcboxlabs%2Ffirecracker-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arcboxlabs","download_url":"https://codeload.github.com/arcboxlabs/firecracker-client/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcboxlabs%2Ffirecracker-client/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33634611,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["firecrakcer","microvm"],"created_at":"2026-05-29T02:30:18.648Z","updated_at":"2026-05-29T02:30:20.539Z","avatar_url":"https://github.com/arcboxlabs.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Firecracker Rust Client SDK\n\nRust SDK for the [Firecracker](https://github.com/firecracker-microvm/firecracker) microVM API.\n\n## Crates\n\n| Crate | Description |\n|---|---|\n| `firecracker` | Facade — re-exports `api` + `sdk` + optional `runtime` |\n| `fc-api` | Low-level typed client, generated from Swagger spec via [progenitor](https://github.com/oxidecomputer/progenitor) |\n| `fc-sdk` | High-level typestate wrapper: `VmBuilder` → `Vm` lifecycle, process management |\n| `fc-cli` | CLI for runtime helpers and microVM process launch |\n\n## Quick Start\n\n```rust\nuse firecracker::sdk::{VmBuilder, types::*};\n\nlet vm = VmBuilder::new(\"/tmp/firecracker.socket\")\n    .boot_source(BootSource {\n        kernel_image_path: \"/path/to/vmlinux\".into(),\n        boot_args: Some(\"console=ttyS0\".into()),\n        initrd_path: None,\n    })\n    .machine_config(MachineConfiguration {\n        vcpu_count: std::num::NonZeroU64::new(2).unwrap(),\n        mem_size_mib: 256,\n        smt: false,\n        track_dirty_pages: false,\n        cpu_template: None,\n        huge_pages: None,\n    })\n    .start()\n    .await?;\n\nvm.pause().await?;\nvm.resume().await?;\nvm.create_snapshot(\"/tmp/snap\", \"/tmp/mem\").await?;\n```\n\nFor operations not covered by the SDK, use the generated API client directly:\n\n```rust\nlet client = vm.client();\nclient.describe_instance().send().await?;\n```\n\n## Process Management\n\n`fc-sdk` can spawn and manage the Firecracker process for you.\n\n### Direct (no jailer)\n\n```rust\nuse firecracker::sdk::FirecrackerProcessBuilder;\n\nlet process = FirecrackerProcessBuilder::new(\"/usr/bin/firecracker\", \"/tmp/fc.sock\")\n    .id(\"my-vm\")\n    .no_seccomp(true)\n    .cleanup_socket(true)\n    .spawn()\n    .await?;\n\nlet vm = process.vm_builder()\n    .boot_source(/* ... */)\n    .machine_config(/* ... */)\n    .start()\n    .await?;\n\n// process is killed and socket cleaned up on drop\n```\n\n### Via Jailer\n\n```rust\nuse firecracker::sdk::JailerProcessBuilder;\n\nlet process = JailerProcessBuilder::new(\n    \"/usr/bin/jailer\",\n    \"/usr/bin/firecracker\",\n    \"my-vm\",\n    1000, // uid\n    1000, // gid\n)\n.netns(\"/var/run/netns/my-ns\")\n.spawn()\n.await?;\n\n// Socket path is automatically computed from the chroot layout\nlet vm = process.vm_builder()\n    .boot_source(/* ... */)\n    .machine_config(/* ... */)\n    .start()\n    .await?;\n```\n\n### Restoring from Snapshot\n\n```rust\nuse firecracker::sdk::{restore, types::*};\n\nlet vm = restore(\n    \"/tmp/firecracker.sock\",\n    SnapshotLoadParams {\n        snapshot_path: \"/path/to/snapshot\".into(),\n        mem_file_path: Some(\"/path/to/mem\".into()),\n        mem_backend: None,\n        enable_diff_snapshots: None,\n        track_dirty_pages: None,\n        resume_vm: Some(true),\n        network_overrides: vec![],\n    },\n).await?;\n```\n\n### Rebuilding from Exported Config\n\n```rust\n// Export config from a running VM\nlet config = vm.config().await?;\n\n// Recreate a builder on a new Firecracker instance\nlet new_vm = VmBuilder::from_config(\"/tmp/new-fc.sock\", config)\n    .mmds_data(/* optional pre-boot MMDS data */)\n    .start()\n    .await?;\n```\n\n## Bundled Runtime Mode\n\nEnable this capability with:\n\n```bash\ncargo add firecracker --features bundled-runtime\n```\n\n`firecracker::runtime::bundled` supports resolving `firecracker` and `jailer` binaries from bundled\nFirecracker upstream release artifacts with optional fallback to system `PATH`.\nRelease-based bundled mode currently supports:\n\n- `linux-x86_64`\n- `linux-aarch64`\n\n```rust\nuse firecracker::runtime::bundled::{BundledMode, BundledRuntimeOptions};\n\nlet bundled = BundledRuntimeOptions::new()\n    .mode(BundledMode::BundledThenSystem)\n    .bundle_root(\"/opt/arcbox/bundled\")\n    .release_version(\"v1.12.1\")\n    .firecracker_sha256(\"sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\")\n    .jailer_sha256(\"sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789\");\n\nlet fc = bundled.firecracker_builder(\"/tmp/firecracker.socket\")?;\n\nlet jailer = bundled.jailer_builder(\"vm-1\", 1000, 1000)?;\n```\n\nSupported bundled path layout:\n\n- `{bundle_root}/release-vX.Y.Z-{arch}/firecracker-vX.Y.Z-{arch}`\n- `{bundle_root}/release-vX.Y.Z-{arch}/jailer-vX.Y.Z-{arch}`\n- `{bundle_root}/firecracker-vX.Y.Z-{arch}`\n- `{bundle_root}/jailer-vX.Y.Z-{arch}`\n- `{bundle_root}/{os}-{arch}/{binary}`\n- `{bundle_root}/{os}-{arch}/bin/{binary}`\n- `{bundle_root}/{arch}-{os}/{binary}`\n- `{bundle_root}/{arch}-{os}/bin/{binary}`\n- `{bundle_root}/{binary}`\n\nEnvironment variable overrides:\n\n- `FC_SDK_FIRECRACKER_BIN`\n- `FC_SDK_JAILER_BIN`\n- `FC_SDK_BUNDLED_DIR`\n- `FC_SDK_FIRECRACKER_RELEASE`\n\n`fc-cli` usage examples:\n\n```bash\n# Resolve both binaries using bundled-first strategy\ncargo run -p fc-cli -- resolve all --mode bundled-then-system --bundle-root /opt/arcbox/bundled --release v1.12.1\n\n# Resolve only firecracker from system PATH\ncargo run -p fc-cli -- resolve firecracker --mode system-only\n\n# Start a microVM and keep fc-cli attached (Ctrl+C to stop)\ncargo run -p fc-cli -- start \\\n  --mode bundled-then-system \\\n  --bundle-root /opt/arcbox/bundled \\\n  --release v1.12.1 \\\n  --kernel /path/to/vmlinux \\\n  --rootfs /path/to/rootfs.ext4 \\\n  --socket-path /tmp/firecracker.socket\n\n# Start a microVM in detached mode\ncargo run -p fc-cli -- start \\\n  --kernel /path/to/vmlinux \\\n  --rootfs /path/to/rootfs.ext4 \\\n  --detach\n\n# Start a microVM via jailer in detached mode\ncargo run -p fc-cli -- start \\\n  --backend jailer \\\n  --uid 1000 \\\n  --gid 1000 \\\n  --kernel /path/to/vmlinux \\\n  --rootfs /path/to/rootfs.ext4 \\\n  --detach\n\n# Show platform support for release-based bundled mode\ncargo run -p fc-cli -- platform\n```\n\n`fc-cli start` notes:\n\n- `--backend firecracker`:\n  uses `--socket-path` (default `/tmp/firecracker.socket`).\n- `--backend jailer`:\n  requires `--uid` and `--gid`; custom `--socket-path` is not supported.\n- `--backend jailer --daemonize`:\n  must be used together with `--detach`.\n- `--detach`:\n  leaves the process running and prints `socket` plus best-effort `pid`.\n- default (without `--detach`):\n  keeps `fc-cli` attached; press `Ctrl+C` for graceful shutdown.\n\n## Building\n\nRequires Node.js (for `npx swagger2openapi` during code generation).\n\n```bash\ncargo build\n```\n\n## License\n\nMIT OR Apache-2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farcboxlabs%2Ffirecracker-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farcboxlabs%2Ffirecracker-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farcboxlabs%2Ffirecracker-client/lists"}