{"id":22007085,"url":"https://github.com/exabyte-io/made","last_synced_at":"2026-04-02T21:03:03.839Z","repository":{"id":34304055,"uuid":"169141045","full_name":"Exabyte-io/made","owner":"Exabyte-io","description":"Materials Design in Javascript (made.js). A JavaScript (Node) library allowing for the creation and manipulation of material structures from atoms up on the web.","archived":false,"fork":false,"pushed_at":"2026-04-01T04:25:17.000Z","size":6949,"stargazers_count":7,"open_issues_count":15,"forks_count":4,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-04-01T07:02:30.177Z","etag":null,"topics":["atomic-design","chemistry","computer-aided-design","crystallography","javascript","materials","materials-design","materials-informatics","materials-science"],"latest_commit_sha":null,"homepage":"https://exabyte-io.github.io/made","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/Exabyte-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"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":"2019-02-04T20:05:49.000Z","updated_at":"2026-04-01T04:21:22.000Z","dependencies_parsed_at":"2023-11-07T14:49:55.252Z","dependency_job_id":"d1518244-593b-4661-9f89-9f24f22446fa","html_url":"https://github.com/Exabyte-io/made","commit_stats":{"total_commits":226,"total_committers":12,"mean_commits":"18.833333333333332","dds":0.6814159292035398,"last_synced_commit":"f20d4d10264a0f54b3a471f01c9f04a0c6bae221"},"previous_names":["exabyte-io/made-js","exabyte-io/made","exabyte-io/made.js"],"tags_count":190,"template":false,"template_full_name":null,"purl":"pkg:github/Exabyte-io/made","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Exabyte-io%2Fmade","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Exabyte-io%2Fmade/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Exabyte-io%2Fmade/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Exabyte-io%2Fmade/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Exabyte-io","download_url":"https://codeload.github.com/Exabyte-io/made/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Exabyte-io%2Fmade/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31316130,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["atomic-design","chemistry","computer-aided-design","crystallography","javascript","materials","materials-design","materials-informatics","materials-science"],"created_at":"2024-11-30T01:17:04.770Z","updated_at":"2026-04-02T21:03:03.815Z","avatar_url":"https://github.com/Exabyte-io.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![npm version](https://badge.fury.io/js/%40mat3ra%2Fmade.svg)](https://badge.fury.io/js/%40mat3ra%2Fmade)\n[![License: Apache](https://img.shields.io/badge/License-Apache-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n\n# Made\n\nMade is a library for **MA**terials **DE**sign. It allows for creating and manipulating material structures from atoms up. The library is aimed to be used for the development of web applications, both on the client (web browser) and server (eg. Node.js) side. It has implementations in Python (including Pyodide) and JavaScript/TypeScript.\n\n## 1. Overview\n\nThe package provides software concepts for interacting with Materials-related data structures. The concepts follow the ESSE Data Convention [[1]](#links).\n\n## 2. Installation\n\n### 2.1. JavaScript/TypeScript\n\nFrom NPM for use within a software project:\n\n```bash\nnpm install @mat3ra/made\n\n```\n\n### 2.2. Python\n\nFrom PyPI for use within a software project:\n\n```bash\npip install mat3ra-made\n```\n\nWhen willing to use the optional `tools` module, install the package with the following command:\n\n```bash\npip install \"mat3ra-made[tools]\"\n```\n\n\n## 3. Functionality\n\nAs below\n\n- High-level classes for the representation of the [Material](src/material.js) and the corresponding structural information, ie:\n    - [Basis](src/basis/basis.js),\n    - [Lattice](src/lattice/lattice.js),\n    - [ReciprocalLattice](src/lattice/reciprocal/lattice_reciprocal.js),\n    - [Cell](src/cell/cell.js),\n    - [AtomicConstraints](src/constraints/constraints.js)\n    - and others to be added.\n- input/output support, including:\n    - POSCAR [[3]](#links),\n    - XYZ [[4]](#links),\n    - Quantum ESPRESSO [[5]](#links),\n    - and others to be added.\n- structural generation and analysis tools:\n    - [supercell](src/tools/supercell.js)\n    - [surfaces](src/tools/surface.js)\n    - [combinatorial sets](src/parsers/xyz_combinatorial_basis.js)\n    - [interpolated sets for chemical reactions](src/tools/basis.js)\n\n\n## 4. Contribution\n\nThis repository is an [open-source](LICENSE.md) work-in-progress and we welcome contributions.\n\nWe regularly deploy the latest code containing all accepted contributions online as part of the [Mat3ra.com](https://mat3ra.com) platform, so contributors will see their code in action there.\n\nWe suggest forking this repository and introducing the adjustments there to be considered for merging into this repository as explained in more details [here](https://gist.github.com/Chaser324/ce0505fbed06b947d962), for example.\n\n### 4.1. Source code conventions\n\nObject-oriented design patterns encapsulate key concepts following the conventions below.\n\n1. Classes follow the Exabyte Data Convention and data structures defined in ESSE [[1]](#links)\n\n2. Only materials-related code is considered. Properties related to [simulation model](https://docs.exabyte.io/models/overview/) parameters (eg. type of approximation, numerical parameters) shall go elsewhere.\n\n3. `tools` directory contains helper functions that act on one or more classes and include an external parameter. Functions that use class data without any external parameters should be implemented inside the class. For example, `basis.clone()` is implemented in `Basis`, but basis repetition is implemented as a tool in the correspondingly named function ([tools/basis.js#repeat](src/tools/basis.js)) because the repetion requires a parameter external to basis - number of repetitions in 3 spatial dimensions.\n\n4. [Deprecated, use mat3ra-parsers or @mat3ra/parsers] `parsers` directory contains the parsers to- and from- ESSE format mentioned in 1. All functionality related to external data conversion is contained in this directory.\n\n\n### 4.2. TODO list\n\n[Outdated] Desirable features for implementation:\n\n- identify primitive / conventional structures\n- support for molecular geometries\n- support for polymer geometries\n- radial correlation function calculation\n- generation of complex atomic shapes:\n    - fullerene\n    - nanotube\n    - nanowire\n    - nano-cluster\n    - a combination of the above\n    - arbitrary atomic arrangement\n\n## 5. Development\n\n### 5.1. JavaScript/TypeScript\n\n#### 5.1.1. Tests\n\nMade tests are written based on Mocha [6](#links) testing framework and can be executed as follows.\n\n```bash\ngit pull\ngit lfs pull\n```\nto get the latest test fixtures from LFS, and then:\n\n```bash\nnpm install\nnpm test\n```\n\n#### 5.1.2. Important Notes\n\n1. Keep the tests directory structure similar to the main codebase directory structure. Every JS module in the main codebase should have a corresponding module in tests directory which implements the tests for provided functionality.\n\n2. Add tests fixtures into [fixtures](./tests/fixtures) directory. The fixtures are automatically stored on Git LFS [7](#links).\n\n3. If the fixtures are going to be used inside multiple cases, read and export them inside [enums](./tests/enums.js) to avoid code duplicates.\n\n4. [Tests setup module](./tests/setup.js) can be used to implement the hooks that are used to prepare the tests environment.\n\n#### 5.1.3. Using Linter\n\nLinter setup will prevent committing files that don't adhere to the code standard. It will\nattempt to fix what it can automatically prior to the commit in order to reduce diff noise. This can lead to \"unexpected\" behavior where a\nfile that is staged for commit is not identical to the file that actually gets committed. This happens\nin the `lint-staged` directive of the `package.json` file (by using a `husky` pre-commit hook). For example,\nif you add extra whitespace to a file, stage it, and try to commit it, you will see the following:\n\n```bash\n➜  made git:(feature/SOF-4398-TB) ✗ git add src/basis/constrained_basis.js\n➜  made git:(feature/SOF-4398-TB) ✗ git commit -m \"Test commit non-linted code\"\n✔ Preparing...\n✔ Running tasks...\n✖ Prevented an empty git commit!\n✔ Reverting to original state because of errors...\n✔ Cleaning up...\n\n  ⚠ lint-staged prevented an empty git commit.\n  Use the --allow-empty option to continue, or check your task configuration\n\nhusky - pre-commit hook exited with code 1 (error)\n```\n\nThe staged change may remain but will not have been committed. Then it will look like you still have a staged\nchange to commit, but the pre-commit hook will not actually commit it for you, quite frustrating! Styling can\nbe applied manually and fixed by running:\n\n```bash\nnpm run lint:fix\n```\n\nIn which case, you may need to then add the linter edits to your staging, which in the example above, puts the\nfile back to identical with the base branch, resulting in no staged changes whatsoever.\n\n#### 5.1.4. Configuring WebStorm for use with Linter\n\nIn order for the WebStorm IDE to take full advantage of the linting configuration, it can be configured in the project:\n\n- `Preferences -\u003e Languages \u0026 Frameworks -\u003e JavaScript -\u003e Code Quality Tools -\u003e ESLint`\n- Check `Automatic ESLint configuration` which should infer all the configurations from the project directory\n\n### 5.2. Python\n\n#### 5.2.1. Tests\n\nPython 3.8+ is required to run the tests. We recommend using PyEnv to manage Python versions. Tests are written based on PyTest and can be executed as follows.\n\n```bash\nvirtualenv .venv\nsource .venv/bin/activate\npip install \".[tests]\"\npytest tests/py\n```\n\nTo visualize material from a debugger, run the following command in the \"Evaluate expression\" console:\n\n```python\nfrom mat3ra.debug_utils import debug_visualize_material; debug_visualize_material(material)\n```\n\n\n#### 5.2.2. Important Notes\n\nConventions:\n\n- The \"tools\" module has external dependencies on \"pymatgen\" and \"ase\" packages and so is meant as optional. When implementing new functionality, the use of ASE is recommended over pymatgen for compatibility purposes.\n\n#### 5.2.3. Developing locally for pyodide\n\nTo build and serve locally, use the following command:\n\n```bash\nwheel_server\n```\nMore details can be found in the [script documentation](https://github.com/Exabyte-io/utils/blob/main/README.md).\n\n### 5.3. Known Issues\n\n#### 5.3.1. JavaScript/TypeScript\n\nTo be added.\n\n#### 5.3.2. Python\n\nAs below:\n\n- Python 3.8 tests are failing on Apple Silicon due to https://github.com/materialsproject/pymatgen/issues/3521\n\n## Links\n\n1. [Exabyte Source of Schemas and Examples (ESSE), Github Repository](https://github.com/exabyte-io/exabyte-esse)\n2. [ECMAScript 2015 Language Specifications](https://www.ecma-international.org/ecma-262/6.0/)\n3. [POSCAR file format, official website](https://cms.mpi.univie.ac.at/vasp/guide/node59.html)\n4. [XYZ file format, Wikipedia](https://en.wikipedia.org/wiki/XYZ_file_format)\n5. [Quantum ESPRESSO, Official Website](https://www.quantum-espresso.org/)\n6. [Mocha, Official Website](https://mochajs.org/)\n7. [Git LFS, Official Website](https://git-lfs.github.com/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexabyte-io%2Fmade","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fexabyte-io%2Fmade","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexabyte-io%2Fmade/lists"}