Open-source project
ModelEngine-Group/app-platform avatar
ModelEngine-Group/app-platform

AppPlatform: a Java plugin host for composing LLM applications as graphs

AppPlatform 是一个前沿的大模型应用工程,旨在通过集成的声明式编程和低代码配置工具,简化和优化大模型的训练与推理应用的开发过程。本工程为软件工程师和产品经理提供一个强大的、可扩展的环境,以支持从概念到部署的全流程 AI 应用开发。

1,457 stars233 forksJavaMIT

At a glance

What is it?
ModelEngine's AppPlatform treats an AI application as a graph of tool nodes stored in a shared catalogue, bound together by the FIT plugin framework and the Waterflow execution engine. It is aimed at Java teams that want a self-hosted builder rather than a hosted agent product.
Who is it for?
AppPlatform fits Java teams that already run PostgreSQL and Docker and want a self-hosted builder where applications, RAG pipelines and agents are all stored as reusable tool nodes. It does not fit teams that want a single pip install, or that need a documented Linux path for source-level database initialization, since the README marks that as pending.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 21 days ago.
What is it written in?
Mainly Java, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem AppPlatform addresses: an AI app is a graph, not a prompt

Most LLM tooling starts from a single prompt and grows outward. AppPlatform starts from the other direction. Its README describes an AI application as something that can be a function, a RAG pipeline or an agent, and says these are stored as tools in a Store template whose metadata is what lets an agent schedule them automatically. The unit of work is therefore a node with declared metadata, not a script.

The audience is stated plainly: software engineers and product managers. The product manager is meant to assemble and debug flows in the browser without reading Java, while the engineer writes the operator behind each node. That split is the whole design premise, and it explains why the frontend carries a JSON Schema form renderer and a plugin upload screen rather than only a canvas.

If your team already has a workflow engine and only needs prompt versioning, this is more machinery than the problem requires. The value appears when several teams need to reuse each other's nodes, which is what the Store template is for.

Two runtimes: FIT for plugins, Waterflow for the flow itself

The backend is built on the FIT framework and is split into an application management module and a function extension module. The README calls the management module the core: it handles creating, managing, debugging, running and maintaining applications. The extension module is where component node implementations live, and it is what widens what the canvas can express.

Execution is delegated. The README states that application flow execution is based on Waterflow, which organises and processes flows and data. So the layering is: FIT loads and wires plugins, Waterflow runs the graph, and the management module owns lifecycle and persistence. Operators can be written in Java or Python according to the README, which matters because the model-facing half of a node is often easier to write in Python.

The frontend is React with function components, and the flow canvas uses Elsa, described as a native-JS graphics engine that shares a unified data format so graphs can be displayed and edited across platforms and applications. That is a deliberate choice to keep the graph representation independent of the React layer.

Getting a running instance: Docker Compose in about three minutes

The README gives a two-command path. Clone the repository, enter the root, then copy the environment template and run the deploy script:

cp docker/.env.example docker/.env bash docker/deploy.sh

The README says to configure model name, base URL and APIKEY in docker/.env before starting. Prerequisites are listed as a 2+ core x86 CPU, 4+ GB of memory, and Docker with Docker Compose. Once containers report Running, the UI is at http://localhost:8001. The README estimates the pull and start at roughly three minutes.

One operational detail is easy to miss: if you change the database password, the docker/app-platform-tmp directory must be deleted before a second start. That directory is not described further, so treat it as stateful and inspect it before removing anything you care about.

Building from source means merging two output trees by hand

The source path is not a single Maven command. After mvn clean install, output lands in build/. You must then copy the contents of build/plugins into the FIT framework's plugins directory and build/shared into the framework's shared directory. The README is explicit that four plugin files must be deleted from the plugins directory first:

fel-tool-discoverer fel-tool-executor fel-tool-repository-simple fel-tool-factory-repository

The stated reason is that app-platform already implements those mechanisms, and leaving the originals in place causes a startup failure from the conflict. This is the kind of step that is invisible until the process refuses to boot, and it is the first thing to check when a source build fails.

Configuration then moves to conf/fitframework.yml, where the fit.beans.packages list must include modelengine.fitframework and modelengine.fit, and a datasource block is added with mode set to shared or exclusive, a JDBC URL, credentials and Druid pool settings such as initialSize, minIdle and maxActive. A second block, app-engine, takes resource.path and form.path-prefix, both pointing at a local smart-form root. The README shows the directory containing generated UUID folders, a temporary folder and template.zip. Startup is fit start from the framework's bin directory, and fit debug attaches a Java remote debugging port for IDEA.

Version pinning is stated: app-platform uses FIT 3.5.5, so a manual build of fit-framework must check out the v3.5.5 tag. The README does not describe what changes between FIT versions, so upgrading the framework is an untested path from the documentation alone.

Frontend development and the PostgreSQL initialization gap

Frontend work needs an extra build step before the main one. The agent-flow package is built first, linked, and then the frontend is compiled:

