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. -->