Skip to main content

bsdkrun_sdk/
lib.rs

1//! `bsdkrun` — a Rust SDK for [bsdkrun](https://github.com/tsirysndr/bsdkrun),
2//! a Firecracker-style microVM launcher for BSD, Linux, and unikernel guests.
3//!
4//! A thin, blocking wrapper: locally it builds argv, shells out to the
5//! `bsdkrun` binary, and parses the JSON output; remotely, [`Client`] drives
6//! the same operations against a `bsdkrund` daemon's GraphQL API. No async
7//! runtime anywhere.
8//!
9//! ```no_run
10//! use bsdkrun_sdk::Sandbox;
11//!
12//! let sandbox = Sandbox::linux("alpine")
13//!     .cpus(2)
14//!     .mem(1024)
15//!     .port("8080:80")
16//!     .command(["sleep", "300"])
17//!     .create()?;
18//!
19//! println!("{}", sandbox.exec(["uname", "-a"])?.text());
20//! sandbox.stop()?;
21//! # Ok::<(), bsdkrun_sdk::Error>(())
22//! ```
23//!
24//! Host-level operations live in the [`images`], [`volumes`], [`networks`]
25//! and [`system`] modules; the remote client in [`Client`].
26
27mod args;
28mod binary;
29pub mod cache;
30pub mod ci;
31mod client;
32mod error;
33mod filesystem;
34mod process;
35mod sandbox;
36pub mod transport;
37mod types;
38
39pub mod images;
40pub mod networks;
41pub mod system;
42pub mod volumes;
43
44pub use binary::{reset_binary_cache, resolve_binary, set_binary_path};
45pub use cache::{Cache, CacheEntry, RestoreResult};
46pub use client::{
47    AiStartBuilder, BranchBuilder, BsdOs, Client, DockerStartBuilder, FollowLogsBuilder,
48    RunBsdBuilder, RunFlavorBuilder, RunLinuxBuilder, RunNanosBuilder, RunOsvBuilder,
49    RunSolo5Builder, RunUnikraftBuilder, ShellBuilder, ShellSession, Subscription,
50};
51pub use error::{Error, Result};
52pub use filesystem::FileSystem;
53pub use process::{run, run_binary, run_checked, spawn, BinaryResult, RawResult};
54pub use sandbox::{
55    CommandBuilder, FirmwareBuilder, FreebsdBuilder, KernelBuilder, LinuxBuilder, NanosBuilder,
56    NetbsdBuilder, OsvBuilder, Sandbox, Solo5Builder, SshSetupBuilder, TailscaleUpBuilder,
57    UnikraftBuilder, UpdateBuilder,
58};
59pub use transport::{normalize_url, ws_url, TOKEN_ENV, URL_ENV};
60pub use types::{
61    AiAgent, AiSession, CommandResult, DockerContainer, DockerStatus, ExecResult, ImageInfo,
62    NetworkInfo, PortForward, RemoteExecResult, SandboxInfo, ShellSessionInfo, SnapshotInfo,
63    VolumeInfo,
64};