<!---
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.
[See full Mission Statement](https://docs.google.com/document/d/1XYbQXfge2qKM9psksfC5XZnW8hybtLqL1EcJLU4JwKg).

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

## 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:30&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

* Antoine Pelisse (**[@apelisse](https://github.com/apelisse)**), Google
* Kevin Wiesmueller (**[@kwiesmueller](https://github.com/kwiesmueller)**), 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 -->

## Full Mission Statement

Joint project between SIG API Machinery and SIG Architecture.

Supersedes WG Apply, since it is more general and covers post-GA SSA tasks.

Deliverables:

- Documented, coherent “desired state” for API schema features
  - I.e., what sorts of things may a Kubernetes API schema express? (unions, immutable fields, pluralized fields (?), static field validations, defaults, etc)
  - How should these things be expressed? Both in source form (“types.go”) and in published form (OpenAPI)? What should the canonical API schema expression form be, if not types.go? (if the group recommends a change, the group has to be willing to implement it!)
  - For API specification, do we want to stick with “types.go”, move to a IDL/DSL, or something else?
- Documented, coherent “desired state” for how API authors evolve APIs
  - Covering version-to-version and within-version changes
  - Should cover all kinds of schema changes, not just e.g. adding a field
  - Categorize changes as 100% safe, unsafe-but-needed-anyway (see “ratcheting” below), and unsafe-not-permitted
  - Give guidance both to API authors who 
    a) don’t need to keep old users working and 
    b) need to not break old users.
- Tools for programmatically evaluating the safeness / conformance of an API change that can be run as presubmits. (Should operate on the output of the api definition pipeline, so that they’re language agnostic.)
- Tools & techniques for gradually & safely rolling out marginally unsafe changes to make existing API objects good citizens (called “ratcheting”, usually in the context of validation functions, but API schema changes require the same thought).
- If we need a DSL for API specification, write the tools & code needed.
- Finish SSA and implement missing API constructs (unions etc).
- Updated developer documentation / API guide (i.e., document the current state and not just the desired state)

All artifacts above address both CRs and built-in resources

API Machinery will be the owner of the code produced.

[[Original Document](https://docs.google.com/document/d/1XYbQXfge2qKM9psksfC5XZnW8hybtLqL1EcJLU4JwKg)].

<!-- END CUSTOM CONTENT -->
