{"id":13399485,"url":"https://github.com/chartshq/muze","last_synced_at":"2025-09-28T20:31:47.429Z","repository":{"id":57101285,"uuid":"146283837","full_name":"chartshq/muze","owner":"chartshq","description":"Composable data visualisation library for web with a data-first approach now powered by WebAssembly","archived":true,"fork":false,"pushed_at":"2020-07-31T14:16:47.000Z","size":90923,"stargazers_count":1185,"open_issues_count":4,"forks_count":41,"subscribers_count":27,"default_branch":"master","last_synced_at":"2025-08-21T04:15:32.219Z","etag":null,"topics":["area-chart","barchart","charts","crosstab","data","data-visualization","data-viz","html5-charts","interactive-charts","javascript","js-charts","linechart","pie-chart","splom","svg","visualization","wasm","web","webassembly"],"latest_commit_sha":null,"homepage":"https://muzejs.org/","language":null,"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/chartshq.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}},"created_at":"2018-08-27T10:41:47.000Z","updated_at":"2025-07-30T06:16:33.000Z","dependencies_parsed_at":"2022-08-20T22:40:32.330Z","dependency_job_id":null,"html_url":"https://github.com/chartshq/muze","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/chartshq/muze","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chartshq%2Fmuze","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chartshq%2Fmuze/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chartshq%2Fmuze/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chartshq%2Fmuze/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chartshq","download_url":"https://codeload.github.com/chartshq/muze/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chartshq%2Fmuze/sbom","scorecard":{"id":274734,"data":{"date":"2025-08-11","repo":{"name":"github.com/chartshq/muze","commit":"1d79a7b628e47baa12b186e617614bb0d5b4a3d1"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.9,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 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":"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":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","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":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"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":9,"reason":"binaries present in source code","details":["Warn: binary detected: dist/7760bc80fcd10857455b.module.wasm:1"],"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":-1,"reason":"no dependencies found","details":null,"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"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":"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"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":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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"}}]},"last_synced_at":"2025-08-17T14:09:47.551Z","repository_id":57101285,"created_at":"2025-08-17T14:09:47.551Z","updated_at":"2025-08-17T14:09:47.551Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277005276,"owners_count":25743693,"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","status":"online","status_checked_at":"2025-09-25T02:00:09.612Z","response_time":80,"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":["area-chart","barchart","charts","crosstab","data","data-visualization","data-viz","html5-charts","interactive-charts","javascript","js-charts","linechart","pie-chart","splom","svg","visualization","wasm","web","webassembly"],"created_at":"2024-07-30T19:00:38.378Z","updated_at":"2025-09-28T20:31:47.099Z","avatar_url":"https://github.com/chartshq.png","language":null,"readme":"\u003ch3 align=\"center\"\u003e\n  \u003cbr /\u003e\n  \u003cbr /\u003e\n  \u003ca href=\"https://github.com/chartshq/muze\"\u003e\n    \u003cimg src=\"https://github.com/chartshq/muze/raw/master/logo.png\" alt=\"muzejs\" title=\"muzejs\" /\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cbr /\u003e\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n[![Free](https://img.shields.io/badge/cost-Free-brightgreen)](http://muzejs.org/muze-wa/eula)\n[![License](https://img.shields.io/badge/license-Custom-brightgreen)](http://muzejs.org/muze-wa/eula)\n[![NPM version](https://img.shields.io/npm/v/@chartshq/muze.svg)](https://www.npmjs.com/package/@chartshq/muze)\n[![Contributors](https://img.shields.io/github/contributors/chartshq/muze.svg)](https://github.com/chartshq/muze/graphs/contributors)\n\n## What is Muze?\n\nMuze is a free **data visualization library for creating exploratory data visualizations (like Tableau)** in browser, using WebAssembly. It uses a layered Grammar of Graphics (GoG) to create composable and interactive data visualization for web. It is ideal for use in visual analytics dashboards \u0026 applications to create highly performant, interactive, multi-dimensional, and composable visualizations.\n\nIt uses a data-first approach to define the constructs and layers of the chart, automatically generates cross-chart interactivity, and allows you to over-ride any behavior or interaction on the chart.\n\nMuze uses an in-browser **[DataModel](https://github.com/chartshq/datamodel)** to store and transform data, and control the behaviour of every component in the visualization, thereby enabling creating of complex and cross-connected charts.\n\n## Features\n\n* 🍗  Build complex and interactive visualizations by using **composable** layer constructs.\n\n* 🔨  Use rich **data operators** to transform, visualize and interact with data.\n\n* 👯  Define custom interactions by configuring **physical behavioural model** and **side effect**.\n\n* ✂️  Use **css** to change look and feel of the charts.\n\n* ☀️  Have a **single source of truth** for all your visualization and interaction controlled from data.\n\n* 🔩  Integrate easily with your existing application by **dispatching actions** on demand.\n\n* 🚀  Uses **WebAssembly** for handling huge datasets and for **better performance**.\n\n## Installation\n\n### CDN\n\nInsert the muze build and the required CSS into the `\u003chead\u003e`: \n\n```html\n\u003clink href=\"https://cdn.jsdelivr.net/npm/@chartshq/muze@2.0.0/dist/muze.css\" rel=\"stylesheet\"\u003e\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/@chartshq/muze@2.0.0/dist/muze.js\" type=\"text/javascript\"\u003e\u003c/script\u003e\n```\n\n### NPM\n\nInstall muze from NPM:\n\n```bash\n$ npm install @chartshq/muze\n```\n\nThen you need to add a webpack plugin [copy-webpack-plugin](https://webpack.js.org/plugins/copy-webpack-plugin/) to copy some required muze files to your output `dist` or `build` folder.\n\n```bash\nnpm install copy-webpack-plugin@5.1.1 --save-dev\n```\n\nAnd then within your webpack configuration object, you'll need to add the `copy-webpack-plugin` to the list of plugins, like so:\n\n```js\nconst path = require(\"path\");\nconst CopyWebpackPlugin = require('copy-webpack-plugin');\n\nmodule.exports = {\n  plugins: [\n    new CopyWebpackPlugin([\n      {\n        // Provide your node_modules path where @chartshq/muze\n        // package is installed.\n        from: path.resolve(\"\u003cyour_node_modules_path\u003e\", \"@chartshq/muze/dist\"),\n        to: '.'\n      },\n    ]),\n  ]\n}\n```\n\nYou also can checkout our [muze-app-template](https://github.com/chartshq/muze-app-template) to try out the `Muze` quickly through a boilerplate app.\n\n## Getting Started\n\nOnce the installation is done, please follow the steps below:\n\n1. Prepare the data and the corresponding schema:\n\n```js\n// Prepare the schema for data.\nconst schema = [\n  {\n    name: 'Name',\n    type: 'dimension'\n  },\n  {\n    name: 'Maker',\n    type: 'dimension'\n  },\n  {\n    name: 'Horsepower',\n    type: 'measure',\n    defAggFn: 'avg'\n  },\n  {\n    name: 'Origin',\n    type: 'dimension'\n  }\n]\n\n// Prepare the data.\nconst data = [\n   {\n    \"Name\": \"chevrolet chevelle malibu\",\n    \"Maker\": \"chevrolet\",\n    \"Horsepower\": 130,\n    \"Origin\": \"USA\"\n  },\n  {\n    \"Name\": \"buick skylark 320\",\n    \"Maker\": \"buick\",\n    \"Horsepower\": 165,\n    \"Origin\": \"USA\"\n  },\n  {\n    \"Name\": \"datsun pl510\",\n    \"Maker\": \"datsun\",\n    \"Horsepower\": 88,\n    \"Origin\": \"Japan\"\n  }\n]\n```\n\n2. Import muze as follows:\n\nIf you are using the npm package, import the package and its CSS file.\n```js\nimport muze from '@chartshq/muze';\nimport \"@chartshq/muze/dist/muze.css\";\n```\n\nIf you are using CDN, use it as follows:\n```js\nconst muze = window.muze;\n```\n\n3. Create a DataModel and a basic chart:\n\n```js\n// As the muze and DataModel are asynchronous, so we need to\n// use async-await syntax.\nasync function myAsyncFn() {\n  // Load the DataModel module.\n  const DataModel = await muze.DataModel.onReady();\n  \n  // Converts the raw data into a format\n  // which DataModel can consume.\n  const formattedData = await DataModel.loadData(data, schema);\n\n  // Create a new DataModel instance with\n  // the formatted data.\n  let dm = new DataModel(formattedData);\n  \n  // Create a global environment to share common configs across charts.\n  const env = await muze();\n \n  // Create a new canvas instance from the global\n  // environment to render chart on.\n  const canvas = env.canvas();\n\n  canvas\n  .data(dm) // Set data to the chart.\n  .rows([\"Horsepower\"]) // Fields drawn on Y axis.\n  .columns([\"Origin\"]) // Fields drawn on X axis.\n  .mount(\"#chart\"); // Specify an element to mount on using a CSS selector.\n}\n\nmyAsyncFn()\n  .catch(console.error.bind(console));\n```\n\n## Documentation\n\nYou can find detailed tutorials, concepts and API references at our [Documentation](https://muzejs.org/docs/wa/latest/installation/getting-started).\n\n## What has changed?\n\nMuze 2.0.0 is now powered by WebAssembly bringing in huge performance improvement over the previous versions. The JavaScript version has been deprecated and no active development will take place in that version - but we'll fix critical bugs as and when raised in GitHub.\n\nThis version of Muze brings in power of WebAssembly for handling large datasets with ease, along with frictionless interaction and rendering. In addition, the data loading part in WebAssembly version is asynchronous, as opposed to being synchronous in the JavaScript version. Further, the WebAssembly version is free but only available as a compiled binary, whereas the JavaScript version is free and open-source (MIT).\n\nYou can visit the deprecated JavaScript version here [https://github.com/chartshq/muze-deprecated](https://github.com/chartshq/muze-deprecated)\n\n## Migrating from previous versions of Muze\n\nNow the Muze became asynchronous as opposed to being synchronous in the previous JavaScript version.\n\n### Changed APIs\n\n- **Creating Env**\n\n    Muze deprecated version:\n\n    ```js\n    const env = muze();\n    const canvas = env.canvas();\n    ```\n\n    Latest version:\n\n    ```js\n    (async function () {\n      const env = await muze();\n      const canvas = env.canvas();\n    })();\n    ```\n\n- **dispatchBehaviour**\n\n    Muze deprecated version:\n\n    ```js\n    canvas.firebolt().dispatchBehaviour('highlight', {\n      criteria: {\n        Maker: ['ford']\n      }\n    });\n    ```\n\n    Latest version :\n\n    In the current version, the identifiers needs to be passed in dimensions object or range object if it is measure or temporal field.\n\n    ```js\n    // Dispatch highlight behaviour on data plots having maker as ford\n    canvas.firebolt().dispatchBehaviour('highlight', {\n      criteria: {\n        dimensions: {\n          Maker: ['ford']\n        }\n      }\n    });\n\n    // Dispatch highlight behaviour on data plots having Acceleration\n    // between 20 and 50.\n    canvas.firebolt().dispatchBehaviour('highlight', {\n      criteria: {\n        range: {\n          Acceleration: [20, 50]\n        }\n      }\n    });\n    ```\n\n## Support\n\nPlease raise a Github issue [here](https://github.com/chartshq/muze/issues/new).\n\n## Roadmap\n\nPlease contribute to our public wishlist or upvote an existing feature at [Muze Public Wishlist \u0026 Roadmap](https://github.com/orgs/chartshq/projects/1).\n\n## License\n\n[Custom License](http://muzejs.org/muze-wa/eula) (Free to use)","funding_links":[],"categories":["Uncategorized","Others","Misc","JavaScript","data-visualization"],"sub_categories":["Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchartshq%2Fmuze","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchartshq%2Fmuze","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchartshq%2Fmuze/lists"}