Versions Compared

Key

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

...

Contents

...

JSON Schema to Form UI for APISIX Dashboard

APISIX plugins ship JSON Schema definitions for their configuration. If APISIX Dashboard can render plugin configuration forms directly from JSON Schema, developer experience improves significantly and reduces manual UI maintenance.

Goals (Deliverables)
Must-have:

  • A reusable SchemaForm (or equivalent) that renders basic types: string/number/integer/boolean/object/array.
  • enum support (Select/Radio etc), defaults, required fields, basic constraints (min/max, pattern, etc) where feasible.
  • Support at least the key complex patterns used by APISIX plugin schemas:
    • oneOf (select one option and render corresponding fields)
    • dependencies / conditional fields
    • (Stretch) anyOf if present in target schemas
  • Validation pipeline: validate form values against schema (AJV) and show errors in UI consistently.
  • Documentation + developer guide: how to add/extend schema-to-widget mapping.
  • Tests (unit + minimal integration) to prevent regressions for schema parsing and conditional rendering.
Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Yuan Bao, mail: baoyuan (at) apache.org
Project Devs, mail: dev (at) apisix.apache.org

Apache AsterixDB

NL2SQL++ assistant

This project aims to develop a modular, extensible NL2SQL component for AsterixDB that translates natural language prompts into executable SQL++ queries. The system will leverage recent advances in Large Language Models (LLMs) to enable users to express complex analytical questions without writing formal queries. It will follow best practices by exposing an OpenAPI-based interface that connects to external LLMs through frameworks such as LangChain4j while remaining model-agnostic. The component will also support locally-hosted LLMs to reduce operating costs and maintain privacy.

Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Suryaa Charan, mail: suryaacharan (at) apache.org
Project Devs, mail:

Dynamic Memory Management

AsterixDB currently uses a static approach for memory allocation in memory-intensive operators, where each operator is assigned a fixed memory budget, either user-provided or derived from defaults. Static budgeting can lead to several issues. Long-running queries may hold large memory allocations for extended periods, reducing concurrency and blocking other queries. In addition, memory estimation errors can result in over-allocation that wastes resources or under-allocation that causes spills and performance degradation.
This project will make key memory-intensive operators dynamically adaptive to memory reallocation requests from a resource broker. The broker will adjust operator memory budgets at runtime based on system conditions and workload objectives, such as improving fairness across concurrent queries, increasing overall throughput, and maintaining predictable performance under contention. The expected outcome is a coordinated memory management loop where operators expose safe resizing hooks and the broker uses feedback signals to rebalance memory across running queries

LLM Agent Protocols/Memory

This feature adds agent compatibility to AsterixDB by implementing standard agent protocols and agentic memory capabilities. It involves implementing two emerging standards: the Model Context Protocol (MCP) for tool exposure and structured capability discovery, and the Agent-to-Agent (A2A) protocol for multi-agent coordination. MCP will allow AsterixDB to describe its capabilities, datasets, functions, and safe operations to AI agents. The project also utilizes AsterixDB to provide persistent agentic memory that tracks an agent's query sessions, enabling agents to recall and build on previous interactions.

Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Suryaa CharanShiva Jahangiri, mail: suryaacharan shivajah (at) apache.org
Project Devs, mail:

Top K Nearest Queries Support

AsterixDB currently lacks native support for Top-K-Nearest queries, which return the K tuples whose attribute values are closest to a given reference value or point. Examples include: the five employees whose salaries are closest to the CEO's salary or the five buildings closest to the White House. This project involves designing and implementing efficient Top-K-Nearest query processing within AsterixDB's execution engine (Hyracks), including optimizer support to avoid full scans and to leverage existing indexes where possible. The implementation should integrate cleanly with SQL++.

Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Suryaa Charan, mail: suryaacharan (at) apache.org
Project Devs, mail:

NL2SQL++ assistant

This project aims to develop a modular, extensible NL2SQL component for AsterixDB that translates natural language prompts into executable SQL++ queries. The system will leverage recent advances in Large Language Models (LLMs) to enable users to express complex analytical questions without writing formal queries. It will follow best practices by exposing an OpenAPI-based interface that connects to external LLMs through frameworks such as LangChain4j while remaining model-agnostic. The component will also support locally-hosted LLMs to reduce operating costs and maintain privacy

Backup/restore utility for AsterixDB

In order to backup and restore a database, one common pattern is to use a tool that takes the current state of the database and generates a set of DDL statements which, when executed, will create the existing state of the database. Currently this is not possible in AsterixDB for DDL statements- you would have to remember which ones you issued to create Types, Datasets, and so on. Therefore having a tool that can take the current state of the Metadata dataverse and craft a set of DDL statements that would create that state, and then for each dataset dump its contents into an INSERT statement, would be a great addition.

Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Ian MaxonSuryaa Charan, mail: imaxon suryaacharan (at) apache.org
Project Devs, mail:

LLM Agent Protocols/Memory

This feature adds agent compatibility to AsterixDB by implementing standard agent protocols and agentic memory capabilities. It involves implementing two emerging standards: the Model Context Protocol (MCP) for tool exposure and structured capability discovery, and the Agent-to-Agent (A2A) protocol for multi-agent coordination. MCP will allow AsterixDB to describe its capabilities, datasets, functions, and safe operations to AI agents. The project also utilizes AsterixDB to provide persistent agentic memory that tracks an agent's query sessions, enabling agents to recall and build on previous interactions

In-browser packaging of AsterixDB

AsterixDB since its inception has always been a distributed system. This has historically led to some friction for new users who simply want to try out the system to get a sense of the language and features. It simply isn't necessary for them to deploy the system as it would be for handling large amounts of data, however the deployment and packaging has to assume someone wants to do this. Therefore it has always been a balance between configurability and simplicity.

With the advancement of WASM and Javascript in general, there now exist versions of other databases, which were previously only run locally, which are adapted and targeted to a WASM or JS environment. This lets the user simply open a browser and get a fully-functioning instance of a real database like they would if it was installed locally or on a server somewhere. Given that AsterixDB is written purely in Java, it should in principle be possible to run AsterixDB on a JVM which can target WASM as an architecture, with WASI or some other platform. Having something similar for AsterixDB would be an amazing tool to help further the adoption of AsterixDB, and SQL++ in general.

Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Ian MaxonSuryaa Charan, mail: imaxon suryaacharan (at) apache.org
Project Devs, mail:

Backup/restore utility for AsterixDB

In order to backup and restore a database, one common pattern is to use a tool that takes the current state of the database and generates a set of DDL statements which, when executed, will create the existing state of the database. Currently this is not possible in AsterixDB for DDL statements- you would have to remember which ones you issued to create Types, Datasets, and so on. Therefore having a tool that can take the current state of the Metadata dataverse and craft a set of DDL statements that would create that state, and then for each dataset dump its contents into an INSERT statement, would be a great addition.

Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Ian Maxon, mail: imaxon (at) apache.org
Project Devs, mail:

In-browser packaging of AsterixDB

AsterixDB since its inception has always been a distributed system. This has historically led to some friction for new users who simply want to try out the system to get a sense of the language and features. It simply isn't necessary for them to deploy the system as it would be for handling large amounts of data, however the deployment and packaging has to assume someone wants to do this. Therefore it has always been a balance between configurability and simplicity.

