Skip to content

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 for minimum duration, Pending and Active phases, spec.since), per-pattern pruning, absence patterns, a configurable client rate limit and a stricter linter. They are already on the main branch.
  • [ ] 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 dependsOn loop 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. On main.
  • [x] Label selector relationships: selects and selectedBy match 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. On main.
  • [x] Kind wildcards, categories and derived kinds: kind: "*", category, kinds and fromTarget let one pattern cover kinds that it does not list one by one. See Resource types. On main.
  • [x] Richer paths and comparisons: defaults for fields that a platform fills in when omitted, transforms for references encoded in strings, typed EQUALS for booleans and numbers, quoted keys for labels with dots, and a linter that checks the syntax of every path. On main.
  • [x] Stateful findings: a pattern can require its condition to hold for a minimum duration (for) before the finding becomes Active, and every Smell records when it was first observed. See Lifecycle. On main, 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: emitOnEmpty reports that nothing of a kind exists at all. On main.
  • [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 owns and ownedBy relationships between resources, followed transitively through ownerReferences.
  • [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.