cd agent-flow npm install --legacy-peer-deps --force --registry=https://registry.npmmirror.com npm run build npm link cd -

cd frontend npm install --legacy-peer-deps --force --registry=https://registry.npmmirror.com npm run build:prod

The install flags are worth noting. --legacy-peer-deps together with --force means the dependency tree is not resolving cleanly under npm's default peer rules, and the registry is pinned to a mainland China mirror. Teams outside that network will want to override the registry.

Database initialization splits by platform and one half is missing. On Windows, the README directs you to run sh build_win.sh with ip, port, username and password arguments from the shell directory, and notes that cmd is not supported and is planned. On Linux, the initialization section reads, in full, that it is pending planning. So a Linux source deployment has no documented way to seed the built-in data or the form data. Docker Compose sidesteps this, which is a real argument for starting there even if you intend to build from source later.

Where AppPlatform is the wrong tool

The Linux initialization gap is the clearest boundary. If your deployment target is Linux and you cannot use the container images, the README does not tell you how to populate the database, and the Windows script is explicitly not the answer.

Resource requirements are modest but the operational surface is not. A working install involves Docker Compose, PostgreSQL 14 or newer, a FIT framework build at a specific tag, a hand-merged plugins directory, a smart-form directory with a template.zip, and a YAML file with datasource and app-engine blocks. That is a lot of places for a configuration drift to hide, and the README documents no health check or diagnostic command beyond reading container status.

There is also a coupling cost. Because the flow engine is Waterflow and the plugin host is FIT, adopting AppPlatform means adopting two ModelEngine frameworks with their own release cycles. The README's note about deleting the four fel-tool plugins shows that app-platform and the base framework can overlap in responsibility. Anyone who wants a thin orchestration layer over their own runtime should look elsewhere.

Finally, the documentation is thin in places. The Store template is described conceptually but not with a schema. The .env keys are named as model name, base URL and APIKEY without listing the variable names. The docker/app-platform-tmp directory has no explanation. These are not blockers, but they mean the first hour involves reading the compose files rather than the README.

How this differs from LangChain and LangGraph

LangChain and LangGraph are Python libraries. You assemble chains or graphs in code, run them in your own process, and the deployment story is whatever you already use for Python services. There is no canvas, no plugin upload screen and no shared tool catalogue unless you build one.

AppPlatform inverts that. The graph is a persisted artefact edited in a browser, the nodes are plugins loaded by a Java host, and the catalogue is a first-class concept with metadata that an agent can read to decide which tool to call. Operators can still be written in Python, so the model-facing code does not have to be Java, but the orchestration layer is.

The trade-off is control versus reach. A LangGraph user can unit-test a graph in pytest and diff it in Git. An AppPlatform user gets a visual editor and cross-project reuse, and pays for it with a heavier runtime, a database dependency, and a build process that merges two output trees. Neither is strictly better; they optimise for different people. If the people editing flows are not engineers, AppPlatform's model is the one that fits.

Licence, upgrade cost and who should adopt it

The repository is MIT licensed, which permits commercial use and modification with the licence and copyright notice retained. That is the permissive end of the spectrum and imposes no copyleft obligation on your own code. This is a description of the licence, not legal advice; if you redistribute the platform inside a product, have counsel confirm the notice requirements.

Upgrade cost is shaped by the release history. Three releases landed between October 2025 and January 2026, roughly a quarterly cadence, with v1.3.2 the most recent. Because app-platform pins FIT 3.5.5, a framework bump is a coordinated change across two repositories plus the plugin merge step. Budget for that rather than treating it as a patch update.

Adopt AppPlatform if you are a Java shop with PostgreSQL and Docker already in place, and you want non-engineers to assemble flows from nodes that your engineers maintain. Do not adopt it if you need a Linux source-install path today, or if a Python-only stack is a hard constraint.

Verify these before you commit. First, that the four fel-tool plugin files are absent from your FIT plugins directory, since their presence causes the documented startup conflict. Second, that app-engine.resource.path and app-engine.form.path-prefix resolve to a directory holding the UUID subfolders and template.zip, because the smart-form renderer depends on that layout. Third, that your FIT checkout is at v3.5.5. Start with bash docker/deploy.sh to confirm the stack runs at all, then attempt the source build.

Editorial conclusion

AppPlatform fits Java teams that already run PostgreSQL and Docker and want a self-hosted builder where applications, RAG pipelines and agents are all stored as reusable tool nodes. It does not fit teams that want a single pip install, or that need a documented Linux path for source-level database initialization, since the README marks that as pending. Before committing, verify three things against your own environment: that the four fel-tool plugin files are removed from the FIT output plugins directory, that app-engine.resource.path and app-engine.form.path-prefix point at a directory containing template.zip, and that your FIT build is pinned to v3.5.5.

Official sources

  1. License: MIT
  2. ModelEngine-Group/app-platform on GitHub
  3. Project website
  4. README
  5. Releases
Community notes

Community notes