{"id":28189782,"url":"https://github.com/stac-utils/rustac","last_synced_at":"2026-06-25T18:00:28.952Z","repository":{"id":37472340,"uuid":"352722524","full_name":"stac-utils/rustac","owner":"stac-utils","description":"The power of Rust for the STAC ecosystem","archived":false,"fork":false,"pushed_at":"2026-06-18T21:50:08.000Z","size":7994,"stargazers_count":141,"open_issues_count":28,"forks_count":24,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-06-19T09:07:20.037Z","etag":null,"topics":["command-line","earth-observation","geospatial","metadata","python","raster","rust","server","stac"],"latest_commit_sha":null,"homepage":"https://stac-utils.github.io/rustac/","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/stac-utils.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-03-29T17:08:13.000Z","updated_at":"2026-06-18T21:46:45.000Z","dependencies_parsed_at":"2026-03-25T15:01:29.703Z","dependency_job_id":null,"html_url":"https://github.com/stac-utils/rustac","commit_stats":{"total_commits":461,"total_committers":3,"mean_commits":"153.66666666666666","dds":"0.017353579175705014","last_synced_commit":"2ea9d74029d1e6efbce902eeeea867840f9f0d4e"},"previous_names":["stac-utils/stac-rs","gadomski/stac-rs","stac-utils/rustac"],"tags_count":226,"template":false,"template_full_name":null,"purl":"pkg:github/stac-utils/rustac","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stac-utils%2Frustac","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stac-utils%2Frustac/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stac-utils%2Frustac/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stac-utils%2Frustac/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stac-utils","download_url":"https://codeload.github.com/stac-utils/rustac/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stac-utils%2Frustac/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34786226,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-25T02:00:05.521Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["command-line","earth-observation","geospatial","metadata","python","raster","rust","server","stac"],"created_at":"2025-05-16T10:07:23.797Z","updated_at":"2026-06-25T18:00:28.870Z","avatar_url":"https://github.com/stac-utils.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rustac\n\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/stac-utils/rustac/ci.yml?branch=main\u0026style=for-the-badge)](https://github.com/stac-utils/rustac/actions/workflows/ci.yml)\n![Crates.io](https://img.shields.io/crates/l/stac?style=for-the-badge)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg?style=for-the-badge)](./CODE_OF_CONDUCT)\n\n![rustac logo](./img/rustac-small.png)\n\nThe power of Rust for the STAC ecosystem\n\n**rustac** is a monorepo of Rust crates for the [SpatioTemporal Asset Catalog (STAC)](https://stacspec.org/) specification.\nWe have a Python package derived from **rustac** in its own repository, [rustac-py](https://github.com/stac-utils/rustac-py).\nFor more on the difference between **rustac** and **rustac-py**, see [our docs](https://stac-utils.github.io/rustac/).\n\n## Command line interface\n\nOur command line interface (CLI) can query STAC APIs, validate STAC, and more.\nInstall:\n\n```shell\npython -m pip install rustac\n# or\ncargo install rustac\n```\n\nThen:\n\n```shell\n# Search\n$ rustac search https://landsatlook.usgs.gov/stac-server \\\n    --collections landsat-c2l2-sr \\\n    --intersects '{\"type\": \"Point\", \"coordinates\": [-105.119, 40.173]}' \\\n    --sortby='-properties.datetime' \\\n    --max-items 1000 \\\n    items.parquet\n\n# Translate formats\n$ rustac translate items.parquet items.ndjson\n$ rustac translate items.ndjson items.json\n\n# Migrate STAC versions\n$ rustac translate item-v1.0.json item-v1.1.json --migrate\n\n# Search stac-geoparquet (no API server required)\n$ rustac search items.parquet\n\n# Server\n$ rustac serve items.parquet  # Opens a STAC API server on http://localhost:7822\n\n# Validate\n$ rustac validate item.json\n```\n\n## Crates\n\nThis monorepo contains several crates:\n\n| Crate                                            | Description                                                             | Badges                                                                                                                                                                                                                                                                  |\n| ------------------------------------------------ | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [stac](./crates/core/README.md)                  | Core data structures                                                    | [![docs.rs](https://img.shields.io/docsrs/stac?style=flat-square)](https://docs.rs/stac/latest/stac/) \u003cbr\u003e [![Crates.io](https://img.shields.io/crates/v/stac?style=flat-square)](https://crates.io/crates/stac)                                                        |\n| [stac-io](./crates/io/README.md)                 | Input and output                                                        | [![docs.rs](https://img.shields.io/docsrs/stac-io?style=flat-square)](https://docs.rs/stac-io/latest/stac_io/) \u003cbr\u003e [![Crates.io](https://img.shields.io/crates/v/stac-io?style=flat-square)](https://crates.io/crates/stac-io)                                         |\n| [stac-extensions](./crates/extensions/README.md) | Basic support for [STAC extensions](https://stac-extensions.github.io/) | [![docs.rs](https://img.shields.io/docsrs/stac-extensions?style=flat-square)](https://docs.rs/stac-extensions/latest/stac_extensions/) \u003cbr\u003e [![Crates.io](https://img.shields.io/crates/v/stac-extensions?style=flat-square)](https://crates.io/crates/stac-extensions) |\n| [stac-server](./crates/server/README.md)         | STAC API server with multiple backends                                  | [![docs.rs](https://img.shields.io/docsrs/stac-server?style=flat-square)](https://docs.rs/stac-server/latest/stac_server/) \u003cbr\u003e [![Crates.io](https://img.shields.io/crates/v/stac-server?style=flat-square)](https://crates.io/crates/stac-server)                     |\n| [stac-duckdb](./crates/duckdb/README.md)         | Search **stac-geoparquet** with [duckdb](https://duckdb.org/)           | [![docs.rs](https://img.shields.io/docsrs/stac-duckdb?style=flat-square)](https://docs.rs/stac-duckdb/latest/stac_duckdb/) \u003cbr\u003e [![Crates.io](https://img.shields.io/crates/v/stac-duckdb?style=flat-square)](https://crates.io/crates/stac-duckdb)                     |\n| [stac-validate](./crates/validate/README.md)     | JSON schema validation                                                  | [![docs.rs](https://img.shields.io/docsrs/stac-validate?style=flat-square)](https://docs.rs/stac-validate/latest/stac_validate/) \u003cbr\u003e [![Crates.io](https://img.shields.io/crates/v/stac-validate?style=flat-square)](https://crates.io/crates/stac-validate)           |\n| [stac-wasm](./crates/wasm/README.md)             | WebAssembly bindings for Arrow to STAC conversions                      | [![npm](https://img.shields.io/npm/v/stac-wasm?style=flat-square)](https://www.npmjs.com/package/stac-wasm)                                                                                                                                                             |\n| [rustac](./crates/cli/README.md)                 | Command line interface                                                  | [![docs.rs](https://img.shields.io/docsrs/rustac?style=flat-square)](https://docs.rs/rustac/latest/rustac/) \u003cbr\u003e [![Crates.io](https://img.shields.io/crates/v/rustac?style=flat-square)](https://crates.io/crates/rustac)                                              |\n\nThey're all related:\n\n```mermaid\ngraph TD\n    stac --\u003e stac-io\n    stac --\u003e stac-extensions\n    stac --\u003e stac-duckdb\n    stac --\u003e stac-server\n    stac-duckdb -.-\u003e stac-server\n    stac --\u003e rustac\n    stac-io --\u003e rustac\n    stac-duckdb --\u003e rustac\n    stac-server --\u003e rustac\n```\n\n\u003e [!NOTE]\n\u003e There's one additional crate in [crates](./crates/), [stac-derive](./crates/derive/).\n\u003e This is not published and is for internal use only.\n\n## Development\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md) for information about contributing to this project.\nSee [RELEASING.md](./RELEASING.md) for a checklist to use when releasing a new version.\n\n## Acknowledgements\n\nWe'd like to thank [@jkeifer](https://github.com/jkeifer), [@parksjr](https://github.com/parksjr), and [@Xenocide122](https://github.com/Xenocide122) (all from [@Element84](https://github.com/Element84)) for creating the [rustac logo](./img/rustac.svg) from an AI-generated image from this prompt:\n\n\u003e There is a library for working with STAC metadata that is written in rust called rustac: \u003chttps://github.com/stac-utils/rustac\u003e. That name sounds like the word \"rustic\", and is meant to envoke (sic) an image of \"a cabin and a glass of neat whisky\".\n\n## License\n\n**rustac** is dual-licensed under both the MIT license and the Apache license (Version 2.0).\nSee [LICENSE-APACHE](./LICENSE-APACHE) and [LICENSE-MIT](./LICENSE-MIT) for details.\n\n\u003c!-- markdownlint-disable-file MD033 --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstac-utils%2Frustac","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstac-utils%2Frustac","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstac-utils%2Frustac/lists"}