What crowdsecurity/crowdsec shipped
Written by FoxPlug from the repository's own releases; not affiliated with Crowdsec. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/crowdsecurity/crowdsec; Crowdsec did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of October 19, 2026
What shipped
- Bot detection gained a challenge.cookie_same_site configuration option accepting lax or none, where none also sets the Partitioned and Secure flags on the cookie. Pull request #4764
- The WAF added a RateLimit() helper usable in
pre_eval, taking a limiter name and a window such as 5/m and returning 429 when the client IP exceeds the limit. Pull request #4721 - The file acquisition datasource no longer sends half-written lines or skips the lines that follow them. Pull request #4678
- A new
cs_featuresPrometheus metric reports whether LAPI, CAPI, PAPI, WAF and bot detection are enabled on an instance, with 0 for disabled and 1 for enabled. Pull request #4770 - The RateLimit() tests were fixed after the change was merged without a rebase and referenced an Init method that no longer exists. Pull request #4771
- V1.8.2-rc2 was released with the WAF rate limiting helper, custom JS fingerprinting for bot detection, the
cs_featuresmetric, updated AGENTS.md test guidance and a readme update. Release
Why it matters
This week adds controls that operators can apply directly: rate limiting in the WAF pre_eval, cookie attribute configuration for bot detection challenges, and a metric that shows which features an instance has enabled. It also fixes the file datasource dropping lines during bursty writes and repairs tests for the new WAF helper.
Changelog entry
- Release: v1.8.2-rc2 Release
- Bot detection: add challenge.cookie_same_site option for lax or none, with Partitioned and Secure set automatically for none Pull request #4764
- Waf: add RateLimit() helper for
pre_evalwith per-client-IP limits and 429 responses Pull request #4721 - Acquisition/file: don't send half-written lines, or skip the lines after them Pull request #4678
- Add
cs_featuresPrometheus metric for LAPI, CAPI, PAPI, WAF and bot detection, 0 disabled and 1 enabled Pull request #4770 - Fix RateLimit() tests after the change was merged without a rebase Pull request #4771
V1.8.2-rc2 is out. WAF now has a RateLimit() helper for pre_eval, bot detection can set SameSite=None with Partitioned and Secure, a new cs_features metric shows which features an instance runs, and file acquisition no longer drops lines on bursty writes.
V1.8.2-rc2 is available. The WAF adds a RateLimit() helper for pre_eval, taking a limiter name and a window like 5/m and returning 429 when the client IP goes over it. Bot detection has a new challenge.cookie_same_site option accepting lax or none, and none also sets the Partitioned and Secure flags. A new cs_features Prometheus metric records whether LAPI, CAPI, PAPI, WAF and bot detection are enabled on an instance, using 0 for disabled and 1 for enabled. The file acquisition datasource no longer sends half-written lines or skips the lines after them, and the tests for the WAF helper were fixed after a merge without rebase.
Week of October 12, 2026
What shipped
- The decisions stream endpoint can now limit concurrent requests through a new config key, api.server.decisions_stream.max_concurrent_requests, next to the existing page size setting. Pull request #4747
- WAF out-of-band rule processing now runs on dedicated workers instead of the worker that just handled in-band rules, so that worker stays free for new requests under load. Pull request #4722
- A new expression helper, GetDecisionsSinceCountByScenario, counts an IP's decisions per scenario since a given time, so profiles can escalate ban length per scenario rather than across all of them. Pull request #4756
- Cscli now shows human-readable timestamps in the process's local timezone for alerts, bouncers, machines, allowlists and metrics since times, with regression tests updated. Pull request #4759
- The WAF was updated to coraza 3.8.0. Pull request #4724
- The WAF no longer spams logs when a unix socket is used on FreeBSD. Pull request #4745
- Two remaining runtime Fatalf calls were removed. Pull request #4760
- Fpscanner now uses fork. Pull request #4761
- Release v1.8.2-rc1 went out, including custom JS fingerprinting for bot detection, LookupHost going through the DNS cache, and a CAPI last pull timestamp metric. Release
Why it matters
This week adds controls for keeping the local API responsive when many bouncers pull decision streams at once, and gives WAF out-of-band processing its own workers so request latency does not include both stages under load. It also lets profiles escalate ban length per scenario instead of counting an IP's decisions across all scenarios, and brings consistent local-time timestamps to cscli output.
Changelog entry
- Cscli: display human-readable timestamps in local time for alerts, bouncers, machines, allowlists and metrics Pull request #4759
- Exprhelpers: add GetDecisionsSinceCountByScenario to count an IP's decisions per scenario Pull request #4756
- Lapi: add api.server.decisions_stream.max_concurrent_requests to limit concurrent decision stream requests Pull request #4747
- Waf: process out-of-band rules on dedicated workers Pull request #4722
- Remove remaining runtime Fatalf calls Pull request #4760
- Fpscanner: use fork Pull request #4761
- Release v1.8.2-rc1 Release
- Waf: fix log spam when using unix socket on FreeBSD Pull request #4745
- Waf: update to coraza 3.8.0 Pull request #4724
This week: a new config key to cap concurrent decision stream requests, dedicated WAF workers for out-of-band rules, GetDecisionsSinceCountByScenario for per-scenario ban escalation, local-time timestamps in cscli, coraza 3.8.0, and v1.8.2-rc1.
This week's changes for crowdsec: the decisions stream endpoint can be limited with a new config key, api.server.decisions_stream.max_concurrent_requests, sitting next to the page size setting. WAF out-of-band rules now run on dedicated workers, so the worker that handled in-band rules stays available for new requests under load. A new expression helper, GetDecisionsSinceCountByScenario, counts decisions per scenario so profiles can escalate ban length per scenario instead of across all scenarios at once. cscli now displays human-readable timestamps in local time across alerts, bouncers, machines, allowlists and metrics. Also: WAF updated to coraza 3.8.0, a fix for log spam with unix sockets on FreeBSD, two remaining runtime Fatalf calls removed, fpscanner using fork, and the v1.8.2-rc1 re
Week of October 5, 2026
What shipped
- LookupHost in expressions now goes through the DNS cache instead of querying on every evaluation. Pull request #4741
- Docker log acquisition now tails from now when a container restarts instead of re-reading past logs. Pull request #4605
- The decisions stream page size is now configurable with api.server.decisions_stream.page_size. Pull request #4733
- Two new Prometheus metrics report the last successful CAPI pull time and failed CAPI requests by operation. Pull request #4749
- A new cscli bot command adds match, to test an IP, user agent or path against bot data files, and fsid, to parse an FSID. Pull request #4666
- ValidateChallengeResponse no longer fast-tracks challenge bodies without encoded characters, fixing the spent set bypass. Pull request #4737
- The VictoriaLogs datasource uses the RestartableStreamer interface, so
max_failure_durationandwait_for_readyare ignored while tailing and errors are handled by acquisition every 10 seconds. Pull request #4738 - Grokky can extract up to three literals from regexps and precheck them before running a full regex match. Pull request #4731
- Grokky implements ParseInto for RE2 and regexps and removes Parse, writing directly into the provided map. Pull request #4729
Changelog entry
- Exprhelpers: LookupHost now goes through the DNS cache. Pull request #4741
- Metrics: add CAPI last pull timestamp and error counter. Pull request #4749
- Docker: tail from now when a container restarts. Pull request #4605
- Cscli: add bot subcommand with match and fsid. Pull request #4666
- Splunk-notification: add InsecureSkipVerify option. Pull request #4720
- Victorialogs: use RestartableStreamer interface. Pull request #4738
- Prometheus: add kind label to
cs_alerts. Pull request #4742 - Lapi: make decisions stream page size configurable. Pull request #4733
- Fix ValidateChallengeResponse spent set bypass. Pull request #4737
- Grokky: preshot static strings from regexps. Pull request #4731
- Grokky: implement ParseInto and remove Parse. Pull request #4729
Week of September 28, 2026
What shipped
- Postoverflow parsing now runs asynchronously in goroutines instead of blocking the pipeline, with enforced limits on in-flight alerts to prevent upstream backpressure from slow operations like PTR lookups. Pull request #4672
- The API server now automatically reloads TLS certificates when their files change, enabling certificate renewal without restarting in Kubernetes and cert-manager environments. Pull request #4709
- Metric series for deleted machines and bouncers are now removed from exports, preventing stale data in monitoring systems. Pull request #4712
- Fixed a regression where simulated decisions could incorrectly suppress real bans in the decision stream. Pull request #4679
- Request scoring now supports optional categories to organize detections, preparing for custom bot detection rules via the hub. Pull request #4715
- Added FlagSubmission() helper for bot detection that logs and alerts without blocking requests, useful for testing custom rules in non-blocking mode. Pull request #4727
- Custom JavaScript fingerprinting capabilities added for bot detection with configurable runtime budgets and logging of custom detections. Pull request #4657
- Buckets now receive their own copies of event maps before processing, preventing unintended shared state between buckets. Pull request #4481
- Fixed a bug where transform datasource UUIDs were not properly accounted for in live mode, causing transforms to apply to wrong datasources. Pull request #4697
Why it matters
This week addresses performance, reliability, and operational concerns. Asynchronous postoverflow processing eliminates pipeline blocking from slow I/O operations, while TLS certificate reloading removes the need for restarts in containerized environments. Bug fixes prevent decision stream corruption and datasource mismatches.
Changelog entry
- Postoverflow: run asynchronously in goroutines with enforced max in-flight alerts to prevent upstream backpressure Pull request #4672
- Apiserver: TLS certificates now automatically reload when files change Pull request #4709
- Metrics: remove series for deleted machines and bouncers Pull request #4712
- Fix: prevent simulated decisions from suppressing real bans in decision stream Pull request #4679
- Appsec: add optional categories to request scoring system Pull request #4715
- Bot-detection: add FlagSubmission() helper for non-blocking alert generation Pull request #4727
- Bot-detection: add custom JavaScript fingerprinting with configurable runtime budgets Pull request #4657
- Buckets: clone event maps before bucket processing to prevent shared state Pull request #4481
- Fix: datasource UUID handling in live mode transforms Pull request #4697
New release: postoverflow async processing eliminates pipeline blocking, TLS certs reload without restart, metrics cleanup, bug fixes for decisions and datasources.
This week's release focuses on performance and operations: postoverflow nodes now run asynchronously to prevent pipeline blocking from slow operations, TLS certificates auto-reload for Kubernetes deployments, deleted machine/bouncer metrics are cleaned up, and we fixed regressions in the decision stream and datasource handling.
More from crowdsecurity/crowdsec on GitHub
Merged pull requests
- fix image link (#4702, merged September 24, 2026 by buixor) (source)
- pimp readme (#4701, merged September 24, 2026 by buixor) (source)
- hubtest: add a tiebreaker based on the alert date to have a consistent order (#4699, merged September 23, 2026 by blotus) (source)
- challenge: optimize memory usage (#4674, merged September 16, 2026 by blotus) (source)
- syslog: copy buffer before handing it to the datasource (#4690, merged September 16, 2026 by blotus) (source)
- waf: add SkipProcessing() helper (#4667, merged September 14, 2026 by blotus) (source)
- [bot-detection] drop the URI from the cookie (#4656, merged September 11, 2026 by buixor) (source)
- Expand env vars in
online_api_credentials.yaml(#4677, merged September 11, 2026 by kushiemoon-dev) (source) - lapi: return an empty slice instead of null when querying alerts (#4653, merged September 3, 2026 by blotus) (source)
- challenge: tolerate strings instead of struct in FP payload (#4655, merged September 3, 2026 by blotus) (source)
- add HasValidChallengeCookie() helper (#4648, merged September 3, 2026 by blotus) (source)
- leakybuckets: make alerts own their strings (#4643, merged August 31, 2026 by blotus) (source)