{"id":16884490,"url":"https://github.com/timwis/vizwit","last_synced_at":"2025-09-21T00:31:50.056Z","repository":{"id":57393350,"uuid":"41299286","full_name":"timwis/vizwit","owner":"timwis","description":"An interactive data visualization tool","archived":false,"fork":false,"pushed_at":"2021-11-15T07:25:13.000Z","size":12543,"stargazers_count":101,"open_issues_count":69,"forks_count":36,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-08-22T01:34:50.726Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://vizwit.io","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/timwis.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}},"created_at":"2015-08-24T11:27:05.000Z","updated_at":"2025-01-13T16:51:10.000Z","dependencies_parsed_at":"2022-08-24T18:31:44.321Z","dependency_job_id":null,"html_url":"https://github.com/timwis/vizwit","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/timwis/vizwit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timwis%2Fvizwit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timwis%2Fvizwit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timwis%2Fvizwit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timwis%2Fvizwit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/timwis","download_url":"https://codeload.github.com/timwis/vizwit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timwis%2Fvizwit/sbom","scorecard":{"id":886967,"data":{"date":"2025-08-11","repo":{"name":"github.com/timwis/vizwit","commit":"cca5d4e8fb522e8359696c15d032074374bd6c5e"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.3,"checks":[{"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":"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":"Code-Review","score":2,"reason":"Found 3/13 approved changesets -- score normalized to 2","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":"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":"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":"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":"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: GNU General Public License v2.0: LICENSE.md:0"],"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"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 23 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"}}]},"last_synced_at":"2025-08-24T10:22:42.778Z","repository_id":57393350,"created_at":"2025-08-24T10:22:42.778Z","updated_at":"2025-08-24T10:22:42.778Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276179311,"owners_count":25598565,"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-20T02:00:10.207Z","response_time":63,"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":[],"created_at":"2024-10-13T16:28:34.891Z","updated_at":"2025-09-21T00:31:49.513Z","avatar_url":"https://github.com/timwis.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# VizWit\n\n[![Join the chat at https://gitter.im/timwis/vizwit](https://badges.gitter.im/timwis/vizwit.svg)](https://gitter.im/timwis/vizwit?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n[![Stories in Ready](https://badge.waffle.io/timwis/vizwit.svg?label=ready\u0026title=Ready)](http://waffle.io/timwis/vizwit)\n[![Build Status](https://travis-ci.org/timwis/vizwit.svg?branch=master)](https://travis-ci.org/timwis/vizwit)\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)\n\nAn interactive data visualization tool. VizWit uses a [JSON config file](https://gist.github.com/601224472a5d53cbb908) to generate \ninteractive charts that cross-filter one another. It currently supports data hosted in [Socrata](https://socrata.com) and \n[Carto](http://carto.com), which includes open data provided by cities such as [Philadelphia](http://opendataphilly.org),\n[Chicago](https://data.cityofchicago.org/), and [San Francisco](https://data.sfgov.org/)). Data that’s hosted elsewhere can be\nsupported by [adding a new data provider](https://github.com/timwis/vizwit/wiki/Adding-a-provider).\n\n[![screencast](http://i.imgur.com/4gTXNFK.gif)](http://vizw.it/?gist=51db593dc0537d1a3f05)\n\n# Features\n* Clicking on a chart cross-filters the other charts\n* Multiple datasets on one page\n* Configurable via [GUI](http://builder.vizwit.io) (work in progress)\n* Fork configurations with a gist\n* Pie chart\n* Callout metric\n* Scrolling bar charts\n* Responsive / mobile-friendly\n* [Embeddable](http://vizw.it/embed-demo.html) (and cross-filtering still works)\n* Free-text search on table\n* 100% client-side\n* Open source / extendable\n\n# Examples\n* [Business Licenses in Chicago](http://vizw.it/?gist=a304ce8fac9c14dfbf16) ([config](https://gist.github.com/a304ce8fac9c14dfbf16))\n* [Philadelphia Parking Violations](http://vizw.it/?gist=601224472a5d53cbb908) ([config](https://gist.github.com/601224472a5d53cbb908))\n* [Philadelphia Property Assessments](http://vizw.it/?gist=cbd84c256f1efe250b8e) ([config](https://gist.github.com/cbd84c256f1efe250b8e))\n* [City-owned Properties in Philadelphia](http://vizw.it/?gist=b03fc4fb30e5c8265f6b) ([config](https://gist.github.com/b03fc4fb30e5c8265f6b))\n* [Chicago Crime Incidents](http://vizw.it/?gist=51db593dc0537d1a3f05) ([config](https://gist.github.com/51db593dc0537d1a3f05))\n* [Callout Cards](http://vizw.it/?gist=eec2c0f438ebc8fd67c6) ([config](https://gist.github.com/eec2c0f438ebc8fd67c6))\n* [Philadelphia Crime Incidents](http://vizw.it/?gist=39c8e1fd5639db1f752298baf3450fb4) (From Carto) ([config](https://gist.github.com/timwis/39c8e1fd5639db1f752298baf3450fb4))\n\n# Configuration\nVizWit cards are configured via JSON objects. The layout is defined using size and order properties on those objects, generated by the\n[Config Builder](http://builder.vizwit.io) (work in progress). The resulting JSON file is then hosted on [gist.github.com](https://gist.github.com), \na free and easy service to share code snippets. The Gist ID is then used in the VizWit URL (ie. `vizw.it/?gist=a304ce8fac9c14dfbf16`). \nThis allows viewers to fork the Gist and build their own VizWit page.\n\n[Configuration Documentation](https://github.com/timwis/vizwit/wiki/Configuration)\n\n# Build your own\nVisit the [builder](http://builder.vizwit.io) and add a few cards, then configure them using the wrench icon. When you're finished, click\n**Export** and copy the configuration code into a new \"gist\" at [gist.github.com](http://gist.github.com). Once you click **Create**,\nyou should see your new \"gist\" and the \"gist id\" of random characters in the URL (ie. `813483da72ac781f8b13`). Use that gist id to go to\n`http://vizw.it?gist=YOUR_GIST_ID`\n\nAlternatively, use the [live editor](http://vizw.it/editor.html) to edit the raw JSON alongside a live representation of it.\n\nIf you'd like to share what you've created, [post an issue](https://github.com/timwis/vizwit/issues/new) with a link to it.\n\n# Technology\nVizWit is a client-side JavaScript application. The application is structured using Backbone. Charts are built using AmCharts. Maps are\nbuilt using Leaflet. Tables are built using DataTables. Tests (of which there are not nearly enough!) are run using Mocha. The interactive\nlayout is generated by Gridstack. The application is compiled using Browserify. See the full list of dependencies in \n[package.json](https://github.com/timwis/vizwit/blob/master/package.json#L21-L66)\n\n# How it works\n[vizwit.js](src/scripts/vizwit.js) is the primary chart-generating module. It takes a `container` selector and a `config` object and\nuses them to initialize a view (bar chart, map, table, etc.). The views are passed a `collection` and a `filteredCollection`, which are\nidentical and allow the view to query the data provider. Views generate the chart/map/table/etc. and listen for user interactions\non them. On an interaction, the view triggers the global event object with the filter (ie. `state=PA`), and all views that use the same \ndataset receive the event and use their `filteredCollection` to query the data provider with the filter passed through the event. By\nusing a separate collection, VizWit can show the \"filtered value\" and the \"original value\" side-by-side.\n\nThe actual entry point is either [vizwit-loader.js](src/scripts/vizwit-loader.js) or [vizwit-embed.js](src/scripts/vizwit-embed.js). \nvizwit-loader.js fetches a gist or local file, reads its configuration, and passes it to [layout.js](src/scripts/layout.js) to create a \nlayout on the page. Then for each chart in the configuration, layout.js calls `init()` from vizwit.js as described above. vizwit-embed.js \nsimply finds the parent container of the `\u003cscript\u003e` tag that was embedded, and calls `init()` from vizwit.js inside of it. This way of \nembedding allows the VizWit library to only be loaded once on the page with as many charts embedded in any element \n([example](http://vizw.it/embed-demo.html)).\n\n# Development\n* After cloning the repo, use `npm install` to install dependencies\n* While developing, use `npm start` to automatically recompile when changes are made and run a web server at `localhost:8080`\n* Use `npm test` to verify code style and run unit tests\n* Use `npm run build` for a production build, and then use `npm run deploy` to push the `dist/` directory to the `gh-pages` branch\n(first make the deploy script executable via `chmod +x deploy.sh`)\n\n# License\n[GPL-2](LICENSE.md) (create an issue if that doesn't work for someone)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimwis%2Fvizwit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimwis%2Fvizwit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimwis%2Fvizwit/lists"}