holochain 0.6.0

Holochain, a framework for distributed applications
Documentation
[package]
name = "holochain"
version = "0.6.0"
description = "Holochain, a framework for distributed applications"
license = "CAL-1.0"
repository = "https://github.com/holochain/holochain"
documentation = "https://docs.rs/holochain"
authors = ["Holochain Core Dev Team <devcore@holochain.org>"]
edition = "2021"

# reminder - do not use workspace deps
[dependencies]
anyhow = "1.0"
async-trait = "0.1"
base64 = "0.22"
cfg-if = "1.0"
chrono = { version = "0.4.22", default-features = false, features = [
  "clock",
  "std",
  "oldtime",
  "serde",
] }
derive_more = { version = "2.0", features = ["display", "index"] }
either = "1.5.0"
futures = "0.3"
getrandom = "0.3"
holo_hash = { version = "^0.6.0", path = "../holo_hash", features = ["full"] }
holochain_cascade = { version = "^0.6.0", default-features = false, path = "../holochain_cascade" }
holochain_chc = { version = "^0.3.0", path = "../holochain_chc", default-features = false }
holochain_conductor_api = { version = "^0.6.0", path = "../holochain_conductor_api" }
holochain_keystore = { version = "^0.6.0", path = "../holochain_keystore", default-features = false }
holochain_p2p = { version = "^0.6.0", default-features = false, path = "../holochain_p2p" }
holochain_sqlite = { version = "^0.6.0", path = "../holochain_sqlite" }
holochain_serialized_bytes = "=0.0.56"
holochain_state = { version = "^0.6.0", path = "../holochain_state" }
holochain_types = { version = "^0.6.0", path = "../holochain_types" }
holochain_util = { version = "^0.6.0", path = "../holochain_util" }
holochain_wasmer_host = { version = "=0.0.101", default-features = false, features = [
  "error_as_host",
] }
holochain_websocket = { version = "^0.6.0", path = "../holochain_websocket" }
holochain_zome_types = { version = "^0.6.0", path = "../holochain_zome_types", features = [
  "full",
] }
holochain_nonce = { version = "^0.6.0", path = "../holochain_nonce" }
holochain_secure_primitive = { version = "^0.6.0", path = "../holochain_secure_primitive" }
holochain_conductor_config = { version = "^0.6.0", path = "../holochain_conductor_config" }
holochain_timestamp = { version = "^0.6.0", path = "../timestamp" }
human-panic = "2.0"
itertools = { version = "0.14" }
kitsune2_api = "0.3.0"
kitsune2_core = "0.3.0"
mockall = "0.13"
mr_bundle = { version = "^0.6.0", path = "../mr_bundle", features = ["fs"] }
must_future = "0.1.1"
nanoid = "0.4"
holochain_trace = { version = "^0.6.0", path = "../holochain_trace" }
holochain_metrics = { version = "^0.6.0", path = "../holochain_metrics", default-features = false }
lair_keystore_api = "=0.6.3"
once_cell = "1.4.1"
one_err = "0.0.8"
parking_lot = "0.12"
rand = "0.9"
rand-utf8 = "0.0.2"
rusqlite = { version = "0.37" }
# Used to set a crypto provider for TLS connections.
rustls = "0.23.25"
serde = { version = "1.0", features = ["derive"] }
serde_bytes = "0.11.12"
serde_json = { version = "1.0", features = ["preserve_order"] }
serde_yaml = "0.9"
serde_with = { version = "3.12.0", features = ["json"] }
shrinkwraprs = "0.3.0"
sodoken = "0.1.0"
clap = "4.0"
strum = "0.27"
subtle-encoding = "0.5"
tempfile = "3.3"
thiserror = "2.0"
tokio = { version = "1.36.0", features = ["full"] }
tokio-stream = { version = "0.1", features = ["sync", "net"] }
task-motel = "0.1.0"
tracing = "0.1"
tracing-futures = "0.2.5"
tracing-subscriber = "0.3.16"
url = "2.4"
url2 = "0.0.6"
uuid = { version = "1.8", features = ["serde", "v4"] }
opentelemetry_api = { version = "=0.20.0", features = ["metrics"] }
indexmap = { version = "2.6.0", features = ["serde"] }
wasmer = { version = "6.0.1", default-features = false }
wasmer-middlewares = { version = "6.0.1", optional = true, default-features = false }

