NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules · #1706 by repository stars
Last release 6 days ago
14 Sep 2026
Ships on a steady schedule
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
395 releases · first in 2021
One column per quarter.
Use uber-go/automaxprocs to automatically set GOMAXPROCS to match Linux container CPU quota.
Use uber-go/automaxprocs to automatically set GOMAXPROCS to match Linux container CPU quota.
Added labels/conflict check.
If you want to disable individual checks just for some time then you can now snooze them instead of disabling forever.
The difference between # pint disable ... and # pint snooze ... comments is that
the snooze comment must include a timestamp. Selected check will be disabled until
that timestamp.
Timestamp must either use RFC3339 syntax
or YYYY-MM-DD (if you don't care about time and want to snooze until given date).
Examples:
# pint snooze 2023-01-12T10:00:00Z promql/series
# pint snooze 2023-01-12 promql/rate
- record: ...
expr: ...
Removed cache option from prometheus config blocks. Query cache will now auto-size itself
as needed.
If you have a config entry with cache option, example:
prometheus "prod" {
uri = "https://prometheus.example.com"
cache = 20000
}
Then pint will fail to start. To fix this simply remove the cache option:
prometheus "prod" {
uri = "https://prometheus.example.com"
}
### Added - Added rule/duplicate check.
Fixed a regression causing poor query cache hit rate.
Added uptime field in prometheus configuration block. This field can be used to set a custom metric used for Prometheus uptime checks and by default u
Added uptime field in prometheus configuration block.
This field can be used to set a custom metric used for Prometheus uptime checks
and by default uses up metric.
If you have a Prometheus with a large number of scrape targets there might
be a huge number of up time series making those uptime checks slow to run.
If your Prometheus is configured to scrape itself, then you most likely want to use
one of metrics exported by Prometheus, like prometheus_build_info:
prometheus "prod" {
uri = "https://prometheus.example.com"
uptime = "prometheus_build_info"
}
cache option for prometheus config block now means
the number of time series cached instead of the number of responses cached
and the default for this option is now 50000.promql/vector_matching was sending expensive queries resulting in high memory usage, this is now fixed.
Added pint_prometheus_cache_evictions_total metric tracking the number of times cache results were evicted from query cache.
pint_prometheus_cache_evictions_total metric tracking the number of times
cache results were evicted from query cache.# pint file/disable ... comments.prometheus block names.Nothing published for this version
Fixed performance regression slowing down pint watch over time.
pint watch over time.prometheus configuration block now accepts optional headers field, for setting request headers that will be attached to any request made to given Prom
prometheus configuration block now accepts optional headers field, for setting
request headers that will be attached to any request made to given Prometheus server.
Example:
prometheus "protected" {
uri = "https://prod.example.com"
headers = {
"X-Auth": "secret",
"X-User": "bob"
}
Fixed false positive reports in promql/vector_matching
for rules using on(...). Example:
sum(foo) without(instance) * on(app_name) group_left() bar
Don't log passwords when Prometheus URI is using basic authentication.
Fixed false positive reports in alerts/template
suggesting to use humanize on queries that already use round().
Fixed false positive reports in alerts/comparison
when bool modifier is used on a condition that is guarded by another condition.
Example:
alert: Foo
expr: (foo > 1) > bool 1
Fixed false positive reports in alerts/template warning about labels removed in a query despite being re-added by a join.
Fixed incorrect line number reporting on BitBucket annotations.
Fixed handling of symlinks when running pint lint and pint watch commands.
pint lint and pint watch commands.BitBucket only allows for annotations on modified lines, so when a high severity problem is reported on unmodified line pint will move that annotation
BitBucket only allows for annotations on modified lines, so when a high severity problem is reported on unmodified line pint will move that annotation to the first modified line, so it's still visible in BitBucket. Now pint will also add a note to that annotation to make it clear that the problem is really on a different line.
alerts/template will now run extra checks to validate syntax of queries executed from within alerting rule templates.
Example template using sum(xxx query that's missing closing ):
{% raw %}
- alert: ...
expr: ...
annotations:
summary: |
{{ with query "sum(xxx" }}
{{ . | first | value | humanize }}
{{ end }}
{% endraw %}
If a file is ignored pint will now note that using Information level annotation.
This will make it more obvious that a CI check passed because pint didn't run any
checks due to file being excluded.
Prometheus rule files can be symlinked between directories. If the symlink source and target files are in a different directory they can end up querying different Prometheus server when running ping checks. This means that when modifying symlink target file checks must be executed against both symlink source and target. Until now pint was ignoring symlinks but starting with this release it will try to follow them. This means that if you modify a file that has symlinks pointing to them pint will try run checks against those symlinks too.
NOTE: pint can only detect and check symlinks if they are located in the current working directory (as seen by running pint process) or its sub-directories.
promql/vector_matching was incorrectly handling queries containing function calls with multiple arguments.
Revert 'Use smaller buffers when decoding Prometheus API responses' change.
Nothing published for this version
Use smaller buffers when decoding Prometheus API responses.
Fixed wrong request formatting for Prometheus metric metadata queries.
Switched from using prometheus/client_golang API client to streaming JSON library prymitive/current
promql/rate and promql/regexp checks.Updated Prometheus modules to v2.38.0. This adds support for toTime template function.
toTime template function.Fixed symlink handling when running pint lint.
pint lint.### Fixed - Remove noisy debug logs.
Added pint_prometheus_cache_miss_total metric.
pint_prometheus_cache_miss_total metric.File parsed messages.Fix absent() handling in alerts/comparison #330.
absent() handling in alerts/comparison #330.Added --min-severity flag to the pint lint command. Default value is set to warning.
--min-severity flag to the pint lint command. Default value is set to warning.metric is generated by alerts ....Don't use topk in promql/vector_matching check to avoid false positives.
topk in promql/vector_matching check to
avoid false positives.promql/rate check will now also validate deriv function usage.
deriv function usage.rate() and the value
is used in annotations.promql/series check now supports more flexible
# pint disable promql/series(...) comments.
Adding a comment # pint disable promql/series({cluster="dev"}) will disable this check
for any metric selector with cluster="dev" matcher.
query/cost check will now calculate how much Prometheus memory
will be needed for storing results of given query.
bytesPerSample option that was previously used to calculate this was removed.
prometheus {} config block now allows to pass a list of paths to explicitly ignore
by setting exclude option. Existing paths option was renamed to include for
consistency. Example migration:
prometheus "foo" {
[...]
paths = [ "rules/.*" ]
}
becomes
prometheus "foo" {
[...]
include = [ "rules/.*" ]
}
pint_last_run_checks and pint_last_run_checks_done were not updated properly.Deduplicate reports where possible to avoid showing same issue twice.
pint lint.Strict parsing mode shouldn't fail on template errors, those will be later reported by alerts/template check.
alerts/template check.All timeout options are now optional. This includes following config blocks:
prometheus { timeout = ... }repository { bitbucket { timeout = ... } }repository { github { timeout = ... } }pint will now try to discover all repository settings from environment variables
when run as part of GitHub Actions workflow and so it doesn't need any
repository { github { ... } } configuration block for that anymore.
Setting GITHUB_AUTH_TOKEN is the only requirement for GitHub Actions now.Fixed line reporting on some strict parser errors.
--base-branch flag to pint ci command.Nothing published for this version
Added rate limit for Prometheus API requests with a default value of 100 requests per second. To customise it set rateLimit field inside selected prom
rateLimit field inside selected
prometheus server definition.pint_last_run_checks and pint_last_run_checks_done metrics to track
progress when running pint watch.Improved range query cache efficiency.
promql/series check.
See check documentation for details.prometheus server definition in pint config file can now accept optional
cache field (defaults to 10000) to allow fine tuning of built-in Prometheus
API query caching.pint_prometheus_cache_size metric that exposes the number of entries
currently in the query cache.Improved error reporting when strict mode is enabled.
Nothing published for this version
Fixed high memory usage when running range queries against Prometheus servers.
Nothing published for this version
The way pint sends API requests to Prometheus was changed to improve performance.
The way pint sends API requests to Prometheus was changed to improve performance.
First change is that each prometheus server definition in pint config file can
now accept optional concurrency field (defaults to 16) that sets a limit on how
many concurrent requests can that server receive. There is a new metric that
tracks how many queries are currently being run for each Prometheus server -
pint_prometheus_queries_running.
Second change is that range queries will now be split into smaller queries, so
if pint needs to run a range query on one week of metrics, then it will break
this down into multiple queries each for a two hour slot, and then merge all
the results. Previously it would try to run a single query for a whole week
and if that failed it would reduce time range until a query would succeed.
promql/series handling of rules with {__name__=~"foo|bar"} queries.promql/series would occasionally
report metrics as "sometimes present". This check will now try to find time
ranges with no metrics in Prometheus and ignore these when checking if
metrics are present.pint_prometheus_queries_total and pint_prometheus_cache_hits_total metric wasn't always correctly updated.
pint_prometheus_queries_total and pint_prometheus_cache_hits_total metric wasn't
always correctly updated.unknown metric types in promql/rate.promql/rate check will now report if rate() or irate() function is being passed a non-counter metric.
promql/rate check will now report if rate() or irate() function is being
passed a non-counter metric.pint will now correctly handle YAML anchors.
Nothing published for this version
Parsing files in relaxed mode will now try to find rules inside multi-line strings #252. This allows direct linting of k8s manifests like the one belo
Parsing files in relaxed mode will now try to find rules inside multi-line strings #252. This allows direct linting of k8s manifests like the one below:
---
kind: ConfigMap
apiVersion: v1
metadata:
name: example-app-alerts
labels:
app: example-app
data:
alerts: |
groups:
- name: example-app-alerts
rules:
- alert: Example_Is_Down
expr: kube_deployment_status_replicas_available{namespace="example-app"} < 1
for: 5m
labels:
priority: "2"
environment: production
annotations:
summary: "No replicas for Example have been running for 5 minutes"
Nothing published for this version
Fixed incorrect line reported when pint fails to unmarshal YAML file.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Allow fine tuning promql/series check with extra control comments # pint rule/set promql/series min-age ... and # pint rule/set promql/series ignore/l
promql/series check with extra control comments
# pint rule/set promql/series min-age ... and
# pint rule/set promql/series ignore/label-value ...
See promql/series for details.promql/regexp will report redundant use of regex anchors.promql/series will now report missing metrics only if they were last seen
over 2 hours ago by default. This can be customised per rule with comments.Fix problem line reporting for rule/owner check.
rule/owner check.rule/owner documentation page.Fixed false positive reports from promql/series check when running pint watch.
promql/series check when running
pint watch.Added pint_last_run_duration_seconds metric.
pint_last_run_duration_seconds metric.--require-owner flag support to pint ci command.Fixed false positive reports from alerts/template check when absent() is used inside a binary expression.
alerts/template check when absent() is
used inside a binary expression.File parse errors didn't report correct line numbers when running pint ci.
pint ci.File parse errors were not reported correctly when running pint ci.
pint ci.Handle 504 Gateway Timeout HTTP responses from Prometheus same as query timeouts and retry with a shorter range query.
504 Gateway Timeout HTTP responses from Prometheus same as query
timeouts and retry with a shorter range query.When running pint ci all checks will be skipped if any commit contains [skip ci] or [no ci] string in the commit message.
pint ci all checks will be skipped if any commit contains
[skip ci] or [no ci] string in the commit message.By default pint will now parse all files in strict mode, where all rule files must have the exact syntax Prometheus expects:
groups:
- name: example
rules:
- record: ...
expr: ...
Previous releases were only looking for individual rules so groups object
wasn't required. Now pint will fail to read any file that doesn't follow
Prometheus syntax exactly.
To enable old behaviour add parser { relaxed = ["(.+)", ...]} option in
the config file. See Configuration for details.
To enable old (relaxed) behaviour for all files add:
parser {
relaxed = ["(.*)"]
}
promql/vector_matching checks to detect more issues.pint ci.Your coding agent can read these notes before it upgrades. Set up the MCP server →