Skip to main content

SeaTunnel Improvement Proposal (STIP)

What is a STIP?

A SeaTunnel Improvement Proposal (STIP) is the standard process for proposing significant new features, architectural changes, or major improvements to Apache SeaTunnel. A STIP is tracked as a GitHub Issue with the design label and a sequential number prefix in its title (e.g., [STIP-23] ...).

STIPs serve as the single source of truth for why a feature is being built, how it should be designed, and what the expected outcomes are. They give the community visibility into planned work, preserve a permanent record of design decisions, and help new contributors understand the direction of the project.

When Should I Create a STIP?

Create a STIP when your proposal involves one or more of the following:

  • A new core feature or significant change to existing behavior
  • A change to the SeaTunnel API or Connector SPI
  • A new engine integration or major engine-level change
  • An architectural decision that affects multiple modules
  • A change that requires community consensus before implementation begins

You do not need a STIP for:

  • Bug fixes
  • Documentation updates
  • Minor improvements or refactoring
  • Adding a new connector (unless it requires changes to the API or SPI)

STIP Lifecycle

Each STIP goes through the following states:

StateMeaning
DraftThe proposal is being written; not yet ready for community discussion.
Under ReviewThe issue has been opened and is being discussed by the community on GitHub and/or the mailing list.
AcceptedThe community has reached consensus and implementation may proceed.
RejectedThe community decided not to move forward with the proposal. The issue is closed with a clear explanation.
ImplementedThe feature has been merged and the corresponding issue is closed.

A STIP author should update the issue with the current state as it progresses.

STIP Numbering

STIPs are numbered sequentially in the order they are created. To find the current highest number and determine the next one, browse the full list:

https://github.com/apache/seatunnel/issues?q=is%3Aissue+label%3Adesign+sort%3Acreated-asc

Here are a few representative examples for reference:

NumberTitleIssueStatus
STIP-1Decoupling connectors from compute engines#1608Implemented
STIP-5ST-Engine Design And Task Tracking#2272Implemented
STIP-12CDC Connector Design#3175Implemented
STIP-15Design of Dirty Data Collection#4587Accepted
STIP-21Support Traffic Dyeing (Sampling) and Context-Aware Metrics#10305Under Review

The next new proposal should be numbered STIP-23.

How to Submit a STIP

Step 1 — Gauge interest on the mailing list

Before opening a formal STIP, consider sending a short email to dev@seatunnel.apache.org describing the problem and your high-level approach. Early feedback helps you avoid investing time in a direction the community will not accept, and may reveal related efforts you were unaware of.

Step 2 — Find the next available number

Browse the full STIP list to confirm the highest existing number and increment by one.

Step 3 — Open a GitHub Issue

Go to apache/seatunnel Issues and create a new issue with:

  • Title: [STIP-N] [Module] Brief description (e.g., [STIP-23] [Connector] Support multi-catalog source)

Write the issue body following the STIP Content Template below.

Step 4 — Drive the discussion to consensus

Respond promptly to comments, update the proposal as the design evolves, and work toward one of the terminal states: Accepted or Rejected. Large or controversial proposals should be explicitly discussed on dev@seatunnel.apache.org before being marked Accepted.

When submitting implementation pull requests, reference the STIP issue number in the PR description (e.g., Closes #NNNN or Part of STIP-N).

STIP Content Template

Use the following structure when writing the body of your STIP GitHub Issue. Delete sections that are genuinely not applicable; do not leave them empty.

## Background

<!-- Describe the problem or opportunity this proposal addresses. Include
enough context for a reader unfamiliar with the area to understand why
this matters. -->

## Motivation

<!-- Explain why the current state is insufficient and why solving this
problem is valuable to the project. -->

## Goals

<!-- List the concrete outcomes this proposal aims to achieve. Use bullet
points, each starting with a verb:
- Support reading nested schemas from Kafka in the Kafka source.
- ... -->

## Non-Goals

<!-- Explicitly state what is out of scope for this proposal to prevent
scope creep during review. -->

## Design

<!-- Describe the proposed solution in enough detail that an experienced
contributor could implement it. Include:
- Key interfaces / APIs / configuration options being added or changed
- Data flow or sequence diagrams where helpful
- How the change interacts with existing components -->

## Compatibility, Deprecation, and Migration Plan

<!-- Describe any backward-incompatible changes and how existing users
should migrate. If fully backward-compatible, state that explicitly. -->

## Test Plan

<!-- Describe how the change will be tested: unit tests, integration tests,
performance benchmarks, etc. -->

## Alternatives Considered

<!-- Describe other approaches you evaluated and explain why you chose the
proposed design over them. -->

## References

<!-- Links to related issues, PRs, papers, or prior art. -->