{"id":14816857,"url":"https://github.com/materialsproject/crystaltoolkit","last_synced_at":"2026-04-18T02:16:54.794Z","repository":{"id":38417908,"uuid":"98350025","full_name":"materialsproject/crystaltoolkit","owner":"materialsproject","description":"Crystal Toolkit is a framework for building web apps for materials science and is currently powering the new Materials Project website.","archived":false,"fork":false,"pushed_at":"2024-04-29T08:05:12.000Z","size":38268,"stargazers_count":130,"open_issues_count":52,"forks_count":56,"subscribers_count":9,"default_branch":"main","last_synced_at":"2024-05-01T23:40:45.146Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://docs.crystaltoolkit.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/materialsproject.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"code-of-conduct.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-07-25T21:06:36.000Z","updated_at":"2024-05-13T09:27:53.795Z","dependencies_parsed_at":"2023-12-11T09:26:12.929Z","dependency_job_id":"9f5944ad-7089-4a7d-ae02-0ad2a7413f82","html_url":"https://github.com/materialsproject/crystaltoolkit","commit_stats":{"total_commits":2747,"total_committers":34,"mean_commits":80.79411764705883,"dds":0.6374226428831453,"last_synced_commit":"3ffdc631485bb6a23b69845fd2077fa8a8184724"},"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/materialsproject%2Fcrystaltoolkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/materialsproject%2Fcrystaltoolkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/materialsproject%2Fcrystaltoolkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/materialsproject%2Fcrystaltoolkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/materialsproject","download_url":"https://codeload.github.com/materialsproject/crystaltoolkit/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247280272,"owners_count":20912967,"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-09-18T14:01:02.406Z","updated_at":"2026-01-23T02:14:54.231Z","avatar_url":"https://github.com/materialsproject.png","language":"Python","readme":"# Crystal Toolkit\n\n## Citations\n\nYou can read more about Crystal Toolkit in our preprint, available [here](https://arxiv.org/abs/2302.06147).\n\nA [citation.cff](CITATION.cff) file is available or a BibTeX citation is as follows:\n\n```bibtex\n@article{horton2023crystal,\n  title={Crystal Toolkit: A Web App Framework to Improve Usability and Accessibility of Materials Science Research Algorithms},\n  author={Horton, Matthew and Shen, Jimmy-Xuan and Burns, Jordan and Cohen, Orion and Chabbey, Fran{\\c{c}}ois and Ganose, Alex M and Guha, Rishabh and Huck, Patrick and Li, Hamming Howard and McDermott, Matthew and others},\n  journal={arXiv preprint arXiv:2302.06147},\n  year={2023}\n}\n```\n\n**If you use Crystal Toolkit, either for your own web apps, or by incorporating images generated by Crystal Toolkit in your work, please make sure to cite it appropriately!** Citations are a good way to recognize the contributions of the Crystal Toolkit developers, and allow us to see how it has been used by the community.\n\n## Interested in contributing?\n\nA current list of new contributor issues can be seen [here](https://github.com/materialsproject/crystaltoolkit/labels/new-contributor).\nIf you would like a new-contributor issue assigned, get in touch with project maintainers!\n\n## Status\n\n[![Tests](https://github.com/materialsproject/crystaltoolkit/actions/workflows/pytest-docs.yml/badge.svg)](https://github.com/materialsproject/crystaltoolkit/actions/workflows/pytest-docs.yml)\n[![Visual Regression Test Status](https://percy.io/static/images/percy-badge.svg)](https://percy.io/6f28436a/crystaltoolkit)\n[![Release](https://github.com/materialsproject/crystaltoolkit/actions/workflows/release.yml/badge.svg)](https://github.com/materialsproject/crystaltoolkit/actions/workflows/release.yml)\n[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/materialsproject/crystaltoolkit/main.svg)](https://results.pre-commit.ci/latest/github/materialsproject/crystaltoolkit/main)\n[![arXiv link](https://img.shields.io/badge/arXiv-2302.06147-blue)](https://arxiv.org/abs/2302.06147)\n\n## Installation\n\n```sh\npip install crystal-toolkit\n```\n\n## Documentation\n\nDocumentation can be found at [docs.crystaltoolkit.org](https://docs.crystaltoolkit.org).\n\n## Example Apps\n\n| Description                                                                                                                                                                                                                                                                                                                                                               | \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp; |\n| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------ |\n| [bandstructure.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/bandstructure.py)\u003cbr\u003e  Demonstrates capabilities of the `BandstructureAndDosComponent` component                                                                                                                                                            | [![Launch Codespace]][create codespace]    |\n| [basic_hello_structure.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/basic_hello_structure.py)\u003cbr\u003e  Uses `StructureMoleculeComponent` to show a simple `pymatgen` structure                                                                                                                                              | [![Launch Codespace]][create codespace]    |\n| [basic_hello_structure_interactive.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/basic_hello_structure_interactive.py)\u003cbr\u003e  Adds a button to the `basic_hello_structure.py` to toggle between two structures interactively                                                                                               | [![Launch Codespace]][create codespace]    |\n| [basic_hello_world.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/basic_hello_world.py)\u003cbr\u003e  Bare-bones example showing how to render the text \"Hello scientist!\" in Dash app                                                                                                                                             | [![Launch Codespace]][create codespace]    |\n| [diffraction.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/diffraction.py)\u003cbr\u003e  Demonstrates capabilities of the `XRayDiffractionComponent` component                                                                                                                                                                    | [![Launch Codespace]][create codespace]    |\n| [diffraction_dynamic.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/diffraction_dynamic.py)\u003cbr\u003e  Adds a button to `diffraction.py` to load a new structure on the fly                                                                                                                                                     | [![Launch Codespace]][create codespace]    |\n| [diffraction_empty.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/diffraction_empty.py)\u003cbr\u003e  Shows `XRayDiffractionComponent` can be mounted without a passing structure                                                                                                                                                  | [![Launch Codespace]][create codespace]    |\n| [kwarg_inputs.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/kwarg_inputs.py)\u003cbr\u003e  Shows off boolean input (aka toggle), matrix input and slider input components                                                                                                                                                         | [![Launch Codespace]][create codespace]    |\n| [phase_diagram.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/phase_diagram.py)\u003cbr\u003e  Combines `MPRester.get_entries_in_chemsys()` and the `PhaseDiagram` component to plot the Li-O-Co convex hull                                                                                                                        | [![Launch Codespace]][create codespace]    |\n| [pourbaix.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/pourbaix.py)\u003cbr\u003e  Combines `MPRester.get_pourbaix_entries()` and the `PourbaixDiagramComponent` to plot the Fe-CO Pourbaix diagram                                                                                                                               | [![Launch Codespace]][create codespace]    |\n| [structure.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/structure.py)\u003cbr\u003e  Show cases multiple layout options for the `StructureMoleculeComponent`                                                                                                                                                                      | [![Launch Codespace]][create codespace]    |\n| [structure_magnetic.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/structure_magnetic.py)\u003cbr\u003e  Plots a structure with magnetic moments                                                                                                                                                                                    | [![Launch Codespace]][create codespace]    |\n| [matbench_dielectric_structure_on_hover.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/matbench_dielectric_structure_on_hover.py)\u003cbr\u003e  Creates a scatter plot hooked up to a `StructureMoleculeComponent` and `DataTable` that show the structure and highlight the table row corresponding to the hovered scatter point. | [![Launch Codespace]][create codespace]    |\n| [matbench_dielectric_datatable_xrd.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/matbench_dielectric_datatable_xrd.py)\u003cbr\u003e  Renders a `DataTable` hooked up to a `StructureMoleculeComponent` and `XRayDiffractionComponent` so that hovering a table row will show the corresponding structure and its XRD pattern.     | [![Launch Codespace]][create codespace]    |\n| [transformations.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/transformations.py)\u003cbr\u003e  Combines `StructureMoleculeComponent` and `AllTransformationsComponent` to apply interactive structure transformations                                                                                                           | [![Launch Codespace]][create codespace]    |\n| [transformations_minimal.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/transformations_minimal.py)\u003cbr\u003e  Shows how to restrict the types of allowed transformations                                                                                                                                                       | [![Launch Codespace]][create codespace]    |\n| [write_structure_screenshot_to_file.py](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/write_structure_screenshot_to_file.py)\u003cbr\u003e  Shows to save interactive structure views as image files                                                                                                                                   | [![Launch Codespace]][create codespace]    |\n\n[Launch Codespace]: https://img.shields.io/badge/Launch-Codespace-darkblue?logo=github\n[create codespace]: https://github.com/codespaces/new?hide_repo_select=true\u0026ref=main\u0026repo=98350025\n\n## Team and Contribution Policy\n\nThe [Crystal Toolkit Development Team](https://github.com/materialsproject/crystaltoolkit/graphs/contributors) includes:\n\n* [Matthew Horton](https://github.com/mkhorton), lead\n* [François Chabbey](\u003chttps://github.com/chabb\u003e) for React components\n* [Jimmy Shen](https://github.com/jmmshn) contributed pythreejs support, surface plotting, initial arrows/axes support, and various bug fixes\n* [Joey Montoya](https://github.com/JosephMontoya-TRI) contributed Pourbaix component\n* [Shyam Dwaraknath](https://github.com/shyamd) for planned contributions for ellipsoid support and architectural design\n* [Donny Winston](https://github.com/dwinston), assisted by [Tyler Huntington](https://github.com/tylerhuntington), for helping embed Crystal Toolkit in a Django app\n* [Matt McDermott](https://github.com/mattmcdermott) contributed phase diagram, X-ray Diffraction, X-ray Absorption Spectrum components\n* [Jason Munro](https://github.com/munrojm) contributed band structure component\n* [Janosh Riebesell](https://github.com/janosh) contributed Phonon band structure component, [3 example apps](https://github.com/materialsproject/crystaltoolkit/blob/main/crystal_toolkit/apps/examples/matbench_dielectric_structure_on_hover.py), tests\n* [Stephen Weitzner](https://github.com/sweitzner) contributed POV-Ray integration (in progress)\n* [Richard Tran](https://github.com/CifLord) for contributing plotly-powered Wulff shapes to pymatgen, which Crystal Toolkit uses\n* Guy Moore for contributing magnetic moment visualization\n* [Steve Zeltmann](https://github.com/sezelt) for contributing electron diffraction\n* [Patrick Huck](https://github.com/tschaume), releases, operations, bugfixes and POC for MP / MPContribs\n\nNew contributors are welcome, please see our [Code of Conduct](code-of-conduct.md). If you are a new contributor please modify this README in your Pull Request to add your name to the list.\n\n## Future of This Repository\n\nThe Crystal Toolkit repository is home of an object-oriented Python framework for rendering materials science data based on the schema employed by the Materials Project.\n\nThe custom Plotly Dash components that power Crystal Toolkit are now maintained in a [separate repository](https://github.com/materialsproject/dash-mp-components) for ease of development, as well as the [custom React components](https://github.com/materialsproject/mp-react-components). These components were formerly included in the Crystal Toolkit repo, and are still considered part of Crystal Toolkit in spirit.\n\nThere are some [important issues](https://github.com/materialsproject/crystaltoolkit/issues/265) still to be resolved, as well as general improvements to documentation and test suite planned. Some [currently-private code](https://github.com/materialsproject/crystaltoolkit/issues/264) is also planned to be re-incorporated into the public Crystal Toolkit repo.\n\n## Acknowledgements\n\nThank you to all the authors and maintainers of the libraries Crystal Toolkit\ndepends upon, and in particular [pymatgen](http://pymatgen.org) for crystallographic\nanalysis and [Dash from Plotly](https://plot.ly/products/dash/) for their web app framework.\n\nThank you to the [NERSC Spin](https://docs.nersc.gov/services/spin/) service for\nhosting the app and for their technical support.\n\n## Contact\n\nPlease contact @mkhorton with any queries or add an issue on the [GitHub Issues](https://github.com/materialsproject/crystaltoolkit/issues) page.\n","funding_links":[],"categories":["Visualization"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaterialsproject%2Fcrystaltoolkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaterialsproject%2Fcrystaltoolkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaterialsproject%2Fcrystaltoolkit/lists"}