[package] name = "kcl-lib" description = "KittyCAD Language implementation and tools" version = "0.2.45" edition = "2021" license = "MIT" repository = "https://github.com/KittyCAD/modeling-app" rust-version = "1.73" authors = ["Jess Frazelle", "Adam Chalmers", "KittyCAD, Inc"] keywords = ["kcl", "KittyCAD", "CAD"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] anyhow = { workspace = true, features = ["backtrace"] } async-recursion = "1.1.1" async-trait = {workspace = true} base64 = "0.22.1" chrono = "0.4.38" clap = { version = "4.5.27", default-features = false, optional = true, features = [ "std", "derive", ] } convert_case = "0.8.0" dashmap = "6.1.0" dhat = { version = "0.3", optional = true } fnv = "1.0.7" form_urlencoded = "1.2.1" futures = { version = "0.3.31" } git_rev = "0.1.0" gltf-json = "1.4.1" http = { workspace = true } image = { version = "0.25.5", default-features = false, features = ["png"] } indexmap = { workspace = true, features = ["serde"] } itertools = "0.13.0" kcl-derive-docs = { version = "0.1.44", path = "../kcl-derive-docs" } kittycad = { workspace = true } kittycad-modeling-cmds = { workspace = true } lazy_static = "1.5.0" measurements = "0.11.0" miette = { workspace = true } mime_guess = "2.0.5" parse-display = "0.9.1" pyo3 = { workspace = true, optional = true } regex = "1.11.1" reqwest = { version = "0.12", default-features = false, features = [ "stream", "rustls-tls", ] } rgba_simple = "0.10.0" ropey = "1.6.1" schemars = { version = "0.8.17", features = [ "impl_json_schema", "indexmap2", "url", "uuid1", "preserve_order", ] } serde = { workspace = true } serde_json = { workspace = true } sha2 = "0.10.8" tabled = { version = "0.15.0", optional = true } thiserror = "2.0.0" toml = "0.8.19" ts-rs = { version = "10.1.0", features = [ "uuid-impl", "url-impl", "chrono-impl", "indexmap-impl", "no-serde-warnings", "serde-json-impl", ] } url = { version = "2.5.4", features = ["serde"] } uuid = { workspace = true, features = ["v4", "js", "serde"] } validator = { version = "0.20.0", features = ["derive"] } web-time = "1.1" winnow = "=0.6.24" zip = { version = "2.2.2", default-features = false } [target.'cfg(target_arch = "wasm32")'.dependencies] js-sys = { version = "0.3.72" } tokio = { workspace = true, features = ["sync", "time"] } tower-lsp = { workspace = true, features = ["runtime-agnostic"] } wasm-bindgen = "0.2.99" wasm-bindgen-futures = "0.4.49" web-sys = { version = "0.3.76", features = ["console"] } [target.'cfg(not(target_arch = "wasm32"))'.dependencies] bson = { version = "2.13.0", features = ["uuid-1", "chrono"] } tokio = { workspace = true, features = ["full"] } tokio-tungstenite = { version = "0.24.0", features = [ "rustls-tls-native-roots", ] } tower-lsp = { workspace = true, features = ["proposed", "default"] } [features] default = ["engine"] cli = ["dep:clap"] dhat-heap = ["dep:dhat"] # For the lsp server, when run with stdout for rpc we want to disable println. # This is used for editor extensions that use the lsp server. disable-println = [] engine = [] pyo3 = ["dep:pyo3"] # Helper functions also used in benchmarks. lsp-test-util = [] tabled = ["dep:tabled"] [dev-dependencies] approx = "0.5" base64 = "0.22.1" criterion = { version = "0.5.1", features = ["async_tokio"] } expectorate = "1.1.0" handlebars = "6.3.0" image = { version = "0.25.5", default-features = false, features = ["png"] } insta = { version = "1.41.1", features = ["json", "filters", "redactions"] } miette = { version = "7.5.0", features = ["fancy"] } pretty_assertions = "1.4.1" tokio = { version = "1.41.1", features = ["rt-multi-thread", "macros", "time"] } twenty-twenty = "0.8.0" [lints] workspace = true [[bench]] name = "compiler_benchmark_criterion" harness = false [[bench]] name = "digest_benchmark" harness = false [[bench]] name = "lsp_semantic_tokens_benchmark_criterion" harness = false required-features = ["lsp-test-util"] [[bench]] name = "executor_benchmark_criterion" harness = false [[test]] name = "executor" path = "e2e/executor/main.rs" [[test]] name = "modify" path = "e2e/modify/main.rs"