Roadmap
Welcome to the public roadmap. This is where you can see what I am working on, what I have planned for the near future, and what ideas I am considering.
WARNING
This roadmap represents my current vision and priorities. It is not a delivery promise, and features or timelines may change based on user feedback, market opportunities, or technical challenges.
🚀 Now (In Progress)
The features I am currently working on, which will be released in the next few weeks.
- [ ] Next release: the new Pattern language (element scope, kind sets, label selectors, defaults and transforms), stateful findings (the
forminimum duration,PendingandActivephases,spec.since), per-pattern pruning, absence patterns, a configurable client rate limit and a stricter linter. They are already on themainbranch. - [ ] Performance: index the dependencies and paginate lists, so that KubePattern stays fast on clusters with tens of thousands of objects. A first step is on
main: the dependency side of each relationship is extracted once per pattern, which cut the matching time on 20,000 objects from 33 to 3.3 seconds.
🤔 Later (Considering)
The features I am considering for future development, but have not yet committed to.
- [ ] Operator mode: react to changes in the cluster instead of only scanning on a schedule, so that a finding appears as soon as the condition does. This replaces the earlier idea of making KubePattern a Kubernetes Operator, with a sharper goal.
- [ ] Graph properties: report a cycle of any length, such as a
dependsOnloop among Flux Kustomizations, as a single finding. - [ ] Schema-checked patterns: validate the paths of a pattern against the CRD schemas, so that a mistyped path is caught when the pattern is applied.
- [ ] AI-Powered Pattern Creation: use AI to assist users in creating new patterns from common architectural issues and best practices. Because the language is small, a generated pattern can be linted, checked against the schemas and tried in a dry run.
- [ ] AI-Powered Smell Resolution Suggestions: provide AI-generated suggestions for resolving detected smells.
- [ ] AI-Powered Step in the Loop: integrate AI into the analysis to provide real-time insights as patterns are evaluated.
- [ ] CI/CD Integration: integrate with popular CI/CD tools to analyse Kubernetes manifests during the deployment process, so that issues are caught early.
✅ Recently Launched
The big features recently launched 🚀
- [x] Element-scoped criteria: with
[@], the criteria of a relationship read the same array element, so a name and a namespace found in one entry are matched together. On the target side, a pattern can report a resource when some of its references resolve to nothing. See Element scope. Onmain. - [x] Label selector relationships:
selectsandselectedBymatch the selector of one resource against the labels of another, which is how Services, policies and many operators refer to their targets. See Label selectors. Onmain. - [x] Kind wildcards, categories and derived kinds:
kind: "*",category,kindsandfromTargetlet one pattern cover kinds that it does not list one by one. See Resource types. Onmain. - [x] Richer paths and comparisons: defaults for fields that a platform fills in when omitted, transforms for references encoded in strings, typed
EQUALSfor booleans and numbers, quoted keys for labels with dots, and a linter that checks the syntax of every path. Onmain. - [x] Stateful findings: a pattern can require its condition to hold for a minimum duration (
for) before the finding becomesActive, and every Smell records when it was first observed. See Lifecycle. Onmain, arriving with the next release. - [x] Per-pattern pruning: a pattern removes only its own stale Smells. A skipped pattern, a run cut by its deadline, or two overlapping runs no longer delete valid findings. On
main. - [x] Suppression that survives runs: a Smell marked as a false positive stays suppressed on later runs. On
main. - [x] Absence patterns:
emitOnEmptyreports that nothing of a kind exists at all. Onmain. - [x] Configurable client rate limit: the Kubernetes client now defaults to 50 requests per second instead of 5, which makes a scan that writes many Smells far faster. On
main. - [x] A stricter linter: primitives that are declared but not implemented yet are rejected, instead of silently evaluating to false. On
main. - [x] Graceful skipping: a pattern whose kinds cannot be read is skipped with a warning, and the others still run.
- [x] Initial Release: the first version of KubePattern, with the core concept of Pattern-as-Code and a set of predefined patterns for detecting architectural issues in Kubernetes clusters.
- [x] Moved from KubePattern Java to Go: the whole codebase was rewritten from Java to Go, improving performance, reducing resource consumption, and enhancing the overall user experience.
- [x] Ownership relationships: patterns can express
ownsandownedByrelationships between resources, followed transitively throughownerReferences. - [x] Lazy Fetching: only the resources that are relevant to the patterns being analysed are fetched.
- [x] Auto Remove Smells: Smells that are no longer relevant, such as those that have been resolved, are removed automatically.