Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Contents

...

[CEP-59] Implementation of In-Band Connection Draining (Graceful Disconnect)

This ticket covers the implementation of the server-side logic and protocol extensions defined in CEP-59: Graceful Disconnect – In-Band Connection Draining for Node Shutdown.

Goal:
Currently, when a Cassandra node shuts down or drains, client connections are often terminated abruptly, leading to failed requests. CEP-59 proposes an "in-band" signal (GRACEFUL_DISCONNECT) to notify clients before the socket is closed, allowing them to stop sending new requests and wait for pending ones to complete.

Proposed Scope (Implementation):

  1. Server-Side:
  • Modify the transport layer (specifically the Netty pipeline) to advertise and emit GRACEFUL_DISCONNECT on shutting down, as CEP-59 outlines.
  • Implement configurable timeouts to allow clients a grace period before hard closure.
  1. Python driver (potentially):
  • Update the Python driver to opt-in and handle GRACEFUL_DISCONNECT.

References:

See:

Difficulty:
Project size: ~350 hour (large)
Potential mentors:
, mail: (at) apache.org
Project Devs, mail: dev (at) cassandra.apache.org

Apache Dubbo

[GSoC 2026] CEP-59 Self-Draining Graceful Disconnect via cleanup() Callback

This proposal takes a driver-first approach to CEP-59, with a self-draining connection mechanism that hooks into CQLMessageHandler's existing cleanup() callback and per-connection channelPayloadBytesInFlight counter.

Server-side: Four-phase shutdown (SEAL → SIGNAL → DRAIN → DEADLINE). Each connection closes itself via three conditions in the existing cleanup() callback:

if (!isRunning && bytesInFlight == 0 && gracePeriodElapsed()) channel.close();

The gracePeriodElapsed() condition addresses network-latent requests still in the TCP pipe (identified during design review with Jane He).

Driver-side: New DRAINING host state (distinct from DOWN) with policy integration across LoadBalancingPolicy, ReconnectionPolicy, RetryPolicy, and SpeculativeExecutionPolicy.

See CEP-59 spec: https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=406619103 Related: CASSANDRA-21191

Difficulty:
Project size: ~350 hour (large)
Potential mentors:
, mail: (at) apache.org
Project Devs, mail: dev (at) cassandra.apache.org

Apache Dubbo

GSoC 2026 - Dubbo Lightweight Refactoring

Background and Goal

Over the past several major releases, Apache Dubbo has accumulated a large number of modules, dependencies, and legacy integrations. This results in increased framework size, slower startup time, and higher dependency complexity for users who only need core RPC functionality.

With the increasing adoption of cloud-native and microservice environments, lightweight frameworks with minimal dependencies are becoming increasingly important.

Therefore, this project aims to analyze and refactor Dubbo's dependency structure to make the framework more modular and lightweight.

Goal

The project aims to improve Dubbo’s modularization and reduce unnecessary dependencies.

Expected tasks include:

  1. Analyze the dependency graph of the Dubbo core modules.
  1. Identify redundant or unnecessary dependencies.
  1. Refactor module boundaries to improve modularity.
  1. Reduce the size of the minimal runtime dependency set.
  1. Provide documentation and benchmarks comparing before and after results.
- Dubbo Lightweight Refactoring

Background and Goal

Over the past several major releases, Apache Dubbo has accumulated a large number of modules, dependencies, and legacy integrations. This results in increased framework size, slower startup time, and higher dependency complexity for users who only need core RPC functionality.

With the increasing adoption of cloud-native and microservice environments, lightweight frameworks with minimal dependencies are becoming increasingly important.

Therefore, this project aims to analyze and refactor Dubbo's dependency structure to make the framework more modular and lightweight.

Goal

The project aims to improve Dubbo’s modularization and reduce unnecessary dependencies.

Expected tasks include:

  1. Analyze the dependency graph of the Dubbo core modules.
  1. Identify redundant or unnecessary dependencies.
  1. Refactor module boundaries to improve modularity.
  1. Reduce the size of the minimal runtime dependency set.
  1. Provide documentation and benchmarks comparing before and after results.

Possible Extensions

  • Provide a minimal runtime profile for Dubbo.
  • Introduce optional dependency loading mechanisms.
  • Optimize startup time and memory footprint.

Relevant Skills

  • Java
  • Build tools (Maven / Gradle)
  • Dependency management
  • Microservice frameworks

Potential Mentors

  1. Albumen Kevin, Apache Dubbo PMC, albumenj@apache.org
  2. dev@dubbo.apache.org

 

Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Liang He, mail: heliang666s (at) apache.org
Project Devs, mail: dev (at) dubbo.apache.org

...

GSoC 2026 - Convert Dubbo capabilities into AI Skills.

Background and Goal

With the continuous evolution of AI technology and the growing popularity of AI coding, this GSOC project aims to add a series of AI Skills for Dubbo. These AI Skills will clearly describe Dubbo's core capabilities, key modules such as RPC, registry, and distributed system, as well as Dubbo's design principles. The goal is to help developers and relevant staff better understand, develop, and use Dubbo and its affiliated projects, and enable users to more efficiently understand and use Dubbo with the help of AI tools.

Goal

This project is designed to build a complete Dubbo Skills.
Expected tasks include:

  1. Analyze the dependency graph of the Dubbo core modules.
  2. Gain an in-depth understanding of Dubbo's inherent design and the design of each of its modules.  
  1. Develop a complete standalone Skills directory that can be correctly identified and utilized by AI
     

Relevant Skills

  • Java
  • Build tools (Maven / Gradle)
  • AI
  • Microservice frameworks

Potential Mentors

  1. Albumen Kevin, Apache Dubbo PMC, albumenj@apache.org
  2. dev@dubbo.apache.org
Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Yu Yu, mail: rainyu (at) apache.org
Project Devs, mail: dev (at) dubbo.apache.org
Refactoring and Capability Enhancement of the

Exploring a Lightweight Runtime and Designing a Pluggable Architecture for Apache Dubbo-Go

Metadata Subsystem

Abstract

Metadata is a core component in the Dubbo ecosystem, enabling service discovery, governance, and cross-language interoperability. While Dubbo Java and dubbo-go-3.0 provide a relatively complete and well-structured metadata subsystem, the current implementation in Dubbo-Go still lacks key capabilities and architectural clarityDubbo-Go has evolved into a feature-rich RPC framework with a large ecosystem of extensions covering service discovery, registry, protocols, and governance. However, its current design favors “out-of-the-box” usability, where most components are implicitly enabled, resulting in unnecessary runtime overhead and limited flexibility.

This project aims to systematically refactor and enhance the Dubbo-Go metadata subsystem by introducing a standardized Identifier system, completing the MetadataReport abstraction, adding ServiceDefinition support, and improving reliability through unified retry mechanisms and optional local caching. The goal is to align Dubbo-Go with the mature design of Dubbo Java while maintaining Go idioms and backward compatibility.

This work will significantly improve the consistency, extensibility, and production readiness of Dubbo-Go’s metadata infrastructure.

Detailed Description

Metadata in Dubbo is responsible for managing application-level metadata, service-level metadata, service name mappings, service definitions, and runtime URLs. It forms the foundation for service registration, discovery, and governance.

Although Dubbo-Go has partially implemented metadata-related capabilities, several critical gaps remain:

  • Lack of a unified Identifier system, leading to inconsistent key/path generation across metadata backends.
  • Incomplete MetadataReport abstraction, missing service definition storage, URL lifecycle management, and destruction operations.
  • Absence of ServiceDefinition support, preventing fine-grained service modeling.
  • Mixed responsibilities in metadata_service.go, resulting in unclear module boundaries and reduced maintainability.
  • Fragmented retry logic without centralized scheduling or observability.
  • No local metadata caching mechanism, affecting system resilience.
  • Incomplete MetadataServiceExporter lifecycle abstraction.

These issues limit the maintainability, extensibility, and long-term evolution of the metadata subsystem.

The core goal of this project is:

introduce a controllable and extensible plugin mechanism to Dubbo-Go, enabling explicit loading and unloading of components and supporting a lightweight runtime mode. By defining a clear SPI (Service Provider Interface) layer, restructuring the startup process, and decoupling core runtime from optional features, this project will significantly improve modularity, maintainability, and deployment flexibility.

The outcome will allow Dubbo-Go to support minimal runtime configurations, on-demand extension loading, and more scalable evolution of its ecosystem.

Detailed Description

Dubbo-Go is a high-performance RPC framework in the Apache Dubbo ecosystem, providing a wide range of capabilities such as service discovery, registry integration, protocol implementations, and governance features.

Currently, Dubbo-Go is designed for convenience: most extensions are automatically registered and enabled via mechanisms such as blank imports and init() functions. While this simplifies initial usage, it introduces several issues:

  • All plugins are implicitly enabled Users cannot explicitly disable unnecessary components.
  • Complex runtime dependencies and long startup paths Even simple RPC scenarios may trigger initialization of registry, governance, and configuration subsystems.
  • Tight coupling between core runtime and extensions Many extensions reside in the main repository, blurring boundaries and increasing maintenance cost.

Previous refactoring efforts have removed some low-usage extensions (e.g., Consul registry), but due to the lack of a unified plugin framework and stable SPI layer, these extensions cannot be reintroduced cleanly as optional components.

Therefore, the core problem is not merely whether to introduce plugins, but:

How to design a controllable, modular, and backward-compatible plugin system that enables Dubbo-Go to support a lightweight runtime modeTo systematically redesign and complete the Dubbo-Go metadata subsystem while preserving backward compatibility and aligning with the broader Dubbo ecosystem.

Deliverables

Core Enhancements (Priority P0)

  • Implement a standardized Identifier system
  • Unified key/path generation for application, service, and subscriber metadata
  • Reusable across all metadata backends
  • Complete MetadataReport abstraction
  • Application metadata publish/get/remove
  • Provider/Consumer metadata storage
  • URL management (exported/subscribed)
  • Lifecycle destroy support
  • Introduce ServiceDefinition model
  • ServiceDefinition / MethodDefinition / TypeDefinition
  • JSON-based serialization (initial version)