With the advancement of WASM and Javascript in general, there now exist versions of other databases, which were previously only run locally, which are adapted and targeted to a WASM or JS environment. This lets the user simply open a browser and get a fully-functioning instance of a real database like they would if it was installed locally or on a server somewhere. Given that AsterixDB is written purely in Java, it should in principle be possible to run AsterixDB on a JVM which can target WASM as an architecture, with WASI or some other platform. Having something similar for AsterixDB would be an amazing tool to help further the adoption of AsterixDB, and SQL++ in general.

Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Ian Maxon, mail: imaxon

Dynamic Memory Management

AsterixDB currently uses a static approach for memory allocation in memory-intensive operators, where each operator is assigned a fixed memory budget, either user-provided or derived from defaults. Static budgeting can lead to several issues. Long-running queries may hold large memory allocations for extended periods, reducing concurrency and blocking other queries. In addition, memory estimation errors can result in over-allocation that wastes resources or under-allocation that causes spills and performance degradation.
This project will make key memory-intensive operators dynamically adaptive to memory reallocation requests from a resource broker. The broker will adjust operator memory budgets at runtime based on system conditions and workload objectives, such as improving fairness across concurrent queries, increasing overall throughput, and maintaining predictable performance under contention. The expected outcome is a coordinated memory management loop where operators expose safe resizing hooks and the broker uses feedback signals to rebalance memory across running queries.

Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Shiva Jahangiri, mail: shivajah (at) apache.org
Project Devs, mail:

Top K Nearest Queries Support

AsterixDB currently lacks native support for Top-K-Nearest queries, which return the K tuples whose attribute values are closest to a given reference value or point. Examples include: the five employees whose salaries are closest to the CEO's salary or the five buildings closest to the White House. This project involves designing and implementing efficient Top-K-Nearest query processing within AsterixDB's execution engine (Hyracks), including optimizer support to avoid full scans and to leverage existing indexes where possible. The implementation should integrate cleanly with SQL++.

Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Suryaa Charan, mail: suryaacharan (at) apache.org
Project Devs, mail:

Apache Cassandra

Apache Cassandra

