{"id":13468566,"url":"https://github.com/holoviz/panel","last_synced_at":"2026-10-18T23:45:39.215Z","repository":{"id":37271379,"uuid":"145848899","full_name":"holoviz/panel","owner":"holoviz","description":"Panel: The powerful data exploration \u0026 web app framework for Python","archived":false,"fork":false,"pushed_at":"2026-10-14T15:15:08.000Z","size":124439,"stargazers_count":5799,"open_issues_count":868,"forks_count":644,"subscribers_count":65,"default_branch":"main","last_synced_at":"2026-10-14T17:32:00.130Z","etag":null,"topics":["bokeh","control-panels","dashboards","dataapp","datascience","dataviz","gui","holoviews","holoviz","hvplot","jupyter","matplotlib","panel","plotly"],"latest_commit_sha":null,"homepage":"https://panel.holoviz.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/holoviz.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.MD","funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"accessibility":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null},"funding":{"open_collective":"holoviz"}},"created_at":"2018-08-23T12:14:24.000Z","updated_at":"2026-10-14T15:15:21.000Z","dependencies_parsed_at":"2026-10-14T15:32:55.667Z","dependency_job_id":null,"html_url":"https://github.com/holoviz/panel","commit_stats":{"total_commits":3578,"total_committers":167,"mean_commits":21.4251497005988,"dds":"0.36528787031861376","last_synced_commit":"baaf9814320d2edc0659cfb10bb14cacb6ba67c5"},"previous_names":[],"tags_count":733,"template":false,"template_full_name":null,"purl":"pkg:github/holoviz/panel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/holoviz%2Fpanel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/holoviz%2Fpanel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/holoviz%2Fpanel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/holoviz%2Fpanel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/holoviz","download_url":"https://codeload.github.com/holoviz/panel/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/holoviz%2Fpanel/sbom","scorecard":{"id":113088,"data":{"date":"2025-08-11","repo":{"name":"github.com/holoviz/panel","commit":"d5340f154225d608f5c17c243780550a6dd338bc"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.2,"checks":[{"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":"Code-Review","score":1,"reason":"Found 5/30 approved changesets -- score normalized to 1","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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 13 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"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":"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":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/build.yaml:134"],"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'pull-requests' permission set to 'read': .github/workflows/test.yaml:60","Warn: no topLevel permission defined: .github/workflows/build.yaml:1","Warn: no topLevel permission defined: .github/workflows/docs.yaml:1","Warn: no topLevel permission defined: .github/workflows/downstream_tests.yaml:1","Warn: no topLevel permission defined: .github/workflows/gallery.yaml:1","Warn: no topLevel permission defined: .github/workflows/jupyterlite.yaml:1","Warn: no topLevel permission defined: .github/workflows/nightly_lock.yaml:1","Warn: no topLevel permission defined: .github/workflows/test.yaml: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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 28 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":"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":"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Info: Possibly incomplete results: error parsing job operating system: .github/workflows/test.yaml:146","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/test.yaml:149","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/test.yaml:153","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/test.yaml:156","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yaml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yaml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yaml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yaml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yaml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yaml:140: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yaml:145: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yaml:156: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yaml:169: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yaml:184: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yaml:187: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yaml:213: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yaml:224: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yaml:239: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yaml:242: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yaml:70: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yaml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yaml:99: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yaml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/build.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docs.yaml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/docs.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docs.yaml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/docs.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yaml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/docs.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yaml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/docs.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docs.yaml:75: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/docs.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docs.yaml:88: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/docs.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/downstream_tests.yaml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/downstream_tests.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gallery.yaml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/gallery.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gallery.yaml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/gallery.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/gallery.yaml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/gallery.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/jupyterlite.yaml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/jupyterlite.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/jupyterlite.yaml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/jupyterlite.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/jupyterlite.yaml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/jupyterlite.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/jupyterlite.yaml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/jupyterlite.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/jupyterlite.yaml:66: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/jupyterlite.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/jupyterlite.yaml:76: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/jupyterlite.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/nightly_lock.yaml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/nightly_lock.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:50: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/test.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yaml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:70: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:128: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:142: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:159: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:191: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:206: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/test.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yaml:221: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:232: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:248: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:267: update your workflow using https://app.stepsecurity.io/secureworkflow/holoviz/panel/test.yaml/main?enable=pin","Warn: npmCommand not pinned by hash: scripts/jupyterlite/build.sh:11","Info:   0 out of  20 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  30 third-party GitHubAction dependencies pinned","Info:   0 out of   1 npmCommand dependencies pinned","Info:   1 out of   1 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":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2020-73"],"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-15T16:21:17.041Z","repository_id":37271379,"created_at":"2025-08-15T16:21:17.041Z","updated_at":"2025-08-15T16:21:17.041Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38343425,"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-18T02:00:06.448Z","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":["bokeh","control-panels","dashboards","dataapp","datascience","dataviz","gui","holoviews","holoviz","hvplot","jupyter","matplotlib","panel","plotly"],"created_at":"2024-07-31T15:01:13.689Z","updated_at":"2026-10-18T23:45:39.207Z","avatar_url":"https://github.com/holoviz.png","language":"Python","funding_links":["https://opencollective.com/holoviz"],"categories":["Python","Machine Learning and AI","⭐ Support","Others","Web UI","Front-end frameworks","Interactive Widgets \u0026 Visualization","📈 Dashboards \u0026 BI","Runtimes/Frontends"],"sub_categories":["Data Science and Analytics","Events","More","Tools"],"readme":"\u003ca href=\"https://panel.holoviz.org/\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://github.com/holoviz/panel/raw/main/doc/_static/logo_horizontal_dark_theme.png\"\u003e\n    \u003cimg src=\"https://github.com/holoviz/panel/raw/main/doc/_static/logo_horizontal_light_theme.png\" alt=\"Panel logo\" width=400/\u003e\n  \u003c/picture\u003e\n\u003c/a\u003e\n\n# Build data apps with the Python tools you know\n\nPanel is an [open-source](https://github.com/holoviz/panel/blob/main/LICENSE.txt) library for interactive dashboards and web apps. Widgets, plots and layouts are ordinary Python objects that you connect to your data and models, pass between functions and classes, and test like the rest of your code. There are no string IDs to match up and no script that reruns on every click.\n\n[![PyPI](https://img.shields.io/pypi/v/panel.svg?colorB=cc77dd)](https://pypi.python.org/pypi/panel) [![conda-forge](https://img.shields.io/conda/v/conda-forge/panel.svg?label=conda-forge\u0026colorB=4488ff)](https://anaconda.org/conda-forge/panel) [![Downloads](https://img.shields.io/pypi/dm/panel?label=downloads)](https://pypistats.org/packages/panel) [![Tests](https://github.com/holoviz/panel/workflows/tests/badge.svg?query=branch%3Amain)](https://github.com/holoviz/panel/actions/workflows/test.yaml?query=branch%3Amain) [![Coverage](https://codecov.io/gh/holoviz/panel/branch/main/graph/badge.svg)](https://codecov.io/gh/holoviz/panel) [![Discourse](https://img.shields.io/discourse/status?server=https%3A%2F%2Fdiscourse.holoviz.org)](https://discourse.holoviz.org/c/panel/5) [![Discord](https://img.shields.io/discord/1075331058024861767)](https://discord.gg/UXdtYyGVQX)\n\n[Home](https://panel.holoviz.org/) | [Getting started](https://panel.holoviz.org/getting_started/index.html) | [Components](https://panel.holoviz.org/reference/index.html) | [App gallery](https://panel.holoviz.org/gallery/index.html) | [API](https://panel.holoviz.org/api/index.html) | [Support](#community-and-support)\n\n```bash\npip install panel\n```\n\nor `conda install -c conda-forge panel`.\n\n\u003ca href=\"https://panel.holoviz.org/\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/holoviz/panel/main/doc/_static/readme/hero-dark.webp\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/holoviz/panel/main/doc/_static/readme/hero-light.webp\" alt=\"Three widgets beside a chart of a random walk and its moving average\"/\u003e\n  \u003c/picture\u003e\n\u003c/a\u003e\n\nCreate the controls, define the plot, then connect the controls and arrange the app. The same code renders in a notebook cell and serves as an app with `panel serve app.py`.\n\n```python\nimport numpy as np, panel as pn\nimport holoviews as hv\n\npn.extension()\n\nwindow = pn.ui.IntSlider(label=\"Window\", value=30, start=5, end=90)\nsigma  = pn.ui.FloatSlider(label=\"Volatility\", value=1.0, start=0.2, end=3)\nticker = pn.ui.RadioButtonGroup(label=\"Series\", options=[\"AAPL\", \"MSFT\", \"NVDA\"])\n\ndef series(window, sigma, ticker):\n    rng = np.random.default_rng(sum(map(ord, ticker)))\n    walk = np.cumsum(rng.normal(0, sigma, 400))\n    smooth = np.convolve(walk, np.ones(window) / window, \"same\")\n    return hv.Curve(walk).opts(alpha=0.4) * hv.Curve(smooth)\n\nplot = pn.bind(series, window, sigma, ticker)\npn.ui.Row(pn.ui.Column(window, sigma, ticker), plot).servable()\n```\n\n## Update only what needs to change\n\nWhen a user changes a control, Panel runs only the code connected to it. In a small app, rerunning everything is cheap and the difference is hard to notice. In a real application that loads large datasets, fits models and keeps user state, it determines how quickly the app responds and how much caching and state management you have to write to keep it that way.\n\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/holoviz/panel/main/doc/_static/readme/execution-dark.webp\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/holoviz/panel/main/doc/_static/readme/execution-light.webp\" alt=\"The same five-step app after a control change: full-script execution repeats all five steps, while Panel updates only the model and forecast\"/\u003e\n\u003c/picture\u003e\n\n[Compare Panel and Streamlit](https://panel.holoviz.org/explanation/comparisons/compare_streamlit.html)\n\n## Built with Panel\n\nExplore example apps for science, finance and machine learning. Each includes source code you can run and adapt.\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"33%\"\u003e\u003ca href=\"https://panel.holoviz.org/gallery/gaia_million_star_atlas.html\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/holoviz/panel/main/doc/homepage/src/assets/gallery/gaia_million_star_atlas.webp\" alt=\"Gaia million star atlas\"/\u003e\u003c/a\u003e\u003cbr/\u003e\u003cb\u003eGaia million star atlas\u003c/b\u003e\u003cbr/\u003eExplore a million stars with linked views of their positions, brightness and color\u003c/td\u003e\n    \u003ctd width=\"33%\"\u003e\u003ca href=\"https://panel.holoviz.org/gallery/model_serving_monitor.html\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/holoviz/panel/main/doc/homepage/src/assets/gallery/model_serving_monitor.webp\" alt=\"Model serving monitor\"/\u003e\u003c/a\u003e\u003cbr/\u003e\u003cb\u003eModel serving monitor\u003c/b\u003e\u003cbr/\u003eMonitor model response times, drift and alerts\u003c/td\u003e\n    \u003ctd width=\"33%\"\u003e\u003ca href=\"https://panel.holoviz.org/gallery/portfolio_analyzer.html\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/holoviz/panel/main/doc/homepage/src/assets/gallery/portfolio_analyzer.webp\" alt=\"Portfolio analyzer\"/\u003e\u003c/a\u003e\u003cbr/\u003e\u003cb\u003ePortfolio analyzer\u003c/b\u003e\u003cbr/\u003eExplore investments with linked tables and price charts\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"https://panel.holoviz.org/gallery/glaciers.html\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/holoviz/panel/main/doc/homepage/src/assets/gallery/glaciers.webp\" alt=\"Glaciers of the world\"/\u003e\u003c/a\u003e\u003cbr/\u003e\u003cb\u003eGlaciers of the world\u003c/b\u003e\u003cbr/\u003eFilter and explore data on 200,000 glaciers\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://panel.holoviz.org/gallery/penguin_crossfilter.html\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/holoviz/panel/main/doc/homepage/src/assets/gallery/penguin_crossfilter.webp\" alt=\"Penguin crossfilter\"/\u003e\u003c/a\u003e\u003cbr/\u003e\u003cb\u003ePenguin crossfilter\u003c/b\u003e\u003cbr/\u003eExplore penguin data across four linked plots\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://panel.holoviz.org/gallery/storm_surge_studio.html\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/holoviz/panel/main/doc/homepage/src/assets/gallery/storm_surge_studio.webp\" alt=\"Storm surge studio\"/\u003e\u003c/a\u003e\u003cbr/\u003e\u003cb\u003eStorm surge studio\u003c/b\u003e\u003cbr/\u003eExplore a flood model with interactive controls\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n[Browse all examples](https://panel.holoviz.org/gallery/index.html)\n\n## AI tools for developers and users\n\nUse HoloViz skills to help coding assistants work with Panel, and Lumen to add an assistant to your app.\n\n**Build with coding assistants.** [HoloViz skills](https://skills.holoviz.org/) give coding assistants guidance on building, reviewing, debugging and testing Panel apps with current APIs. Install them for Claude Code, Codex, Copilot, Cursor, Gemini CLI and other supported tools.\n\n```bash\npip install holoviz-skills\nholoviz-skills install\n```\n\n**Let users explore through chat.** [Lumen](https://lumen.holoviz.org/) lets users change filters and adjust views through plain-language requests. The assistant works with the app's existing controls and respects their available options and limits.\n\n```python\nfrom lumen.ai import Planner\nfrom lumen.ai.agents import ChatAgent, ComponentControlAgent\nfrom lumen.ai.llm import OpenAI\n\nagent = ComponentControlAgent(components=page)\nassistant = Planner(agents=[ChatAgent, agent], llm=OpenAI())\ndrawer = pn.ui.Drawer(assistant, anchor=\"right\", variant=\"docked\")\npage.main.append(drawer)\n```\n\n\u003ca href=\"https://github.com/holoviz/lumen/blob/main/examples/ai/penguin_copilot.py\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/holoviz/panel/main/doc/homepage/src/assets/ai/penguin_copilot.webp\" alt=\"A chat assistant beside a penguin dashboard, showing updated filters and chart settings\"/\u003e\u003c/a\u003e\n\nOne request updates the species filter, x-axis and color setting in Lumen's [penguin copilot](https://github.com/holoviz/lumen/blob/main/examples/ai/penguin_copilot.py).\n\n## Organize your app as it grows\n\nConnect widgets to functions for a simple app, or use reusable components to organize a larger one. Both approaches work together. Use `pn.bind` to connect a Python function to widgets, group data, settings and behavior in a component, and build pages from smaller components that share data and stay in sync. [Param](https://param.holoviz.org) lets you define valid values and how changes affect the app, making components easier to reuse and test.\n\n```python\nclass Explorer(pn.viewable.Viewer):\n    data = param.DataFrame(allow_refs=True)\n    window = param.Integer(30, bounds=(5, 90))\n\n    @param.depends(\"data\", \"window\")\n    def plot(self):\n        return view(self.data, self.window)\n\nclass Dashboard(pn.viewable.Viewer):\n    data = param.DataFrame()\n\n    def __panel__(self):\n        ref = self.param.data\n        return pn.ui.Tabs(\n            (\"Explore\", Explorer(data=ref)),\n            (\"Report\", Report(data=ref)),\n        )\n```\n\nBuilt this way, Panel apps run in production as multi-page internal platforms with authentication, editable tables, review workflows and chat assistants used by whole teams. [Lumen](https://lumen.holoviz.org/), a complete AI data exploration application, is built entirely with Panel. Because Panel keeps a live Python session for every visitor, it suits apps built around data, models and computation. A consumer product such as a public message board or a full word processor is better served by a general-purpose web framework, which can still embed Panel apps through FastAPI or Django.\n\n[Choosing between functions and classes](https://panel.holoviz.org/explanation/api/functions_vs_classes.html)\n\n## From development to deployment\n\nWork in a notebook or your preferred editor, then deploy the same app for others to use.\n\n1. **In a notebook.** Explore data with live widgets and plots in Jupyter, JupyterLab, VS Code, Colab or marimo.\n2. **From your editor.** Build your app in a Python file, mark the layout with `.servable()` and run `panel serve app.py --dev`. Development mode reloads the app as you edit.\n3. **In production.** Host your app on your own infrastructure, add authentication, or integrate it with FastAPI or Django. Compatible apps can also run entirely in the browser with WebAssembly via `panel convert app.py`.\n\n## Use your preferred plotting library\n\nDisplay your existing plots in Panel and connect them to interactive controls. Where supported, selections and clicks in a plot can update the rest of the app. Panel works with [Matplotlib](https://panel.holoviz.org/reference/panes/Matplotlib.html) (including Seaborn and Plotnine), [Plotly](https://panel.holoviz.org/reference/panes/Plotly.html), [Bokeh](https://panel.holoviz.org/reference/panes/Bokeh.html), [hvPlot and HoloViews](https://panel.holoviz.org/reference/panes/HoloViews.html), [Altair and Vega](https://panel.holoviz.org/reference/panes/Vega.html), [ECharts](https://panel.holoviz.org/reference/panes/ECharts.html), [Deck.gl](https://panel.holoviz.org/reference/panes/DeckGL.html), [Vizzu](https://panel.holoviz.org/reference/panes/Vizzu.html), [VTK](https://panel.holoviz.org/reference/panes/VTK.html), [Folium](https://panel.holoviz.org/reference/panes/Folium.html) and [ipywidgets](https://panel.holoviz.org/reference/panes/IPyWidget.html).\n\n## Tables, chat, editors and more\n\nPanel includes more than 130 components for building app interfaces, with documentation and examples for each, from [Tabulator](https://panel.holoviz.org/reference/widgets/Tabulator.html) for sorting, filtering and editing large tables to [ChatInterface](https://panel-material-ui.holoviz.org/reference/chat/ChatInterface.html) for streaming responses, a [Terminal](https://panel.holoviz.org/reference/widgets/Terminal.html) and [Perspective](https://panel.holoviz.org/reference/panes/Perspective.html) pivot tables. [Browse all components](https://panel.holoviz.org/reference/index.html)\n\n## Extend your app\n\nHandle live data, add custom interfaces and manage access to your app.\n\n- **[Live data and streaming](https://panel.holoviz.org/how_to/callbacks/index.html).** Update charts as new data arrives or display results as they become available. Panel supports asynchronous functions, scheduled updates and streaming responses.\n- **[Custom components](https://panel.holoviz.org/how_to/custom_components/index.html).** Build components in React, Vue or JavaScript and use them alongside Panel's existing widgets.\n- **[Run apps in the browser](https://panel.holoviz.org/how_to/wasm/index.html).** Package compatible apps to run entirely in the browser with WebAssembly, without a separate Python server.\n- **[Authentication and performance](https://panel.holoviz.org/how_to/authentication/index.html).** Control access with OAuth, cache expensive computations and use Panel's admin tools to inspect performance.\n\n## Community and support\n\nPanel has been developed in the open, since its first release in 2018. It is maintained by a team at Anaconda together with contributors from research labs, banks, and instrument makers, and is part of [HoloViz](https://holoviz.org/), a set of Python tools for working with data.\n\n- Ask usage questions on [Discourse](https://discourse.holoviz.org/c/panel/5) or [Discord](https://discord.gg/UXdtYyGVQX).\n- Report bugs and request features in [GitHub issues](https://github.com/holoviz/panel/issues).\n- See the [contributing guide](CONTRIBUTING.MD) to get involved.\n\nPanel is free and open-source under the [BSD 3-Clause License](https://github.com/holoviz/panel/blob/main/LICENSE.txt).\n\n## Sponsors\n\nThe Panel project is grateful for the sponsorship by the organizations and companies below:\n\n\u003ctable align=\"center\"\u003e\n\u003ctr\u003e\n  \u003ctd\u003e\n    \u003ca href=\"https://www.anaconda.com/\"\u003e\n      \u003cimg src=\"https://static.bokeh.org/sponsor/anaconda.png\" alt=\"Anaconda Logo\" width=\"200\"/\u003e\n    \u003c/a\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ca href=\"https://www.blackstone.com/the-firm/\"\u003e\n      \u003cimg src=\"https://static.bokeh.org/sponsor/blackstone.png\" alt=\"Blackstone Logo\" width=\"200\"/\u003e\n    \u003c/a\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ca href=\"https://numfocus.org/\"\u003e\n      \u003cimg src=\"https://numfocus.org/wp-content/uploads/2017/03/numfocusweblogo_orig-1.png\" alt=\"NumFOCUS Logo\" width=\"200\"/\u003e\n    \u003c/a\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ca href=\"https://quansight.com/\"\u003e\n      \u003cimg src=\"https://assets.holoviz.org/logos/Quansight-logo.svg\" alt=\"Quansight Logo\" width=\"200\"/\u003e\n    \u003c/a\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fholoviz%2Fpanel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fholoviz%2Fpanel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fholoviz%2Fpanel/lists"}