{"id":13394393,"url":"https://github.com/frappe/charts","last_synced_at":"2026-10-18T22:03:59.764Z","repository":{"id":37692304,"uuid":"108395495","full_name":"frappe/charts","owner":"frappe","description":"Simple, responsive, modern SVG Charts with zero dependencies","archived":false,"fork":false,"pushed_at":"2026-10-09T09:11:42.000Z","size":7023,"stargazers_count":15084,"open_issues_count":149,"forks_count":753,"subscribers_count":214,"default_branch":"master","last_synced_at":"2026-10-11T10:58:09.432Z","etag":null,"topics":["chart","graph","hacktoberfest","javascript","svg","svg-chart","zero-dependency"],"latest_commit_sha":null,"homepage":"https://frappe.io/charts/docs","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/frappe.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2017-10-26T10:13:21.000Z","updated_at":"2026-10-10T13:22:46.000Z","dependencies_parsed_at":"2024-01-08T09:04:44.468Z","dependency_job_id":"2a55c156-b5c8-457c-97b8-9ee2d931c604","html_url":"https://github.com/frappe/charts","commit_stats":{"total_commits":416,"total_committers":54,"mean_commits":7.703703703703703,"dds":0.59375,"last_synced_commit":"8f69be05c10635d5726a1aa8843bcfed3c91a786"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/frappe/charts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frappe%2Fcharts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frappe%2Fcharts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frappe%2Fcharts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frappe%2Fcharts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/frappe","download_url":"https://codeload.github.com/frappe/charts/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frappe%2Fcharts/sbom","scorecard":{"id":409874,"data":{"date":"2025-08-11","repo":{"name":"github.com/frappe/charts","commit":"7b15424c3af80b1c8e178d8e612c290d2d630904"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 2/29 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/npm-publish.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/frappe/charts/npm-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/frappe/charts/npm-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/frappe/charts/npm-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/frappe/charts/npm-publish.yml/master?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   2 out of   2 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 3 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"36 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-cwfw-4gq5-mrqx","Warn: Project is vulnerable to: GHSA-g95f-p29q-9xw4","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-257v-vj4p-3w2h","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-rc47-6667-2j5j","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-3rfm-jhwj-7488","Warn: Project is vulnerable to: GHSA-hhq3-ff78-jv3g","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-rp65-9cf3-cjxr","Warn: Project is vulnerable to: GHSA-566m-qj78-rww5","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-7mwh-4pqv-wmr8","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-76p7-773f-r4q5","Warn: Project is vulnerable to: GHSA-g4rg-993r-mgx7","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T22:25:06.352Z","repository_id":37692304,"created_at":"2025-08-18T22:25:06.353Z","updated_at":"2025-08-18T22:25:06.353Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":343843146,"owners_count":38233658,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-12T02:00:06.297Z","response_time":96,"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":["chart","graph","hacktoberfest","javascript","svg","svg-chart","zero-dependency"],"created_at":"2024-07-30T17:01:17.944Z","updated_at":"2026-10-18T22:03:59.362Z","avatar_url":"https://github.com/frappe.png","language":"JavaScript","funding_links":[],"categories":["Data Visualization","JavaScript",":mortar_board: 搜罗一切酷酷的东西","HTML / CSS / SVG","📊 Data \u0026 Analytics","Svg/Canvas","Data Visualization [🔝](#readme)","Uncategorized","Graphics","javascript","UI Components","Repository","数据可视化","hacktoberfest","JS/TS Utilities","Machine Learning and AI","Visualization","JavaScript Libs"],"sub_categories":["Runner","Uncategorized","React Components","Charts and Graphs","Data Visualization","运行器","Admin Template \u0026 Component Library","运行器e2e测试","Data Science and Analytics","JavaScript Libraries"],"readme":"\u003cdiv align=\"center\" markdown=\"1\"\u003e\n    \n\u003cimg width=\"80\" alt=\"charts-logo\" src=\"https://github.com/user-attachments/assets/37b7ffaf-8354-48f2-8b9c-fa04fae0135b\" /\u003e\n    \n# Frappe Charts\n**GitHub-inspired modern, intuitive and responsive charts with zero dependencies**\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://bundlephobia.com/result?p=frappe-charts\"\u003e\n        \u003cimg src=\"https://img.shields.io/bundlephobia/minzip/frappe-charts\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cimg src=\".github/example.gif\"\u003e\n\n\u003cdiv\u003e\n\n[Explore Demos](https://frappe.io/charts) - [Edit at CodeSandbox](https://codesandbox.io/s/frappe-charts-demo-viqud) - [Documentation](https://frappe.io/charts/docs)  \n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n## Frappe Charts\nFrappe Charts is a simple charting library with a focus on a simple API. The design is inspired by various charts you see on GitHub.\n\n### Motivation\n\nERPNext needed a simple sales history graph for its user company master to help users track sales. While using c3.js for reports, the library didn’t align well with our product’s classic design. Existing JS libraries were either too complex or rigid in their structure and behavior. To address this, I decided to create a library for translating value pairs into relative shapes or positions, focusing on simplicity.\n\n### Key Features\n\n- **Variety of chart types**: Frappe Charts supports various chart types, including Axis Charts, Area and Trends, Bar, Line, Pie, Percentage, Mixed Axis, and Heatmap.\n- **Annotations and tooltips**: Charts can be annotated with x and y markers, regions, and tooltips for enhanced data context and clarity.\n- **Dynamic data handling**: Add, remove, or update individual data points in place, or refresh the entire dataset to reflect changes.\n- **Customizable configurations**: Flexible options like colors, animations, and custom titles allow for a highly personalized chart experience.\n\n## Usage\n\n```sh\nnpm install frappe-charts\n```\n\nImport in your project:\n```js\nimport { Chart } from 'frappe-charts'\n// or esm import\nimport { Chart } from 'frappe-charts/dist/frappe-charts.esm.js'\n// import css\nimport 'frappe-charts/dist/frappe-charts.min.css'\n```\n\nOr directly include script in your HTML\n\n```html\n\u003cscript src=\"https://unpkg.com/frappe-charts@1.6.1/dist/frappe-charts.min.umd.js\"\u003e\u003c/script\u003e\n```\n\n\n```js\nconst data = {\n    labels: [\"12am-3am\", \"3am-6pm\", \"6am-9am\", \"9am-12am\",\n        \"12pm-3pm\", \"3pm-6pm\", \"6pm-9pm\", \"9am-12am\"\n    ],\n    datasets: [\n        {\n            name: \"Some Data\", chartType: \"bar\",\n            values: [25, 40, 30, 35, 8, 52, 17, -4]\n        },\n        {\n            name: \"Another Set\", chartType: \"line\",\n            values: [25, 50, -10, 15, 18, 32, 27, 14]\n        }\n    ]\n}\n\nconst chart = new frappe.Chart(\"#chart\", {  // or a DOM element,\n                                            // new Chart() in case of ES6 module with above usage\n    title: \"My Awesome Chart\",\n    data: data,\n    type: 'axis-mixed', // or 'bar', 'line', 'scatter', 'pie', 'percentage'\n    height: 250,\n    colors: ['#7cd6fd', '#743ee2']\n})\n```\n\n## Contributing\n\n1. Clone this repo.\n2. `cd` into project directory\n3. `npm install`\n4. `npm i npm-run-all -D` (*optional --\u003e might be required for some developers*)\n5. `npm run dev`\n\n## Links\n\n- [Read the blog](https://medium.com/@pratu16x7/so-we-decided-to-create-our-own-charts-a95cb5032c97)\n\n\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cdiv align=\"center\"\u003e\n\t\u003ca href=\"https://frappe.io\" target=\"_blank\"\u003e\n\t\t\u003cpicture\u003e\n\t\t\t\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://frappe.io/files/Frappe-white.png\"\u003e\n\t\t\t\u003cimg src=\"https://frappe.io/files/Frappe-black.png\" alt=\"Frappe Technologies\" height=\"28\"/\u003e\n\t\t\u003c/picture\u003e\n\t\u003c/a\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrappe%2Fcharts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrappe%2Fcharts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrappe%2Fcharts/lists"}