# Dependencies for test_utils / other optional deps
fixt = { version = "^0.6.0", path = "../fixt", optional = true }
contrafact = { version = "0.2.0-rc.1", optional = true }
diff = { version = "0.1", optional = true }
hdk = { version = "^0.6.0", path = "../hdk", optional = true }
matches = { version = "0.1.8", optional = true }
holochain_wasm_test_utils = { version = "^0.6.0", path = "../test_utils/wasm", optional = true }
holochain_test_wasm_common = { version = "^0.6.0", path = "../test_utils/wasm_common", optional = true }
unwrap_to = { version = "0.1.0", optional = true }
kitsune2_bootstrap_srv = { version = "0.3.0", optional = true }
async-once-cell = { version = "0.5", optional = true }
get_if_addrs = { version = "0.5.3", optional = true }
schemars = "0.9"

# chc deps
bytes = { version = "1", optional = true }
reqwest = { version = "0.12", default-features = false, features = [
  "json",
  "rustls-tls",
], optional = true }

# fact deps
petgraph = { version = "0.6.0", features = ["quickcheck", "stable_graph"] }

[target.'cfg(unix)'.dependencies]
sd-notify = "0.4"

[dev-dependencies]
holochain = { path = ".", default-features = false, features = [
  "test_utils",
  "slow_tests",
  "metrics_influxive",
] }
holochain_state = { version = "^0.6.0", path = "../holochain_state", features = [
  "test_utils",
] }

anyhow = "1.0"
assert_cmd = "2"
contrafact = "0.2.0-rc.1"
criterion = { version = "0.6", features = ["async_tokio"] }
ed25519-dalek = { version = "2", features = ["rand_core"] }
lair_keystore = "0.6.3"
maplit = "1"
pretty_assertions = "1.4"
regex = "1.5"
reqwest = { version = "0.12", default-features = false }
test-case = "3.3"
tokio = { version = "1.36.0", features = ["full", "test-util"] }
tokio-tungstenite = "0.27"
predicates = "3.1"
assert2 = "0.3.15"
kitsune2_test_utils = "0.3.0"
rand_dalek = { version = "0.8", package = "rand" }

[build-dependencies]
hdk = { version = "^0.6.0", path = "../hdk" }
serde = { version = "1.0", features = ["derive"] }
serde_json = { version = "1.0.51" }
chrono = { version = "0.4.6", features = ["serde"] }
hostname = "0.4"
lair_keystore = { version = "0.6.3", default-features = false, features = [
  "rusqlite-bundled-sqlcipher-vendored-openssl",
] }

[[bench]]
name = "bench"
harness = false

[[bench]]
name = "consistency"
harness = false

[lib]
name = "holochain"
path = "src/lib.rs"

[[bin]]
name = "holochain"
path = "src/bin/holochain/main.rs"

[lints]
workspace = true

[features]
default = [
  "sqlite-encrypted",
  "metrics_influxive",
  "schema",
  "wasmer_sys",
  "datachannel-vendored",
]

# Use the "Influxive" opentelemetry metrics binding to write metrics
# to an InfluxDB time series database.
metrics_influxive = ["holochain_metrics/influxive"]

# Exposes additional functionality only needed for integration tests.
# This feature should be turned off for production builds.
test_utils = [
  "fixt",
  "contrafact",
  "diff",
  "hdk/test_utils",
  "holochain_sqlite/test_utils",
  "holochain_state/test_utils",
  "holochain_types/test_utils",
  "holochain_zome_types/test_utils",
  "holochain_cascade/test_utils",
  "holochain_conductor_api/test-utils",
  "holochain_p2p/mock_network",
  "matches",
  "holochain_test_wasm_common",
  "holochain_wasm_test_utils",
  "unwrap_to",
  "kitsune2_bootstrap_srv",
  "async-once-cell",
  "get_if_addrs",
  "holo_hash/fixturators",
  "dep:bytes",
]

fuzzing = []

# Wasm ribosome tests take > 60 seconds - let's only run them in CI
slow_tests = []

# What's slower than slow? We may choose to not run these tests in CI to speed things up.
glacial_tests = []

# Includes the wasm build script, which we don't need when not building wasms
build_wasms = ["holochain_wasm_test_utils/build"]
only_check_wasms = ["holochain_wasm_test_utils/only_check"]

# Enable schema generation for kitsune2 related types in the conductor config
schema = ["holochain_conductor_api/schema"]

# Enables at-rest encryption of the SQLite database.
# Incompatible with "sqlite".
sqlite-encrypted = [
  "rusqlite/bundled-sqlcipher-vendored-openssl",
  "holochain_keystore/sqlite-encrypted",
  "holo_hash/sqlite-encrypted",
  "holochain_cascade/sqlite-encrypted",
  "holochain_conductor_api/sqlite-encrypted",
  "holochain_keystore/sqlite-encrypted",
  "holochain_p2p/sqlite-encrypted",
  "holochain_sqlite/sqlite-encrypted",
  "holochain_state/sqlite-encrypted",
  "holochain_types/sqlite-encrypted",
  "holochain_zome_types/sqlite-encrypted",
]

# Compile SQLite from source rather than depending on a library.
# Incompatible with "sqlite-encrypted"
sqlite = [
  "rusqlite/bundled",
  "holochain_keystore/sqlite",
  "holo_hash/sqlite",
  "holochain_cascade/sqlite",
  "holochain_conductor_api/sqlite",
  "holochain_keystore/sqlite",
  "holochain_p2p/sqlite",
  "holochain_sqlite/sqlite",
  "holochain_state/sqlite",
  "holochain_types/sqlite",
  "holochain_zome_types/sqlite",
]

backend-libdatachannel = [
  "holochain_p2p/backend-libdatachannel",
  "holochain_cascade/backend-libdatachannel",
]

backend-go-pion = [
  "holochain_p2p/backend-go-pion",
  "holochain_cascade/backend-go-pion",
]

datachannel-vendored = [
  "backend-libdatachannel",
  "holochain_p2p/datachannel-vendored",
  "holochain_cascade/datachannel-vendored",
]

# Extremely verbose wasm memory read/write logging
wasmer_debug_memory = ["holochain_wasmer_host/debug_memory"]

# Enable wasm compiler
# Incompatible with "wasmer_wamr"
wasmer_sys = [
  "dep:wasmer-middlewares",
  "wasmer/default",
  "holochain_wasmer_host/wasmer_sys_dev",
]

# Enable wasm interpreter (experimental)
# Incompatible with "wasmer_sys"
wasmer_wamr = ["wasmer/wamr", "holochain_wasmer_host/wasmer_wamr"]

# Enable chain head coordination
chc = [
  "dep:bytes",
  "dep:reqwest",
  "holochain_conductor_api/chc",
  "holochain_conductor_config/chc",
  "holochain_chc/http",
]

# Enable the unstable migration feature
unstable-migration = [
  "holochain_types/unstable-migration",
  "holochain_conductor_api/unstable-migration",
]

# Enables unstable warrants feature.
#
# Invalid op warrants are now stabilized, but this feature flag is retained for
# chain fork warrants.
unstable-warrants = []

# Enable sharding for networks. This is currently considered an unstable feature
# and with the feature disabled you will only be able to configure nodes that have
# a full or empty arc.
unstable-sharding = []

sweettest = ["test_utils", "sqlite"]

# Enables tracing instrumentation
# (we experience segfaults in some tests if there is too much instrumentation)
instrument = []

unstable-functions = [
  "holochain_zome_types/unstable-functions",
  "holochain_wasm_test_utils/unstable-functions",
  "hdk/unstable-functions",
]

unstable-countersigning = [
  "hdk/unstable-countersigning",
  "holochain_zome_types/unstable-countersigning",
  "holochain_conductor_api/unstable-countersigning",
]