{"id":13413835,"url":"https://github.com/trickstercache/trickster","last_synced_at":"2026-01-30T19:13:45.183Z","repository":{"id":37589798,"uuid":"127344362","full_name":"trickstercache/trickster","owner":"trickstercache","description":"Open Source HTTP Reverse Proxy Cache and Time Series Dashboard Accelerator","archived":false,"fork":false,"pushed_at":"2026-01-10T21:19:22.000Z","size":33158,"stargazers_count":2068,"open_issues_count":46,"forks_count":183,"subscribers_count":41,"default_branch":"main","last_synced_at":"2026-01-30T05:03:29.147Z","etag":null,"topics":["accelerator","caching","clickhouse","dashboards","golang","http-proxy","influxdb","performance","prometheus","reverse-proxy","tsdb"],"latest_commit_sha":null,"homepage":"https://trickstercache.org","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trickstercache.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.MD","support":"docs/supported-backend-providers.md","governance":"GOVERNANCE.md","roadmap":"docs/roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":"MAINTAINERS.md","copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-03-29T20:31:44.000Z","updated_at":"2026-01-28T15:11:52.000Z","dependencies_parsed_at":"2025-01-17T07:06:29.871Z","dependency_job_id":"ff70688e-ae5a-45a8-a39c-9286c4234671","html_url":"https://github.com/trickstercache/trickster","commit_stats":{"total_commits":823,"total_committers":76,"mean_commits":"10.828947368421053","dds":0.4738760631834751,"last_synced_commit":"6ef21dffe9f6d55c444d244455af6741274fe0c6"},"previous_names":["comcast/trickster","tricksterproxy/trickster"],"tags_count":57,"template":false,"template_full_name":null,"purl":"pkg:github/trickstercache/trickster","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trickstercache%2Ftrickster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trickstercache%2Ftrickster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trickstercache%2Ftrickster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trickstercache%2Ftrickster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trickstercache","download_url":"https://codeload.github.com/trickstercache/trickster/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trickstercache%2Ftrickster/sbom","scorecard":{"id":300625,"data":{"date":"2025-08-11","repo":{"name":"github.com/trickstercache/trickster","commit":"99ac2462add00d5014794ec929eec27c7f1ceaa7"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.4,"checks":[{"name":"Code-Review","score":8,"reason":"Found 24/30 approved changesets -- score normalized to 8","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":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.MD:1","Info: Found linked content: SECURITY.MD:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.MD:1","Info: Found text in security policy: SECURITY.MD:1"],"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":"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":10,"reason":"30 commit(s) and 15 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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:26","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:27","Warn: jobLevel 'packages' permission set to 'write': .github/workflows/publish-beta-release.yaml:12","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/publish-beta-release.yaml:11","Info: jobLevel 'contents' permission set to 'read': .github/workflows/publish-image.yaml:23","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/publish-release-candidate.yaml:11","Warn: jobLevel 'packages' permission set to 'write': .github/workflows/publish-release-candidate.yaml:12","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/publish-release.yml:30","Info: jobLevel 'contents' permission set to 'read': .github/workflows/publish-release.yml:74","Warn: jobLevel 'packages' permission set to 'write': .github/workflows/publish-release.yml:75","Warn: no topLevel permission defined: .github/workflows/ci-build-tests.yml:1","Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Warn: no topLevel permission defined: .github/workflows/publish-beta-release.yaml:1","Warn: no topLevel permission defined: .github/workflows/publish-image.yaml:1","Warn: no topLevel permission defined: .github/workflows/publish-release-candidate.yaml:1","Warn: no topLevel permission defined: .github/workflows/publish-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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: 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":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v2.0.0-beta3 not signed: https://api.github.com/repos/trickstercache/trickster/releases/221401115","Warn: release artifact v2.0.0-beta2 not signed: https://api.github.com/repos/trickstercache/trickster/releases/41870484","Warn: release artifact v1.1.5 not signed: https://api.github.com/repos/trickstercache/trickster/releases/37368819","Warn: release artifact v1.1.4 not signed: https://api.github.com/repos/trickstercache/trickster/releases/37180385","Warn: release artifact v1.1.3 not signed: https://api.github.com/repos/trickstercache/trickster/releases/31537381","Warn: release artifact v2.0.0-beta3 does not have provenance: https://api.github.com/repos/trickstercache/trickster/releases/221401115","Warn: release artifact v2.0.0-beta2 does not have provenance: https://api.github.com/repos/trickstercache/trickster/releases/41870484","Warn: release artifact v1.1.5 does not have provenance: https://api.github.com/repos/trickstercache/trickster/releases/37368819","Warn: release artifact v1.1.4 does not have provenance: https://api.github.com/repos/trickstercache/trickster/releases/37180385","Warn: release artifact v1.1.3 does not have provenance: https://api.github.com/repos/trickstercache/trickster/releases/31537381"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"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-build-tests.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/ci-build-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-build-tests.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/ci-build-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-build-tests.yml:73: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/ci-build-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-build-tests.yml:76: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/ci-build-tests.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci-build-tests.yml:93: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/ci-build-tests.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci-build-tests.yml:107: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/ci-build-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-build-tests.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/ci-build-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-build-tests.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/ci-build-tests.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci-build-tests.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/ci-build-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-build-tests.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/ci-build-tests.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci-build-tests.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/ci-build-tests.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci-build-tests.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/ci-build-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-image.yaml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/publish-image.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish-image.yaml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/publish-image.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish-image.yaml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/publish-image.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish-image.yaml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/publish-image.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish-image.yaml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/publish-image.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish-image.yaml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/publish-image.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish-image.yaml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/publish-image.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish-image.yaml:83: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/publish-image.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-release.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/publish-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-release.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/trickstercache/trickster/publish-release.yml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:5","Warn: containerImage not pinned by hash: Dockerfile:15","Warn: pipCommand not pinned by hash: .github/workflows/ci-build-tests.yml:69","Warn: pipCommand not pinned by hash: .github/workflows/ci-build-tests.yml:71","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  12 third-party GitHubAction dependencies pinned","Info:   0 out of   3 containerImage dependencies pinned","Info:   0 out of   2 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":"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/publish-image.yaml:20"],"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":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (24) 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":"Vulnerabilities","score":8,"reason":"2 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2022-0635","Warn: Project is vulnerable to: GO-2022-0646"],"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-17T20:31:45.369Z","repository_id":37589798,"created_at":"2025-08-17T20:31:45.369Z","updated_at":"2025-08-17T20:31:45.369Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28917580,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T19:10:10.838Z","status":"ssl_error","status_checked_at":"2026-01-30T19:06:40.573Z","response_time":66,"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":["accelerator","caching","clickhouse","dashboards","golang","http-proxy","influxdb","performance","prometheus","reverse-proxy","tsdb"],"created_at":"2024-07-30T20:01:50.762Z","updated_at":"2026-01-30T19:13:45.178Z","avatar_url":"https://github.com/trickstercache.png","language":"Go","readme":"# \u003cimg src=\"./docs/images/logos/trickster-logo.svg\" width=90 /\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003cimg src=\"./docs/images/logos/trickster-text.svg\" width=420 /\u003e [![Follow on Twitter](https://img.shields.io/twitter/follow/trickstercache.svg?style=social\u0026logo=twitter)](https://twitter.com/trickstercache)\n\n[![License](https://img.shields.io/github/license/trickstercache/trickster)](/LICENSE)\n[![Coverage Status](https://coveralls.io/repos/github/trickstercache/trickster/badge.svg)](https://coveralls.io/github/trickstercache/trickster)\n[![build status](https://github.com/trickstercache/trickster/actions/workflows/ci-build-tests.yml/badge.svg)](https://github.com/trickstercache/trickster/actions/workflows/ci-build-tests.yml)\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/2518/badge)](https://bestpractices.coreinfrastructure.org/en/projects/2518)\n[![GoDoc](https://godoc.org/github.com/trickstercache/trickster?status.svg)](https://godoc.org/github.com/trickstercache/trickster)\n[![Docker Pulls](https://img.shields.io/docker/pulls/tricksterio/trickster.svg?maxAge=86400)](https://hub.docker.com/r/tricksterio/trickster)\n\nTrickster is an HTTP reverse proxy/cache for http applications and a dashboard query accelerator for time series databases.\n\n\u003cimg src=\"./docs/images/high-level.png\" width=512/\u003e\n\nLearn more below, and check out our [roadmap](./docs/roadmap.md) to find out what else is in the works.\n\nTrickster is hosted by the [Cloud Native Computing Foundation](https://cncf.io) (CNCF) as a sandbox level project. If you are a company that wants to help shape the evolution of technologies that are container-packaged, dynamically-scheduled and microservices-oriented, consider joining the CNCF.\n\nNote: Trickster v1.1 is the production release, sourced from the [v1.1.x](https://github.com/trickstercache/trickster/tree/v1.1.x) branch. The `main` branch sources Trickster 2.0, which is currently in beta.\n\n## HTTP Reverse Proxy Cache\n\nTrickster is a fully-featured HTTP Reverse Proxy Cache for HTTP applications like static file servers and web API's.\n\n### Proxy Feature Highlights\n\n* A unique and powerful [Application Load Balancer](./docs/alb.md) for Time Series and generic HTTP endpoints\n* [Supports TLS](./docs/tls.md) and HTTP/2 for frontend termination and backend origination\n* Offers several options for a [caching layer](./docs/caches.md), including in-memory, filesystem, Redis and bbolt\n* [Highly customizable](./docs/configuring.md), using simple yaml configuration settings, [down to the HTTP Path](./docs/paths.md)\n* Built-in Prometheus [metrics](./docs/metrics.md) and customizable [Health Check](./docs/health.md) Endpoints for end-to-end monitoring\n* [Negative Caching](./docs/negative-caching.md) to prevent domino effect outages\n* High-performance [Collapsed Forwarding](./docs/collapsed-forwarding.md)\n* Best-in-class [Byte Range Request caching and acceleration](./docs/range_request.md).\n* [Distributed Tracing](./docs/tracing.md) via OpenTelemetry, supporting OTLP and Zipkin\n* Rules engine for custom request routing and rewriting\n* Configurable [maximum request body size](./docs/body.md).\n\n## Time Series Database Accelerator\n\nTrickster dramatically improves dashboard chart rendering times for end users by eliminating redundant computations on the TSDBs it fronts. In short, Trickster makes read-heavy Dashboard/TSDB environments, as well as those with highly-cardinalized datasets, significantly more performant and scalable.\n\n### Compatibility\n\nTrickster works with virtually any Dashboard application that makes queries to any of these TSDB's:\n\n\u003cimg src=\"./docs/images/external/prom_logo_60.png\" width=16 /\u003e Prometheus\n\n\u003cimg src=\"./docs/images/external/clickhouse_logo.png\" width=16 /\u003e ClickHouse\n\n\u003cimg src=\"./docs/images/external/influx_logo_60.png\" width=16 /\u003e InfluxDB\n\nSee the [Supported TSDB Providers](./docs/supported-backend-providers.md) document for full details\n\n### How Trickster Accelerates Time Series\n\n#### 1. Time Series Delta Proxy Cache\n\nMost dashboards request from a time series database the entire time range of data they wish to present, every time a user's dashboard loads, as well as on every auto-refresh. Trickster's Delta Proxy inspects the time range of a client query to determine what data points are already cached, and requests from the tsdb only the data points still needed to service the client request. This results in dramatically faster chart load times for everyone, since the tsdb is queried only for tiny incremental changes on each dashboard load, rather than several hundred data points of duplicative data.\n\n\u003cimg src=\"./docs/images/partial-cache-hit.png\" width=1024 /\u003e\n\n#### 2. Step Boundary Normalization\n\nWhen Trickster requests data from a tsdb, it adjusts the clients's requested time range slightly to ensure that all data points returned are aligned to normalized step boundaries. For example, if the step is 300s, all data points will fall on the clock 0's and 5's. This ensures that the data is highly cacheable, is conveyed visually to users in a more familiar way, and that all dashboard users see identical data on their screens.\n\n\u003cimg src=\"./docs/images/step-boundary-normalization.png\" width=640 /\u003e\n\n#### 3. Fast Forward\n\nTrickster's Fast Forward feature ensures that even with step boundary normalization, real-time graphs still always show the most recent data, regardless of how far away the next step boundary is. For example, if your chart step is 300s, and the time is currently 1:21p, you would normally be waiting another four minutes for a new data point at 1:25p. Trickster will break the step interval for the most recent data point and always include it in the response to clients requesting real-time data.\n\n\u003cimg src=\"./docs/images/fast-forward.png\" width=640 /\u003e\n\n## Trying Out Trickster\n\nCheck out our end-to-end [Docker Compose demo composition](./examples/docker-compose) for a zero-configuration running environment.\n\n## Installing\n\n### Docker\n\nDocker images are available on Docker Hub (docker.io):\n```bash\n$ docker run --name trickster -d -v /path/to/trickster.yaml:/etc/trickster/trickster.yaml -p 0.0.0.0:8480:8480 trickstercache/trickster\n```\nOr via  Github Container Registry (ghcr.io):\n```bash\n    $ docker run --name trickster -d -v /path/to/trickster.yaml:/etc/trickster/trickster.yaml -p 0.0.0.0:8480:8480 ghcr.io/trickstercache/trickster\n```\n#### Verifying Docker Image\n\nTo verify that the Trickster Docker image is running, first walk through the [cosign quickstart guide](https://docs.sigstore.dev/quickstart/quickstart-cosign/).\n\nTo verify a trickster image, you can use the following command:\n\n```bash\ncosign verify ghcr.io/trickstercache/trickster:x.y.z --certificate-oidc-issuer=https://token.actions.githubusercontent.com --certificate-identity=https://github.com/trickstercache/trickster/.github/workflows/publish-image.yaml@refs/tags/vx.y.z\n```\n\n\nSee the 'deploy' Directory for more information about using or creating Trickster docker images.\n\n### Kubernetes\n\nSee the 'deploy' Directory for Kube and deployment files and examples.\n\n### Helm\n\nTrickster Helm Charts are located at \u003chttps://helm.tricksterproxy.io\u003e for installation, and maintained at \u003chttps://github.com/trickstercache/helm-charts\u003e. We welcome chart contributions.\n\n### Building from source\n\nTo build Trickster from the source code yourself you need to have a working\nGo environment with [version 1.25 or greater installed](http://golang.org/doc/install).\n\nYou can directly use the `go` tool to download and install the `trickster`\nbinary into your `GOPATH`:\n\n```bash\n    $ go install github.com/trickstercache/trickster/cmd/trickster@main\n    # this starts a prometheus accelerator proxy for the provided endpoint\n    $ trickster -origin-url http://prometheus.example.com:9090 -provider prometheus\n```\n\nYou can also clone the repository yourself and build using `make`:\n\n```bash\n    $ mkdir -p $GOPATH/src/github.com/trickstercache\n    $ cd $GOPATH/src/github.com/trickstercache\n    $ git clone https://github.com/trickstercache/trickster.git\n    $ cd trickster\n    $ make build\n    $ ./bin/trickster -origin-url http://prometheus.example.com:9090 -provider prometheus\n```\n\nThe Makefile provides several targets, including:\n\n* *build*: build the `trickster` binary\n* *docker*: build a docker container for the current `HEAD`\n* *clean*: delete previously-built binaries and object files\n* *test*: runs unit tests\n* *bench*: runs benchmark tests\n* *rpm*: builds a Trickster RPM\n\n## More information\n\n* Refer to the [docs](./docs/) directory for additional info.\n\n## Contributing\n\nRefer to [CONTRIBUTING.md](CONTRIBUTING.md)\n\n© 2021 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our [Trademark Usage](https://www.linuxfoundation.org/trademark-usage) page.\n","funding_links":[],"categories":["Go","prometheus","Language bindings","时序数据库","Server Applications","Relational Databases","Observability"],"sub_categories":["Golang","HTTP Clients"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrickstercache%2Ftrickster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrickstercache%2Ftrickster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrickstercache%2Ftrickster/lists"}