Architecture and Reliability Improvements (Priority P1)

  • Refactor metadata service structure:
  • Split service / exporter / adapter / info modules
  • Improve testability and maintainability
  • Implement unified retry and failure recovery mechanism
  • Centralized scheduler
  • Configurable retry and backoff strategies
  • Failure tracking
  • Introduce optional local metadata cache
  • File-based cache for resilience
  • Graceful degradation when metadata center is unavailable
  • Enhance MetadataServiceExporter lifecycle
  • Design and implement a pluggable architecture
    • Explicit plugin enable/disable mechanism
    • Replace implicit init()-based activation model
  • Define a stable SPI (Service Provider Interface) layer
    • Clear extension points and boundaries
    • Reduce dependency on internal runtime structures
  • Refactor Dubbo-Go startup process
    • Separate minimal runtime from optional components
    • Enable lightweight runtime mode

Ecosystem and Validation (Priority P1)

  • Establish a new repository: dubbo-go-extensions
    • Host non-core plugins as independent Go modules
  • Adapt multiple extensions (≥ 5)
    • Validate plugin mechanism generality
    • Ensure compatibility with lightweight runtime
  • Restore at least one historically removed extension (e.g., Consul)
    • Re-integrate via SPI
    • Validate backward compatibility
    Export / Unexport / GetExportedURLs / IsExported

Supporting Work (Priority P2)

  • Unit and integration tests
  • Documentation and design spec
  • Migration and compatibility guidelines
  • Documentation of startup process and plugin system
  • Example projects demonstrating:
    • Lightweight runtime
    • On-demand plugin loading
  • Migration and adaptation guidelines

Implementation Implementation Plan

Phase 1: Analysis and Design

  • Analyze current Dubbo-Go metadata implementation and identify gaps
  • Study Dubbo Java and dubbo-go-3.0 designs
  • Design Identifier abstraction and MetadataReport extension
  • Define ServiceDefinition model structure
  • startup flow and plugin registration mechanism
  • Identify implicit plugin loading patterns (init(), global registry)
  • Define minimal runtime capability boundary
  • Design plugin lifecycle:
    • discovery
    • registration
    • enable/disable
    • initialization
  • Draft SPI interface designDraft architecture refactoring plan

Phase 2: Core

Capability

Plugin Mechanism Implementation (P0)

  • Implement Identifier system and integrate into metadata backends
  • Extend MetadataReport interface and core implementations
  • plugin management system:
    • plugin registry
    • enable/disable control
    Implement ServiceDefinition model and serialization
  • Ensure backward compatibility with existing behavior
  • Introduce deterministic plugin initialization order
  • Reduce reliance on Go package initialization order

Phase 3: SPI Stabilization and Architecture Refactoring

and Reliability

(P1)

  • Refactor metadata_service.go into modular structure:

metadata/
└── service/
 ├── interface.go
 ├── service.go
 ├── exporter.go
 ├── adapters.go
 └── service_info.go * Implement unified retry mechanism

  • Add local cache support
  • Enhance exporter lifecycle abstraction
  • Define stable SPI layer
  • Separate core runtime from extensions
  • Refactor internal dependencies to reduce coupling
  • Ensure plugins can evolve independently

Phase 4: Extension Migration and Validation (P1)

  • Migrate multiple extensions into independent modules
  • Adapt extensions using new SPI
  • Restore at least one removed extension (e.g., Consul)
  • Validate:
    • plugin enable/disable
    • load order
    • runtime compatibility

Phase 5: Testing, Documentation, and Finalization

Phase 4: Testing and Documentation

(P2)

  • Add comprehensive unit tests and integration tests
  • Validate backward compatibility with existing metadata backends
  • Provide usage examples and documentation
  • Write Prepare design documentation for future contributorsand final report

Required Skills

  • Proficiency in Strong Go programming and familiarity with concurrent system designskills
  • Understanding of distributed systems and service governance conceptsmodular system design and plugin architectures
  • Familiarity with Dubbo architecture or similar RPC frameworks and distributed systems
  • Experience with metadata systems, service discovery, or configuration centers (e.g., Nacos, Zookeeper, Etcd)dependency management and system initialization
  • Ability to read and understand Java code (for referencing Dubbo Java implementation)analyze and refactor existing codebases

Benefits to Apache Dubbo-go

  • Improved consistency across Dubbo language implementations (Java and Go)
  • Stronger extensibility for future metadata and governance features
  • Reduced maintenance cost through cleaner architecture
  • Improved system resilience via retry and caching mechanisms
  • Better support for cross-language interoperability
  • Enables lightweight runtime mode for resource-constrained environments
  • Improves modularity and separation of concerns
  • Reduces maintenance cost of core repository
  • Supports independent evolution of extensions
  • Enhances developer experience with explicit plugin control
  • Provides a foundation for future runtime optimization and deployment flexibilityLower barrier for contributors due to clearer abstractions

Conclusion

This project provides a systematic redesign of the introduces a modular and controllable plugin architecture for Dubbo-Go metadata subsystem, addressing both missing capabilities and architectural limitations. By aligning with the proven design of Dubbo Java while preserving Go idioms, it lays a solid foundation for future evolution in service governance, cross-language interoperability, and metadata-driven features.

, enabling a lightweight runtime mode while maintaining backward compatibility. By defining a clear SPI layer and decoupling core and extensions, it significantly improves maintainability, flexibility, and long-term scalability of the Dubbo-Go ecosystem.

https://github.com/apache/dubbo-go/issues/2326 https://github.com/apache/dubbo-go

/issues/1981https://github.com/apache/dubbo-go-contrib/issues/

3188

2

Contact Information

Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Alex Stocks, mail: alexstocks (at) apache.org
Project Devs, mail: dev (at) dubbo.apache.org
Exploring a Lightweight Runtime and Designing a Pluggable Architecture for Apache

Refactoring and Capability Enhancement of the Dubbo-Go Metadata Subsystem

Abstract

Dubbo-Go has evolved into a feature-rich RPC framework with a large ecosystem of extensions covering Metadata is a core component in the Dubbo ecosystem, enabling service discovery, registrygovernance, protocols, and governance. However, its current design favors “out-of-the-box” usability, where most components are implicitly enabled, resulting in unnecessary runtime overhead and limited flexibilityand cross-language interoperability. While Dubbo Java and dubbo-go-3.0 provide a relatively complete and well-structured metadata subsystem, the current implementation in Dubbo-Go still lacks key capabilities and architectural clarity.

This project aims to introduce a controllable and extensible plugin mechanism to Dubbo-Go, enabling explicit loading and unloading of components and supporting a lightweight runtime mode. By defining a clear SPI (Service Provider Interface) layer, restructuring the startup process, and decoupling core runtime from optional features, this project will significantly improve modularity, maintainability, and deployment flexibility.

The outcome will allow Dubbo-Go to support minimal runtime configurations, on-demand extension loading, and more scalable evolution of its ecosystem.

Detailed Description

Dubbo-Go is a high-performance RPC framework in the Apache Dubbo ecosystem, providing a wide range of capabilities such as service discovery, registry integration, protocol implementations, and governance features.

Currently, Dubbo-Go is designed for convenience: most extensions are automatically registered and enabled via mechanisms such as blank imports and init() functions. While this simplifies initial usage, it introduces several issues:

  • All plugins are implicitly enabled Users cannot explicitly disable unnecessary components.
  • Complex runtime dependencies and long startup paths Even simple RPC scenarios may trigger initialization of registry, governance, and configuration subsystems.
  • Tight coupling between core runtime and extensions Many extensions reside in the main repository, blurring boundaries and increasing maintenance cost.

Previous refactoring efforts have removed some low-usage extensions (e.g., Consul registry), but due to the lack of a unified plugin framework and stable SPI layer, these extensions cannot be reintroduced cleanly as optional components.

Therefore, the core problem is not merely whether to introduce plugins, but:

systematically refactor and enhance the Dubbo-Go metadata subsystem by introducing a standardized Identifier system, completing the MetadataReport abstraction, adding ServiceDefinition support, and improving reliability through unified retry mechanisms and optional local caching. The goal is to align Dubbo-Go with the mature design of Dubbo Java while maintaining Go idioms and backward compatibility.

This work will significantly improve the consistency, extensibility, and production readiness of Dubbo-Go’s metadata infrastructure.


Detailed Description

Metadata in Dubbo is responsible for managing application-level metadata, service-level metadata, service name mappings, service definitions, and runtime URLs. It forms the foundation for service registration, discovery, and governance.

Although Dubbo-Go has partially implemented metadata-related capabilities, several critical gaps remain:

  • Lack of a unified Identifier system, leading to inconsistent key/path generation across metadata backends.
  • Incomplete MetadataReport abstraction, missing service definition storage, URL lifecycle management, and destruction operations.
  • Absence of ServiceDefinition support, preventing fine-grained service modeling.
  • Mixed responsibilities in metadata_service.go, resulting in unclear module boundaries and reduced maintainability.
  • Fragmented retry logic without centralized scheduling or observability.
  • No local metadata caching mechanism, affecting system resilience.
  • Incomplete MetadataServiceExporter lifecycle abstraction.

These issues limit the maintainability, extensibility, and long-term evolution of the metadata subsystem.

The core goal of this project is:

To systematically redesign and complete the Dubbo-Go metadata subsystem while preserving backward compatibility and aligning with the broader Dubbo ecosystemHow to design a controllable, modular, and backward-compatible plugin system that enables Dubbo-Go to support a lightweight runtime mode.


Deliverables

Core Enhancements (Priority P0)

  • Design and implement a pluggable architecture
    • Explicit plugin enable/disable mechanism
    • Replace implicit init()-based activation model
  • Define a stable SPI (Service Provider Interface) layer
    • Clear extension points and boundaries
    • Reduce dependency on internal runtime structures
  • Refactor Dubbo-Go startup process
    • Separate minimal runtime from optional components
    • Enable lightweight runtime mode

Ecosystem and Validation (Priority P1)

  • Establish a new repository: dubbo-go-extensions
    • Host non-core plugins as independent Go modules
  • Adapt multiple extensions (≥ 5)
    • Validate plugin mechanism generality
    • Ensure compatibility with lightweight runtime
  • Restore at least one historically removed extension (e.g., Consul)
    • Re-integrate via SPI
  • Implement a standardized Identifier system
  • Unified key/path generation for application, service, and subscriber metadata
  • Reusable across all metadata backends
  • Complete MetadataReport abstraction
  • Application metadata publish/get/remove
  • Provider/Consumer metadata storage
  • URL management (exported/subscribed)
  • Lifecycle destroy support
  • Introduce ServiceDefinition model
  • ServiceDefinition / MethodDefinition / TypeDefinition
  • JSON-based serialization (initial version)

Architecture and Reliability Improvements (Priority P1)

  • Refactor metadata service structure:
  • Split service / exporter / adapter / info modules
  • Improve testability and maintainability
  • Implement unified retry and failure recovery mechanism
  • Centralized scheduler
  • Configurable retry and backoff strategies
  • Failure tracking
  • Introduce optional local metadata cache
  • File-based cache for resilience
  • Graceful degradation when metadata center is unavailable
  • Enhance MetadataServiceExporter lifecycle
  • Export / Unexport / GetExportedURLs / IsExportedValidate backward compatibility

Supporting Work (Priority P2)

  • Documentation of startup process and plugin system
  • Example projects demonstrating:
    • Lightweight runtime
    • On-demand plugin loading
  • Unit and integration tests
  • Documentation and design spec
  • Migration and compatibility Migration and adaptation guidelines

Implementation Plan

Phase 1: Analysis and Design

  • Analyze current Dubbo-Go startup flow and plugin registration mechanism
  • Identify implicit plugin loading patterns (init(), global registry)
  • Define minimal runtime capability boundary
  • Design plugin lifecycle:
    • discovery
    • registration
    • enable/disable
    • initialization
  • metadata implementation and identify gaps
  • Study Dubbo Java and dubbo-go-3.0 designs
  • Design Identifier abstraction and MetadataReport extension
  • Define ServiceDefinition model structure
  • Draft architecture refactoring planDraft SPI interface design

Phase 2: Core

Plugin Mechanism

Capability Implementation (P0)

  • Implement plugin management system:
    • plugin registry
  • Identifier system and integrate into metadata backends
  • Extend MetadataReport interface and core implementations
  • Implement ServiceDefinition model and serializationenable/disable control
  • Ensure backward compatibility with existing behavior
  • Introduce deterministic plugin initialization order
  • Reduce reliance on Go package initialization order

Phase 3:

SPI Stabilization and

Architecture Refactoring and Reliability (P1)

Define stable SPI layer

  • Separate core runtime from extensions
  • Refactor internal dependencies to reduce coupling
  • Ensure plugins can evolve independently

Phase 4: Extension Migration and Validation (P1)

  • Migrate multiple extensions into independent modules
  • Adapt extensions using new SPI
  • Restore at least one removed extension (e.g., Consul)
  • Validate:
    • plugin enable/disable
    • load order
    • runtime compatibility
  • Refactor metadata_service.go into modular structure:

metadata/
└── service/
 ├── interface.go
 ├── service.go
 ├── exporter.go
 ├── adapters.go
 └── service_info.go * Implement unified retry mechanism

  • Add local cache support
  • Enhance exporter lifecycle abstraction

Phase 4: Testing and Documentation

Phase 5: Testing, Documentation, and Finalization

(P2)

  • Add comprehensive unit tests and integration tests
  • Validate backward compatibility with existing metadata backends
  • Provide usage examples and documentation
  • Prepare Write design documentation and final reportfor future contributors

Required Skills

  • Strong Proficiency in Go programming skillsand familiarity with concurrent system design
  • Understanding of modular system design and plugin architecturesdistributed systems and service governance concepts
  • Familiarity with Dubbo architecture or similar RPC frameworks and distributed systems
  • Experience with dependency management and system initializationmetadata systems, service discovery, or configuration centers (e.g., Nacos, Zookeeper, Etcd)
  • Ability to read and understand Java code (for referencing Dubbo Java implementation)Ability to analyze and refactor existing codebases

Benefits to Apache Dubbo-go

  • Enables lightweight runtime mode for resource-constrained environments
  • Improves modularity and separation of concerns
  • Reduces maintenance cost of core repository
  • Supports independent evolution of extensions
  • Enhances developer experience with explicit plugin control

  • Improved consistency across Dubbo language implementations (Java and Go)
  • Stronger extensibility for future metadata and governance features
  • Reduced maintenance cost through cleaner architecture
  • Improved system resilience via retry and caching mechanisms
  • Better support for cross-language interoperability
  • Lower barrier for contributors due to clearer abstractionsProvides a foundation for future runtime optimization and deployment flexibility

Conclusion

This project introduces a modular and controllable plugin architecture for provides a systematic redesign of the Dubbo-Go , enabling a lightweight runtime mode while maintaining backward compatibility. By defining a clear SPI layer and decoupling core and extensions, it significantly improves maintainability, flexibility, and long-term scalability of the Dubbo-Go ecosystem.

Useful Link

metadata subsystem, addressing both missing capabilities and architectural limitations. By aligning with the proven design of Dubbo Java while preserving Go idioms, it lays a solid foundation for future evolution in service governance, cross-language interoperability, and metadata-driven features.


/issues/2326
1981 https://github.com/apache/dubbo-go-contrib/issues/2

Contact Information



Contact Information

Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Alex Stocks, mail: alexstocks (at) apache.org
Project Devs, mail: dev (at) dubbo.apache.org

...

BI connector and demonstration

No one should work on this specific ticket unless assigned - the GSOC candidate we choose will be assigned this ticket.  

For more information, you should be reviewing emails on this subject and following the Wiki pages. 
https://lists.apache.org/list.html?dev@fineract.apache.org
https://cwiki.apache.org/confluence/display/FINERACT/GSOC+Program+at+Fineract 

The idea is to create a connector and a demonstration of analytics that would consume and organize data from Fineract.  

For example, create a way to pull data out of Fineract and make it easy to use in common analytics  such as Power BI or Tableau or, better yet, an open source variant.   The data should probably go to a Data Warehouse.  

Start by proposing and exploring different options and write up the pros and cons.  

Create a demonstration project that takes into account security, levels of access, and security of PII data if it exists. 

Difficulty: Minor
Project size: ~350 hour (large)
Potential mentors:
James Dailey, mail: jdailey (at) apache.org
Project Devs, mail: dev (at) fineract.apache.org
Fineract Backoffice Interface

Front end application MVP (POC)

No one should work on this specific ticket unless assigned - the GSOC candidate we choose will be assigned this ticket.  

For more information, you should be reviewing emails on this subject and following the Wiki pages. 
https://lists.apache.org/list.html?dev@fineract.apache.org
https://cwiki.apache.org/confluence/display/FINERACT/GSOC+Program+at+Fineract 

Build a simple self-service front end that talks to the Self-Service API

We need a new, user-friendly front end app that connects to our Backend for Front end (Self-Service API component) This will be the “customer portal” experience where users can log in, see their accounts, and check recent activity. It should be straightforward, easy to use, and a good reference example for others to build on.  

Functionality needed would include:  

  • Login
  • Check balances
  • Transfer between accounts owned by the same customer.  
  • Submit application for a new loan 

Testing end to end required. 
Solid UI design 
Modern app framework 
Documentation 

To enable a more comprehensive Fineract project, there will be a new administrative backend User Interface (UI) component.  It will be a separate GitHub repository within the Apache Fineract project.  

It will be aimed explaining the key functionality of fineract to devs and to act as the demo infrastructure.  It will be aimed at being downloaded as part of the Docker container from the ASF, for example.  

It should include, for the system user and dev, a page showing all of the APIs organized in a sensible way, and generated automatically at each build.  

This back office component is NOT THE SAME as the end-user POC that is proposed in https://issues.apache.org/jira/browse/FINERACT-2440  

This does overlap partially with external open source projects that are offered under different licenses.  However, this will be apache 2.0 license.  

This project will use Angular.  

This project should re-imagine the Fineract use cases in a way that is visually simple, distinct, and relates to the several user groups that we see in the project:  Fintechs, embedded lending programs, non banking financial institutions (lenders), small banks, etc

Use cases will include, but not be limited to: 

  • login and select user type
  • configure other users 
  • set up a new loan product 
  • disburse a loan 
  • create a savings account 
  • configure global variables 
  • run dashboards 

    Difficulty: Minor
    Project size: ~350 hour (large)
    Potential mentors:
    James Dailey, mail: jdailey (at) apache.org
    Project Devs, mail: dev (at) fineract.apache.org
    Front end application MVP (POC)

    Create a new backend for front end component POC

    Note:  GSOC applicants - this is a "draft concept".   Do not work on your proposal until we kick off the process at Fineract for evaluating.  We may significantly edit this concept or create new ones to replace it.  

    No one should work on this specific ticket unless assigned - the GSOC candidate we choose will be assigned this ticket.  

    For more information, you should be reviewing emails on this subject and following the Wiki pages. 
    https://lists.apache.org/list.html?dev@fineract.apache.org
    https://cwiki.apache.org/confluence/display/FINERACT/GSOC+Program+at+Fineract 

    Build a

    simple self-service front end that talks to the Self-Service API

    We need a new, user-friendly front end app that connects to our Backend for Front end (Self-Service API component) This will be the “customer portal” experience where users can log in, see their accounts, and check recent activity. It should be straightforward, easy to use, and a good reference example for others to build on.  

    Functionality needed would include:  

    • Login
    • Check balances
    • Transfer between accounts owned by the same customer.  
    • Submit application for a new loan 

    Testing end to end required. 
    Solid UI design 
    Modern app framework 
    Documentation 

    Self-Service API Component that Connects to Apache Fineract

    When the project removed self-service APIs in 2025, it did so understanding that we would need an outside component to make that connection as part of an overall solution. 

    This project is to create - as a Proof of Concept (POC) - a new dedicated Self-Service API component or service that integration with Fineract backend.  It will need to expose APIs to consumer facing applications for typical activities like viewing account balances, transaction initiation, loan application, etc.  

    The idea is for GSOC candidates to propose a design and build the POC. 

    Minimal criteria include testing, authentication methodology, documentation.  

    Not included in this GSOC would be the end consumer APP, although that may be undertaken by another project and coordination would be needed. 

    Difficulty: Minor
    Project size: ~350 hour (large)
    Potential mentors:
    James Dailey, mail: jdailey (at) apache.org
    Project Devs, mail: dev (at) fineract.apache.org

    Create a new backend for front end component POC

    Note:  GSOC applicants - this is a "draft concept".   Do not work on your proposal until we kick off the process at Fineract for evaluating.  We may significantly edit this concept or create new ones to replace it.  

    No one should work on this specific ticket unless assigned - the GSOC candidate we choose will be assigned this ticket.  

    For more information, you should be reviewing emails on this subject and following the Wiki pages. 
    https://lists.apache.org/list.html?dev@fineract.apache.org
    https://cwiki.apache.org/confluence/display/FINERACT/GSOC+Program+at+Fineract 

    Build a Self-Service API Component that Connects to Apache Fineract

    When the project removed self-service APIs in 2025, it did so understanding that we would need an outside component to make that connection as part of an overall solution. 

    This project is to create - as a Proof of Concept (POC) - a new dedicated Self-Service API component or service that integration with Fineract backend.  It will need to expose APIs to consumer facing applications for typical activities like viewing account balances, transaction initiation, loan application, etc.  

    The idea is for GSOC candidates to propose a design and build the POC. 

    Minimal criteria include testing, authentication methodology, documentation.  

    Not included in this GSOC would be the end consumer APP, although that may be undertaken by another project and coordination would be needed. 

    Difficulty: Minor
    Project size: ~350 hour (large)
    Potential mentors:
    James Dailey, mail: jdailey (at) apache.org
    Project Devs, mail: dev (at) fineract.apache.org

    New command processing infrastructure

    Background and Motivation

    Fineract accumulated some technical debt over the years. One area that is implicated is type-safety of internal and external facing APIs, the most prominent of which is Fineract's REST API. In general the package layout of the project reflects a more or less classic layered architecture (REST API, data transfer/value objects, business logic services, storage/repositories). The project predates some of the more modern frameworks and best practices that are available today and on occasions the data structures that are exchanged offer some challenges (e.g. generic types). Fineract's code base reflects that, especially where JSON de-/serialization is involved. Nowadays, this task would be simply delegated to the Jackson framework, but when Fineract (Mifos) started the decision was made to use Google's GSON library and create handcrafted helper classes to deal with JSON parsing. While this provided a lot of flexibility this approach had some downsides:

    • the lowest common denominator is the string type (aka JSON blob); this is where we lose the type information
    • the strings are transformed into JSONObjects; a little bit better than raw strings, but barely more than a hash map
    • a ton of "magic" strings are needed to get/set values
    • this approach makes refactoring unnecessarily more difficult
    • to be able to serve an OpenAPI descriptor (as JSON and YAML) we had to re-introduce the type information at the REST API level with dummy classes that contain only the specified attributes; those classes are only used with the Swagger annotations and no were else
    • some developers skipped the layered architecture and found it too tedious to maintain DTOs and JSON helper classes, and as a result just passed JSONObjects right to the business logic layer
    • now the business logic is unnecessarily aware of how Fineract communicates to the outside world and makes replacing/enhancing the communication protocol (e.g. with GRPC) pretty much impossible

    The list doesn't end here, but in the end things boil down to two main points:

    • poor developer experience: boilerplate code and missing type safety cost more time
    • bugs: the more code the more likely errors get introduced, especially when type safety is missing and we have to rely on runtime errors (vs. compile time).

    There has been already some preparatory work done concerning type safety, but until now we avoided dealing with the real source of this issue. Fineract's architectures devises read from write requests ("CQRS", https://martinfowler.com/bliki/CQRS.html) for improved scalability.

    The read requests are not that problematic, but all write requests pass through a component/service that is called "SynchronousCommandProcessingService. As the name suggests the execution of business logic is synchronous (mostly) due to this part of the architecture. This is not necessarily a problem (not immediately at least), but it's nevertheless a central bottleneck in the system. Even more important: this service is responsible to route

    New command processing infrastructure

    Background and Motivation

    Fineract accumulated some technical debt over the years. One area that is implicated is type-safety of internal and external facing APIs, the most prominent of which is Fineract's REST API. In general the package layout of the project reflects a more or less classic layered architecture (REST API, data transfer/value objects, business logic services, storage/repositories). The project predates some of the more modern frameworks and best practices that are available today and on occasions the data structures that are exchanged offer some challenges (e.g. generic types). Fineract's code base reflects that, especially where JSON de-/serialization is involved. Nowadays, this task would be simply delegated to the Jackson framework, but when Fineract (Mifos) started the decision was made to use Google's GSON library and create handcrafted helper classes to deal with JSON parsing. While this provided a lot of flexibility this approach had some downsides:

    • the lowest common denominator is the string type (aka JSON blob); this is where we lose the type information
    • the strings are transformed into JSONObjects; a little bit better than raw strings, but barely more than a hash map
    • a ton of "magic" strings are needed to get/set values
    • this approach makes refactoring unnecessarily more difficult
    • to be able to serve an OpenAPI descriptor (as JSON and YAML) we had to re-introduce the type information at the REST API level with dummy classes that contain only the specified attributes; those classes are only used with the Swagger annotations and no were else
    • some developers skipped the layered architecture and found it too tedious to maintain DTOs and JSON helper classes, and as a result just passed JSONObjects right to the business logic layer
    • now the business logic is unnecessarily aware of how Fineract communicates to the outside world and makes replacing/enhancing the communication protocol (e.g. with GRPC) pretty much impossible

    The list doesn't end here, but in the end things boil down to two main points:

    • poor developer experience: boilerplate code and missing type safety cost more time
    • bugs: the more code the more likely errors get introduced, especially when type safety is missing and we have to rely on runtime errors (vs. compile time).

    There has been already some preparatory work done concerning type safety, but until now we avoided dealing with the real source of this issue. Fineract's architectures devises read from write requests ("CQRS", https://martinfowler.com/bliki/CQRS.html) for improved scalability.

    The read requests are not that problematic, but all write requests pass through a component/service that is called "SynchronousCommandProcessingService. As the name suggests the execution of business logic is synchronous (mostly) due to this part of the architecture. This is not necessarily a problem (not immediately at least), but it's nevertheless a central bottleneck in the system. Even more important: this service is responsible to route incoming commands to their respective handler classes which in turn execute functions on one or more business logic services. The payload of these commands are obviously not always the same... which is the main reason why we decided to use the lowest common denominator to be able to handle these various types and rendered all payloads as strings. This compromise bubbles now up in the REST API and the business logic layers (and actually everything in between).

    Over the years we've also added additional features (e.g. idempotency guarantees for incoming write requests) that make it now very hard to reason about the execution flow. Testing the performance impact of such additions to the critical execution path even can't be properly measured. Note: the current implementation of idempotency relies on database lookups (quite often, for each incoming request) and none of those queries are cached. If we wanted to store already processed requests (IDs) in a faster system (let's Redis) then this can't be done without major refactoring.

    In conclusion, if we really want to fix those issues that are not only cosmetic and affect the performance and the developer experience equally then we urgently need to fix the way how we process write requests aka commands.

    Target Personas

    • developers
    • integrators
    • end users
    • BaaS

    Goals

    • new command processing will run independently next to the legacy mechanics
    • self contained
    • fully tested
    • ensure that the REST API is 100% backward compatible
    • try to contain the migration and make it as easy as possible for the community to integrate those changes
    • introduce types where needed and migrate the (old) JAX-RS REST resource classes to Spring Web MVC (better performance and better testability)
    • introduce DTOs if not already available and make sure if they exist that they are not outdated
    • assemble one DTO as command payload from all incoming REST API parameters (headers, query/path paramters, request bodies)
    • annotate attributes in the DTOs with Jakarta Validation annotations to enforce constraints on their values
    • wired REST API to the new command processing, one service at a time/pull request
    • take a non-critical service (like document management) and migrate it to the new command processing mechanics from top (REST API) to bottom (business logic service)
    • refactor command handlers to new internal API
    • make sure that the business service logic classes/functions take only one DTO request input parameter (aka don't let a function have 12 input parameters of type string...)
    • when all integration tests run successfully then remove all legacy boilerplate code that is not used anymore
    • make an ordered list of modules/features (easiest, lowest hanging fruit first)
    • maintain at least the same performance as the current implementation
    • optional: improve performance if it can be done in a reasonable time frame
    • optional: improve resilience if it can be done in a reasonable time frame

    Non-Goals

    • current command processing will stay untouched, will run independently of new infrastructure
    • don't try cleaning up the storage layer; that's a separate effort for later (type safe queries, query peformance, clean entity classes)
    • maker-checker is tightly coupled in the current command processing implementation upstream; this is a separate concern for a separate proposal (domains: security, workflow)
    • doesn't need to be optimized for speed immediately
    • no changes in the integration tests

    Proposed API Changes

    Command Wrapper

    Class contains some generic attributes like:

    • username
    • tenant ID
    • timestamp

    The actual payload (aka command input parameters) are defined as a generic parameter "payload". It is expected that the modules implement classes that introduce the payload types and inherit from the abstract command class.

    Command Processing Service

    Three performance levels are configurable via application.properties

    • synchronously (required): this is pretty much as we do right now (use virtual threads optionally)
    • asynchronously (optional): with executor service and completable futures (use virtual threads optionally)
    • non-blocking (optional): high performance LMAX Disruptor non-blocking implementation

    These different performance level implementations need to be absolute drop-in replacements (for each other). It is expected that more performant implementations need more testing due to increased complexity and possible unforeseen side effects (thread local variables, transactions). In case any problems show up we can always roll back to the required default implementation (synchronous).

    NOTE: we should consider providing a command processing implementation based on Apache Camel once this concept is approved and we migrated already a couple of services. They are specialized for exactly this kind of use cases and have more dedicated people working on it's implementation. Could give more flexibility without us needing to maintain code.

    Middlewares

    TBD

    Command Handlers

    TBD

    References to users (aka AppUser)

    Keep things lightweight and only reference users by their user names.f

    Risks

    TBD

    • feature creep

    ETA

    The module has been created and merged upstream ("fineract-command"). You can try things out locally with these commands:

    ./gradlew :fineract-command:build
    ./gradlew :fineract-command:jmh

    Diagrams

    TBD

    Related Jira Tickets

    Difficulty: Critical
    Project size: ~350 hour (large)
    Potential mentors:
    Aleksandar Vidakovic, mail: aleks (at) apache.org
    Project Devs, mail: dev (at) fineract.apache.org

    fineract-client-feign usage for integration tests

    s implementation. Could give more flexibility without us needing to maintain code.

    Middlewares

    TBD

    Command Handlers

    TBD

    References to users (aka AppUser)

    Keep things lightweight and only reference users by their user names.f

    Risks

    TBD

    • feature creep

    ETA

    The module has been created and merged upstream ("fineract-command"). You can try things out locally with these commands:

    ./gradlew :fineract-command:build
    ./gradlew :fineract-command:jmh

    Diagrams

    TBD

    Related Jira Tickets

    Difficulty: Critical
    Project size: ~350 hour (large)
    Potential mentors:
    Aleksandar Vidakovic, mail: aleks (at) apache.org
    Project Devs, mail: dev (at) fineract.apache.org

    Fineract Backoffice Interface (POC)

    To enable a more comprehensive Fineract project, there will be a new administrative backend User Interface (UI) component.  It will be a separate GitHub repository within the Apache Fineract project.  

    It will be aimed explaining the key functionality of fineract to devs and to act as the demo infrastructure.  It will be aimed at being downloaded as part of the Docker container from the ASF, for example.  

    It should include, for the system user and dev, a page showing all of the APIs organized in a sensible way, and generated automatically at each build.  

    This back office component is NOT THE SAME as the end-user POC that is proposed in https://issues.apache.org/jira/browse/FINERACT-2440  

    This does overlap partially with external open source projects that are offered under different licenses.  However, this will be apache 2.0 license.  

    This project will use Angular.  

    This project should re-imagine the Fineract use cases in a way that is visually simple, distinct, and relates to the several user groups that we see in the project:  Fintechs, embedded lending programs, non banking financial institutions (lenders), small banks, etc

    Use cases will include, but not be limited to: 

    • login and select user type
    • configure other users 
    • set up a new loan product 
    • disburse a loan 
    • create a savings account 
    • configure global variables 
    • run dashboards 
    Difficulty: Minor
    Project size: ~350 hour (large)
    Potential mentors:
    James Dailey, mail: jdailey (at) apache.org
    Project Devs, mail: dev (at) fineract.apache.org

    fineract-client-feign usage for integration tests

    No one should work on this specific ticket unless assigned - the GSOC candidate we choose will be assigned this ticket.  

    For more information, you should be reviewing emails on this subject and following the Wiki pages. 
    https://lists.apache.org/list.html?dev@fineract.apache.org
    https://cwiki.apache.org/confluence/display/FINERACT/GSOC+Program+at+Fineract 


    "Moving away from RestAssured (low-level) API calls in integration tests and rather use fineract-client-feign would be a great improvement" 

    Summary (with some assist from chatgpt for clarity) 

    Apache Fineract has a large set of REST APIs and many integration tests currently call those APIs using RestAssured(low-level HTTP requests). This ticket is to help modernize the tests by switching them to use fineract-client-feign, which is Fineract’s higher-level API client. 

    Goal

    Create a simple migration approach and then migrate a small set of integration tests from RestAssured to fineract-client-feign.

    Why we’re doing this

    • Makes tests easier to read and maintain (less raw HTTP code).
    • Encourages consistent API usage across tests.
    • Reduces duplicated request-building logic (headers, base URLs, auth, etc.).

    Scope of Work

    1) Create a short migration plan

    Write a short note (in the Jira ticket comments or a small doc) that answers:

    • Where are the current RestAssured-based integration tests located?
    • What’s the recommended pattern for using fineract-client-feign in tests?
    • What should be migrated first (start small)?

    2) Pick a small “starter set” of tests

    Identify 2–5 integration tests that:

    • Are simple (e.g., create/read/update a resource)
    • Don’t involve complicated multi-step workflows
    • Run reliably in CI

    3) Implement the migration for the starter set

    For each selected test:

    • Replace RestAssured calls with fineract-client-feign client calls
    • Keep the same assertions (same expected behavior)
    • Ensure the tests still pass locally and in CI

    4) Document the new pattern

    Add a short README note or comments in the test code showing:

    • How to initialize/configure the Feign client for tests
    • How auth/session is handled
    • A small “before vs after” explanation (1 paragraph is enough)

    Acceptance Criteria

    • A brief migration plan is written and linked in the ticket.
    • At least 2 integration tests have been converted to use fineract-client-feign.
    • All tests pass (locally and/or in CI).
    • A short note exists explaining how to write future integration tests using fineract-client-feign.

    Notes / Hints for a beginner

    • Start by converting just one very small test to learn the pattern.
    • Keep changes small and easy to review (one test per commit is ideal).
    • If something is unclear (e.g., how auth is set up), add a comment in the ticket describing what you found.

    Out of Scope (for this ticket)

    • Migrating all integration tests across the repo
    • Refactoring production API code
    • Changing API behavior—this is only a test client swap
    Difficulty: Minor
    Project size: ~350 hour (large)
    Potential mentors:
    James Dailey, mail: jdailey (at) apache.org
    Project Devs, mail: dev (at) fineract.apache.org

    Change our current, unmaintained Avro schema generation gradle plugin

    Current gradle plugin which is used to generate classes based on avro schema files is unmaintained...


    We should find and start using an alternative solution:

    1. Bakdata Avro

    https://plugins.gradle.org/plugin/com.bakdata.avro 

    2. Eventloop software

    https://central.sonatype.com/artifact/eu.eventloopsoftware.avro-gradle-plugin/eu.eventloopsoftware.avro-gradle-plugin.gradle.plugin/versions

    3. Martin's Java code

    https://github.com/martinsjavacode/avro-gradle-plugin


    We need to investigate which would be the best choice of these and make the necessary changes.


    Acceptance criteria

    • Current avro generation gradle plugin to be changed
      • Due to EOL and unmaintained
    • The new plugin must provide the same functionalities and resulted classes
      • Requests
      • Responses
      • Methods
    Difficulty: Major

    No one should work on this specific ticket unless assigned - the GSOC candidate we choose will be assigned this ticket.  

    For more information, you should be reviewing emails on this subject and following the Wiki pages. 
    https://lists.apache.org/list.html?dev@fineract.apache.org
    https://cwiki.apache.org/confluence/display/FINERACT/GSOC+Program+at+Fineract 

    "Moving away from RestAssured (low-level) API calls in integration tests and rather use fineract-client-feign would be a great improvement" 

    Summary (with some assist from chatgpt for clarity) 

    Apache Fineract has a large set of REST APIs and many integration tests currently call those APIs using RestAssured(low-level HTTP requests). This ticket is to help modernize the tests by switching them to use fineract-client-feign, which is Fineract’s higher-level API client. 

    Goal

    Create a simple migration approach and then migrate a small set of integration tests from RestAssured to fineract-client-feign.

    Why we’re doing this

    • Makes tests easier to read and maintain (less raw HTTP code).
    • Encourages consistent API usage across tests.
    • Reduces duplicated request-building logic (headers, base URLs, auth, etc.).

    Scope of Work

    1) Create a short migration plan

    Write a short note (in the Jira ticket comments or a small doc) that answers:

    • Where are the current RestAssured-based integration tests located?
    • What’s the recommended pattern for using fineract-client-feign in tests?
    • What should be migrated first (start small)?

    2) Pick a small “starter set” of tests

    Identify 2–5 integration tests that:

    • Are simple (e.g., create/read/update a resource)
    • Don’t involve complicated multi-step workflows
    • Run reliably in CI

    3) Implement the migration for the starter set

    For each selected test:

    • Replace RestAssured calls with fineract-client-feign client calls
    • Keep the same assertions (same expected behavior)
    • Ensure the tests still pass locally and in CI

    4) Document the new pattern

    Add a short README note or comments in the test code showing:

    • How to initialize/configure the Feign client for tests
    • How auth/session is handled
    • A small “before vs after” explanation (1 paragraph is enough)

    Acceptance Criteria

    • A brief migration plan is written and linked in the ticket.
    • At least 2 integration tests have been converted to use fineract-client-feign.
    • All tests pass (locally and/or in CI).
    • A short note exists explaining how to write future integration tests using fineract-client-feign.

    Notes / Hints for a beginner

    • Start by converting just one very small test to learn the pattern.
    • Keep changes small and easy to review (one test per commit is ideal).
    • If something is unclear (e.g., how auth is set up), add a comment in the ticket describing what you found.

    Out of Scope (for this ticket)

    • Migrating all integration tests across the repo
    • Refactoring production API code
    • Changing API behavior—this is only a test client swap
    Difficulty: Minor
    Project size: ~350 hour (large)
    Potential mentors:
    James DaileyAdam Saghy, mail: jdailey adamsaghy (at) apache.org
    Project Devs, mail: dev (at) fineract.apache.org

    Apache NuttX

    Add support to ESP Hosted on NuttX

    ESP Hosted is a firmware that allows ESP32xx modules shared WiFi and BLE with the host OS, like Linux, RTOS or even some baremetal MCU.

    Add ESP Hosted support on NuttX will allow any platform supported by NuttX to WiFi and/or BLE from ESP32xx modules.

    More info: https://github.com/espressif/esp-hosted

    Difficulty: Major
    Project size: ~350 hour (large)
    Potential mentors:
    Alan Carvalho de Assis, mail: acassis (at) apache.org
    Project Devs, mail: dev (at) nuttx.apache.org

    ...

    Make Wayang more datalake-friendly

    Background

    Apache Wayang is a cross-platform data processing framework that allows users to execute analytics pipelines across multiple heterogeneous execution engines such as Apache Spark, Apache Flink, and relational database systems. Wayang’s optimizer automatically selects where to execute a pipeline and enables hybrid pipelines where part of it can be executed in one platform and part of it in another.

    Wayang’s architecture is built around a pluggable backend model. Each execution engine is integrated via a dedicated backend implementation that translates Wayang’s logical operators into engine-specific physical operators.

    Current execution engines (platforms) that Wayang supports include: JDBC-based databases, Spark, Flink, Tensorflow, Giraph. 

    Project Goal

    Design and implement one or more new execution engine backends to enable Apache Wayang to work in data lake environments.

    Potential target engines include (depending on feasibility and community discussion):

    • Apache Datafusion
    • Trino / Presto
    • Dremio
    • BigQuery

    The project includes:

    • Implementing the backend abstraction layer,
    • Mapping Wayang logical operators to the new engine’s execution model,
    • Integrating cost estimation for the optimizer.

    Difficulty: Medium
    Project size: Depends on the number of platforms. It can be 175 (part-time) or ~350 hours (full-time)
    Potential mentors:

    • Zoi Kaoudi — zkaoudi (at) apache.org
    • Juri Petersen — juri (at) apache.org
    • Community — dev (at) wayang.apache.org
    Difficulty: Major
    Project size: ~350 hour (large)
    Potential mentors:
    Zoi Kaoudi, mail: zkaoudi (at) apache.org
    Project Devs, mail: dev (at) wayang.apache.org

    Mahout


    Add ZZFeatureMap Encoding for QDP

    Backgroud

    ZZFeatureMap is the most widely-used data encoding in quantum machine learning. It's the default in Qiskit and PennyLane for quantum kernel methods and variational classifiers.

    QDP currently supports amplitude, angle, basis, and IQP encodings. Adding ZZFeatureMap completes our QML encoding suite.

    What is ZZFeatureMap?

    Maps classical features to quantum states using:
    1. Hadamard gates (superposition)
    2. RZ gates (single-qubit rotations)
    3. ZZ interactions (two-qubit entanglement)
    4. Repetition layers for expressivity

    Tracked github issue

    https://github.com/apache/mahout/issues/1008

    Difficulty: Major
    Project size: ~350 hour (large)
    Potential mentors:
    Ryan Huang, mail: hcr (at) apache.org
    Project Devs, mail: dev (at) mahout.apache.org

    ...

    Apache Beam Python SDK native streaming transforms

    Background


    Apache Beam is a unified programming model for user developing data processing pipelines capable running in distributed systems. Apache Beam SDK officially supports Java, Python, and Go. While Java SDK was historically dominant, Python SDK is increasingly popular thanks to Beam ML. Python APIs are crucial for developers. We plan to port highly anticipated basic streaming transforms made convenient for Beam Python developers.

    Tasks


    1. Python UnboundedSource (https://github.com/apache/beam/issues/19137)


    While Splittable DoFn has been introduced as a Beam primitive transform handling IO sources, UnboundedSource arguably remains an easier API for users to author their own IOs. In the Java SDK, UnboundedSource/UnboundedReader has been (re)implemented as a wrapper of Splittable DoFn, we can follow the Java implementation and add it to Python.


    Stretch goal: implement a native Python streaming IO based on UnboundedSource.


    2. Python Watch Transform (https://github.com/apache/beam/issues/21521)


    Currently we have a Watch transform in the Java SDK that is very useful when periodically polling for new input to a pipeline. We would like a parallel transform in Python.


    Stretch goal: Update Python FileIO.readContinuously to use watch transform


    Deliverables


    • Implementation of Python UnboundedSource: A functional wrapper API for UnboundedSource and UnboundedReader built on Splittable DoFn (a merged pull request to the Apache Beam repo).
    • Implementation of Python Watch Transform: A parallel transform to the Java Watch API for periodic polling (a merged pull request to the Apache Beam repo).
    • Unit and Integration Tests: tests for both features, specifically covering watermarks, checkpointing, and polling termination conditions.
    • User Documentation: Updated SDK guides and Docstrings explaining how to author custom IOs using UnboundedSource and how to use the Watch transform in pipelines.
    • Refactored FileIO.readContinuously (Stretch Goal): A pull request updating FileIO.read_continuously to utilize the new Watch transform logic.

    Recommended Skills

    • Proficiency in Python, experience with pytest
    • Java-to-Python Porting: Ability to read and interpret Java source code
    • Version control: Git, development with GitHub
    • nice to have: exposure to streaming data processing tools (e.g. Apache Beam/Flink/Spark, etc)
    Difficulty: Major
    Project size: ~350 hour (large)
    Potential mentors:
    Yi Hu, mail: yhu (at) apache.org
    Project Devs, mail: dev (at) beam.apache.org

    DolphinScheduler


    Apache DolphinScheduler Embedding the AlertServer into the API Server

    Apache DolphinScheduler

    Apache DolphinScheduler is a distributed and extensible workflow scheduler platform with powerful DAG visual interfaces, dedicated to solving complex job dependencies in the data pipeline and providing various types of jobs available out of box.

    Website: https://dolphinscheduler.apache.org/en-us/index.html

    GitHub: https://github.com/apache/dolphinscheduler

    Linked GitHub Issue: https://github.com/apache/dolphinscheduler/issues/8975


    Background

    Currently, DolphinScheduler requires a separate alert-server to handle workflow and task alerts. Although the alert-server is lightweight, maintaining and deploying it separately adds operational complexity.

    We aim to remove the standalone alert-server and embed its alerting functionality directly into the API server.

    Task

    Integrate the alert-server functionality into the API server so that it can handle workflow and task alerts natively.

    Deliverables

    • Remove the standalone alert-server.
    • Enable the API server to handle all alerting tasks.
    • Add Integration test case.

    Recommended Skills

    • Proficiency in Java.
    • Familiarity with microservice, e.g. spring-boot.
    • Familiarity with DolphinScheduler’s architecture and alerting mechanisms is a plus.

    Mentors


    Difficulty: Major
    Project size: ~350 hour (large)
    Potential mentors:
    Wenjun Ruan, mail: wenjun (at) apache.org
    Project Devs, mail: dev (at) dolphinscheduler.apache.org

    ...

    Apache SkyWalking Natural Language to BydbQL

    Background

    BanyanDB is the native storage engine for Apache SkyWalking, designed specifically for observability data (Traces, Metrics, and Logs). It utilizes its own query language, BydbQL, which is SQL-like but optimized for time-series and observability schemas. While BydbQL is powerful, non-expert users or SREs in high-pressure situations may find it difficult to construct complex queries for specific traces or aggregated metrics.

    The goal of this project is to build an Intelligent Query Agent that leverages Large Language Models (LLMs) to translate Natural Language (NL) into valid BydbQL.

    Tasks

    • Schema-Aware Prompting: Develop a mechanism to extract BanyanDB metadata (Groups, Streams, Measures, Tag Families) and feed it into the LLM context (RAG - Retrieval-Augmented Generation).
    • N2SQL Implementation: Adapt state-of-the-art "Natural Language to SQL" (NL2SQL) techniques to the specific syntax and constraints of BydbQL.
    • Verification Loop: Integrate the agent with the existing BydbQL parser to validate generated queries before execution.
    • CLI/UI Integration: Implement a "chat" interface or an --ask flag in bydbctl (the BanyanDB CLI tool) to allow users to query data via plain English (e.g., "Show me the top 5 slowest services in the last hour").

    Requirements

    • Proficiency in Go (BanyanDB's primary language).
    • Experience with LLM APIs (OpenAI, Gemini, or local models via Ollama) and orchestration frameworks (LangChain, LangGraph).
    • Understanding of Compiler Front-ends (Lexing, Parsing, AST).
    Difficulty: Major
    Project size: ~350 hour (large)
    Potential mentors:
    Hongtao Gao, mail: hanahmily (at) apache.org
    Project Devs, mail: dev (at) skywalking.apache.org

    IoTDB


    Compatible with TPU & integrate SOTA time series foundation models for IoTDB-AINode

    Background

    Apache IoTDB is a high-performance, IoT-native time-series database designed to manage massive volumes of time-series data generated by industrial IoT devices. It addresses challenges including high ingestion rates, complex out-of-order data handling, and real-time analytical requirements. IoTDB-AINode represents an endogenous node type in the IoTDB ecosystem, extending the database with native machine learning capabilities. IoTDB-AINode enables seamless integration of time series machine learning algorithms directly within the database engine, allowing users to register, manage, and execute inference tasks using simple SQL statements (e.g., CREATE MODEL ..., SELECT * FROM FORECAST (...)). This architecture eliminates costly data migration to external ML platforms, accelerates processing pipelines, and enhances data security by keeping computations close to the data. Currently, AINode includes built-in time series foundation models such as the Timer and Chronos for time series forecasting task.
    Tensor Processing Units (TPUs) are Google-developed AI accelerators specifically designed for neural network computations. Offering high-throughput matrix operations and energy efficiency, TPUs provide a compelling alternative to GPUs for deploying large foundation models. PyTorch/XLA enables PyTorch models to leverage TPU hardware through the XLA (Accelerated Linear Algebra) compiler, supporting both single-device and distributed training scenarios.
    Time Series Foundation Models have emerged as powerful tools for temporal analysis. These models demonstrate superior performance across diverse domains—from industrial sensor data to financial forecasting—making them ideal candidates for integration into IoTDB's analytical pipeline.

    Goal

    This project aims to enhance IoTDB-AINode with TPU hardware acceleration capabilities and integrate cutting-edge time series foundation models into the database's model inference pipeline. Specifically, the project will: 

    • Enable IoTDB-AINode to recognize and leverage Google TPU devices for model deployment and inference.
    • Adapt the AINode packaging and compilation workflow (Maven/Java and Poetry/Python) to support TPU-specific releases.
    • Survey and integrate 1-2 SOTA time series foundation models (e.g., TimesFM) into AINode's SQL-accessible model registry.
    • Establish comprehensive CI pipelines for TPU environments to ensure long-term maintainability.

    The ultimate outcome will empower IoTDB users to execute high-performance time series analysis on TPU hardware using state-of-the-art foundation models through simple SQL interfaces, significantly enhancing the database's analytical capabilities for industrial AI applications.

    Core Tasks(Mandatory)

    1. TPU Adaptation. Implement TPU device recognition and tensor management within the AINode Python runtime. This involves:
      1. Integrating PyTorch/XLA (torch_xla) to detect available TPU devices during AINode initialization.
      2. Implementing device abstraction layers to handle model loading and tensor operations on TPU hardware.
      3. Ensuring automatic fallback mechanisms to CPU/GPU when TPU is unavailable.
    2. Packaging for TPU Version. Extend the existing build infrastructure to support TPU-enabled distributions:
      1. Update Poetry configuration to manage PyTorch/XLA and TPU-specific Python dependencies.
      2. Create automated packaging scripts that bundle XLA compilers and TPU runtime libraries.
      3. Ensure the TPU version can be deployed directly in Google Cloud TPU environments and on-premise TPU pods without manual dependency resolution.
    3. Model Survey. Conduct a comprehensive technical survey of SOTA time series foundation models available at project commencement. The deliverable will be a technical document analyzing each model's architecture, input requirements, computational complexity, zero-shot capabilities, and suitability for IoTDB's SQL-based inference pipeline. The survey will conclude with a justified selection of 1–2 models for integration based on deployability, inference latency, licensing, and compatibility with IoTDB’s SQL-based workflow.
    4. Model Integration. Integrate 1-2 selected foundation models into IoTDB-AINode's model inference framework:
      1. Implement model wrappers conforming to AINode's model registration interface.
      2. Adapt models to process IoTDB's time series data format.
      3. Ensure compatibility with AINode's inference pipeline, supporting SQL syntax such as SELECT * FROM FORECAST (...).
      4. Support both built-in model usage and custom model registration for integrated architectures.
    5. Integration Testing & CI. Establish robust testing infrastructure for TPU functionality:
      1. Design and implement integration tests covering device detection, model loading, tensor operations, and end-to-end inference workflows.
      2. Build TPU-specific CI environments using Google Cloud TPUs or TPU simulators.

    Advanced Tasks (Optional)

    • Distributed Large Model Deployment. As an optional stretch goal, this task explores distributed deployment of large time series foundation models across multiple TPU devices. This involves:
      • Enabling distributed inference where large models are partitioned across TPU pods.
      • Developing SQL extensions to specify distributed compute resources (e.g., LOAD MODEL ... TO DEVICES ...).
      • Optimizing communication patterns between DataNodes and AINode for high-throughput industrial scenarios involving thousands of time series streams.

    Deliverables

    1. Fully Functional Source Code.
      1. Pull requests to Apache IoTDB repository containing TPU adaptation modules.
      2. Integration code for SOTA time series foundation models.
      3. Extended build configurations (Maven/Poetry/PyInstaller) supporting TPU distributions.
    2. Comprehensive Integration Tests.
      1. Automated test suites for TPU device detection and model execution.
      2. CI pipeline configurations for TPU environments.
    3. User Documentation.
      1. Deployment guide for TPU-enabled AINode (e.g. Google Cloud TPU).
      2. SQL reference extensions for new model types and TPU-specific configuration options.
      3. Tutorial documentation demonstrating time series analysis workflows using the integrated foundation models.

    Recommended Skills

    • Python >= 3.11. Including asynchronous programming and ML pipeline development.
    • Poetry & PyInstaller. Experience with Python dependency management and executable packaging.
    • PyTorch. Known about the PyTorch/XLA integration for TPU support.
    • Java & Maven. Knowledge of multi-module Java projects, build profiles, and dependency management.

    Learning Material

     
    Difficulty: medium
    Mentor: Yongzao Dan (Apache IoTDB PMC Member) (yongzao@apache.org)

    Difficulty: Major
    Project size: ~175 hour (medium)
    Potential mentors:
    Yongzao Dan, mail: yongzao (at) apache.org
    Project Devs, mail: dev (at) iotdb.apache.org

    ...

    Author and Publish New Practical Guides for Apache Grails

    Author and Publish New Practical Guides for Apache Grails on https://guides.grails.org (will be moved to grails.apache.org soon)

    Background

    The Grails Guides provide step-by-step, hands-on tutorials with accompanying GitHub repositories containing initial and complete project states. They cover core topics GORM, testing, security, frontend integrations (Vue.js, React, Angular), Micronaut features, deployment (AWS, Google Cloud, GitHub Actions), and more.

    Existing guides are strong in foundational and some advanced areas but have gaps in:

    • Modern frontend setups
    • Broader cloud deployment
    • Current DevOps practices
    • Popular plugins/ecosystem updates

    Creating 5-10 high-quality, up-to-date guides would directly enhance this key learning resource, making Grails more approachable and demonstrating current best practices without requiring core framework changes.

    Project Goals

    1. Research & Plan Topics: Select 5-10 high-impact guide topics based on community needs (user list discussions, Slack feedback, gaps identified).
    2. Develop Guides: For each:
      • Build a complete, runnable Grails application example.
      • Create initial and complete GitHub repos following the standard template.
      • Write a clear, step-by-step Markdown guide with code snippets, explanations, and best-practice rationale.
    3. Test & Polish: Ensure guides work with the latest stable Grails (e.g., 7.x or 8.x series), include tests where relevant, and follow accessibility/Asciidoc formatting standards.
    4. Submit & Integrate: Open PRs to publish guides update any related docs or grails.org links.
    5. Optional Stretch Goals: Add video walkthroughs (if comfortable), create a "What's New in Recent Guides" summary blog post, or contribute minor improvements to existing guides.

    Suggested Guide Topics (prioritize with mentor input):

    • Building Modern Full-Stack Apps with Grails + React/Vite (or Vue/Vite) – Update/extend older profiles with current tooling.
    • Securing Grails APIs with JWT + OAuth2 (modern patterns, perhaps using Micronaut Security).
    • Deploying Grails Apps to the cloud
    • Advanced CI/CD
    • Performance Tuning
    • Using HTMX + Grails for Interactive UIs without Heavy Frontend Frameworks.

    Deliverables

    • 5-10 new published guides on https://guides.grails.org (each with its own GitHub repo under grails-guides).
    • Corresponding initial and complete source code repositories.
    • Well-structured Markdown/Asciidoc content with clear sections, screenshots/code blocks, and "Try it Yourself" instructions.
    • PRs reviewed and merged by mentors/community.
    • A short summary report or blog draft for the Grails blog announcing the new guides.
    • Documentation updates if needed (e.g., category additions on the guides index page).

    Quantifiable Results for the Apache Community:

    • Fresh, relevant content that attracts and retains new developers.
    • Reduced support burden on mailing lists/Slack by pointing users to modern tutorials.
    • Evergreen educational assets maintained by the community.

    Proposed Timeline (12-week program)

    • Community Bonding (May 2026): Join Grails Slack/mailing list, review existing guides, discuss topic priorities with mentors, fork/clone template repo, set up local build.
    • Weeks 1–2: Finalize 3–5 topics, create initial repos, outline guide structures.
    • Weeks 3–6: Implement and document first 2–3 guides (focus on core features, testing).
    • Weeks 7–9: Complete remaining guides, add polish (screenshots, edge-case notes), self-review for clarity.
    • Weeks 10–11: Submit PRs for review, incorporate feedback, test on latest Grails version.
    • Week 12: Final merges, any last tweaks, prepare announcement draft, evaluations.

    Required Skills

    • Solid understanding of Grails (create-app, domains, controllers, services, GSP/JSON views).
    • Experience with Groovy/Java and web basics (REST, security concepts).
    • Good technical writing (clear, concise explanations).
    • Git/GitHub proficiency (branching, PRs).
    • Nice-to-have: Familiarity with Asciidoc/Markdown, frontend tools (Vite, npm), or deployment platforms.

    Why This Project?

    This is a high-reward contribution that directly improves one of Grails' most visible learning resources. It's flexible, scope can adjust based on progress, and allows the student to master Grails while helping others. Similar documentation-focused GSoC projects have succeeded in many Apache projects.

    If Grails is accepted for GSoC 2026, this would be an excellent intermediate project. Interested students should contact the Grails dev mailing list or Slack early to discuss topics and secure a mentor. The community welcomes fresh guides to keep the framework vibrant!

     
    Difficulty: Medium
    Project size: ~350 hour (large)
    Potential mentors:
    James Fredley

    Difficulty: Major
    Project size: ~350 hour (large)
    Potential mentors:
    James Fredley, mail: jamesfredley (at) apache.org
    Project Devs, mail: dev (at) grails.apache.org

    Apache Fory


    Apache Fory Ruby Serialization

    Description:
    Apache Fory currently has no Ruby runtime, so Ruby services cannot participate in Fory xlang object exchange. This project implements Ruby xlang serialization with full wire compatibility to existing language runtimes, following the xlang specifications and issue #3379.

    Primary references:
    1. docs/specification/xlang_serialization_spec.md
    2. docs/specification/xlang_implementation_guide.md
    3. https://github.com/apache/fory/issues/3379

    Scope:
    1. Implement xlang binary format in Ruby runtime.
    2. Support schema-consistent mode and compatible mode with meta share and TypeDef.
    3. Implement registration model for numeric and named user types.
    4. Implement deterministic struct serialization rules required by spec.
    5. Implement reference tracking and reference flags behavior exactly per protocol.
    6. Implement meta string encoding and dedup semantics needed by named types and TypeDef.
    7. Provide cross-language interoperability with Java in both encode and decode directions.

    Expected outcomes:
    1. Ruby runtime package under ruby/ with serializer and deserializer for xlang protocol.
    2. Public API centered on Fory entry point with configuration and registration APIs.
    3. Core runtime modules for buffer, type resolver, ref resolver, meta string, TypeDef context, and field skipper.
    4. Serializer coverage for primitives, temporal types, list, set, map, arrays, structs, and unions.
    5. Struct DSL and schema metadata model for deterministic field ordering and stable schema behavior.
    6. Compatibility handling for unknown fields and unknown union alternatives via safe skip logic.
    7. Documentation for Ruby API usage, registration, schema evolution behavior, and constraints.

    Protocol requirements:
    1. Little-endian encoding for all multi-byte values.
    2. Correct xlang header bitmap handling for null, xlang, and oob flags.
    3. Exact reference flags and sequential reference ID assignment.
    4. Correct type ID encoding and user type ID handling.
    5. Correct namespace and type name metadata behavior for named types.
    6. Deterministic struct field ordering exactly aligned with spec.
    7. Meta string encoding and per-stream dedup behavior aligned with spec.

    Implementation phases:
    1. Phase 0: Ruby project skeleton, CI bootstrap, minimal smoke serialization path.
    2. Phase 1: Buffer, varint and zigzag utilities, header handling, reference resolver core.
    3. Phase 2: Primitive and temporal type support.
    4. Phase 3: Collections and arrays support.
    5. Phase 4: Type registry and schema-consistent struct serialization.
    6. Phase 5: Meta string encoding and dedup.
    7. Phase 6: Compatible mode and shared TypeDef.
    8. Phase 7: Union and extension type support.
    9. Phase 8: Performance hardening and allocation reduction.

    Testing and CI requirements:
    1. Add Ruby unit tests for protocol primitives, headers, references, and error handling.
    2. Add golden vector tests for primitives, string encodings, list/set/map headers, TypeDef, and unions.
    3. Add bidirectional interoperability tests:
       - Ruby write to Java read.
       - Java write to Ruby read.
    4. Add compatibility tests for schema evolution in compatible mode, including add/remove/reorder and unknown field skipping.
    5. Add tests for shared references, circular references, and ref tracking disabled behavior.
    6. Add negative tests for invalid varint, unknown type ID, truncated payload, and malformed TypeDef.
    7. Integrate Ruby lint and all Ruby xlang tests into CI so regressions fail CI automatically.

    Non-goals for initial delivery:
    1. Ruby-native non-xlang serialization format.
    2. Decimal support.
    3. Advanced runtime code generation in first iteration.

    Performance expectations:
    1. Keep hot serialization and deserialization paths allocation-conscious.
    2. Add fast paths for homogeneous collections where safe.
    3. Preserve protocol correctness while improving throughput and reducing allocations.

    Skills:
    Ruby, binary protocol implementation, serialization internals, cross-language compatibility testing, CI integration, performance optimization.

    Difficulty:
    Hard.

    Project size:
    Preferred 350 hours.

    Potential mentors:
    Chaokun Yang, Weipeng Wang.

    Source links:
    https://github.com/apache/fory/issues/3379
    https://github.com/apache/fory/blob/main/docs/specification/xlang_serialization_spec.md
    https://github.com/apache/fory/blob/main/docs/specification/xlang_implementation_guide.md
    https://github.com/apache/fory/tree/main/rust
    https://github.com/apache/fory/tree/main/java

    Difficulty: Major
    Project size: ~350 hour (large)
    Potential mentors:
    Chaokun Yang, mail: chaokunyang (at) apache.org
    Project Devs, mail: dev (at) fory.apache.org

    ...

    Apache Fluss (Incubating) Native RoaringBitmap Integration for Apache Fluss

    Synopsis

    Apache Fluss currently incorporates the BITMAP data type within its metadata layer, but it remains inaccessible to end-users as it is trapped in the UnsupportedKeyword enum. While the aggregation merge engine in Fluss 0.9 supports rbm32/rbm64 at the storage level, BITMAP is not yet a first-class type. Users must currently declare bitmap columns as BYTES.

    This GSoC project aims to enable end-to-end native support for the BITMAP data type to allow efficient server-side unique counting. By shifting the computational burden from the client side to the storage side, we can reduce network I/O and CPU utilization for high-cardinality DISTINCT-style aggregations. The project will introduce a proper BITMAP DDL type, SQL functions, and pushdown optimization via applyAggregates().

    Benefits to Community

    1. Network I/O Efficiency: With bitmap pushdown, only one serialized RoaringBitmap is transferred per group instead of all raw rows, reducing network cost from O(N) to O(G).

    2. CPU Utilization Reduction: Heavy unique counting computation is offloaded to the Fluss TabletServer's native merge engine, reducing Flink TaskManager CPU overhead.

    3. Ecosystem Interoperability: By using the standard RoaringBitmap binary serialization format, Fluss ensures bitmap data remains accessible to downstream consumers such as Flink, StarRocks, and Doris without requiring proprietary Fluss-specific headers or custom decoders.

    4. UV Analytics Optimization: Enables efficient Unique Visitor analytics workflows with pre-aggregated bitmap fragments that can be efficiently merged on the storage side.

    Deliverables

    The student will deliver the following components:

    1. Type System Enablement (fluss-common)

    • Introduce BitmapType as a new logical type in fluss-common
    • Extend DataTypeParser to support the BITMAP keyword in CREATE TABLE statements
    • Define BITMAP type properties (nullable, not orderable, cannot be used as primary key or partition key)

    2. Server-Side Aggregation Integration (fluss-server)

    • Wire FieldRoaringBitmap32Agg to the new BITMAP logical type
    • Extend FieldRoaringBitmap32AggFactory to accept DataTypeRoot.BITMAP in addition to DataTypeRoot.BYTES
    • Update AggFunctionType.getSupportedDataTypeRoots() accordingly
    • Perform comprehensive audit of AggregationMergeEngine for BITMAP type handling

    3. Flink Connector Bridge (fluss-flink)

    • Implement SQL UDFs: BITMAP_BUILD_AGG, BITMAP_OR_AGG, BITMAP_CARDINALITY, BITMAP_FROM_BYTES, BITMAP_TO_BYTES
    • Extend PbDataTypeRoot with BITMAP = 16 for RPC message support
    • Implement applyAggregates() pushdown optimization for BITMAP_OR_AGG
    • Handle graceful fallback to Flink-side aggregation when pushdown is not applicable

    4. Testing & Documentation

    • Functional unit tests for BitmapType and FieldRoaringBitmap32Agg
    • End-to-end integration tests (BitmapPushdownITCase) in flink-flink-common module
    • Performance benchmarks measuring network I/O and CPU utilization improvements
    • User documentation and SQL reference guides

    Required Skills

    • Proficiency in Java programming
    • Understanding of distributed systems and data processing concepts
    • Familiarity with Apache Flink or similar stream processing frameworks
    • Knowledge of SQL and query optimization is a plus
    • Experience with bitmap data structures (RoaringBitmap) is advantageous
    • Good communication skills for community collaboration

    Difficulty Level

    Medium to Hard

    This project requires understanding of multiple layers in the Fluss stack (common, server, flink connector) and involves type system changes, aggregation engine integration, and query optimization. A working prototype demonstrating BitmapType integration with FieldRoaringBitmap32Agg is available to help the student get started.

    Mentors

    • Giannis Polyzos (ipolyzos@apache.org)

    Future Work (Stretch Goals)

    • Native 64-bit support (BITMAP64 type) for IDs exceeding 32-bit range
    • Advanced conversion functions: BITMAP_TO_ARRAY, BITMAP_TO_STRING, BITMAP_XOR_AGG
    • Reverse materialization: UNNEST_BITMAP to explode bitmaps back into individual integer rows

    Name and Contact Information

    Project: Apache Fluss (Incubating)

    Website: https://fluss.apache.org

    Mailing List: dev@fluss.apache.org

    GitHub: https://github.com/apache/fluss

    Difficulty: Major
    Project size: ~350 hour (large)
    Potential mentors:
    Jark Wu, mail: jark (at) apache.org
    Project Devs, mail: dev (at) fluss.apache.org

    Apache Iceberg

    Apache Iceberg Make Spark Readears Async in File Opening

    Iceberg's Spark readers currently process scan tasks sequentially — each file is opened, fully consumed, and closed before moving to the next. For workloads with hundreds or thousands of small files (5 KB–1 MB), this creates significant overhead, especially on object stores with per-request latency. We would like to introduce an opt-in async mode that opens multiple small-file tasks concurrently and buffers their output into a shared iterator.

    We have already been in discussion with a proposed contributor for this new feature

    Difficulty: Major
    Project size: ~350 hour (large)
    Potential mentors:
    Russell Spitzer, mail: russellspitzer (at) apache.org
    Project Devs, mail: dev (at) iceberg.apache.org

    Spark

    SPIP Client-Side Metadata Caching for Spark Connect

    This SPIP proposes adding a client-side schema cache for Spark Connect DataFrames.

    Currently, every call to df.columns or df.schema triggers a synchronous gRPC analysis request to the server. While these are local and near-instant in Spark Classic, in Connect they average 277 ms on standard cloud setups (like AWS t3.medium). This makes iterative work extremely slow; we've measured a 13-second lag for 50 metadata calls in a typical ETL pipeline.

    This delay is forcing developers to use a "Shadow Schema" pattern, where they manually track column names in local lists to avoid the RPC overhead. Since Spark DataFrames are immutable, we can fix this by caching the resolved schema on the client after the first request. Our POC shows this reduces the 13-second lag to about 250 ms (a 51× speedup) without breaking the core Spark Connect model.
     
    I have followed the official SPIP template for the detailed breakdown below.

    SIP

     https://docs.google.com/document/d/1xTvL5YWnHu1jfXvjlKk2KeSv8JJC08dsD7mdbjjo9YE/edit?tab=t.0

    Benchmark - https://docs.google.com/document/d/1ebX8CtTHN3Yf3AWxg7uttzaylxBLhEv-T94svhZg_uE/edit?tab=t.0

    Note for GSoC - 

    To set clear expectations for your GSoC timeline, and as a heads-up to the broader Spark developer community:
    Because the underlying SPIP (SPARK-55163) is still actively being discussed and has not yet received formal PMC approval, your GSoC project will function purely as an experimental prototype.

    Your open Pull Requests will be used by mentors to evaluate your GSoC deliverables and milestones. However, please be aware that your code will not be merged into the mainline Apache Spark repository during the GSoC program. Successfully completing your GSoC project and passing the evaluations is tied to the quality of your prototype and testing, not to getting the code merged.

    Your prototype will be incredibly valuable in helping the community benchmark the latency improvements for Spark Connect. I look forward to reviewing your finalized proposal!



    Difficulty: Major
    Project size: ~350 hour (large)
    Potential mentors:
    vaquar khan, mail: vaquar.khan@gmail.com (at) apache.org
    Project Devs, mail: