* Bump the minor group across 1 directory with 25 updates Bumps the minor group with 25 updates in the /rust directory: | Package | From | To | | --- | --- | --- | | [bson](https://github.com/mongodb/bson-rust) | `2.14.0` | `2.15.0` | | [clap](https://github.com/clap-rs/clap) | `4.5.36` | `4.5.40` | | [miette](https://github.com/zkat/miette) | `7.5.0` | `7.6.0` | | [pyo3](https://github.com/pyo3/pyo3) | `0.24.1` | `0.24.2` | | [tokio](https://github.com/tokio-rs/tokio) | `1.44.2` | `1.45.1` | | [uuid](https://github.com/uuid-rs/uuid) | `1.16.0` | `1.17.0` | | [toml_edit](https://github.com/toml-rs/toml) | `0.22.24` | `0.22.26` | | [proc-macro2](https://github.com/dtolnay/proc-macro2) | `1.0.94` | `1.0.95` | | [syn](https://github.com/dtolnay/syn) | `2.0.100` | `2.0.103` | | [signal-hook](https://github.com/vorner/signal-hook) | `0.3.17` | `0.3.18` | | [flate2](https://github.com/rust-lang/flate2-rs) | `1.1.1` | `1.1.2` | | [chrono](https://github.com/chronotope/chrono) | `0.4.40` | `0.4.41` | | [itertools](https://github.com/rust-itertools/itertools) | `0.13.0` | `0.14.0` | | [reqwest](https://github.com/seanmonstar/reqwest) | `0.12.15` | `0.12.20` | | [sha2](https://github.com/RustCrypto/hashes) | `0.10.8` | `0.10.9` | | [tabled](https://github.com/zhiburt/tabled) | `0.18.0` | `0.20.0` | | [tempfile](https://github.com/Stebalien/tempfile) | `3.19.0` | `3.20.0` | | [toml](https://github.com/toml-rs/toml) | `0.8.20` | `0.8.22` | | [tynm](https://github.com/azriel91/tynm) | `0.1.10` | `0.2.0` | | [winnow](https://github.com/winnow-rs/winnow) | `0.7.10` | `0.7.11` | | [tokio-tungstenite](https://github.com/snapview/tokio-tungstenite) | `0.26.2` | `0.27.0` | | [expectorate](https://github.com/oxidecomputer/expectorate) | `1.1.0` | `1.2.0` | | [insta](https://github.com/mitsuhiko/insta) | `1.42.2` | `1.43.1` | | [twenty-twenty](https://github.com/kittycad/twenty-twenty) | `0.8.1` | `0.8.2` | | [data-encoding](https://github.com/ia0/data-encoding) | `2.8.0` | `2.9.0` | Updates `bson` from 2.14.0 to 2.15.0 - [Release notes](https://github.com/mongodb/bson-rust/releases) - [Commits](https://github.com/mongodb/bson-rust/compare/v2.14.0...v2.15.0) Updates `clap` from 4.5.36 to 4.5.40 - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.36...clap_complete-v4.5.40) Updates `miette` from 7.5.0 to 7.6.0 - [Release notes](https://github.com/zkat/miette/releases) - [Changelog](https://github.com/zkat/miette/blob/main/CHANGELOG.md) - [Commits](https://github.com/zkat/miette/commits/miette-derive-v7.6.0) Updates `pyo3` from 0.24.1 to 0.24.2 - [Release notes](https://github.com/pyo3/pyo3/releases) - [Changelog](https://github.com/PyO3/pyo3/blob/main/CHANGELOG.md) - [Commits](https://github.com/pyo3/pyo3/compare/v0.24.1...v0.24.2) Updates `tokio` from 1.44.2 to 1.45.1 - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.44.2...tokio-1.45.1) Updates `uuid` from 1.16.0 to 1.17.0 - [Release notes](https://github.com/uuid-rs/uuid/releases) - [Commits](https://github.com/uuid-rs/uuid/compare/v1.16.0...v1.17.0) Updates `toml_edit` from 0.22.24 to 0.22.26 - [Commits](https://github.com/toml-rs/toml/compare/v0.22.24...v0.22.26) Updates `proc-macro2` from 1.0.94 to 1.0.95 - [Release notes](https://github.com/dtolnay/proc-macro2/releases) - [Commits](https://github.com/dtolnay/proc-macro2/compare/1.0.94...1.0.95) Updates `syn` from 2.0.100 to 2.0.103 - [Release notes](https://github.com/dtolnay/syn/releases) - [Commits](https://github.com/dtolnay/syn/compare/2.0.100...2.0.103) Updates `signal-hook` from 0.3.17 to 0.3.18 - [Changelog](https://github.com/vorner/signal-hook/blob/master/CHANGELOG.md) - [Commits](https://github.com/vorner/signal-hook/compare/v0.3.17...v0.3.18) Updates `flate2` from 1.1.1 to 1.1.2 - [Release notes](https://github.com/rust-lang/flate2-rs/releases) - [Commits](https://github.com/rust-lang/flate2-rs/compare/1.1.1...1.1.2) Updates `chrono` from 0.4.40 to 0.4.41 - [Release notes](https://github.com/chronotope/chrono/releases) - [Changelog](https://github.com/chronotope/chrono/blob/main/CHANGELOG.md) - [Commits](https://github.com/chronotope/chrono/compare/v0.4.40...v0.4.41) Updates `itertools` from 0.13.0 to 0.14.0 - [Changelog](https://github.com/rust-itertools/itertools/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-itertools/itertools/compare/v0.13.0...v0.14.0) Updates `reqwest` from 0.12.15 to 0.12.20 - [Release notes](https://github.com/seanmonstar/reqwest/releases) - [Changelog](https://github.com/seanmonstar/reqwest/blob/master/CHANGELOG.md) - [Commits](https://github.com/seanmonstar/reqwest/compare/v0.12.15...v0.12.20) Updates `sha2` from 0.10.8 to 0.10.9 - [Commits](https://github.com/RustCrypto/hashes/compare/sha2-v0.10.8...sha2-v0.10.9) Updates `tabled` from 0.18.0 to 0.20.0 - [Changelog](https://github.com/zhiburt/tabled/blob/master/CHANGELOG.md) - [Commits](https://github.com/zhiburt/tabled/commits) Updates `tempfile` from 3.19.0 to 3.20.0 - [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md) - [Commits](https://github.com/Stebalien/tempfile/compare/v3.19.0...v3.20.0) Updates `toml` from 0.8.20 to 0.8.22 - [Commits](https://github.com/toml-rs/toml/compare/toml-v0.8.20...toml-v0.8.22) Updates `tynm` from 0.1.10 to 0.2.0 - [Release notes](https://github.com/azriel91/tynm/releases) - [Changelog](https://github.com/azriel91/tynm/blob/main/CHANGELOG.md) - [Commits](https://github.com/azriel91/tynm/compare/0.1.10...0.2.0) Updates `winnow` from 0.7.10 to 0.7.11 - [Changelog](https://github.com/winnow-rs/winnow/blob/main/CHANGELOG.md) - [Commits](https://github.com/winnow-rs/winnow/compare/v0.7.10...v0.7.11) Updates `tokio-tungstenite` from 0.26.2 to 0.27.0 - [Changelog](https://github.com/snapview/tokio-tungstenite/blob/master/CHANGELOG.md) - [Commits](https://github.com/snapview/tokio-tungstenite/compare/v0.26.2...v0.27.0) Updates `expectorate` from 1.1.0 to 1.2.0 - [Release notes](https://github.com/oxidecomputer/expectorate/releases) - [Commits](https://github.com/oxidecomputer/expectorate/compare/v1.1.0...v1.2.0) Updates `insta` from 1.42.2 to 1.43.1 - [Release notes](https://github.com/mitsuhiko/insta/releases) - [Changelog](https://github.com/mitsuhiko/insta/blob/master/CHANGELOG.md) - [Commits](https://github.com/mitsuhiko/insta/compare/1.42.2...1.43.1) Updates `twenty-twenty` from 0.8.1 to 0.8.2 - [Release notes](https://github.com/kittycad/twenty-twenty/releases) - [Commits](https://github.com/kittycad/twenty-twenty/commits/v0.8.2) Updates `data-encoding` from 2.8.0 to 2.9.0 - [Commits](https://github.com/ia0/data-encoding/compare/v2.8.0...v2.9.0) --- updated-dependencies: - dependency-name: bson dependency-version: 2.15.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor - dependency-name: clap dependency-version: 4.5.40 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor - dependency-name: miette dependency-version: 7.6.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor - dependency-name: pyo3 dependency-version: 0.24.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor - dependency-name: tokio dependency-version: 1.45.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor - dependency-name: uuid dependency-version: 1.17.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor - dependency-name: toml_edit dependency-version: 0.22.26 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor - dependency-name: proc-macro2 dependency-version: 1.0.95 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor - dependency-name: syn dependency-version: 2.0.103 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor - dependency-name: signal-hook dependency-version: 0.3.18 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor - dependency-name: flate2 dependency-version: 1.1.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor - dependency-name: chrono dependency-version: 0.4.41 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor - dependency-name: itertools dependency-version: 0.14.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor - dependency-name: reqwest dependency-version: 0.12.20 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor - dependency-name: sha2 dependency-version: 0.10.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor - dependency-name: tabled dependency-version: 0.20.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor - dependency-name: tempfile dependency-version: 3.20.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor - dependency-name: toml dependency-version: 0.8.22 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor - dependency-name: tynm dependency-version: 0.2.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor - dependency-name: winnow dependency-version: 0.7.11 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor - dependency-name: tokio-tungstenite dependency-version: 0.27.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor - dependency-name: expectorate dependency-version: 1.2.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor - dependency-name: insta dependency-version: 1.43.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor - dependency-name: twenty-twenty dependency-version: 0.8.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor - dependency-name: data-encoding dependency-version: 2.9.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor ... Signed-off-by: dependabot[bot] <support@github.com> * Update snapshots * Update snapshots --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
kcl-lib
Our language for defining geometry and working with our Geometry Engine efficiently. Short for KittyCAD Language, named after our Design API.
Contributing a standard library function
We've built a lot of tooling to make contributing to KCL easier. If you are interested in contributing a new standard library function to KCL, here is the rough process:
- Open just the folder in your editor of choice. VS Code, for example, struggles to run rust-analyzer on the entire modeling-app directory because it's such a turducken of TS and Rust code.
 - Find the definition for similar standard library functions in 
./kcl/src/stdand place your new one near it or in the same category file. - Add your new code. A new standard library function consists of:
 - A 
pub asyncof the actual standard library function in Rust - A doc comment block containing at least one example using your new standard library function (the Rust compiler will error if you don't provide an example our teammates are dope)
 - A 
stdlibmacro providing the name that will need to be written by KCL users to use the function (this is usually a camelCase version of your Rust implementation, which is named with snake_case) - An inner function that is published only to the crate
 - Add your new standard library function to the long list of CORE_FNS in mod.rs
 - Get a production Zoo dev token and run 
export KITTYCAD_API_TOKEN=your-token-herein a terminal - Run 
TWENTY_TWENTY=overwrite cargo nextest run --workspace --no-fail-fastto take snapshot tests of your example code running in the engine - Run 
just redo-kcl-stdlib-docsto generate new Markdown documentation for your function that will be used to generate docs on our website. - Create a PR in GitHub.
 
Making a Simulation Test
If you have KCL code that you want to test, simulation tests are the preferred way to do that.
Make a new sim test. Replace foo_bar with the snake case name of your test. The name needs to be unique.
just new-sim-test foo_bar
It will show the commands it ran, including the path to a new file foo_bar/input.kcl. Edit that with your KCL. If you need additional KCL files to import, include them in this directory.
Then run it.
just overwrite-sim-test foo_bar
The above should create a bunch of output files in the same directory.
Make sure you actually look at them. Specifically, if there's an execution_error.snap, it means the execution failed. Depending on the test, this may be what you expect. But if it's not, delete the snap file and run it again.
When it looks good, commit all the files, including input.kcl, generated output files in the test directory, and changes to simulation_tests.rs.
Bumping the version
If you bump the version of kcl-lib and push it to crates, be sure to update the repos we own that use it as well. These are: