This file provides guidance to AI coding agents (Claude Code, Cursor, GitHub Copilot, etc.) when working with the Nacos repository. For human contributors, see CONTRIBUTING.md.
- Do NOT post AI-generated comments on issues or PRs. Discussions are for humans only.
- Discuss before implementing: Ensure the implementation direction is agreed upon with maintainers in the issue comments before starting work.
- Disclose AI usage: When a significant part of a commit is AI-generated, add a trailer to your commit message:
Assisted-by: Claude Code - Follow CONTRIBUTING.md for all contribution processes.
Nacos (Dynamic Naming and Configuration Service) is an easy-to-use platform designed for dynamic service discovery, configuration management, and AI agent management. It helps you build cloud-native applications and AI Agent applications easily. Key capabilities: service discovery, dynamic configuration, dynamic DNS service, service/metadata management, and AI registry (Prompt, MCP, A2A).
Current Version: 3.2.1-SNAPSHOT | Main Branch: develop | Java: JDK 17+ (client modules: JDK 8+) | Build: Maven 3.2.5+
Key modules and their roles:
- api / client / client-basic: Client-facing APIs, gRPC definitions, SDK (Java 8 compatible)
- common: Shared utilities, HTTP client, notify center, executor
- config: Configuration management server
- naming: Service discovery and registration server
- core: Core server infrastructure (cluster, distributed consensus)
- consistency: JRaft-based CP protocol + custom Distro AP protocol
- auth: Authentication and authorization
- plugin / plugin-default-impl: Extensible plugin system (Java SPI). Types: auth, visibility, datasource dialect, config change, encryption, trace, environment, control, AI pipeline, AI storage
- console / console-ui: Web UI backend (Spring Boot) and frontend (React)
- ai / copilot / ai-registry-adaptor: AI Agent support, Copilot integration, and AI registry adaptor
- sys: System environment utilities and JVM parameter management
- bootstrap / server: Server startup and aggregation
- persistence: Data persistence with multi-database support (Derby, MySQL, PostgreSQL)
- maintainer-client: Internal maintenance client
- lock: Distributed lock support
Communication: gRPC (primary) + HTTP/REST (legacy compatibility). Protobuf definitions in api/src/main/proto/.
# Full build (skip tests)
mvn '-Prelease-nacos,!dev' -Dmaven.test.skip=true clean install -U
# Run all unit tests
mvn test
# Run config / naming integration tests
mvn test -Pcit-test
mvn test -Pnit-test
# Format code (run before commit)
mvn spotless:apply
# Pre-submission checks (MUST pass before PR)
mvn -B clean compile apache-rat:check checkstyle:check spotbugs:check spotless:check -DskipTestsFollows Alibaba Java Coding Guidelines.
- Checkstyle config:
style/NacosCheckStyle.xml - IDEA code style:
style/nacos-code-style-for-idea.xml
| Rule | Value |
|---|---|
| Indentation | 4 spaces (basic offset), 4 spaces (case indent) |
| Line length | 100 characters max (enforced by Spotless + Checkstyle) |
| Star imports | Forbidden — always use explicit imports |
| Unused imports | Forbidden |
| Javadoc | Required for API methods (exemptions: @Override, @Test, @Before, @After, @BeforeClass, @AfterClass, @Parameterized, @Parameters, @Bean) |
| Braces | Required for all if/else/for/while/do-while blocks, even single-line |
| Switch | Must have default case; fall-through must be commented |
| Naming | camelCase for methods/variables, PascalCase for classes, UPPER_SNAKE_CASE for constants |
| Abbreviations | Max 1 consecutive capital letter in names (exception: VO) |
Every new source file must include the Apache License 2.0 header. CI enforces this via apache-rat:check.
/*
* Copyright 1999-${year} Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/Nacos v3 APIs follow strict conventions. AI agents must comply with these standards when generating controller code.
Authoritative API and SDK specs live under specs/.
English:
- Design foundation: Nacos Design Spec, Resource Model Spec, Foundation Capabilities Spec, Server Lifecycle And Environment Configuration Spec, Cluster Membership Spec, Remote Connection Lifecycle Spec, Request Filtering And Runtime Context Spec, Internal RPC And Cluster Request Spec, AP Consistency Spec, CP Consistency Spec, Persistence And Dump Spec, Task Execution Spec, Event Dispatch And NotifyCenter Spec, Observability Hooks Spec, Core Capabilities Spec
- Interface model: HTTP API Spec, Authorization Spec, Response And Error Spec, V3 API Surface, gRPC API Spec, SDK Spec, Java SDK Implementation Spec
- Domain model: Config Spec, Config Resource Spec, Config Publish And Query Spec, Config Listener And Watch Spec, Config Gray Release Spec, Config Persistence And History Spec, Config Capacity And Ops Spec, Naming Spec, Naming Resource Spec, Naming Instance Lifecycle Spec, Naming Discovery And Subscription Spec, Naming Health And Protection Spec, Naming Metadata And Selector Spec, Naming Consistency And Client State Spec, Naming Ops Spec, AI Registry Spec, AI Resource Model Spec, AI Resource Lifecycle Spec, AI Registry Adaptor Spec, MCP Server Spec, A2A Agent Spec, Prompt Spec, Skill Spec, AgentSpec Spec, Core Operations Spec, Console Spec, Distributed Lock Spec
- Extension model: Plugin Specs
- Security model: Auth And Permission Spec, Auth Plugin Spec, RAM Auth Plugin Spec, OIDC Auth Plugin Spec, Visibility Plugin Spec, Default Auth Plugin Implementation Spec
Simplified Chinese:
- 设计基础: Nacos 设计规范, 资源模型规范, 基础能力规范, 服务端生命周期与环境配置规范, 集群成员规范, 远程连接生命周期规范, 请求过滤与运行时上下文规范, 内部 RPC 与集群请求规范, AP 一致性规范, CP 一致性规范, 持久化与 Dump 规范, 任务执行规范, 事件分发与 NotifyCenter 规范, 可观测钩子规范, 核心功能规范
- 接口模型: HTTP API 规范, 鉴权规范, 响应与错误规范, V3 API 范围, gRPC API 规范, SDK 规范, Java SDK 实现规范
- 领域模型: Config 规范, Config 资源规范, Config 发布与查询规范, Config 监听与 Watch 规范, Config 灰度发布规范, Config 持久化与历史规范, Config 容量与运维规范, Naming 规范, Naming 资源规范, Naming 实例生命周期规范, Naming 发现与订阅规范, Naming 健康检查与保护规范, Naming 元数据与 Selector 规范, Naming 一致性与客户端状态规范, Naming 运维规范, AI Registry 规范, AI 资源模型规范, AI 资源生命周期规范, AI Registry 适配器规范, MCP Server 规范, A2A Agent 规范, Prompt 规范, Skill 规范, AgentSpec 规范, Core 运维规范, Console 规范, 分布式锁规范
- 扩展模型: 插件规范
- 安全模型: 鉴权与权限规范, 鉴权插件规范, RAM 鉴权插件规范, OIDC 鉴权插件规范, 可见性插件规范, 默认鉴权插件实现规范
This section is a quick implementation checklist for agents. If it conflicts with the specs, follow the specs and update this checklist.
| API Type | Base Path | Purpose | Example |
|---|---|---|---|
| Open API | /v3/client/{module}/... |
Client-facing operations | /v3/client/ns/instance |
| Admin API | /v3/admin/{module}/... |
Administrative operations | /v3/admin/ns/service |
| Console API | /v3/console/{module}/... |
Web console operations | /v3/console/cs/config |
| Auth API | /v3/auth/{resource}/... |
Plugin-provided auth operations | /v3/auth/user |
| Module | Abbreviation | Scope |
|---|---|---|
| Config Service | cs |
Configuration management |
| Naming Service | ns |
Service discovery |
| Core | core |
Cluster, namespace management |
| AI | ai |
AI resource management |
| Plugin | plugin |
Plugin management |
Note: Auth APIs (
/v3/auth/user,/v3/auth/role,/v3/auth/permission) are defined inplugin-default-implmodule, not in core.
| Method | Usage | Idempotent |
|---|---|---|
GET |
Query / Retrieve | Yes |
POST |
Create / Register | No |
PUT |
Update / Modify | Yes |
DELETE |
Remove / Deregister | Yes |
Always wrap responses in com.alibaba.nacos.api.model.v2.Result<T>:
{
"code": 0,
"message": "success",
"data": { }
}Always add @Secured annotation (com.alibaba.nacos.auth.annotation.Secured):
@Secured(action = ActionTypes.READ, // READ or WRITE
signType = SignType.CONFIG, // CONFIG, NAMING, or CONSOLE
apiType = ApiType.ADMIN_API) // OPEN_API, ADMIN_API, or CONSOLE_APIimport com.alibaba.nacos.api.model.v2.Result;
import com.alibaba.nacos.auth.annotation.Secured;
import com.alibaba.nacos.plugin.auth.constant.ActionTypes;
import com.alibaba.nacos.plugin.auth.constant.SignType;
import com.alibaba.nacos.api.common.ApiType;
@RestController
@RequestMapping("/v3/admin/ns/service")
public class ServiceControllerV3 {
@PostMapping
@Secured(action = ActionTypes.WRITE, apiType = ApiType.ADMIN_API)
public Result<String> create(ServiceForm serviceForm) throws Exception {
serviceForm.validate();
// business logic ...
return Result.success("ok");
}
@GetMapping("/list")
@Secured(action = ActionTypes.READ, apiType = ApiType.ADMIN_API)
public Result<Page<ServiceDetailInfo>> list(ServiceListForm serviceListForm) throws NacosException {
serviceListForm.validate();
// business logic ...
return Result.success(result);
}
}- Server modules (config, naming, core, console, etc.): Java 17+
- Client/API/Plugin modules (api, client, plugin): Java 8+ — ensure backwards compatibility when modifying
All PRs must target the develop branch. Follow the PR template.
Title format: [ISSUE #14122] Add JVM --add-opens options for JDK 17+ compatibility
Pre-submission checklist:
mvn -B clean package apache-rat:check spotbugs:check -DskipTests
mvn clean install
mvn clean test-compile failsafe:integration-testDo NOT report security vulnerabilities via GitHub Issues. Use ASRC (Alibaba Security Response Center) instead.