DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
...
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):
- 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.
- Python driver (potentially):
- Update the Python driver to opt-in and handle GRACEFUL_DISCONNECT.
References:
See:
- CASSJAVA-124 for java-driver implementation
- CASSPYTHON-16 for python-driver implementation
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
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:
- Analyze the dependency graph of the Dubbo core modules.
- Identify redundant or unnecessary dependencies.
- Refactor module boundaries to improve modularity.
- Reduce the size of the minimal runtime dependency set.
- Provide documentation and benchmarks comparing before and after results.
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:
- Analyze the dependency graph of the Dubbo core modules.
- Identify redundant or unnecessary dependencies.
- Refactor module boundaries to improve modularity.
- Reduce the size of the minimal runtime dependency set.
- 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
- Albumen Kevin, Apache Dubbo PMC, albumenj@apache.org

- dev@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:
- Analyze the dependency graph of the Dubbo core modules.
- Gain an in-depth understanding of Dubbo's inherent design and the design of each of its modules.
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
- Albumen Kevin, Apache Dubbo PMC, albumenj@apache.org

- dev@dubbo.apache.org
Exploring a Lightweight Runtime and Designing a Pluggable Architecture for Apache Dubbo-Go
Metadata SubsystemAbstract
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
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
CapabilityPlugin 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
- 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.
Useful Links
, 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
https://github.com/apache/dubbo-go/issues/2326 https://github.com/apache/dubbo-go
/issues/1981https://github.com/apache/dubbo-go-contrib/issues/
3188Contact Information
- Mentor Name: Xinfan Wu [wuxinfan@apache alexstocks@apache.org
, Apache Dubbo CommitterPMC member
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 MechanismCapability 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 andArchitecture 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 Linkmetadata 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.
Useful Links
/issues/2326Contact Information
Contact Information
- Mentor Name: Xinfan Wu [wuxinfan@apacheMentor: alexstocks@apache.org
, Apache Dubbo PMC memberCommitter
...
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.
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:
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 APIWe 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.
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.
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
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
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
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
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
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
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
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
...
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
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
...
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)
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
- Wenjun Ruan(Apache DolphinScheduler PMC member), wenjun@apache.org

- Zihao Xiang(Apache DolphinScheduler PMC member), zihaoxiang@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).
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)
- TPU Adaptation. Implement TPU device recognition and tensor management within the AINode Python runtime. This involves:
- Integrating PyTorch/XLA (torch_xla) to detect available TPU devices during AINode initialization.
- Implementing device abstraction layers to handle model loading and tensor operations on TPU hardware.
- Ensuring automatic fallback mechanisms to CPU/GPU when TPU is unavailable.
- Packaging for TPU Version. Extend the existing build infrastructure to support TPU-enabled distributions:
- Update Poetry configuration to manage PyTorch/XLA and TPU-specific Python dependencies.
- Create automated packaging scripts that bundle XLA compilers and TPU runtime libraries.
- Ensure the TPU version can be deployed directly in Google Cloud TPU environments and on-premise TPU pods without manual dependency resolution.
- 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.
- Model Integration. Integrate 1-2 selected foundation models into IoTDB-AINode's model inference framework:
- Implement model wrappers conforming to AINode's model registration interface.
- Adapt models to process IoTDB's time series data format.
- Ensure compatibility with AINode's inference pipeline, supporting SQL syntax such as SELECT * FROM FORECAST (...).
- Support both built-in model usage and custom model registration for integrated architectures.
- Integration Testing & CI. Establish robust testing infrastructure for TPU functionality:
- Design and implement integration tests covering device detection, model loading, tensor operations, and end-to-end inference workflows.
- 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
- Fully Functional Source Code.
- Pull requests to Apache IoTDB repository containing TPU adaptation modules.
- Integration code for SOTA time series foundation models.
- Extended build configurations (Maven/Poetry/PyInstaller) supporting TPU distributions.
- Comprehensive Integration Tests.
- Automated test suites for TPU device detection and model execution.
- CI pipeline configurations for TPU environments.
- User Documentation.
- Deployment guide for TPU-enabled AINode (e.g. Google Cloud TPU).
- SQL reference extensions for new model types and TPU-specific configuration options.
- 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
- Apache IoTDB. https://iotdb.apache.org/
- Time series forecasting models in HuggingFace. https://huggingface.co/models?pipeline_tag=time-series-forecasting&sort=trending
- PyTorch TPU support. https://docs.pytorch.org/xla/master/accelerators/tpu.html
Difficulty: medium
Mentor: Yongzao Dan (Apache IoTDB PMC Member) (yongzao@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
- Research & Plan Topics: Select 5-10 high-impact guide topics based on community needs (user list discussions, Slack feedback, gaps identified).
- 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.
- 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.
- Submit & Integrate: Open PRs to publish guides update any related docs or grails.org links.
- 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
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
...
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
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
- GitHub issue: #15287
- WIP PR: #15341
- Design doc: Google Doc
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!