{"id":31020216,"url":"https://github.com/gosling-lang/gos","last_synced_at":"2025-09-13T10:10:44.001Z","repository":{"id":39684740,"uuid":"387874230","full_name":"gosling-lang/gos","owner":"gosling-lang","description":"A declarative interactive genomics visualization library for Python.","archived":false,"fork":false,"pushed_at":"2025-08-26T06:29:35.000Z","size":13643,"stargazers_count":230,"open_issues_count":13,"forks_count":16,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-09-06T22:51:14.674Z","etag":null,"topics":["biovis","colab","data-visualization","dataviz","gosling","grammar","hidivelab","higlass","jupyter","python","visualization"],"latest_commit_sha":null,"homepage":"https://gosling-lang.github.io/gos","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/gosling-lang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-07-20T18:00:50.000Z","updated_at":"2025-09-04T17:36:25.000Z","dependencies_parsed_at":"2023-11-21T18:25:47.579Z","dependency_job_id":"9621c621-fe92-423d-a31b-3846b32376dd","html_url":"https://github.com/gosling-lang/gos","commit_stats":{"total_commits":146,"total_committers":5,"mean_commits":29.2,"dds":"0.14383561643835618","last_synced_commit":"23887abd7ae9e70ea45b4bf878c93a567b7c24e9"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/gosling-lang/gos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gosling-lang%2Fgos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gosling-lang%2Fgos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gosling-lang%2Fgos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gosling-lang%2Fgos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gosling-lang","download_url":"https://codeload.github.com/gosling-lang/gos/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gosling-lang%2Fgos/sbom","scorecard":{"id":441760,"data":{"date":"2025-08-11","repo":{"name":"github.com/gosling-lang/gos","commit":"7df935f6ec156639d70f31d9d9ceb65af1366615"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/19 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":"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":"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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release.yml:17","Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/docs.yml:9","Warn: no topLevel permission defined: .github/workflows/release.yml:1"],"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":"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":"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/ci.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/gosling-lang/gos/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/gosling-lang/gos/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/gosling-lang/gos/docs.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docs.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/gosling-lang/gos/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/gosling-lang/gos/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/gosling-lang/gos/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/gosling-lang/gos/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:51: update your workflow using https://app.stepsecurity.io/secureworkflow/gosling-lang/gos/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/gosling-lang/gos/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/gosling-lang/gos/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/gosling-lang/gos/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/gosling-lang/gos/release.yml/main?enable=pin","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   5 third-party GitHubAction 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":"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: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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release.yml:11"],"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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"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 25 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-19T05:44:53.825Z","repository_id":39684740,"created_at":"2025-08-19T05:44:53.825Z","updated_at":"2025-08-19T05:44:53.825Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274948372,"owners_count":25379445,"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-13T02:00:10.085Z","response_time":70,"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":["biovis","colab","data-visualization","dataviz","gosling","grammar","hidivelab","higlass","jupyter","python","visualization"],"created_at":"2025-09-13T10:10:42.256Z","updated_at":"2025-09-13T10:10:43.985Z","avatar_url":"https://github.com/gosling-lang.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gos 🦆\n\n[![License](https://img.shields.io/pypi/l/gosling.svg?color=green)](https://github.com/gosling-lang/gos/raw/main/LICENSE)\n[![PyPI](https://img.shields.io/pypi/v/gosling.svg?color=green)](https://pypi.org/project/gosling)\n[![tests](https://github.com/gosling-lang/gos/workflows/CI/badge.svg)](https://github.com/gosling-lang/gos/actions)\n\n**gos** is a declarative genomics visualization library for Python. It is built\non top of the [Gosling] JSON specification, providing a simplified interface for\nauthoring interactive genomic visualizations.\n\n## Installation\n\n\u003e The **gos** API is under active development. Feedback is appreciated and\n\u003e welcomed.\n\n```bash\npip install gosling[all]\n```\n\n## Documentation\n\nSee the [Documentation Site](https://gosling-lang.github.io/gos) for more\ninformation.\n\n## Example\n\n\u003cimg src=\"https://raw.githubusercontent.com/gosling-lang/gos/main/docs/_static/example.gif\" alt=\"Gosling visualization\"/\u003e\n\n```python\nimport gosling as gos\n\ndata = gos.multivec(\n    url=\"https://server.gosling-lang.org/api/v1/tileset_info/?d=cistrome-multivec\",\n    row=\"sample\",\n    column=\"position\",\n    value=\"peak\",\n    categories=[\"sample 1\", \"sample 2\", \"sample 3\", \"sample 4\"],\n    binSize=5,\n)\n\nbase_track = gos.Track(data, width=800, height=100)\n\nheatmap = base_track.mark_rect().encode(\n    x=gos.X(\"start:G\", axis=\"top\"),\n    xe=\"end:G\",\n    row=gos.Row(\"sample:N\", legend=True),\n    color=gos.Color(\"peak:Q\", legend=True),\n)\n\nbars = base_track.mark_bar().encode(\n    x=gos.X(\"position:G\", axis=\"top\"),\n    y=\"peak:Q\",\n    row=\"sample:N\",\n    color=gos.Color(\"sample:N\", legend=True),\n)\n\nlines = base_track.mark_line().encode(\n    x=gos.X(\"position:G\", axis=\"top\"),\n    y=\"peak:Q\",\n    row=\"sample:N\",\n    color=gos.Color(\"sample:N\", legend=True),\n)\n\ngos.vertical(heatmap, bars, lines).properties(\n    title=\"Visual Encoding\",\n    subtitle=\"Gosling provides diverse visual encoding methods\",\n    layout=\"linear\",\n    centerRadius=0.8,\n    xDomain=gos.GenomicDomain(chromosome=\"1\", interval=[1, 3000500]),\n)\n```\n\n## Example Gallery\n\nWe have started a\n[gallery](https://gosling-lang.github.io/gos/gallery/index.html) of community\nexamples in `gosling/examples/`. If you are interested in contributing, please\nfeel free to submit a PR! Checkout the\n[existing JSON examples](http://gosling-lang.org/examples/) if you are looking\nfor inspiration.\n\n## Changelog\n\nCheck the [GitHub Releases](https://github.com/gosling-lang/gos/releases) for a\ndetailed changelog.\n\n## **Development**\n\nThe source code for **gos** is a hybrid of Python and TypeScript (used for the\n[anywidget](https://github.com/manzt/anywidget) component). It requires both:\n\n- [uv](https://github.com/astral-sh/uv) (for Python development)\n- [Deno](https://deno.land) (for building the widget)\n\nPlease ensure both are installed before proceeding.\n\n**Tests**\n\nRun the test suite with:\n\n```sh\nuv run pytest\n```\n\n**Notebooks**\n\nTo try out the library in the example `notebooks/`, launch Jupyter Lab with:\n\n```sh\nuv run jupyter lab\n```\n\n**Widget**\n\nThe widgets implementation is split between `./gosling/_widget.py` (the Python\ncomponent) and `./frontend/widget.ts` (the TypeScript component).\n\nTo modify the widget's behavior in the front end, edit `./frontend/widget.ts`\nand compile with:\n\n```sh\ndeno task build\n```\n\nUse `deno task dev` to watch for changes and recompile automatically.\n\n**Docs**\n\nTo build and preview the documentation locally:\n\n```sh\nuv run docs/build.py\nuv run python -m http.server -d docs/dist\n```\n\nOpen your browser to http://localhost:8000 to view the generated docs.\n\n**Auto-generate Schema Bindings**\n\nMuch of the Python code in this repository is automatically generated from the\nGosling schema to keep the bindings in sync. This includes both the bindings in\n`gosling/schema/` and the corresponding API documentation in\n`doc/user_guide/API.rst`.\n\nDo not edit these files manually. Instead, regenerate them using:\n\n```sh\n# Update gosling/schema/*\nuv run tools/generate_schema_wrapper.py \u003ctag_name\u003e\n# Update API docs\nuv run tools/generate_api_docs.py\n```\n\nUse a `tag_name` that corresponds to a valid\n[Gosling.js Release](https://github.com/gosling-lang/gosling.js/releases) (e.g.,\n`v0.12.3`).\n\nYou must commit the changes and create a new release. Schema updates usually\nrequire at least a minor version bump, but the exact versioning is up to the\nmaintainer.\n\n## Release\n\nReleases are managed via the GitHub UI. The release **tag determines the package\nversion** published to PyPI.\n\n[Draft a new release](https://github.com/gosling-lang/gos/releases/new):\n\n1. **Create a tag**\n\n   - Click _\"Choose a tag\"_, then **type a new tag** in the format\n     `v[major].[minor].[patch]` to create it.\n   - _Note_: The UI is not obvious about this. You can create a tag here, not\n     just select one.\n\n2. **Generate release notes**\n\n   - Click _\"Generate Release Notes\"_ to auto-summarize changes from merged PRs.\n   - Edit to exclude irrelevant changes for end users (e.g., docs or CI).\n\n3. **Document significant changes**\n\n   - Add migration steps or noteworthy updates.\n   - Ensure PR titles are clear and consistent.\n\n4. **Publish the release**\n\n   - Click _Publish release_ to make it public.\n   - This triggers a [workflow](.github/workflows/release.yml) that builds the\n     package and publishes it to PyPI using the new tag.\n\n## Design \u0026 Implementation\n\ngos is inspired by and borrows heavily from [Altair] both in project philosophy\nand implementation. The internal Python API is auto-generated from the [Gosling]\nspecification using code adapted directly from Altair to generate [Vega-Lite]\nbindings. This design choice guarantees that visualizations are type-checked in\ncomplete concordance with the [Gosling] specification, and that the Python API\nremains consistent with the evolving schema over time. Special thanks to\n[Jake Vanderplas](https://github.com/jakevdp) and others on\n[`schemapi`](https://github.com/altair-viz/altair/tree/master/tools/schemapi).\n\n[Gosling]: https://github.com/gosling-lang/gosling.js\n[Altair]: https://github.com/altair-viz/altair\n[Vega-Lite]: https://github.com/vega/vega-lite\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgosling-lang%2Fgos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgosling-lang%2Fgos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgosling-lang%2Fgos/lists"}