{"id":13407526,"url":"https://github.com/linebender/kurbo","last_synced_at":"2025-05-13T19:02:33.625Z","repository":{"id":37664809,"uuid":"163319421","full_name":"linebender/kurbo","owner":"linebender","description":"A Rust library for manipulating curves","archived":false,"fork":false,"pushed_at":"2025-05-09T11:31:05.000Z","size":867,"stargazers_count":810,"open_issues_count":56,"forks_count":80,"subscribers_count":28,"default_branch":"main","last_synced_at":"2025-05-09T12:33:40.864Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/linebender.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-12-27T17:17:06.000Z","updated_at":"2025-05-09T11:31:08.000Z","dependencies_parsed_at":"2023-10-12T23:15:10.149Z","dependency_job_id":"5aa214f3-28fa-4602-bff7-e7b506f0cc8b","html_url":"https://github.com/linebender/kurbo","commit_stats":{"total_commits":476,"total_committers":42,"mean_commits":"11.333333333333334","dds":0.7163865546218487,"last_synced_commit":"8f074e921e3425b97c522fd38fb9593b0aef3aa4"},"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linebender%2Fkurbo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linebender%2Fkurbo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linebender%2Fkurbo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linebender%2Fkurbo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/linebender","download_url":"https://codeload.github.com/linebender/kurbo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254010790,"owners_count":21998993,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-30T20:00:42.056Z","updated_at":"2025-05-13T19:02:33.543Z","avatar_url":"https://github.com/linebender.png","language":"Rust","funding_links":[],"categories":["Math Abstractions","Rust"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Kurbo\n\n**A Rust 2D curves library**\n\n[![Linebender Zulip, #kurbo channel](https://img.shields.io/badge/Linebender-%23kurbo-blue?logo=Zulip)](https://xi.zulipchat.com/#narrow/channel/260979-kurbo)\n[![dependency status](https://deps.rs/repo/github/linebender/kurbo/status.svg)](https://deps.rs/repo/github/linebender/kurbo)\n[![Apache 2.0 or MIT license.](https://img.shields.io/badge/license-Apache--2.0_OR_MIT-blue.svg)](#license)\n[![Build status](https://github.com/linebender/kurbo/workflows/CI/badge.svg)](https://github.com/linebender/kurbo/actions)\n[![Crates.io](https://img.shields.io/crates/v/kurbo.svg)](https://crates.io/crates/kurbo)\n[![Docs](https://docs.rs/kurbo/badge.svg)](https://docs.rs/kurbo)\n\n\u003c/div\u003e\n\nThe Kurbo library contains data structures and algorithms for curves and vector paths.\nIt is probably most appropriate for creative tools, but is general enough it might be useful for other applications.\n\nThe name \"kurbo\" is Esperanto for \"curve\".\n\nThere is a focus on accuracy and good performance in high-accuracy conditions.\nThus, the library might be useful in engineering and science contexts as well, as opposed to visual arts where rough approximations are often sufficient.\nMany approximate functions come with an accuracy parameter, and analytical solutions are used where they are practical.\nAn example is area calculation, which is done using Green's theorem.\n\nThe library is still in fairly early development stages.\nThere are traits intended to be useful for general curves (not just Béziers), but these will probably be reorganized.\n\n## Minimum supported Rust Version (MSRV)\n\nThis version of Kurbo has been verified to compile with **Rust 1.65** and later.\n\nFuture versions of Kurbo might increase the Rust version requirement.\nIt will not be treated as a breaking change and as such can even happen with small patch releases.\n\n\u003cdetails\u003e\n\u003csummary\u003eClick here if compiling fails.\u003c/summary\u003e\n\nAs time has passed, some of Kurbo's dependencies could have released versions with a higher Rust requirement.\nIf you encounter a compilation issue due to a dependency and don't want to upgrade your Rust toolchain, then you could downgrade the dependency.\n\n```sh\n# Use the problematic dependency's name and version\ncargo update -p package_name --precise 0.1.1\n```\n\n\u003c/details\u003e\n\n## Similar crates\n\nHere we mention a few other curves libraries and touch on some of the decisions made differently here.\n\n* [lyon_geom] has a lot of very good vector algorithms. It's most focused on rendering.\n\n* [flo_curves] has good Bézier primitives, and seems tuned for animation. It's generic on the coordinate type, while we use `f64` for everything.\n\n* [vek] has both 2D and 3D Béziers among other things, and is tuned for game engines.\n\nSome code has been copied from lyon_geom with adaptation, thus the author of lyon_geom, Nicolas Silva, is credited in the [AUTHORS] file.\n\n## More info\n\nTo learn more about Bézier curves, [A Primer on Bézier Curves] by Pomax is indispensable.\n\n## Community\n\n[![Linebender Zulip](https://img.shields.io/badge/Linebender-%23kurbo-blue?logo=Zulip)](https://xi.zulipchat.com/#narrow/channel/260979-kurbo)\n\nDiscussion of Kurbo development happens in the [Linebender Zulip](https://xi.zulipchat.com/), specifically the [#kurbo channel](https://xi.zulipchat.com/#narrow/channel/260979-kurbo).\nAll public content can be read without logging in.\n\n## License\n\nLicensed under either of\n\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or \u003chttp://www.apache.org/licenses/LICENSE-2.0\u003e)\n- MIT license ([LICENSE-MIT](LICENSE-MIT) or \u003chttp://opensource.org/licenses/MIT\u003e)\n\nat your option.\n\n## Contribution\n\nContributions are welcome by pull request. The [Rust code of conduct] applies.\nPlease feel free to add your name to the [AUTHORS] file in any substantive pull request.\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.\n\n[Rust Code of Conduct]: https://www.rust-lang.org/policies/code-of-conduct\n[lyon_geom]: https://crates.io/crates/lyon_geom\n[flo_curves]: https://crates.io/crates/flo_curves\n[vek]: https://crates.io/crates/vek\n[A Primer on Bézier Curves]: https://pomax.github.io/bezierinfo/\n[AUTHORS]: ./AUTHORS\n[CHANGELOG.md]: ./CHANGELOG.md\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinebender%2Fkurbo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flinebender%2Fkurbo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinebender%2Fkurbo/lists"}