An open API service indexing awesome lists of open source software.

https://github.com/erupts/erupt

Make the model your single source of truth. Erupt is a model-driven engine for enterprise apps: UI, REST APIs, RBAC, data and AI agents are built from one model at runtime β€” no codegen, no frontend. Java/Kotlin on Spring Boot, Solon, Quarkus & more; SDKs for Python, Go, TypeScript and 6 other languages.
https://github.com/erupts/erupt

annotation erupt erupt-engine harness-framework low-code mdd model-driven polyglot rbac semantic

Last synced: about 6 hours ago
JSON representation

Make the model your single source of truth. Erupt is a model-driven engine for enterprise apps: UI, REST APIs, RBAC, data and AI agents are built from one model at runtime β€” no codegen, no frontend. Java/Kotlin on Spring Boot, Solon, Quarkus & more; SDKs for Python, Go, TypeScript and 6 other languages.

Awesome Lists containing this project

README

          

English Β |Β  [δΈ­ζ–‡](README-zh.md)

---




Erupt

ERUPT

MODEL-DRIVEN ENGINE FOR ENTERPRISE APPLICATIONS Β· AI HARNESS

make the model your single source of truth Β· built at runtime, not generated Β· zero front-end Β· 9 languages Β· 50+ LLM Β· MCP Β· A2A


maven-central
java
license
stars
release
build
coverage
docker-pulls
gitee


[ WEBSITE ]Β Β 
[ LIVE DEMO ]Β Β 
[ START PROJECT ]Β Β 
[ AI SKILL ]Β Β 
[ DOCS ]

---

Erupt Β· Model-Driven Engine for Enterprise Applications Β· AI Harness

---

## 00 Β· THE IDEA

> **Make the model your single source of truth.** Describe a business object once β€” its fields, types, relations and rules β€” and Erupt builds the rest of the system from it at runtime. Nothing is generated, so nothing drifts: change the model, and the UI, APIs, permissions and data layer change with it, instantly.

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Task model β”‚
β”‚ title Β· text priority Β· choice β”‚
β”‚ due Β· date owner Β· β†’ User β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ read at runtime β€” nothing is generated
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β–Ό β–Ό β–Ό β–Ό β–Ό β–Ό
Admin UI REST API RBAC Data Audit AI Agent
9 views OpenAPI row Β· col 15 sources revision MCP
```

| WHAT THE MODEL BUILDS | WHAT YOU NO LONGER WRITE |
|---|---|
| `TABLE Β· FORM` β€” 30+ field components | ~~html Β· js Β· css~~ |
| `SEARCH Β· SORT Β· PAGE` | ~~query code~~ |
| `REST Β· OPENAPI` β€” permission-aware | ~~Controller~~ |
| `DATAPROXY` β€” lifecycle hooks | ~~Service~~ |
| `AUTO DDL` | ~~DDL Β· Mapper~~ |
| `RBAC` β€” menu Β· row Β· column Β· button | ~~permission code~~ |
| `ROW ACTIONS` β€” with forms and confirm | ~~action endpoints~~ |
| `EXCEL I/O` | ~~POI glue~~ |
| `9 VIEWS` β€” table Β· gantt Β· board Β· calendar Β· timeline Β· map Β· card … | ~~custom pages~~ |
| `REVISION` β€” field-level history, rollback | ~~history tables~~ |
| `I18N` | ~~*.properties~~ |
| `AI TOOLS Β· MCP` β€” every model is agent-operable | ~~tool glue~~ |

---

## 01 Β· WHY ERUPT

| | |
|--------------------------|---|
| `RUNTIME, NOT CODEGEN` | The model is read at runtime. No generated code to maintain, no template drift β€” edit the model and the system follows. |
| `FAST` | 2–5 seconds to a running system. Java 17 + Spring Boot 3.x. |
| `BATTERIES INCLUDED` | Login, users, roles, menus, audit, Excel, OpenAPI, 30+ components β€” production-ready on day one. |
| `AI-NATIVE` | 50+ LLM providers, MCP-native tools, A2A, 700k+ skills. Every model is something an agent can query and operate. |
| `ANY DATA SOURCE` | JPA (MySQL Β· PostgreSQL Β· Oracle Β· SQL Server Β· DM) Β· JDBC Β· MongoDB Β· Elasticsearch Β· Redis Β· S3 Β· HTTP Β· files Β· LDAP Β· Kubernetes Β· Feishu Β· DingTalk Β· Notion Β· Airtable. |
| `ANY FRAMEWORK` | Not tied to Spring: the same model runs on Spring Boot, Solon, Quarkus, Micronaut, Vert.x, Ktor or any servlet container. |
| `ANY LANGUAGE` | Python, Go, TypeScript, PHP, .NET, Rust, Ruby and Swift services join as [erupt-sdk](https://github.com/plinian/erupt-sdk) nodes β€” same admin, same permissions. |
| `FREE CORE` | Apache 2.0, forever. Commercial Flow / SaaS / Cube modules are optional. |

---

## 02 Β· QUICKSTART

### A β€” SOURCE

Clone and run the bundled sample. H2 in-memory. No config.

```bash
git clone https://github.com/erupts/erupt.git
cd erupt
mvn spring-boot:run -pl erupt-sample -am
# β†’ http://localhost:8080 login: erupt / erupt
```

### B β€” DOCKER

All-in-one image β€” [hub.docker.com/r/erupts/erupt](https://hub.docker.com/r/erupts/erupt). Built on `erupt-spring-boot-starter-all`: designer, job, monitor, magic-api, notice, AI, cloud-server, embedded H2. Zero configuration.

```bash
docker run -p 8080:8080 erupts/erupt
# β†’ http://localhost:8080 login: erupt / erupt
```

Production: switch to MySQL / Redis via `-e` env vars β€” [image guide β†’](./deploy/erupt-docker/README.md)

### C β€” MAVEN

**1 Β· One dependency.**

```xml

xyz.erupt
erupt-spring-boot-starter
${erupt.version}

```

Bundles everything a runnable admin needs (`erupt-admin` + `erupt-web`). Want every optional module too (designer, job, generator, monitor, magic-api, websocket, notice, print, terminal, AI, cloud-server)? Use `erupt-spring-boot-starter-all`.

**2 Β· Describe the model. This IS the system.**

```java
@Erupt(name = "User")
@Entity
public class User extends BaseModel {

@EruptField(
views = @View(title = "Name"),
edit = @Edit(title = "Name", search = @Search)
)
private String name;
}
```

**3 Β· Run.**

```bash
mvn spring-boot:run
# β†’ http://localhost:8080 login: erupt / erupt
```

Paged. Searchable. Exportable. Role-gated. Add a field, refresh, it shows up.

### D β€” STARTER

[start.erupt.xyz](https://start.erupt.xyz) β€” pick modules in your browser, download a ready-to-run project. No local setup.

### E β€” AI SKILL

[skill.erupt.xyz](https://skill.erupt.xyz) β€” build a full admin panel with **zero development background**. Made for non-engineering roles (ops, HR, product, finance): describe your system in one sentence inside Claude Code or a similar AI agent, and the skill handles the rest β€” JDK, database (H2), login, CRUD, search, Excel, permissions all included. Only entities get written; UI and APIs render from annotations at runtime, so it costs ~1/20 the tokens of writing from scratch.

```bash
git clone https://github.com/plinian/erupt-skill.git ~/.claude/skills/erupt-admin
```

Then tell Claude Code: `"Build me a CRM admin panel"` β†’ running system.

> `NO INSTALL` β€” [demo.erupt.xyz](https://demo.erupt.xyz) (`guest / guest`)
> `FULL GUIDE` β€” [docs.erupt.xyz/guide/quick-start](https://docs.erupt.xyz/guide/quick-start)

MORE β€” sliders, choice fields, custom actions, LambdaQuery

```java
@Erupt(
name = "Simple",
power = @Power(importable = true, export = true),
rowOperation = @RowOperation(
title = "Custom Action",
mode = RowOperation.Mode.SINGLE,
operationHandler = OperationHandlerImpl.class
)
)
@Table(name = "t_simple")
@Entity
public class Simple extends BaseModel {

@EruptField(
views = @View(title = "Text"),
edit = @Edit(title = "Text", notNull = true, search = @Search)
)
private String input;

@EruptField(
views = @View(title = "Date"),
edit = @Edit(title = "Date", search = @Search)
)
private Date date;

@EruptField(
views = @View(title = "Slider"),
edit = @Edit(title = "Slider", type = EditType.SLIDER, search = @Search,
sliderType = @SliderType(max = 90, markPoints = {0, 30, 60, 90}, dots = true))
)
private Integer slide;

@EruptField(
views = @View(title = "Choice"),
edit = @Edit(title = "Choice", type = EditType.CHOICE, search = @Search,
choiceType = @ChoiceType(
fetchHandler = SqlChoiceFetchHandler.class,
fetchHandlerParams = "select id, name from e_upms_menu"
))
)
private Long choice;
}
```

Type-safe queries with LambdaQuery:

```java
List list = eruptDao.lambdaQuery(EruptUser.class)
.like(EruptUser::getName, "e")
.isNull(EruptUser::getWhiteIp)
.in(EruptUser::getId, 1, 2, 3, 4)
.ge(EruptUser::getCreateTime, "2023-01-01")
.list();
```

More scenarios β€” [erupt.xyz/#!/contrast](https://www.erupt.xyz/#!/contrast)

---

## 03 Β· OUT OF THE BOX

Erupt Β· Workbench

| | |
|---|---|
| `UI GENERATION` | Tables, forms, search, pagination, tree views, Gantt, card views, 20+ field components β€” driven by `@View` / `@Edit` / `@Search`. |
| `PERMISSIONS Β· UPMS` | Users, roles, menus, row-level filters, column-level visibility. SpEL on `@Filter`. OAuth2 / LDAP / SSO. |
| `OPENAPI` | Every `@Erupt` entity is a REST endpoint, governed by the same permission rules as the UI. |
| `ANY DATA SOURCE` | 15 data modules β€” JPA databases, JDBC, MongoDB, Elasticsearch, Redis, S3, HTTP, files, LDAP, Kubernetes and SaaS tables. |
| `EXCEL` | Import/export via `erupt-excel`. Override `excelImport` / `excelExport` on `DataProxy`. |
| `AI HARNESS` | `erupt-ai` β€” 50+ LLM providers, MCP-native tools, built-in RBAC. [β†’ 04](#04--ai-harness) |
| `AI FAMILY` | Claw, RAG, Staff, Dev, Canvas and Decision agents on top of `erupt-ai`. [β†’ 05](#05--ai-family) |
| `CLUSTER` | `erupt-cloud` nodes in any language. Commercial `erupt-tenant` for full SaaS. [β†’ 06](#06--any-language--cloud) |

> `WHICH AI MODULE?` β€” Pick `erupt-ai` for raw LLM / MCP access to build your own agent. Pick `erupt-ai-claw` for a turn-key admin agent (it depends on `erupt-ai`; add only this one).

All modules β€” [07](#07--modules) Β· API reference β€” [javadoc.erupt.xyz](https://javadoc.erupt.xyz)

### MODEL ATLAS

> Every `@Erupt` entity, every relation between them, drawn from the same annotations that build the UI. No extra configuration β€” the map exists because the model does.

| | |
|---|---|
| `OVERVIEW` | Every model grouped by module. Read the shape of the whole system at a glance. |
| `LAYERS` | How deep the graph runs: what everything stands on, and the few chains the depth comes from. |
| `LINEAGE` Β· `MATRIX` Β· `IMPACT` | One model's neighbourhood, module-to-module coupling, and what breaks if a model changes. |
| `FIELDS` Β· `POWER` Β· `AUDIT` | Every field of every model, declared `@Power` against the menu buttons behind it, and a health report: cycles, shared tables, isolated models. |


Model Atlas Β· Overview
Model Atlas Β· Layers

---

## 04 Β· AI HARNESS

> `erupt-ai` β€” production-grade AI agents on JVM. 50+ LLM providers Β· MCP-native Β· built-in RBAC Β· role-aware system prompts Β· chat history. All configurable through the admin UI. Zero boilerplate.

**WHY "HARNESS"** β€” Shipping AI to production needs more than an SDK: **governance** (RBAC) + **interoperability** (MCP) + **observability** (chat history, token tracking) + **operator-friendly config** (admin UI). All four, out of the box.

**PROVIDERS** β€” OpenAI Β· Claude Β· Gemini Β· DeepSeek Β· Qwen Β· GLM Β· Doubao Β· Moonshot Β· MiniMax Β· Mistral Β· Grok Β· Fireworks Β· Together Β· OpenRouter Β· Ollama (self-hosted) β€” hot-swappable from the admin UI, 50+ total.

| | |
|---|---|
| `MULTI-PROVIDER` | Configure multiple LLMs via UI. Switch without code changes. |
| `STREAMING Β· SSE` | Token-by-token responses, configurable timeouts. |
| `THINKING MODELS` | Native support for reasoning models (DeepSeek, Kimi-K2). |
| `MCP` | Any MCP-compatible tool server. SSE & STDIO transports. Auto-reconnect health checks. |
| `A2A` | Agents call agents through the standardized A2A protocol. Multi-agent workflows out of the box. |
| `AI TOOLBOX` | Expose any Spring Bean as an AI tool β€” `@AiToolbox` + `@Tool`. |
| `TOOL SECURITY` | Every AI tool gated by `LLMRole`. Whitelist or revoke per role at runtime. No restart. |
| `AGENTIC` | Agents with custom system prompts, hint lists, dynamic prompt handlers, MCP tools. |
| `CHAT HISTORY` | Per-user sessions, token tracking, soft-delete. |
| `LONG-TERM MEMORY` | Cross-session persistence. Key decisions auto-stored, reloaded next session. |

```java
@AiToolbox
@Component
public class MyTools {

@Tool("Look up order status by order ID")
public String getOrderStatus(String orderId) {
return orderService.getStatus(orderId);
}
}
```

LLM providers, MCP servers, agents β€” all managed through the built-in admin UI. No restarts.

### FIELD ASSISTANT

> Any text field in any generated form gets an inline writing assistant. Nothing to wire up β€” it appears wherever the schema says the field holds text.

`GENERATE` Β· `POLISH` Β· `CONTINUE` Β· `EXPAND` Β· `SHORTEN` β€” or just tell it what to write. Streams into the field, and one click undoes it.


AI field assistant Β· dark
AI field assistant Β· chat panel

---

## 05 Β· AI FAMILY

### AI CLAW

> `erupt-ai-claw` β€” drive your server through natural language, like talking to a colleague.

| | |
|---|---|
| `MODEL OPS` | Query, create, update data across any `@Erupt` entity via chat. |
| `SHELL` | Run system commands through natural language. |
| `FILE I/O` | Read and write files on the server. |
| `BROWSER` | Interact with the browser via MCP configuration. |
| `SKILLS Β· 700K+` | Compatible with 700k+ skills from [skills.sh](https://skills.sh). AI auto-matches and executes. Dynamic skill creation supported. |

Claw shares the same role-based tool security as AI Harness β€” only whitelisted tools reach non-admin users. Skills live in `~/.erupt/skills/` and can also be created through chat.

### MORE AGENTS

| MODULE | WHAT IT DOES |
|---|---|
| `erupt-ai-rag` | Knowledge base and retrieval-augmented generation β€” Qdrant / Milvus / in-memory vector stores, document ingestion, agentic RAG. |
| `erupt-ai-staff` | Digital employees: an agent with a system account, a duty persona, cron-scheduled tasks and work reports. |
| `erupt-ai-dev` | AI software delivery: projects with git repositories, a requirement pool and per-requirement worktrees for coding agents. |
| `erupt-ai-canvas` | Describe a page in plain language; the LLM writes a self-contained page over the Erupt REST API, served as a menu. |
| `erupt-ai-decision` | Typed, calibrated judgements (choice / score / yes-no) that business code can branch on. |

---

## 06 Β· ANY LANGUAGE Β· CLOUD

> `erupt-cloud` β€” one model-driven admin for distributed services **in any language**. One server handles login, menus and permissions; each node β€” Spring Boot or a Python / Go / TypeScript / PHP / .NET / Rust / Ruby / Swift process β€” only describes its models and serves their data.

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ erupt-cloud-server β”‚ console Β· login Β· menus Β· RBAC
β”‚ config Β· nodes Β· topology β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ register / heartbeat / forward
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β–Ό β–Ό β–Ό β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”
β”‚ Java β”‚ β”‚ Python β”‚ β”‚ Go β”‚ β”‚ TS … β”‚ nodes in any of 9 languages
β”‚ node β”‚ β”‚ node β”‚ β”‚ node β”‚ β”‚ node β”‚ each owns its models + data
β””β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”˜
```

```python
# pip install erupt-sdk β€” a Python service becomes an erupt admin node
from erupt import Field, Node, SqliteRepository, erupt

@erupt("Article")
class Article:
id: int = Field(pk=True)
title: str = Field("Title", search=True, not_null=True)

node = Node("blog", os.environ["ERUPT_ACCESS_TOKEN"], "http://erupt-server:8080")
node.register(Article, SqliteRepository("blog.db", "article"))
node.serve(port=9090)
```

| | |
|---|---|
| `POLYGLOT NODES` | Java / Kotlin (Spring Boot Β· Solon Β· Quarkus Β· Micronaut Β· Vert.x Β· Ktor Β· Servlet) Β· Python Β· Go Β· TypeScript Β· PHP Β· .NET Β· Rust Β· Ruby Β· Swift β€” one protocol, one conformance suite. [erupt-sdk β†’](https://github.com/plinian/erupt-sdk) |
| `CONFIG CENTER` | Multi-dimensional: schemas, nodes, rollout policies. Instances sync on demand. |
| `LIGHT` | Minimal intrusion. Versions aligned with the main Erupt release train. |
| `TOPOLOGY` | Cluster topology, call graphs, config rollouts β€” one console. |
| `IN-CLUSTER ADMIN` | Every business service hosts its own Erupt admin. No per-subsystem scaffolding. |
| `AUDIT` | Every config change leaves a trace. Finer-grained rollback than version-level. |

[docs.erupt.xyz/modules/erupt-cloud](https://docs.erupt.xyz/modules/erupt-cloud) Β· [erupt.xyz/#!/cloud](https://www.erupt.xyz/#!/cloud) Β· [erupt.xyz/#!/sdk](https://www.erupt.xyz/#!/sdk)

---

## 07 Β· MODULES

> One core, fifty-odd modules. Each is one dependency and shares the same model, permissions and UI.

| GROUP | MODULES |
|---|---|
| `AI Β· 7` | `erupt-ai` Β· `ai-claw` Β· `ai-rag` Β· `ai-staff` Β· `ai-dev` Β· `ai-canvas` Β· `ai-decision` |
| `DATA Β· 15` | `jpa` Β· `jdbc` Β· `mongodb` Β· `es` Β· `redis` Β· `s3` Β· `http` Β· `file` Β· `ldap` Β· `k8s` Β· `memory` Β· `feishu` Β· `dingtalk` Β· `notion` Β· `airtable` |
| `PLUGINS Β· 19` | `job` Β· `monitor` Β· `notice` Β· `report` Β· `print` Β· `revision` Β· `comment` Β· `share` Β· `sso` Β· `webhook` Β· `config` Β· `file-center` Β· `terminal` Β· `remote` Β· `magic-api` Β· `designer` Β· `generator` Β· `atlas` Β· `template` |
| `PLATFORM` | `cloud` Β· `erupt-sdk` (9 languages) Β· `excel` Β· `websocket` Β· `git` Β· UI themes `ant-design` / `element-plus` / `element-ui` Β· `docker` |
| `PRO Β· 3` | `flow` Β· `saas` Β· `cube` β€” see [08](#08--commercial-modules) |

Full list β€” [erupt.xyz](https://www.erupt.xyz) Β· API reference β€” [javadoc.erupt.xyz](https://javadoc.erupt.xyz)

---

## 08 Β· COMMERCIAL MODULES

> `CORE IS FREE, FOREVER` β€” `erupt-core` / `erupt-annotation` / `erupt-web` / `erupt-jpa` / `erupt-upms` / `erupt-ai` and other core modules are Apache 2.0 forever. No license restrictions Β· no project-count limits Β· no commercial restrictions ([governance commitment β†’](./.github/GOVERNANCE.md)). Commercial modules are optional enterprise extensions that evolve independently.

| MODULE | USE CASE | DOCS |
|---|---|---|
| `ERUPT FLOW` | Workflow / approval engine | [docs β†’](https://docs.erupt.xyz/modules/pro/erupt-flow) |
| `ERUPT SAAS` | Multi-tenant infrastructure | [docs β†’](https://docs.erupt.xyz/modules/pro/erupt-tenant) |
| `ERUPT CUBE` | BI platform with semantic layer | [docs β†’](https://docs.erupt.xyz/modules/pro/erupt-cube) |

Source-code delivery Β· one-time purchase Β· perpetual use.

**[PRICING & PURCHASE β†’](https://www.erupt.xyz/?utm_source=github&utm_medium=readme&utm_campaign=pro#!/pro)**

---

## 09 Β· TELEMETRY

Erupt reports anonymous usage statistics β€” erupt version, installed modules, JDK, OS and database type, Spring Boot version, timezone β€” to guide compatibility and roadmap decisions. It never sends business data, credentials, hostnames, or anything IP-derived, and requests fail silently without ever blocking startup.

Opt out with `erupt.telemetry.enabled: false` or the `ERUPT_TELEMETRY_DISABLED=1` environment variable; CI is skipped automatically.

---

## 10 Β· CONTRIBUTING

Free and open source. Code, bug reports, ideas, use cases, blog posts β€” all welcome.

Read the [contribution guidelines](./.github/CONTRIBUTING.md), then open an [issue](https://github.com/erupts/erupt/issues) or [pull request](https://github.com/erupts/erupt/pulls).

[![Contributors](https://contrib.rocks/image?repo=erupts/erupt)](https://github.com/erupts/erupt/graphs/contributors)

> `IF ERUPT SAVES YOU TIME β€” STAR IT.` It really helps the project grow.





Star History Chart

---

## 11 Β· LICENSE

![license.svg](readme/license.svg)

[Apache 2.0](./LICENSE) β€” free Β· open source Β· commercial use permitted Β· fork-friendly.

AUTHOR β€” YuePeng Β· erupts@126.com