{"id":13585236,"url":"https://github.com/phurwicz/hover","last_synced_at":"2026-02-21T17:34:50.754Z","repository":{"id":38523573,"uuid":"310311806","full_name":"phurwicz/hover","owner":"phurwicz","description":":speedboat: Label data at scale. Fun and precision included.","archived":false,"fork":false,"pushed_at":"2026-02-17T03:17:46.000Z","size":382058,"stargazers_count":331,"open_issues_count":4,"forks_count":19,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-02-17T09:35:44.988Z","etag":null,"topics":["annotation-tool","audio-classification","audio-labeling","bokeh","bulk-labeling","data-labeling","image-classification","image-labeling","labeling","labeling-tool","machine-learning","supervised-learning","text-classification","text-labeling","visualization"],"latest_commit_sha":null,"homepage":"https://phurwicz.github.io/hover","language":"Python","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/phurwicz.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-11-05T13:43:55.000Z","updated_at":"2026-02-16T19:21:19.000Z","dependencies_parsed_at":"2024-07-23T04:43:12.821Z","dependency_job_id":"021867f1-244e-42f4-a14c-0cd06bb1af0b","html_url":"https://github.com/phurwicz/hover","commit_stats":{"total_commits":985,"total_committers":7,"mean_commits":"140.71428571428572","dds":"0.18071065989847712","last_synced_commit":"0043e6d76070a6a0652542e2ffc16fbbcf928b43"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/phurwicz/hover","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phurwicz%2Fhover","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phurwicz%2Fhover/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phurwicz%2Fhover/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phurwicz%2Fhover/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phurwicz","download_url":"https://codeload.github.com/phurwicz/hover/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phurwicz%2Fhover/sbom","scorecard":{"id":732752,"data":{"date":"2025-08-11","repo":{"name":"github.com/phurwicz/hover","commit":"dccdaaeb616b87d56c0b7bc83c72b781c402e6a8"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"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":"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":"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":"Code-Review","score":6,"reason":"Found 7/11 approved changesets -- score normalized to 6","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":"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":"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":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/assemble-readme.yml:1","Warn: no topLevel permission defined: .github/workflows/cross-os-conda-build.yml:1","Warn: no topLevel permission defined: .github/workflows/cross-os-install-source.yml:1","Warn: no topLevel permission defined: .github/workflows/cross-os-source-test.yml:1","Warn: no topLevel permission defined: .github/workflows/doc-auto-notebook.yml:1","Warn: no topLevel permission defined: .github/workflows/doc-script-test.yml:1","Warn: no topLevel permission defined: .github/workflows/handle-inactive.yml:1","Warn: no topLevel permission defined: .github/workflows/quick-source-test.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":"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":"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":"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":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Vulnerabilities","score":7,"reason":"3 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-44cc-43rp-5947","Warn: Project is vulnerable to: PYSEC-2021-130 / GHSA-4952-p58q-6crx","Warn: Project is vulnerable to: GHSA-9q39-rmj3-p4r2"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/assemble-readme.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/assemble-readme.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/assemble-readme.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/assemble-readme.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cross-os-conda-build.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/cross-os-conda-build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cross-os-conda-build.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/cross-os-conda-build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cross-os-install-source.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/cross-os-install-source.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cross-os-install-source.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/cross-os-install-source.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cross-os-source-test.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/cross-os-source-test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cross-os-source-test.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/cross-os-source-test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/doc-auto-notebook.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/doc-auto-notebook.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/doc-auto-notebook.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/doc-auto-notebook.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/doc-script-test.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/doc-script-test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/doc-script-test.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/doc-script-test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/handle-inactive.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/handle-inactive.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/quick-source-test.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/quick-source-test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/quick-source-test.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/quick-source-test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/quick-source-test.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/quick-source-test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/quick-source-test.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/phurwicz/hover/quick-source-test.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/assemble-readme.yml:30","Warn: pipCommand not pinned by hash: .github/workflows/cross-os-install-source.yml:30","Warn: pipCommand not pinned by hash: .github/workflows/cross-os-install-source.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/cross-os-source-test.yml:30","Warn: pipCommand not pinned by hash: .github/workflows/cross-os-source-test.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/doc-auto-notebook.yml:46","Warn: pipCommand not pinned by hash: .github/workflows/doc-auto-notebook.yml:47","Warn: pipCommand not pinned by hash: .github/workflows/doc-script-test.yml:53","Warn: pipCommand not pinned by hash: .github/workflows/doc-script-test.yml:54","Warn: pipCommand not pinned by hash: .github/workflows/quick-source-test.yml:52","Warn: pipCommand not pinned by hash: .github/workflows/quick-source-test.yml:53","Info:   0 out of  14 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned","Info:   0 out of  11 pipCommand 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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 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-22T14:53:38.006Z","repository_id":38523573,"created_at":"2025-08-22T14:53:38.006Z","updated_at":"2025-08-22T14:53:38.006Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29688284,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T15:51:39.154Z","status":"ssl_error","status_checked_at":"2026-02-21T15:49:03.425Z","response_time":107,"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":["annotation-tool","audio-classification","audio-labeling","bokeh","bulk-labeling","data-labeling","image-classification","image-labeling","labeling","labeling-tool","machine-learning","supervised-learning","text-classification","text-labeling","visualization"],"created_at":"2024-08-01T15:04:49.345Z","updated_at":"2026-02-21T17:34:45.744Z","avatar_url":"https://github.com/phurwicz.png","language":"Python","funding_links":[],"categories":["Python","Text"],"sub_categories":["Open source"],"readme":"![Hover](https://raw.githubusercontent.com/phurwicz/hover/main/docs/images/hover-logo-title.png)\n\n\u003e Explore and label on a map of your data.\n\u003e\n\u003e Get enough to feed your model in no time.\n\n[![en](https://img.shields.io/badge/lang-en-green.svg)](https://github.com/phurwicz/hover/blob/main/README.md)\n[![zh](https://img.shields.io/badge/语言-中文-green.svg)](https://github.com/phurwicz/hover/blob/main/README.zh.md)\n\n[![PyPI Version](https://img.shields.io/pypi/v/hover?logo=pypi\u0026logoColor=white)](https://pypi.org/project/hover/)\n[![Conda Version](https://img.shields.io/conda/vn/conda-forge/hover)](https://github.com/conda-forge/hover-feedstock)\n![Downloads](https://static.pepy.tech/personalized-badge/hover?period=total\u0026units=international_system\u0026left_color=grey\u0026right_color=brightgreen\u0026left_text=pypi%20downloads)\n![Main Build Status](https://img.shields.io/github/actions/workflow/status/phurwicz/hover/cross-os-source-test.yml?branch=main\u0026label=main\u0026logo=github)\n![Nightly Build Status](https://img.shields.io/github/actions/workflow/status/phurwicz/hover/quick-source-test.yml?branch=nightly\u0026label=nightly\u0026logo=github)\n![Codacy Grade](https://img.shields.io/codacy/grade/689827d9077b43ac8721c7658d122d1a?logo=codacy\u0026logoColor=white)\n![Codacy Coverage](https://img.shields.io/codacy/coverage/689827d9077b43ac8721c7658d122d1a/main?logo=codacy\u0026logoColor=white)\n\n`hover` is a tool for mass-labeling data points that can be represented by vectors.\n\n-   Labeling is as easy as coloring a scatter plot.\n-   Hover your mouse and lasso-select to inspect any cluster.\n-   Use a variety of widgets to narrow down further.\n-   Enter a suitable label and hit \"Apply\"!\n\n![GIF Demo](https://raw.githubusercontent.com/phurwicz/hover-gallery/main/0.5.0/trailer-short.gif)\n\n## :rocket: Live Demos\n\n### [**With code**](https://phurwicz.github.io/hover/pages/tutorial/t0-quickstart/)\n\n-   edit \u0026 run code in your browser to get a labeling interface, with guides along the way.\n\n### [**Without code**](https://mybinder.org/v2/gh/phurwicz/hover-binder/master?urlpath=/proxy/5006/app-simple-annotator)\n\n-   go directly to an example labeling interface hosted on Binder.\n\n## :sparkles: Features\n\n\u003e **It's fast because it labels data in bulk.**\n\n:telescope: A semantic scatter plot of your data for labeling, equipped with\n\n\u003cdetails open\u003e\n  \u003csummary\u003e \u003cb\u003eTooltip\u003c/b\u003e for each point on mouse hover \u003c/summary\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/phurwicz/hover-gallery/main/0.7.0/image-tooltip.gif\"\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e Table view for \u003cb\u003einspecting selected\u003c/b\u003e points \u003c/summary\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/phurwicz/hover-gallery/main/0.7.0/selection-table.gif\"\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e Toggle buttons that clearly \u003cb\u003edistinguish data subsets\u003c/b\u003e \u003c/summary\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/phurwicz/hover-gallery/main/0.7.0/subset-toggle.gif\"\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e \u003cb\u003eSearch\u003c/b\u003e widgets for ad-hoc data highlight \u003c/summary\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/phurwicz/hover-gallery/main/0.7.0/text-search-response.gif\"\u003e\n\u003c/details\u003e\n\n\u003e **It's accurate because multiple components work together.**\n\n:microscope: Supplementary views to use in conjunction with the annotator, including\n\n\u003cdetails\u003e\n  \u003csummary\u003e `Finder`: \u003cb\u003efilter\u003c/b\u003e data by search criteria\u003c/summary\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/phurwicz/hover-gallery/main/0.7.0/finder-filter.gif\"\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e `SoftLabel`: \u003cb\u003eactive learning\u003c/b\u003e by in-the-loop model prediction score\u003c/summary\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/phurwicz/hover-gallery/main/0.7.0/active-learning.gif\"\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e `Snorkel`: \u003cb\u003ecustom functions\u003c/b\u003e for labeling and filtering\u003c/summary\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/phurwicz/hover-gallery/main/0.7.0/labeling-function.gif\"\u003e\n\u003c/details\u003e\n\n\u003e **It's flexible (and fun!) because the process never gets old.**\n\n:toolbox: Additional tools and options that allow you to\n\n\u003cdetails\u003e\n  \u003csummary\u003e Go to \u003cb\u003ehigher dimensions\u003c/b\u003e (3D? 4D?) and choose your xy-axes \u003c/summary\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/phurwicz/hover-gallery/main/0.7.0/change-axes.gif\"\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e \u003cb\u003eConsecutively select\u003c/b\u003e across areas, dimensions, and views\u003c/summary\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/phurwicz/hover-gallery/main/0.7.0/keep-selecting.gif\"\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e \u003cb\u003eKick outliers\u003c/b\u003e and \u003cb\u003efix mistakes\u003c/b\u003e\u003c/summary\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/phurwicz/hover-gallery/main/0.7.0/evict-and-patch.gif\"\u003e\n\u003c/details\u003e\n\n## :package: Install\n\n\u003e Python: 3.8+\n\u003e\n\u003e OS: Linux \u0026 Mac \u0026 Windows\n\nPyPI: `pip install hover`\n\nConda: `conda install -c conda-forge hover`\n\n## :book: Resources\n\n-   [Tutorials](https://phurwicz.github.io/hover/pages/tutorial/t0-quickstart/)\n-   [Binder repo](https://github.com/phurwicz/hover-binder)\n-   [Changelog](https://github.com/phurwicz/hover/blob/main/CHANGELOG.md)\n-   [Documentation](https://phurwicz.github.io/hover/)\n\n## :flags: Announcements\n\n-   **Jan 21, 2023** version 0.8.0 is now available. Check out the [changelog](https://github.com/phurwicz/hover/blob/main/CHANGELOG.md) for details :partying_face:.\n\n## :bell: Remarks\n\n### Shoutouts\n\n-   Thanks to [`Bokeh`](https://bokeh.org) because `hover` would not exist without linked plots and callbacks, or be nearly as good without embeddable server apps.\n-   Thanks to [Philip Vollet](https://de.linkedin.com/in/philipvollet) for sharing `hover` with the community even when it was really green.\n\n### Contributing\n\n-   All feedbacks are welcome, **especially what you find lacking and want it fixed!**\n-   `./requirements-dev.txt` lists required packages for development.\n-   Pull requests are advised to use a superset of the pre-commit hooks listed in [.pre-commit-config.yaml](https://github.com/phurwicz/hover/blob/main/.pre-commit-config.yaml).\n\n### Citation\n\nIf you have found `hover` useful to your work, please [let us know](https://github.com/phurwicz/hover/discussions) :hugs:\n\n```tex\n@misc{hover,\n  title={{hover}: label data at scale},\n  url={https://github.com/phurwicz/hover},\n  note={Open software from https://github.com/phurwicz/hover},\n  author={\n    Pavel Hurwicz and\n    Haochuan Wei},\n  year={2021},\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphurwicz%2Fhover","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphurwicz%2Fhover","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphurwicz%2Fhover/lists"}