Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions OWNERS_ALIASES
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,9 @@ aliases:
- ardaguclu
- rushmash91
- zvonkok
wg-api-expression-leads:
- JoelSpeed
- aaron-prindle
wg-batch-leads:
- kannon92
- mwielgus
Expand Down
1 change: 1 addition & 0 deletions liaisons.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ members will assume one of the departing members groups.
| [SIG Windows](sig-windows/README.md) | Benjamin Elder (**[@BenTheElder](https://github.com/BenTheElder)**) |
| [WG AI Conformance](wg-ai-conformance/README.md) | Patrick Ohly (**[@pohly](https://github.com/pohly)**) |
| [WG AI Integration](wg-ai-integration/README.md) | Paco Xu 徐俊杰 (**[@pacoxu](https://github.com/pacoxu)**) |
| [WG API Expression](wg-api-expression/README.md) | Benjamin Elder (**[@BenTheElder](https://github.com/BenTheElder)**) |
| [WG Batch](wg-batch/README.md) | Antonio Ojea (**[@aojea](https://github.com/aojea)**) |
| [WG Data Protection](wg-data-protection/README.md) | Patrick Ohly (**[@pohly](https://github.com/pohly)**) |
| [WG Device Management](wg-device-management/README.md) | Benjamin Elder (**[@BenTheElder](https://github.com/BenTheElder)**) |
Expand Down
1 change: 1 addition & 0 deletions sig-api-machinery/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ subprojects, and resolve cross-subproject technical issues and decisions.

The following [working groups][working-group-definition] are sponsored by sig-api-machinery:
* [WG AI Integration](/wg-ai-integration)
* [WG API Expression](/wg-api-expression)
* [WG Structured Logging](/wg-structured-logging)


Expand Down
1 change: 1 addition & 0 deletions sig-architecture/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ The Chairs of the SIG run operations and processes governing the SIG.
The following [working groups][working-group-definition] are sponsored by sig-architecture:
* [WG AI Conformance](/wg-ai-conformance)
* [WG AI Integration](/wg-ai-integration)
* [WG API Expression](/wg-api-expression)
* [WG Device Management](/wg-device-management)
* [WG LTS](/wg-lts)
* [WG Serving](/wg-serving)
Expand Down
1 change: 1 addition & 0 deletions sig-cli/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ subprojects, and resolve cross-subproject technical issues and decisions.

The following [working groups][working-group-definition] are sponsored by sig-cli:
* [WG AI Integration](/wg-ai-integration)
* [WG API Expression](/wg-api-expression)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Speaking on behalf of SIG-CLI, I haven't seen anywhere (slack, mailing list, meeting) any information about this particular WG and us being asked to sponsor it.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at https://github.com/kubernetes/community/blob/master/committee-steering/governance/wg-governance.md it's not explicitly stated that a WG must have more than one sponsoring SIG. Would it be okay to drop SIG CLI here if there's no clear connection?

That then still leave apimachinery and architecture, plus potentially participants from non-Kubernetes projects.

* [WG Node Lifecycle](/wg-node-lifecycle)


Expand Down
1 change: 1 addition & 0 deletions sig-list.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ When the need arises, a [new SIG can be created](sig-wg-lifecycle.md)
|------|-------|------------------|-----------|---------|----------|
|[AI Conformance](wg-ai-conformance/README.md)|[ai-conformance](https://github.com/kubernetes/kubernetes/labels/wg%2Fai-conformance)|* Architecture<br>* Testing<br>|* [Janet Kuo](https://github.com/janetkuo), Google<br>* [Mario Fahlandt](https://github.com/mfahlandt), Kubermatic GmbH<br>* [Rita Zhang](https://github.com/ritazh), Microsoft<br>* [Yuan Tang](https://github.com/terrytangyuan), Red Hat<br>|* [Slack](https://kubernetes.slack.com/messages/wg-ai-conformance)<br>* [Mailing List](https://groups.google.com/a/kubernetes.io/g/wg-ai-conformance)|* Regular WG Meeting: [Thursdays at 10:00 PT (Pacific Time) (weekly)]()<br>
|[AI Integration](wg-ai-integration/README.md)|[ai-integration](https://github.com/kubernetes/kubernetes/labels/wg%2Fai-integration)|* API Machinery<br>* Apps<br>* Architecture<br>* Auth<br>* CLI<br>|* [Arda Guclu](https://github.com/ardaguclu), Red Hat<br>* [Arush Sharma](https://github.com/rushmash91), Amazon<br>* [Zvonko Kaiser](https://github.com/zvonkok), NVIDIA<br>|* [Slack](https://kubernetes.slack.com/messages/wg-ai-integration)<br>* [Mailing List](https://groups.google.com/a/kubernetes.io/g/wg-ai-integration)|* WG AI Integration Weekly Meeting: [Wednesdays at 10:00 PT (Pacific Time) (weekly)]()<br>
|[API Expression](wg-api-expression/README.md)|[api-expression](https://github.com/kubernetes/kubernetes/labels/wg%2Fapi-expression)|* API Machinery<br>* Architecture<br>* CLI<br>|* [Joel Speed](https://github.com/JoelSpeed), Red Hat<br>* [Aaron Prindle](https://github.com/aaron-prindle), Google<br>|* [Slack](https://kubernetes.slack.com/messages/wg-api-expression)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-api-expression)|* Regular WG Meeting: [Tuesdays at 9:30 PT (Pacific Time) (biweekly)](https://zoom.us/j/94238112084)<br>
|[Batch](wg-batch/README.md)|[batch](https://github.com/kubernetes/kubernetes/labels/wg%2Fbatch)|* Apps<br>* Autoscaling<br>* Node<br>* Scheduling<br>|* [Kevin Hannon](https://github.com/kannon92), Red Hat<br>* [Marcin Wielgus](https://github.com/mwielgus), Google<br>* [Maciej Szulik](https://github.com/soltysh), Defense Unicorns<br>* [Swati Sehgal](https://github.com/swatisehgal), Red Hat<br>|* [Slack](https://kubernetes.slack.com/messages/wg-batch)<br>* [Mailing List](https://groups.google.com/a/kubernetes.io/g/wg-batch)|* Regular Meeting ([calendar](https://calendar.google.com/calendar/embed?src=8ulop9k0jfpuo0t7kp8d9ubtj4%40group.calendar.google.com)): [Thursdays (starting February 15th 2024)s at 3PM CET (Central European Time) (monthly)](https://zoom.us/j/98329676612?pwd=c0N2bVV1aTh2VzltckdXSitaZXBKQT09)<br>
|[Data Protection](wg-data-protection/README.md)|[data-protection](https://github.com/kubernetes/kubernetes/labels/wg%2Fdata-protection)|* Apps<br>* Storage<br>|* [Xing Yang](https://github.com/xing-yang), VMware<br>* [Xiangqian Yu](https://github.com/yuxiangqian), Google<br>|* [Slack](https://kubernetes.slack.com/messages/wg-data-protection)<br>* [Mailing List](https://groups.google.com/a/kubernetes.io/g/wg-data-protection)|* Regular WG Meeting: [Wednesdays at 9:00 PT (Pacific Time) (bi-weekly)](https://zoom.us/j/6933410772)<br>
|[Device Management](wg-device-management/README.md)|[device-management](https://github.com/kubernetes/kubernetes/labels/wg%2Fdevice-management)|* Architecture<br>* Autoscaling<br>* Network<br>* Node<br>* Scheduling<br>|* [John Belamaric](https://github.com/johnbelamaric), Google<br>* [Kevin Klues](https://github.com/klueska), NVIDIA<br>* [Patrick Ohly](https://github.com/pohly), Intel<br>|* [Slack](https://kubernetes.slack.com/messages/wg-device-management)<br>* [Mailing List](https://groups.google.com/a/kubernetes.io/g/wg-device-management)|* Regular WG Meeting (Asia/Europe): [Wednesdays at 9:00 CET (Central European Time) (biweekly)](https://zoom.us/j/97238699195?pwd=cy9IMm1ZeERtRlJ3VS8yWUxHUWIrQT09)<br>* Regular WG Meeting (Europe/America): [Tuesdays at 8:30 PT (Pacific Time) (biweekly)](https://zoom.us/j/97238699195?pwd=cy9IMm1ZeERtRlJ3VS8yWUxHUWIrQT09)<br>
Expand Down
37 changes: 37 additions & 0 deletions sigs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3602,6 +3602,43 @@ workinggroups:
liaison:
github: pacoxu
name: Paco Xu 徐俊杰
- dir: wg-api-expression
name: API Expression
mission_statement: >
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm inclined to suggest to move certain elements from the attached mission statement into the WG charter.

Enable API authors to better serve API consumers, by improving and documenting
all aspects of Kubernetes API development. Mission is for Kubernetes APIs to
be more declarative. [See full Mission Statement in Proposal](https://docs.google.com/document/d/1RxeKII-3ZESSGMKt09meSGhpDW6CyufM2v1SYgAh_uQ).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Links to Google Docs are problematic (access permissions, content could change).

I agree with @soltysh, if there's content in that doc that is relevant for the WG, then it should be copied into this repo.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This still holds.


stakeholder_sigs:
- API Machinery
- Architecture
- CLI
label: api-expression
leadership:
chairs:
- github: JoelSpeed
name: Joel Speed
company: Red Hat
email: [email protected]
- github: aaron-prindle
name: Aaron Prindle
company: Google
email: [email protected]
meetings:
- description: Regular WG Meeting
day: Tuesday
time: "9:30"
tz: PT (Pacific Time)
frequency: biweekly
url: https://zoom.us/j/94238112084
archive_url: https://docs.google.com/document/d/1CSpNaicbEqKJoW306qaQEBIkwC1mGIcKl3yiB_C0HZk
recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP0CU9g6-yb1NgZXGAhMxfFE&jct=9Leh8O_yrRTB0Kcv3rMKZHncZq8POg
contact:
slack: wg-api-expression
mailing_list: https://groups.google.com/forum/#!forum/kubernetes-wg-api-expression
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know you're reviving this group, but since then we've move to managed google groups. I think it'd be beneficial to start using the new ML address, rather the old one.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This too.

liaison:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO: steering will loadbalance a liason

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[still todo, raised this again with steering-private]

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can be the liaison for this WG.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe this will be @pohly

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great, thanks @pohly! I have updated the liaison information here now.

github: BenTheElder
name: Benjamin Elder
- dir: wg-batch
name: Batch
mission_statement: >
Expand Down
36 changes: 36 additions & 0 deletions wg-api-expression/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<!---
This is an autogenerated file!

Please do not edit this file directly, but instead make changes to the
sigs.yaml file in the project root.

To understand how this file is generated, see https://git.k8s.io/community/generator/README.md
--->
# API Expression Working Group

Enable API authors to better serve API consumers, by improving and documenting all aspects of Kubernetes API development. Mission is for Kubernetes APIs to be more declarative. [See full Mission Statement in Proposal](https://docs.google.com/document/d/1RxeKII-3ZESSGMKt09meSGhpDW6CyufM2v1SYgAh_uQ).

## Stakeholder SIGs
* [SIG API Machinery](/sig-api-machinery)
* [SIG Architecture](/sig-architecture)
* [SIG CLI](/sig-cli)

## Meetings
*Joining the [mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-api-expression) for the group will typically add invites for the following meetings to your calendar.*
* Regular WG Meeting: [Tuesdays at 9:30 PT (Pacific Time)](https://zoom.us/j/94238112084) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9%3A30&tz=PT%20%28Pacific%20Time%29).
* [Meeting notes and Agenda](https://docs.google.com/document/d/1CSpNaicbEqKJoW306qaQEBIkwC1mGIcKl3yiB_C0HZk).
* [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP0CU9g6-yb1NgZXGAhMxfFE&jct=9Leh8O_yrRTB0Kcv3rMKZHncZq8POg).

## Organizers

* Joel Speed (**[@JoelSpeed](https://github.com/JoelSpeed)**), Red Hat
* Aaron Prindle (**[@aaron-prindle](https://github.com/aaron-prindle)**), Google

## Contact
- Slack: [#wg-api-expression](https://kubernetes.slack.com/messages/wg-api-expression)
- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-api-expression)
- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fapi-expression)
- Steering Committee Liaison: Benjamin Elder (**[@BenTheElder](https://github.com/BenTheElder)**)
<!-- BEGIN CUSTOM CONTENT -->

<!-- END CUSTOM CONTENT -->
82 changes: 82 additions & 0 deletions wg-api-expression/charter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# WG API Expression Charter

This charter adheres to the conventions described in the [Kubernetes Charter README] and uses
the Roles and Organization Management outlined in [sig-governance].

## Scope

Enable declarative expression of Kubernetes APIs (metadata, validation rules, etc.) to replace imperative, handwritten logic. This working group focuses on developing frameworks and tools that allow API authors to express API rules declaratively as part of the schema itself, improving development velocity, consistency, and maintainability across both native Kubernetes types and CRDs.

### In scope

#### Code, Binaries and Services

- Declarative validation code generator (validation-gen) that generates Go validation code from declarative tags in API type definitions
- Kube API Linter (KAL) for checking API types against Kubernetes API Conventions and best practices
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is an ongoing subproject, not a workgroup deliverable?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IIUC the declarative validation code generator is also ongoing work right?

- Integration frameworks between declarative tools (validation-gen, kubebuilder, KAL, and other API tools)
- Libraries and components for type discovery and declarative API expression that can be reused across code generators
- Tools and processes for generating CEL or OpenAPI validation rules from declarative tags
- Documentation generation tools that create API documentation from declarative expressions

#### Cross-cutting and Externally Facing Processes

- Development and maintenance of KEPs for declarative API expression features (eg: KEP-5073 Declarative Validation)
- Migration strategies and guides for SIGs to adopt the declarative framework
- Establishing patterns for ratcheting, validation, defaulting, and immutability expressed declaratively
- Ensuring consistency between Kubernetes native types and CRD validation experiences
- Automated API quality checks and linting processes integrated into the standard API review workflow

### Out of scope

- General API design decisions unrelated to declarative expression
- Runtime validation logic that cannot be expressed declaratively

## Deliverables

The working group will deliver:

- **validation-gen code generator**: Core tool for generating Go validation code from declarative tags
- **Kube API Linter (KAL)**: Automated API convention checker integrated into the review process
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These first two don't seem like workgroup deliverables, they're existing subprojects, and there's no specific targeted improvements to them.

- **Integration strategy**: Cohesive approach for integrating validation-gen, kubebuilder, KAL, and other tools
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where are you planning to integrate kubebuilder and other tools? Because both validation-gen and KAL are actively being worked on to include in current k/k code.

Copy link
Author

@aaron-prindle aaron-prindle Aug 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The goal of the bullet here was trying to explain that there is an ecosystem of tags and tools currently that are related to API Expression and declarative APIs. This bullet is related to current discussions here:

around a Kubebuilder tags related to conditional field inclusion from a feature gate and a similar tag in declarative validation around conditionally running a validation based on a feature gate. The bullet here attempts to highlight that WG API Expression is to be used as a way of getting consensus, sharing information, and formalizing designs/approaches across these projects which tackle API Expression.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So this is just re-using existing sig-apimachnery sub-project, expanding its functionality with this single feature, do I understand that correctly?

- **KEPs**: Series of enhancement proposals introducing and evolving the framework
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure I understand this goal. Can you explain this a bit better?

- **CRD equivalence strategy**: Plan to bridge the gap between native types and CRDs
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the gap that you're planning to bridge?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've updated the text here to explain the gap we are hoping to bridge:

  • Native Type and CRD Validation Parity: Bridge the gap between how validation is implemented for native Kubernetes types and CRDs to unify the developer experience and improve APIs. This strategy includes:
    • Establishing a declarative source of truth (eg: Go struct tags) for validation rules that can generate the validation methods needed for native types and the OpenAPI/CEL rules used by CRDs.
    • Enable easier inheritance of validation logic when a CRD embeds a native type. For example, a CRD that includes a corev1.PodSpec should allow reuse of PodSpec's validation.

- **Documentation generation strategy**: Automated documentation from declarative API expressions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What part are we currently missing?

Copy link
Author

@aaron-prindle aaron-prindle Aug 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The goal would be that the validation documentation for each field of a native API type could be generated from declarative tags and this could be a part of reference information for the type. (ex: https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/). I've updated the text there to explain this in more detail.

- **Migration guides**: Documentation for SIGs to adopt the framework and migrate existing APIs

## Stakeholders

- **SIG API Machinery**: Owner of API server, gengo, kube-openapi, and validation-gen tool
- **SIG Architecture**: Owner of Kubernetes API conventions and architectural decisions
- **SIG CLI**: Consumer of more expressive APIs, providing feedback on kubectl interaction and user experience
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, speaking for SIG-CLI, that part is not fully clear. Would you have time to show up on one of our meetings and explain to us better the idea behind it?


## Roles and Organization Management

This sig adheres to the Roles and Organization Management outlined in [sig-governance]
and opts-in to updates and modifications to [sig-governance].

### Meeting Mechanics

- **Frequency**: Bi-weekly (every 2 weeks)
- **Duration**: 60 minutes
- **Communication**:
- Slack: #wg-api-expression
- Mailing List: [email protected]

### Chairs

- Aaron Prindle (@aaron-prindle)
- Joel Speed (@JoelSpeed)

## Exit Criteria

The working group will have fulfilled its charter and can be disbanded when:

1. The core framework, including validation-gen and associated libraries, is stable and integrated into the main Kubernetes development workflow
2. Foundational KEPs (e.g., Declarative Validation) are implemented and graduated to GA
3. Kube API Linter (KAL) is mature, widely adopted, and integrated into the standard API development and review process
4. A clear, documented process exists for SIGs to migrate existing types and use the framework, with successful migrations of key types (eg: PodSpec) demonstrating the process
5. Ongoing maintenance of the framework has been successfully transitioned to owner SIGs, primarily SIG API Machinery

[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md
[sig-subprojects]: https://github.com/kubernetes/community/blob/master/sig-YOURSIG/README.md#subprojects
[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md