[package]
edition = "2024"
rust-version = "1.95.0"
name = "mkit-cli"
version = "0.4.2"
authors = ["Official Unofficial, Inc."]
build = "build.rs"
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
default-run = "mkit"
description = "The mkit command-line tool: a content-addressed VCS with native attestation support"
readme = "README.md"
keywords = [
"mkit",
"vcs",
"cli",
"attestation",
"content-addressed",
]
categories = [
"command-line-utilities",
"cryptography",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/officialunofficial/mkit"
[package.metadata.binstall]
pkg-url = "{ repo }/releases/download/v{ version }/mkit-{ version }-{ target }.{ archive-format }"
pkg-fmt = "tgz"
bin-dir = "mkit-{ version }-{ target }/{ bin }{ binary-ext }"
pub-key = ""
[package.metadata.docs.rs]
all-features = true
[features]
bls-threshold = [
"mkit-attest/bls-threshold",
"mkit-keystore/bls-threshold",
"dep:rand_core",
"dep:commonware-codec",
]
default = []
enc-transport = [
"dep:mkit-transport-enc",
"mkit-transport-enc/tcp",
"dep:commonware-cryptography",
"dep:commonware-codec",
]
git-bridge = ["dep:mkit-git-bridge"]
git-export = ["git-bridge"]
history-mmr = ["mkit-core/history-mmr"]
http-transport = [
"mkit-transport-connect/server",
"dep:connectrpc",
"dep:axum",
"dep:tokio",
"dep:subtle",
"dep:http",
]
pack-shards = [
"mkit-core/pack-shards",
"mkit-transport-http/pack-shards",
"mkit-transport-s3/pack-shards",
]
sparse-checkout = [
"mkit-core/sparse-checkout",
"mkit-transport-http/sparse-checkout",
"mkit-transport-s3/sparse-checkout",
]
[lib]
name = "mkit_cli"
path = "src/lib.rs"
[[bin]]
name = "mkit"
path = "src/main.rs"
[[test]]
name = "add_hash_fanout_threshold"
path = "tests/add_hash_fanout_threshold.rs"
[[test]]
name = "add_patch"
path = "tests/add_patch.rs"
[[test]]
name = "applied_packs_fetch"
path = "tests/applied_packs_fetch.rs"
[[test]]
name = "applied_packs_lifecycle"
path = "tests/applied_packs_lifecycle.rs"
[[test]]
name = "attest_keystore"
path = "tests/attest_keystore.rs"
[[test]]
name = "attest_roundtrip"
path = "tests/attest_roundtrip.rs"
[[test]]
name = "blackbox_assert_cmd_demo"
path = "tests/blackbox_assert_cmd_demo.rs"
[[test]]
name = "branch_remote_stash_completeness"
path = "tests/branch_remote_stash_completeness.rs"
[[test]]
name = "branch_rename_commit_race"
path = "tests/branch_rename_commit_race.rs"
[[test]]
name = "checkout_materializes_worktree"
path = "tests/checkout_materializes_worktree.rs"
[[test]]
name = "chunked_blob_roundtrip"
path = "tests/chunked_blob_roundtrip.rs"
[[test]]
name = "cli_transcripts"
path = "tests/cli_transcripts.rs"
[[test]]
name = "cli_wire"
path = "tests/cli_wire.rs"
[[test]]
name = "clone_branch_origin"
path = "tests/clone_branch_origin.rs"
[[test]]
name = "commit_advance_head_wiring"
path = "tests/commit_advance_head_wiring.rs"
[[test]]
name = "commit_editor_fallback"
path = "tests/commit_editor_fallback.rs"
[[test]]
name = "commit_honors_user_identity"
path = "tests/commit_honors_user_identity.rs"
[[test]]
name = "commit_lock_scope"
path = "tests/commit_lock_scope.rs"
[[test]]
name = "commit_reads_index"
path = "tests/commit_reads_index.rs"
[[test]]
name = "config_durability_objects"
path = "tests/config_durability_objects.rs"
[[test]]
name = "config_git_aliases"
path = "tests/config_git_aliases.rs"
[[test]]
name = "config_unset"
path = "tests/config_unset.rs"
[[test]]
name = "conflict_clean_changes"
path = "tests/conflict_clean_changes.rs"
[[test]]
name = "conflict_mode_continue"
path = "tests/conflict_mode_continue.rs"
[[test]]
name = "conflict_workflow"
path = "tests/conflict_workflow.rs"
[[test]]
name = "corruption_rejection"
path = "tests/corruption_rejection.rs"
[[test]]
name = "crash_recovery"
path = "tests/crash_recovery.rs"
[[test]]
name = "diff_whitespace"
path = "tests/diff_whitespace.rs"
[[test]]
name = "fetch_pull_all"
path = "tests/fetch_pull_all.rs"
[[test]]
name = "fetch_pull_lock_scope"
path = "tests/fetch_pull_lock_scope.rs"
[[test]]
name = "gc_command"
path = "tests/gc_command.rs"
[[test]]
name = "git_export_integration"
path = "tests/git_export_integration.rs"
[[test]]
name = "git_import_integration"
path = "tests/git_import_integration.rs"
[[test]]
name = "git_parity_flags"
path = "tests/git_parity_flags.rs"
[[test]]
name = "git_parity_harness"
path = "tests/git_parity_harness.rs"
[[test]]
name = "help_snapshot"
path = "tests/help_snapshot.rs"
[[test]]
name = "history_mmr_branch_lifecycle"
path = "tests/history_mmr_branch_lifecycle.rs"
[[test]]
name = "history_mmr_records_commits"
path = "tests/history_mmr_records_commits.rs"
[[test]]
name = "ignore_matcher"
path = "tests/ignore_matcher.rs"
[[test]]
name = "json_outputs"
path = "tests/json_outputs.rs"
[[test]]
name = "key_keystore"
path = "tests/key_keystore.rs"
[[test]]
name = "keygen_multisig"
path = "tests/keygen_multisig.rs"
[[test]]
name = "layout_phase0_pin"
path = "tests/layout_phase0_pin.rs"
[[test]]
name = "linked_worktree_discovery"
path = "tests/linked_worktree_discovery.rs"
[[test]]
name = "local_parity"
path = "tests/local_parity.rs"
[[test]]
name = "lock_contention"
path = "tests/lock_contention.rs"
[[test]]
name = "log_filters"
path = "tests/log_filters.rs"
[[test]]
name = "log_json"
path = "tests/log_json.rs"
[[test]]
name = "log_ranges"
path = "tests/log_ranges.rs"
[[test]]
name = "mcp_server"
path = "tests/mcp_server.rs"
[[test]]
name = "mutating_json_outputs"
path = "tests/mutating_json_outputs.rs"
[[test]]
name = "mv_command"
path = "tests/mv_command.rs"
[[test]]
name = "pack_rebaseline"
path = "tests/pack_rebaseline.rs"
[[test]]
name = "pack_shard_command"
path = "tests/pack_shard_command.rs"
[[test]]
name = "plumbing_commands"
path = "tests/plumbing_commands.rs"
[[test]]
name = "push_delta"
path = "tests/push_delta.rs"
[[test]]
name = "push_multipack"
path = "tests/push_multipack.rs"
[[test]]
name = "push_named_remote"
path = "tests/push_named_remote.rs"
[[test]]
name = "push_pull_includes_pack"
path = "tests/push_pull_includes_pack.rs"
[[test]]
name = "rebase_honors_user_identity"
path = "tests/rebase_honors_user_identity.rs"
[[test]]
name = "rebase_interactive"
path = "tests/rebase_interactive.rs"
[[test]]
name = "recovery_producers"
path = "tests/recovery_producers.rs"
[[test]]
name = "reflog_and_amend"
path = "tests/reflog_and_amend.rs"
[[test]]
name = "remote_dispatch_connect"
path = "tests/remote_dispatch_connect.rs"
[[test]]
name = "remote_dispatch_s3"
path = "tests/remote_dispatch_s3.rs"
[[test]]
name = "remote_dispatch_ssh"
path = "tests/remote_dispatch_ssh.rs"
[[test]]
name = "remote_memory"
path = "tests/remote_memory.rs"
[[test]]
name = "remote_tracking_native"
path = "tests/remote_tracking_native.rs"
[[test]]
name = "remote_trust_gate"
path = "tests/remote_trust_gate.rs"
[[test]]
name = "remote_url_validation"
path = "tests/remote_url_validation.rs"
[[test]]
name = "rename_detection"
path = "tests/rename_detection.rs"
[[test]]
name = "repo_config_forbidden_keys"
path = "tests/repo_config_forbidden_keys.rs"
[[test]]
name = "reset_hard_clean"
path = "tests/reset_hard_clean.rs"
[[test]]
name = "restore_reset"
path = "tests/restore_reset.rs"
[[test]]
name = "revert_command"
path = "tests/revert_command.rs"
[[test]]
name = "root_publish_lock"
path = "tests/root_publish_lock.rs"
[[test]]
name = "roundtrip"
path = "tests/roundtrip.rs"
[[test]]
name = "self_update_flow"
path = "tests/self_update_flow.rs"
[[test]]
name = "serve_containment"
path = "tests/serve_containment.rs"
[[test]]
name = "show"
path = "tests/show.rs"
[[test]]
name = "sigpipe"
path = "tests/sigpipe.rs"
[[test]]
name = "sparse_checkout_http"
path = "tests/sparse_checkout_http.rs"
[[test]]
name = "sparse_checkout_local"
path = "tests/sparse_checkout_local.rs"
[[test]]
name = "sparse_checkout_s3"
path = "tests/sparse_checkout_s3.rs"
[[test]]
name = "ssh_e2e"
path = "tests/ssh_e2e.rs"
[[test]]
name = "ssh_e2e_real"
path = "tests/ssh_e2e_real.rs"
[[test]]
name = "ssh_retry_e2e"
path = "tests/ssh_retry_e2e.rs"
[[test]]
name = "state_machine"
path = "tests/state_machine.rs"
[[test]]
name = "status_integration"
path = "tests/status_integration.rs"
[[test]]
name = "status_porcelain_z"
path = "tests/status_porcelain_z.rs"
[[test]]
name = "tag_signed_roundtrip"
path = "tests/tag_signed_roundtrip.rs"
[[test]]
name = "transfer_progress"
path = "tests/transfer_progress.rs"
[[test]]
name = "trust_roots_binding"
path = "tests/trust_roots_binding.rs"
[[test]]
name = "verify_signatures_on_fetch"
path = "tests/verify_signatures_on_fetch.rs"
[[test]]
name = "version_snapshot"
path = "tests/version_snapshot.rs"
[[test]]
name = "worktree_command"
path = "tests/worktree_command.rs"
[[test]]
name = "worktree_gc_cross_tree"
path = "tests/worktree_gc_cross_tree.rs"
[[test]]
name = "worktree_safety"
path = "tests/worktree_safety.rs"
[dependencies.axum]
version = "0.8"
features = [
"http1",
"http2",
"tokio",
]
optional = true
default-features = false
[dependencies.buffa]
version = "0.9.1"
[dependencies.clap]
version = "4"
features = [
"std",
"help",
"error-context",
"usage",
"derive",
"string",
]
default-features = false
[dependencies.commonware-codec]
version = "=2026.7.1"
optional = true
[dependencies.commonware-cryptography]
version = "=2026.7.1"
features = ["std"]
optional = true
default-features = false
[dependencies.connectrpc]
version = "0.9.0"
features = [
"server",
"axum",
"gzip",
"json",
]
optional = true
default-features = false
[dependencies.flate2]
version = "1"
[dependencies.getrandom]
version = "0.4"
features = ["sys_rng"]
[dependencies.http]
version = "1"
optional = true
[dependencies.mkit-attest]
version = "0.4"
[dependencies.mkit-core]
version = "0.4"
[dependencies.mkit-git-bridge]
version = "0.4"
optional = true
[dependencies.mkit-keystore]
version = "0.4"
[dependencies.mkit-rpc]
version = "0.4"
[dependencies.mkit-transport-connect]
version = "0.4"
[dependencies.mkit-transport-enc]
version = "0.4"
optional = true
[dependencies.mkit-transport-file]
version = "0.4"
[dependencies.mkit-transport-http]
version = "0.4"
[dependencies.mkit-transport-s3]
version = "0.4"
[dependencies.mkit-transport-ssh]
version = "0.4"
[dependencies.rand_core]
version = "0.10"
optional = true
[dependencies.rayon]
version = "1"
[dependencies.reqwest]
version = "0.13"
features = [
"rustls",
"blocking",
"json",
]
default-features = false
[dependencies.serde_json]
version = "1"
[dependencies.sha2]
version = "0.11"
[dependencies.subtle]
version = "2"
optional = true
[dependencies.tar]
version = "0.4"
[dependencies.tempfile]
version = "3"
[dependencies.thiserror]
version = "2"
[dependencies.tokio]
version = "1"
features = [
"rt-multi-thread",
"net",
"time",
"sync",
"macros",
]
optional = true
default-features = false
[dependencies.zeroize]
version = "1"
[dev-dependencies.assert_cmd]
version = "2"
[dev-dependencies.assert_fs]
version = "1"
[dev-dependencies.connectrpc]
version = "0.9.0"
features = [
"server",
"gzip",
"zstd",
"json",
]
default-features = false
[dev-dependencies.ed25519-dalek]
version = "3"
features = ["alloc"]
default-features = false
[dev-dependencies.futures]
version = "0.3"
[dev-dependencies.insta]
version = "1"
features = ["filters"]
[dev-dependencies.k256]
version = "0.14"
features = [
"ecdsa",
"std",
"pkcs8",
]
default-features = false
[dev-dependencies.mockito]
version = "1"
[dev-dependencies.p256]
version = "0.14"
features = [
"ecdsa",
"std",
"pkcs8",
]
default-features = false
[dev-dependencies.predicates]
version = "3"
[dev-dependencies.proptest]
version = "1"
[dev-dependencies.tempfile]
version = "3"
[dev-dependencies.testcontainers]
version = "0.27"
features = ["blocking"]
[dev-dependencies.tokio]
version = "1"
features = [
"rt-multi-thread",
"net",
"time",
"sync",
]
default-features = false
[dev-dependencies.trycmd]
version = "1"
[build-dependencies]
[target.'cfg(target_os = "linux")'.dependencies.mkit-keystore]
version = "0.4"
features = [
"backend-linux-secret-service",
"backend-systemd-creds",
]
[target.'cfg(target_os = "macos")'.dependencies.mkit-keystore]
version = "0.4"
features = ["backend-macos-keychain"]
[target."cfg(unix)".dependencies.libc]
version = "0.2"
[target."cfg(unix)".dependencies.signal-hook]
version = "0.4"
default-features = false
[target."cfg(windows)".dependencies.mkit-keystore]
version = "0.4"
features = ["backend-windows-credential"]
[lints.clippy]
dbg_macro = "deny"
doc_lazy_continuation = "allow"
missing_errors_doc = "allow"
module_inception = "allow"
module_name_repetitions = "allow"
multiple_crate_versions = "allow"
unwrap_used = "deny"
[lints.clippy.all]
level = "warn"
priority = -1
[lints.clippy.cargo]
level = "warn"
priority = -1
[lints.clippy.pedantic]
level = "warn"
priority = -1
[lints.rust]
missing_debug_implementations = "warn"
unreachable_pub = "warn"
unsafe_op_in_unsafe_fn = "deny"