[CEP-59] Implementation of In-Band Connection Draining ([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. Native Protocol: Add the new GRACEFUL_DISCONNECT event/message type to the Native Protocol (targeted for the next protocol version).
  1. Server-Side (Java):
  • Modify the transport layer (specifically the Netty pipeline) to broadcast the disconnect signal to all active channels during the StorageService.drain() sequence.
  • Implement configurable timeouts to allow clients a grace period before hard closure.
  1. Tooling (cqlsh/Python):
  • Update the Python driver/cqlsh to handle the new signal, ensuring users see a clean message rather than a stack trace during node maintenance.

References:

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

Apache Fineract

Loan Origination POC

fineract-client-feign usage for integration tests

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 

LOAN ORIGINATION CONTEXT 

Fineract has some loan origination functionality but it is not robust enough for many operations.  Several vendors, working with Fineract have created new Loan Origination plug ins.  

There is also a major enhancement underway that would build out a full Loan Origination flow by supporting the backend needs of data storage for such LOS.   See ticket https://issues.apache.org/jira/browse/FINERACT-2418 .  

The GSOC student would be expected to propose something as a POC (proof of concept) that would either - use the developed Fienract backend solution, or build a new component outside of Fineract to create the flows that would demonstrate the LOS functionality.  

That is, this is a moving target, and we would need different proposals from prospective candidates to explore the area of Loan Origination.  This may require expertise in risk assessment, loan origination models and business acumen.  There will not be much more explanation that this available.  The student would be expected to be a self starter.  

The mentor for this would need to be an expert at risk modeling, understand Loan Origination, and support a conceptual basis that may involve some things internal to Fineract and some processing elements outside of Fineract.  Please comment below if you are an existing Fineract contributor with this expertise.  

To try to illustrate:   one possible GSOC Proposal archtype we could accept would be a survey of Loan Origination Models, their strengths and weaknesses and to identify commonalities for the community to focus on.  This would thus be a Requirements exercise and may help identify future roadmap concepts.  In this case, the code to be developed may just expose a few APIs into different screen flows.  Thus, perhaps FIGMA flows (or similar) connecting to a set of APIs on the backend. 

If those new LOS APIs are existing in June 2026 (ticket 2418 resolved), then those APIs are to be used.  if they are NOT there in Fineract, then the student would be requested to create a fork and to implement the POC outside of the main Dev branch.  

I welcome additions to this write up.  jdailey  

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)

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 

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

BI connector and demonstration

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 

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


"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

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

A first prototype of the a new command processing component is ready for evaluation. There is also an initial smoke test (JMH) available.

You can try it out with the following instructions (it's still in a private repository, but will be published soon as an official PR):


git clone git@github.com:vidakovic/fineract.git
cd fineract
git checkout feature/FINERACT-2169
./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

[Testing] Add unit tests for ApiParameterHelper in fineract-core

There is currently no unit test coverage for the ApiParameterHelper utility class. I have implemented a new test suite using JUnit 5 to cover core methods like extractFieldsForResponseIfProvided.

Verification: Successfully ran locally with 1/1 tests passed (100% success rate)

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

[GSoC 2026] [POC] Standardize and Harden Transaction Idempotency for Savings and Loans

Goal: Standardize idempotency enforcement to prevent replay attacks in core financial modules. Implementation Strategy (Addressing James Dailey's feedback):

  1. Opt-In Architecture: New logic will be behind a Global Configuration flag. Default remains legacy behavior to ensure 100% backward compatibility.
  1. Phased Approach: Audit existing m_portfolio_command_source usage and bridge gaps in the Savings module first.
  1. Testing: Implementation of integration tests simulating network failures/retries.
Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
saifulhuq, mail: saifulhuq (at) apache.org
Project Devs, mail: dev (at) fineract.apache.org

Loan Origination 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 

LOAN ORIGINATION CONTEXT 

Fineract has some loan origination functionality but it is not robust enough for many operations.  Several vendors, working with Fineract have created new Loan Origination plug ins.  

There is also a major enhancement underway that would build out a full Loan Origination flow by supporting the backend needs of data storage for such LOS.   See ticket https://issues.apache.org/jira/browse/FINERACT-2418 .  

The GSOC student would be expected to propose something as a POC (proof of concept) that would either - use the developed Fienract backend solution, or build a new component outside of Fineract to create the flows that would demonstrate the LOS functionality.  

That is, this is a moving target, and we would need different proposals from prospective candidates to explore the area of Loan Origination.  This may require expertise in risk assessment, loan origination models and business acumen.  There will not be much more explanation that this available.  The student would be expected to be a self starter.  

The mentor for this would need to be an expert at risk modeling, understand Loan Origination, and support a conceptual basis that may involve some things internal to Fineract and some processing elements outside of Fineract.  Please comment below if you are an existing Fineract contributor with this expertise.  

To try to illustrate:   one possible GSOC Proposal archtype we could accept would be a survey of Loan Origination Models, their strengths and weaknesses and to identify commonalities for the community to focus on.  This would thus be a Requirements exercise and may help identify future roadmap concepts.  In this case, the code to be developed may just expose a few APIs into different screen flows.  Thus, perhaps FIGMA flows (or similar) connecting to a set of APIs on the backend. 

If those new LOS APIs are existing in June 2026 (ticket 2418 resolved), then those APIs are to be used.  if they are NOT there in Fineract, then the student would be requested to create a fork and to implement the POC outside of the main Dev branch.  

I welcome additions to this write up.  jdailey  


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)

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 

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

fineract-client-feign usage for integration tests

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 

"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

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

A first prototype of the a new command processing component is ready for evaluation. There is also an initial smoke test (JMH) available.

You can try it out with the following instructions (it's still in a private repository, but will be published soon as an official PR):

git clone git@github.com:vidakovic/fineract.git
cd fineract
git checkout feature/FINERACT-2169
./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

[Testing] Add unit tests for ApiParameterHelper in fineract-core

There is currently no unit test coverage for the ApiParameterHelper utility class. I have implemented a new test suite using JUnit 5 to cover core methods like extractFieldsForResponseIfProvided.

Verification: Successfully ran locally with 1/1 tests passed (100% success rate)

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

BI connector and demonstration

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 

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

[GSoC 2026] [POC] Standardize and Harden Transaction Idempotency for Savings and Loans

Goal: Standardize idempotency enforcement to prevent replay attacks in core financial modules. Implementation Strategy (Addressing James Dailey's feedback):

  1. Opt-In Architecture: New logic will be behind a Global Configuration flag. Default remains legacy behavior to ensure 100% backward compatibility.
  1. Phased Approach: Audit existing m_portfolio_command_source usage and bridge gaps in the Savings module first.
  1. Testing: Implementation of integration tests simulating network failures/retries.
Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
saifulhuqJames Dailey, mail: saifulhuq jdailey (at) apache.org
Project Devs, mail: dev (at) fineract.apache.org

...

Implement Trino-IoTDB Plugin to enable OLAP on time-series data

Background

Apache IoTDB (Internet of Things Database) is a high-performance, open-source time-series database optimized for data management and analysis in IoT scenarios. Trino (formerly PrestoSQL) is a fast distributed SQL query engine designed for running interactive analytic queries against data sources of all sizes.
Currently, while IoTDB provides strong capabilities for writing and querying time-series data, integrating it with the broader big data ecosystem for complex OLAP (Online Analytical Processing) remains a demand. A dedicated Trino connector for IoTDB will allow users to query IoTDB data using standard SQL via Trino and perform federated queries with other data sources (like Hive, MySQL, or Iceberg).

Goal

The goal of this project is to implement a trino-iotdb connector plugin based on the Trino SPI (Service Provider Interface). This connector will enable Trino to read data directly from IoTDB, supporting schema mapping, data projection, and predicate pushdown or maybe aggregate pushdown.
 

Core Tasks(Mandatory)

  1. Project Scaffolding: Set up the Maven project structure for the trino-iotdb plugin and integrate the IoTDB JDBC API.

  2. Metadata Implementation: Implement ConnectorMetadata to map IoTDB’s Table Mode (relational view) to Trino’s relational metadata model:


    1. Map IoTDB databases to Trino Schemas.

    2. Map IoTDB Tables to Trino Tables.

    3. Map IoTDB Data Type to Trino Data Type.
  3. Column Pruning (Projection Pushdown): Ensure the connector strictly fetches only the requested columns (measurements) from IoTDB, avoiding SELECT * overhead.

  4. Predicate Pushdown: Implement optimization rules to push down SQL filters (especially time range filters and value filters) to the IoTDB engine to minimize data transfer.

  5. Limit & Offset Pushdown: Map Trino’s LIMIT and OFFSET clauses to IoTDB’s native query pagination to prevent fetching excessive data during preview or pagination queries.

  6. Integration Testing: Provide Docker-based integration tests to verify correctness using Trino's testing framework.


Advanced Tasks (Optional)

  • Aggregation Pushdown: Implement the applyAggregation method in the connector SPI.


    • Goal: Map Trino’s aggregate functions (e.g., COUNT, AVG, SUM, MIN, MAX) directly to IoTDB’s native aggregation queries.

    • Benefit: Instead of fetching raw data to Trino for calculation, the connector leverages IoTDB's pre-calculated statistics or downsampling capabilities, significantly reducing network overhead and latency.


Deliverables


  • A fully functional trino-iotdb connector source code.(a pull request to Trino Repo)

  • Comprehensive integration tests covering data types and query patterns.

  • User documentation explaining how to configure and use the connector.

Recommended Skills

  • Java: Proficiency in Java programming (Trino and IoTDB are both Java-based).

  • Database Internals: Basic understanding of SQL execution, schema design, and database connectors.

  • Maven: Experience with Java build systems.

  • Nice to have: Familiarity with Trino SPI or IoTDB Session API.


Learning Material

 
Difficulty: medium
Mentor: Yuan Tian (Apache IoTDB PMC Member) (jackietien@apache.org)
 

Difficulty: Major
Project size: ~175 hour (medium)
Potential mentors:
Yuan Tian, mail: jackietien (at) apache.org
Project Devs, mail: dev (at) iotdb.apache.org

Seata

GSoC 2026 - Apache Seata(Incubating)Enhance the Seata framework Golang SDK’s

support for multiple databases

multi-registry support and seata-ctl capability

Project Overview

Title

Enhance the Seata framework Golang SDK’s support for multiple databasesSeata-Go Multi-Registry Support and seata-ctl Diagnostic Tool Capability

Abstract

Apache Seata (incubating) is a popular distributed transaction solution , providing solutions like AT, TCC, and XA for ensuring data consistency in microservice architectures. The AT mode (Automatic Transaction) provides applications with non-intrusive distributed transaction capabilities by proxying SQL statements and parsing protocols. Although Seata-go currently supports MySQL and has initial compatibility with PostgreSQL, it still falls short in covering commonly used production databases, and precise compatibility with Oracle and MariaDB is an urgent needSeata-Go, as its Go language SDK, is responsible for implementing core TM/RM functionalities in the Go ecosystem.

Currently, Seata-Go lags behind the Java version in terms of registry support richness at the infrastructure layer, and its production-level transaction troubleshooting and operational toolchain (seata-ctl) is still in its early stages. This results in limited options for users in non-Etcd/Raft scenarios and high troubleshooting costs when transaction anomalies occur.

This project aims to align with the mature ecosystem of Seata Java and introduce AT mode support for Oracle and MariaDB in Seata-go. This not only involves parsing and adapting SQL dialects, but also includes metadata management, handling differences in Undo Log serialization, and integrating with the specific locking mechanisms of each database. It is a critical step in expanding the capability boundaries of Seata-go.

Detailed Description Objectives

  • Console Metrics Visualization: Develop functionality to view various metrics related to the connection pool in the Seata console. The metrics should be displayed based on IP/connection pool granularity, helping users easily identify resource allocation and utilization.
  • Metrics Control via Console: Allow users to control various aspects of the connection pools directly from the Seata console. This includes the ability to adjust minimum and maximum connection counts, configure connection acquisition timeout, and manage connection pool keep-alive settings.

Deliverables

  • Complete MariaDB AT Mode Support (Priority P0)
    • Implement MariaDB driver adapter layer (seata-at-mariadb Driver)
    • Implement MariaDB TableMetaCache and Trigger
    • Implement MariaDB UndoLogManager
    • Handle dialect differences between MariaDB and MySQL (e.g., RETURNING clause, system variables)
  • Complete Oracle AT Mode Support (Priority P1)
    • Implement Oracle driver adapter layer (seata-at-oracle Driver)
    • Implement Oracle metadata query adaptation (based on ALL_TAB_COLUMNS, ALL_INDEXES system views)
    • Implement Oracle data type to JDBC type mapping (NUMBER, VARCHAR2, CLOB, DATE, etc.)
    • Implement Oracle UndoLogManager with Undo Log serialization differences
    • Adapt Oracle SQL dialect (ROWNUM pagination, Sequence retrieval, DUAL table, etc.)
  • Integration Testing and Validation (Priority P1)
    • Write comprehensive unit tests and integration tests covering single-table CRUD, multi-table join operations, and transaction rollback scenarios
    • Validate accuracy of Before/After Image generation
    • Validate correctness of global locks and Undo Log
  • Samples and Documentation (Priority P2)
    • Add Oracle and MariaDB usage demos in seata-go-samples
    • Write a technical blog "Seata-Go Multi-Database Adaptation Design" explaining design concepts and implementation details

Implementation Plan

Phase 1: Requirement Analysis and Design

  • Align scope and acceptance criteria with mentors/community: prioritize MariaDB (P0) and Oracle (confirm final priority as per topic), and define the must-cover SQL/transaction scenarios (CRUD, rollback, lock conflict, batch ops, joins where applicable).
  • Study and benchmark Seata Java AT implementation: produce a gap list for Dialect, TableMeta, UndoLog, Before/After Image, and global lock integration, and decide what to port vs. re-design for Go.
  • Design a pluggable multi-database architecture for Seata-Go: define clear interfaces (Dialect, MetaQuery, TypeMapper, UndoLogManager, DriverAdapter) and module boundaries for MariaDB/Oracle implementations; write a short design spec.
  • Prepare baseline environments and regression safety: stand up MariaDB/Oracle test environments (local and/or CI) and create baseline test cases to ensure existing MySQL AT behavior does not regress.

Phase 2: MariaDB AT Mode Support (P0)

  • Implement seata-at-mariadb driver adapter: integrate with database/sql, hook into key execution points, and ensure Seata AT context is correctly propagated.
  • MariaDB dialect adaptation: handle MariaDB vs. MySQL differences (syntax/behaviors such as RETURNING-related cases, system variables, and any MariaDB-specific edge cases affecting parsing and image SQL).
  • Metadata and caching: implement MariaDB TableMetaCache and metadata queries (columns, primary keys, indexes) with robust caching/invalidations as needed.
  • MariaDB UndoLogManager: implement undo log write/read/delete and serialization strategy consistent with Seata-Go conventions; ensure rollback works for common and edge data types.
  • Scenario-driven hardening: validate with integration tests covering single-table DML, unique key updates, batch updates, idempotent rollback, and lock conflict/retry behaviors.

Phase 3: Oracle AT Mode Support (P0/P1)

  • Implement seata-at-oracle driver adapter: adapt to the chosen Oracle driver (godror / go-ora, per community decision), addressing bind variables, result set handling, and transaction boundary behaviors.
  • Oracle metadata adaptation: implement metadata queries using Oracle system views (e.g., ALL_TAB_COLUMNS, ALL_INDEXES) and cache results effectively.
  • Oracle type mapping: map Oracle types to Seata-Go internal types (NUMBER, VARCHAR2, CLOB, DATE, TIMESTAMP, etc.) to ensure image capture and undo serialization are consistent.
  • Oracle dialect adaptation: support Oracle-specific SQL behaviors (ROWNUM pagination patterns, sequences, DUAL table usage, locking semantics where relevant).
  • Oracle UndoLogManager: implement Oracle-compatible undo log persistence and serialization differences; validate large objects and time types in rollback.

Phase 4: Testing, Samples, and Documentation

  • Testing: add unit tests (Dialect/TypeMapper/MetaQuery/UndoLog) and integration tests (real DB) to verify:
    • Before/After Image correctness
    • Global lock correctness (conflicts, concurrency, retries)
    • Rollback correctness and idempotency
    • No regressions for existing MySQL AT
  • CI enablement (if feasible): make MariaDB/Oracle tests repeatable in CI or provide a documented script-based workflow for contributors.
  • Samples: add full MariaDB and Oracle examples to incubator-seata-go-samples (config, schema, demo transactions, rollback demos).
  • Documentation/blog: write “Seata-Go Multi-Database Adaptation Design” and user/developer docs covering configuration, driver selection, supported SQL patterns, and known limitations.

Required Skills

  • Have Go language development experience, familiar with database/sql standard library and common database drivers (e.g., go-sql-driver/mysql, godror, go-ora)
  • Proficient in SQL syntax, deep understanding of relational database principles, familiar with transaction isolation levels and row/table locking mechanisms
  • Understand the core principles of Seata AT mode (Before/After Image, Undo Log, Global Lock)
  • Have experience with Oracle or MariaDB databases, understand their dialect differences from MySQL
  • Possess good documentation habits and code standards awareness, able to read Seata Java source code for reference

Benefits to Apache Seata

  • Broader database coverage for Seata-Go AT mode: enables production adoption in enterprises that rely on MariaDB and Oracle.
  • Lower migration and adoption cost: users can extend distributed transaction capability beyond MySQL with minimal application changes.
  • Better maintainability and extensibility: a clean, interface-driven design (Dialect/Meta/UndoLog/TypeMapping) reduces future effort to add more databases.
  • Higher reliability through verification: comprehensive integration tests and samples make correctness measurable and reduce regressions.
  • Stronger community value: aligning with Seata Java’s proven approach and producing clear docs/design guidance improves contributor productivity and ecosystem confidence.

Conclusion

This project strengthens Seata-Go AT mode by adding robust MariaDB and Oracle support aligned with Seata Java’s mature implementation. By delivering dialect adaptation, metadata management, undo log handling, type mapping, and thorough testing plus samples and documentation, it significantly expands Seata-Go’s multi-database capabilities and improves its production readiness for real-world enterprise environments.

Useful Link

Apache Seata website

https://github.com/apache/incubator-seata-go

https://github.com/apache/incubator-seata-go-samples

Contact Information

  • Mentor Name: FengZhang [zfeng@apache.org], Apache Seata(incubating) PPMC member
Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Feng Zhang, mail: zfeng (at) apache.org
Project Devs, mail: dev (at) seata.apache.org

GSoC 2026 - Apache Seata(Incubating)Enhance the Seata framework Golang SDK’s multi-registry support and seata-ctl capability

Seata's infrastructure ecosystem by introducing support for four mainstream registries: Nacos, ZooKeeper, Consul, and Redis to Seata-Go. Additionally, it will significantly enhance seata-ctl's diagnostic capabilities through full-chain environment checks, transaction state insights, and an interactive terminal interface, reducing the operational threshold for distributed transactions.

Detailed Description / Objectives

  • Infrastructure Alignment: Ensure Seata-Go can seamlessly integrate into existing enterprise-level microservice governance systems by implementing adapters for various mainstream registries.
  • Operational Efficiency Improvement: Build a complete diagnostic command set enabling developers to quickly locate network, database, and transaction state anomalies, and simplify operation workflows through an interactive interface.
  • Community Ecosystem Contribution: Produce high-quality design documents and technical blogs to help community users understand Seata-Go's underlying governance logic and operational best practices.

Deliverables

1. Multi-Registry Cluster Support (Priority P0)

  • Mainstream Registry Adapter Implementation:
    • Implement Nacos and ZooKeeper registry adapters with support for service instance subscription, real-time listening, and multi-tenant isolation configuration.
    • Implement Consul and Redis adapters with support for service registration/discovery and heartbeat monitoring mechanisms.
    • Bug fixes for Seata NamingServer Golang SDK.
    • Ensure service registration path formats for all registries are fully compatible with Java version Seata.
  • Configuration and Initialization System Integration:
    • Extend configuration structure to standardize registry-specific configuration parameters.
    • Optimize factory initialization logic to support smooth registry type switching via configuration files.

2. seata-ctl Diagnostic Tool Enhancement (Priority P1)

  • Full-Chain Self-Check Functionality:
    • Implement automated environment checks covering network connectivity verification with the server.
    • Implement database-level health checks including connection availability and validation of transaction core system table structures.
    • Implement configuration file format and required field legality validation.
  • Transaction State Insight Capability:
    • Implement real-time query functionality for active transaction lists.
    • Implement query functionality for resource lock records corresponding to specific transaction identifiers (XID).
    • Support structured output formats (e.g., table, JSON, YAML).
  • Interactive Terminal Interface (TUI):
    • Introduce a visual interactive mode for the tool, simplifying complex command input through interface guidance to enhance operational experience.

3. Testing, Samples, and Community Output (Priority P2)

  • Testing and Validation:
    • Write unit tests and integration tests for each registry adapter to verify node change awareness capabilities.
    • Validate diagnostic tool accuracy across different database dialects.
  • Samples and Documentation:
    • Add complete multi-registry integration examples in seata-go-samples.
    • Write technical articles: "Seata-Go Registry Extension Design and Practice Guide" and "Distributed Transaction Troubleshooting in Practice: Quickly Locating Anomalies with Diagnostic Tools".

Implementation Plan

  • Phase 1: Research and Architecture Design
    • Research existing Seata-Go registry implementations and study Seata NamingServer implementation logic.
    • Design diagnostic tool's interaction logic and command set architecture, ensuring tool extensibility.
  • Phase 2: Registry Adapter Development (P0)
    • Prioritize completion of core functionality implementation and compatibility testing for Nacos and ZooKeeper.
    • Perform bug fixes for Seata NamingServer to optimize its stability in the Go SDK.
    • Integrate Consul and Redis support and unify configuration initialization entry points.
  • Phase 3: Diagnostic Tool and Interactive Interface Development (P1)
    • Develop core logic for environment checks and transaction state queries.
    • Build interactive terminal interface (TUI), encapsulating underlying commands into intuitive visual operations.
  • Phase 4: Testing Validation and Community Promotion (P2)
    • Improve test cases to ensure stability across different registry environments.
    • Complete community technical article output and submit related sample code.

Required Skills

  • Have Go language development experience, familiar with concurrent programming and network communication.
  • Understand service discovery principles, familiar with mainstream registries (e.g., Nacos, ZooKeeper).
  • Understand basic distributed transaction principles, familiar with Seata's interaction architecture (TM/RM/TC).
  • Familiar with command-line tool development, possess good code standards awareness and documentation writing skills.

Benefits to Apache Seata

  • Expand Infrastructure Boundaries: Enable Seata-Go to adapt to more diverse enterprise production environments, eliminating selection barriers.
  • Improve Operational Convenience: Fill the gap in operational diagnostic tools for the Go version, significantly reducing user learning and maintenance costs.
  • Enhance Ecosystem Interoperability: Ensure consistency in governance between Go and Java versions, supporting Seata's unified multi-language ecosystem.

Conclusion

This project addresses Seata-Go's shortcomings in infrastructure adaptation and operational troubleshooting by enhancing multi-registry support and diagnostic tool capabilities. This not only improves Seata-Go's production readiness but also strengthens the Apache Seata community ecosystem through user-friendly interactive tools and comprehensive technical documentation.

Contact Information

  • Mentor Name: TunGuo [tew@apache.org], Apache Seata(incubating) Committer
Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
FinnTew, mail: tew (at) apache.org
Project Devs, mail: dev (at) seata.apache.org

GSoC 2026 - Apache Seata(Incubating)Enhance the Seata framework Golang SDK’s support for multiple databases

Project Overview

Title

Enhance the Seata framework Golang SDK’s support for multiple databases


Abstract

Apache Seata(incubating) is a popular distributed transaction solution, providing solutions like AT, TCC, and XA for ensuring data consistency in microservice architectures.

The AT mode (Automatic Transaction) provides applications with non-intrusive distributed transaction capabilities by proxying SQL statements and parsing protocols. Although Seata-go currently supports MySQL and has initial compatibility with PostgreSQL, it still falls short in covering commonly used production databases, and precise compatibility with Oracle and MariaDB is an urgent need.

This project aims to align with the mature ecosystem of Seata Java and introduce AT mode support for Oracle and MariaDB in Seata-go. This not only involves parsing and adapting SQL dialects, but also includes metadata management, handling differences in Undo Log serialization, and integrating with the specific locking mechanisms of each database. It is a critical step in expanding the capability boundaries of Seata-go.


Detailed Description Objectives

  • Console Metrics Visualization: Develop functionality to view various metrics related to the connection pool in the Seata console. The metrics should be displayed based on IP/connection pool granularity, helping users easily identify resource allocation and utilization.
  • Metrics Control via Console: Allow users to control various aspects of the connection pools directly from the Seata console. This includes the ability to adjust minimum and maximum connection counts, configure connection acquisition timeout, and manage connection pool keep-alive settings.


Deliverables

  • Complete MariaDB AT Mode Support (Priority P0)
    • Implement MariaDB driver adapter layer (seata-at-mariadb Driver)
    • Implement MariaDB TableMetaCache and Trigger
    • Implement MariaDB UndoLogManager
    • Handle dialect differences between MariaDB and MySQL (e.g., RETURNING clause, system variables)
  • Complete Oracle AT Mode Support (Priority P1)
    • Implement Oracle driver adapter layer (seata-at-oracle Driver)
    • Implement Oracle metadata query adaptation (based on ALL_TAB_COLUMNS, ALL_INDEXES system views)
    • Implement Oracle data type to JDBC type mapping (NUMBER, VARCHAR2, CLOB, DATE, etc.)
    • Implement Oracle UndoLogManager with Undo Log serialization differences
    • Adapt Oracle SQL dialect (ROWNUM pagination, Sequence retrieval, DUAL table, etc.)
  • Integration Testing and Validation (Priority P1)
    • Write comprehensive unit tests and integration tests covering single-table CRUD, multi-table join operations, and transaction rollback scenarios
    • Validate accuracy of Before/After Image generation
    • Validate correctness of global locks and Undo Log
  • Samples and Documentation (Priority P2)
    • Add Oracle and MariaDB usage demos in seata-go-samples
    • Write a technical blog "Seata-Go Multi-Database Adaptation Design" explaining design concepts and implementation details


Implementation Plan

Phase 1: Requirement Analysis and Design

  • Align scope and acceptance criteria with mentors/community: prioritize MariaDB (P0) and Oracle (confirm final priority as per topic), and define the must-cover SQL/transaction scenarios (CRUD, rollback, lock conflict, batch ops, joins where applicable).
  • Study and benchmark Seata Java AT implementation: produce a gap list for Dialect, TableMeta, UndoLog, Before/After Image, and global lock integration, and decide what to port vs. re-design for Go.
  • Design a pluggable multi-database architecture for Seata-Go: define clear interfaces (Dialect, MetaQuery, TypeMapper, UndoLogManager, DriverAdapter) and module boundaries for MariaDB/Oracle implementations; write a short design spec.
  • Prepare baseline environments and regression safety: stand up MariaDB/Oracle test environments (local and/or CI) and create baseline test cases to ensure existing MySQL AT behavior does not regress.

Phase 2: MariaDB AT Mode Support (P0)

  • Implement seata-at-mariadb driver adapter: integrate with database/sql, hook into key execution points, and ensure Seata AT context is correctly propagated.
  • MariaDB dialect adaptation: handle MariaDB vs. MySQL differences (syntax/behaviors such as RETURNING-related cases, system variables, and any MariaDB-specific edge cases affecting parsing and image SQL).
  • Metadata and caching: implement MariaDB TableMetaCache and metadata queries (columns, primary keys, indexes) with robust caching/invalidations as needed.
  • MariaDB UndoLogManager: implement undo log write/read/delete and serialization strategy consistent with Seata-Go conventions; ensure rollback works for common and edge data types.
  • Scenario-driven hardening: validate with integration tests covering single-table DML, unique key updates, batch updates, idempotent rollback, and lock conflict/retry behaviors.

Phase 3: Oracle AT Mode Support (P0/P1)

  • Implement seata-at-oracle driver adapter: adapt to the chosen Oracle driver (godror / go-ora, per community decision), addressing bind variables, result set handling, and transaction boundary behaviors.
  • Oracle metadata adaptation: implement metadata queries using Oracle system views (e.g., ALL_TAB_COLUMNS, ALL_INDEXES) and cache results effectively.
  • Oracle type mapping: map Oracle types to Seata-Go internal types (NUMBER, VARCHAR2, CLOB, DATE, TIMESTAMP, etc.) to ensure image capture and undo serialization are consistent.
  • Oracle dialect adaptation: support Oracle-specific SQL behaviors (ROWNUM pagination patterns, sequences, DUAL table usage, locking semantics where relevant).
  • Oracle UndoLogManager: implement Oracle-compatible undo log persistence and serialization differences; validate large objects and time types in rollback.

Phase 4: Testing, Samples, and Documentation

  • Testing: add unit tests (Dialect/TypeMapper/MetaQuery/UndoLog) and integration tests (real DB) to verify:
    • Before/After Image correctness
    • Global lock correctness (conflicts, concurrency, retries)
    • Rollback correctness and idempotency
    • No regressions for existing MySQL AT
  • CI enablement (if feasible): make MariaDB/Oracle tests repeatable in CI or provide a documented script-based workflow for contributors.
  • Samples: add full MariaDB and Oracle examples to incubator-seata-go-samples (config, schema, demo transactions, rollback demos).
  • Documentation/blog: write “Seata-Go Multi-Database Adaptation Design” and user/developer docs covering configuration, driver selection, supported SQL patterns, and known limitations

Project Overview

Title

Enhance Seata-Go Multi-Registry Support and seata-ctl Diagnostic Tool Capability

Abstract

Apache Seata (incubating) is a popular distributed transaction solution for ensuring data consistency in microservice architectures. Seata-Go, as its Go language SDK, is responsible for implementing core TM/RM functionalities in the Go ecosystem.

Currently, Seata-Go lags behind the Java version in terms of registry support richness at the infrastructure layer, and its production-level transaction troubleshooting and operational toolchain (seata-ctl) is still in its early stages. This results in limited options for users in non-Etcd/Raft scenarios and high troubleshooting costs when transaction anomalies occur.

This project aims to align with Seata's infrastructure ecosystem by introducing support for four mainstream registries: Nacos, ZooKeeper, Consul, and Redis to Seata-Go. Additionally, it will significantly enhance seata-ctl's diagnostic capabilities through full-chain environment checks, transaction state insights, and an interactive terminal interface, reducing the operational threshold for distributed transactions.

Detailed Description / Objectives

  • Infrastructure Alignment: Ensure Seata-Go can seamlessly integrate into existing enterprise-level microservice governance systems by implementing adapters for various mainstream registries.
  • Operational Efficiency Improvement: Build a complete diagnostic command set enabling developers to quickly locate network, database, and transaction state anomalies, and simplify operation workflows through an interactive interface.
  • Community Ecosystem Contribution: Produce high-quality design documents and technical blogs to help community users understand Seata-Go's underlying governance logic and operational best practices.

Deliverables

1. Multi-Registry Cluster Support (Priority P0)

  • Mainstream Registry Adapter Implementation:
    • Implement Nacos and ZooKeeper registry adapters with support for service instance subscription, real-time listening, and multi-tenant isolation configuration.
    • Implement Consul and Redis adapters with support for service registration/discovery and heartbeat monitoring mechanisms.
    • Bug fixes for Seata NamingServer Golang SDK.
    • Ensure service registration path formats for all registries are fully compatible with Java version Seata.
  • Configuration and Initialization System Integration:
    • Extend configuration structure to standardize registry-specific configuration parameters.
    • Optimize factory initialization logic to support smooth registry type switching via configuration files.

2. seata-ctl Diagnostic Tool Enhancement (Priority P1)

  • Full-Chain Self-Check Functionality:
    • Implement automated environment checks covering network connectivity verification with the server.
    • Implement database-level health checks including connection availability and validation of transaction core system table structures.
    • Implement configuration file format and required field legality validation.
  • Transaction State Insight Capability:
    • Implement real-time query functionality for active transaction lists.
    • Implement query functionality for resource lock records corresponding to specific transaction identifiers (XID).
    • Support structured output formats (e.g., table, JSON, YAML).
  • Interactive Terminal Interface (TUI):
    • Introduce a visual interactive mode for the tool, simplifying complex command input through interface guidance to enhance operational experience.

3. Testing, Samples, and Community Output (Priority P2)

  • Testing and Validation:
    • Write unit tests and integration tests for each registry adapter to verify node change awareness capabilities.
    • Validate diagnostic tool accuracy across different database dialects.
  • Samples and Documentation:
    • Add complete multi-registry integration examples in seata-go-samples.
    • Write technical articles: "Seata-Go Registry Extension Design and Practice Guide" and "Distributed Transaction Troubleshooting in Practice: Quickly Locating Anomalies with Diagnostic Tools".

Implementation Plan

  • Phase 1: Research and Architecture Design
    • Research existing Seata-Go registry implementations and study Seata NamingServer implementation logic.
    • Design diagnostic tool's interaction logic and command set architecture, ensuring tool extensibility.
  • Phase 2: Registry Adapter Development (P0)
    • Prioritize completion of core functionality implementation and compatibility testing for Nacos and ZooKeeper.
    • Perform bug fixes for Seata NamingServer to optimize its stability in the Go SDK.
    • Integrate Consul and Redis support and unify configuration initialization entry points.
  • Phase 3: Diagnostic Tool and Interactive Interface Development (P1)
    • Develop core logic for environment checks and transaction state queries.
    • Build interactive terminal interface (TUI), encapsulating underlying commands into intuitive visual operations.
  • Phase 4: Testing Validation and Community Promotion (P2)
  • Improve test cases to ensure stability across different registry environments.
  • Complete community technical article output and submit related sample code.


Required Skills

  • Have Go language development experience, familiar with concurrent programming and network communication.Understand service discovery principles, familiar with mainstream registries database/sql standard library and common database drivers (e.g., Nacos, ZooKeeper).
  • Understand basic distributed transaction principles, familiar with Seata's interaction architecture (TM/RM/TC).
  • go-sql-driver/mysql, godror, go-ora)
  • Proficient in SQL syntax, deep understanding of relational database principles, familiar with transaction isolation levels and row/table locking mechanisms
  • Understand the core principles of Seata AT mode (Before/After Image, Undo Log, Global Lock)
  • Have experience with Oracle or MariaDB databases, understand their dialect differences from MySQL
  • Possess good documentation habits and code standards awareness, able to read Seata Java source code for referenceFamiliar with command-line tool development, possess good code standards awareness and documentation writing skills.


Benefits to Apache Seata

  • Broader database coverage for Seata-Go AT mode: enables production adoption in enterprises that rely on MariaDB and Oracle.
  • Lower migration and adoption cost: users can extend distributed transaction capability beyond MySQL with minimal application changes.
  • Better maintainability and extensibility: a clean, interface-driven design (Dialect/Meta/UndoLog/TypeMapping) reduces future effort to add more databases.
  • Higher reliability through verification: comprehensive integration tests and samples make correctness measurable and reduce regressions.
  • Stronger community value: aligning with Seata Java’s proven approach and producing clear docs/design guidance improves contributor productivity and ecosystem confidence
  • Expand Infrastructure Boundaries: Enable Seata-Go to adapt to more diverse enterprise production environments, eliminating selection barriers.
  • Improve Operational Convenience: Fill the gap in operational diagnostic tools for the Go version, significantly reducing user learning and maintenance costs.
  • Enhance Ecosystem Interoperability: Ensure consistency in governance between Go and Java versions, supporting Seata's unified multi-language ecosystem.


Conclusion

This project addresses strengthens Seata-Go 's shortcomings in infrastructure adaptation and operational troubleshooting by enhancing multi-registry support and diagnostic tool capabilities. This not only improves Seata-Go's production readiness but also strengthens the Apache Seata community ecosystem through user-friendly interactive tools and comprehensive technical documentation.

AT mode by adding robust MariaDB and Oracle support aligned with Seata Java’s mature implementation. By delivering dialect adaptation, metadata management, undo log handling, type mapping, and thorough testing plus samples and documentation, it significantly expands Seata-Go’s multi-database capabilities and improves its production readiness for real-world enterprise environments.


Useful Link

Apache Seata website

https://seata.apache.org/

https://github.com/apache/incubator-seata-go

https://github.com/apache/incubator-seata-go-samples

https://github.com/apache/incubator-seata-ctl


Contact Information

  • Mentor Name: TunGuo FengZhang [tew@apachezfeng@apache.org], Apache Seata(incubating) CommitterPPMC member
Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
FinnTewFeng Zhang, mail: tew zfeng (at) apache.org
Project Devs, mail: dev (at) seata.apache.org

CloudStack

[GSoC] [CloudStack] Improve CloudMonkey user experience by enhancing autocompletion

Summary

Currently a lot of API parameters do not get auto-completed as cloudmonkey isn't able to deduce the probable values for those parameters based on the list APIs heuristics. A lot of these parameters are enums on CloudStack end and by finding a way to expose these and consume them on cloudmonkey side, we could improve the usability of the CLI greatly.

Benefits to CloudStack

  • Improved end user experience when using CLI
  • Reduce incorrect inputs

Deliverables

  • Expose enums and all other relevant information that can be used to enhance auto-completion of parameters on CloudStack end -
    • May require framework level changes and changes to APIs
  • Consume these exposed details on Cloudmonkey end

Dependent projects

https://github.com/apache/cloudstack-cloudmonkey/

Ref CloudStack Issue: https://github.com/apache/cloudstack/issues/10442

Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Pearl Dsilva, mail: pearl11594 (at) apache.org
Project Devs, mail: dev (at) cloudstack.apache.org

...

Apache Fory Go & JavaScript gRPC integration

Description:
Apache Fory can generate high-performance model code for Go and JavaScript/TypeScript from IDL, but end-to-end gRPC service binding generation across these two ecosystems is not yet complete as a unified workflow.
This project will add Go and JavaScript/TypeScript gRPC code generation to the Fory compiler using Fory serialization instead of protobuf runtime payload types.
The implementation should follow Fory compiler conventions, remain dependency-light in runtime layers, and prioritize low-overhead, performance-first behavior.

Potential Outcomes:

1. Parse service IR and generate Go and JavaScript/TypeScript gRPC outputs for unary and streaming methods.
2. Generate Go outputs `_service.go` and `_grpc.go` with ServiceDesc, server interfaces, and client wrappers compatible with grpc-go.
3. Generate JavaScript/TypeScript service interface and gRPC binding outputs compatible with @grpc/grpc-js and existing JS/TS generator layout conventions.
4. Wire request/response payload handling through generated Fory serializer and deserializer functions in both targets.
5. Implement zero-copy deserialization buffer support for inbound gRPC payloads in both Go and JavaScript runtimes, with safe fallback paths when zero-copy cannot be applied.
6. Coordinate with JS/TS type generation so emitted message, enum, and union types are directly usable by generated gRPC stubs.
7. Add golden codegen tests for generated file names and key signatures for both language targets.
8. Add end-to-end interoperability tests between generated Go and JavaScript services, including Go server with JS client and JS server with Go client.
9. Add CI coverage for codegen tests, runtime codec tests, and Go<->JavaScript gRPC interoperability tests.
10. Provide runnable Go and JavaScript/TypeScript server-client examples using generated bindings and Fory codec.
11. Update compiler documentation for Go and JavaScript/TypeScript gRPC code generation usage and constraints.

Skills:
Go, JavaScript/TypeScript, Node.js, gRPC (grpc-go and @grpc/grpc-js), compiler/code generation, serialization internals, testing, performance optimization.

Difficulty:
Medium to Hard
 
Project size:
350 hours

Potential mentors:
Chaokun Yang, Weipeng Wang

Source links:

1. https://github.com/apache/fory/issues/3274
2. https://github.com/apache/fory/issues/3278
3. https://github.com/apache/fory/issues/3280
4. https://fory.apache.org/docs/next/compiler/compiler_guide
5. https://github.com/apache/fory/tree/main/compiler
6. https://github.com/apache/fory/tree/main/go
7. https://github.com/apache/fory/tree/main/javascript
8. https://fory.apache.org/docs/guide/go/

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 Fory

Dart gRPC integration

Serialization Support for Android

Description:
Apache Fory Java currently does not yet generate Dart gRPC service bindings.

This project will add Dart gRPC code generation to the Fory compiler. For each service definition, the compiler should generate Dart service interfaces and gRPC transport bindings that follow the existing Dart generator layout and use a Fory codec instead of protobuf runtime payload types.

The implementation must keep the Fory runtime free of gRPC dependencies. Any required gRPC glue should be emitted as generated helper code. Runtime behavior should remain low-overhead and allocation-conscious.

Potential Outcomes

  • Generate Dart service interface and gRPC binding outputs from service definitions, aligned with current Dart generator conventions.
  • Generate Dart gRPC server and client stubs for unary and streaming RPCs using Dart gRPC APIs.
  • Wire request/response handling through generated Fory serializer and deserializer functions.
  • Implement zero-copy deserialization buffer support for inbound gRPC payloads, with a safe fallback path when zero-copy cannot be applied.
  • Coordinate with Dart type generation so emitted message, enum, and union types are directly usable by generated gRPC stubs.
  • Add golden codegen tests for generated file names and key signatures.
  • Provide a runnable Dart server/client example using generated bindings and the Fory codec.
  • Update compiler documentation for Dart gRPC code generation usage and constraints.

Skills:Dart, gRPC (`grpc`), compiler/code generation, serialization internals, async programming, testing, performance optimization.

Difficulty: Medium
Project size:175 hours
Potential mentors:Chaokun Yang, Weipeng Wang
Source links:

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

provide production-ready Android support. Several Java runtime assumptions do not hold consistently on Android, and some existing runtime mechanisms are not suitable for mobile constraints.
 
Known limitations in current Java path:
1. Android reflection is very slow.
2. JDK `Unsafe` APIs are unavailable or inconsistent across Android versions.
3. JDK `MethodHandle` APIs are unavailable for many Android versions.
4. Bytecode generated by Janino cannot run on Android.
5. Generating source/bytecode on mobile devices is slow and resource-intensive.
 
This project will deliver production-ready Android support for Fory Java serialization while preserving high performance and compatibility with existing Java behavior.
 
Expected outcomes:
1. Keep reflection usage on Android only in very rare code paths.
2. Add Android-specific `Buffer` and utility implementations guarded by a static final `IS_ANDROID` constant, and route Android code paths early.
3. Avoid `MethodHandle` in Android execution paths.
4. Avoid runtime bytecode generation on Android; update `java/fory-core/src/main/java/org/apache/fory/builder` to generate stable source code compatible across Android/JDK versions.
5. Add an annotation processor that invokes the builder pipeline at build time to generate serializer code.
6. Integrate generated serializers with current type resolver so generated code is used for serialization.
7. Validate no performance regression with `benchmarks/java` comparisons against current Java path.
8. Add CI coverage and comprehensive Android tests for compatibility and correctness.
9. Update Fory Java documentation and add a dedicated Android support guide.
 
Required Android verification and test coverage:
1. Add unit tests for Android-specific utility and buffer code paths.
2. Add serializer selection tests to verify generated serializers are preferred in resolver flow.
3. Add compatibility tests across representative Android API levels.
4. Add tests for fallback paths when generated serializers are unavailable.
5. Add performance benchmark runs and regression checks for representative payloads.
 
CI end-to-end requirements:
1. Add Android CI workflow/jobs for build and test validation.
2. Run Android-targeted tests for key serialization scenarios in CI.
3. Fail CI on compatibility regressions that violate project thresholds.
 
Skills:
Java, Android runtime internals, annotation processing, code generation, serialization internals, benchmarking, testing, CI automation.
 
Difficulty:
Hard.
 
Project size:
Preferred 350 hours.
 
Potential mentors:
Chaokun Yang, Weipeng Wang.
 
Related links:
https://github.com/apache/fory/issues/3405
https://github.com/apache/fory/issues/1101
https://github.com/apache/fory/issues/2435
https://github.com/apache/fory/tree/main/java
https://fory.apache.org/docs/guide/java/
https://fory.apache.org/docs/compiler/
 

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 Fory Swift & Dart gRPC integration

Description

Apache Fory does not yet generate Swift and Dart gRPC service bindings.

This project will add Swift and Dart gRPC code generation to the Fory compiler. For each service definition, the compiler should generate language-native service interfaces and gRPC transport bindings that follow existing Swift and Dart generator layouts and use a Fory codec instead of protobuf runtime payload types.

The implementation must keep the Fory runtimes free of gRPC dependencies. Any required gRPC glue should be emitted as generated helper code. Runtime behavior should remain low-overhead and allocation-conscious.

Potential Outcomes

  • Generate Swift and Dart service interface and gRPC binding outputs from service definitions, aligned with current language generator conventions.
  • Generate Swift and Dart gRPC server and client stubs for unary and streaming RPCs using each ecosystem's gRPC APIs.
  • Wire request/response handling through generated Fory serializer and deserializer functions in both languages.
  • Implement zero-copy deserialization buffer support for inbound gRPC payloads, with a safe fallback path when zero-copy cannot be applied.
  • Coordinate with Swift and Dart type generation so emitted message, enum, and union types are directly usable by generated gRPC stubs.
  • Add golden codegen tests for generated file names and key signatures for both Swift and Dart outputs.
  • Provide runnable Swift and Dart server/client examples using generated bindings and the Fory codec.
  • Update compiler documentation for Swift and Dart gRPC code generation usage and constraints.

Skills

Swift, Dart, gRPC (`grpc-swift`, `grpc`), compiler/code generation, serialization internals, async programming, testing, performance optimization.

Difficulty

Hard

Project Size

350 hours

Potential Mentors

Chaokun Yang, Weipeng Wang

Source Links

Apache Fory Serialization Support for Android

Description:
Fory Java currently does not provide production-ready Android support. Several Java runtime assumptions do not hold consistently on Android, and some existing runtime mechanisms are not suitable for mobile constraints.
 
Known limitations in current Java path:
1. Android reflection is very slow.
2. JDK `Unsafe` APIs are unavailable or inconsistent across Android versions.
3. JDK `MethodHandle` APIs are unavailable for many Android versions.
4. Bytecode generated by Janino cannot run on Android.
5. Generating source/bytecode on mobile devices is slow and resource-intensive.
 
This project will deliver production-ready Android support for Fory Java serialization while preserving high performance and compatibility with existing Java behavior.
 
Expected outcomes:
1. Keep reflection usage on Android only in very rare code paths.
2. Add Android-specific `Buffer` and utility implementations guarded by a static final `IS_ANDROID` constant, and route Android code paths early.
3. Avoid `MethodHandle` in Android execution paths.
4. Avoid runtime bytecode generation on Android; update `java/fory-core/src/main/java/org/apache/fory/builder` to generate stable source code compatible across Android/JDK versions.
5. Add an annotation processor that invokes the builder pipeline at build time to generate serializer code.
6. Integrate generated serializers with current type resolver so generated code is used for serialization.
7. Validate no performance regression with `benchmarks/java` comparisons against current Java path.
8. Add CI coverage and comprehensive Android tests for compatibility and correctness.
9. Update Fory Java documentation and add a dedicated Android support guide.
 
Required Android verification and test coverage:
1. Add unit tests for Android-specific utility and buffer code paths.
2. Add serializer selection tests to verify generated serializers are preferred in resolver flow.
3. Add compatibility tests across representative Android API levels.
4. Add tests for fallback paths when generated serializers are unavailable.
5. Add performance benchmark runs and regression checks for representative payloads.
 
CI end-to-end requirements:
1. Add Android CI workflow/jobs for build and test validation.
2. Run Android-targeted tests for key serialization scenarios in CI.
3. Fail CI on compatibility regressions that violate project thresholds.
 
Skills:
Java, Android runtime internals, annotation processing, code generation, serialization internals, benchmarking, testing, CI automation.
 
Difficulty:
Hard.
 
Project size:
Preferred 350 hours.
 
Potential mentors:
Chaokun Yang, Weipeng Wang.
 
Related links:3405/1101issues2435java.org/docs/guide/java/foryapache.org/docs/compiler/
 
Difficulty: Major
Project size: ~350 hour (large)
Potential mentors:
Chaokun Yang, mail: chaokunyang (at) apache.org
Project Devs, mail: dev (at) fory.apache.org

...