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.
- Spec-first coding is mandatory: Before changing behavior, APIs, SDKs,
plugins, storage, runtime flow, or domain semantics, AI agents MUST read the
relevant specs under
specs/and treat them as the rule source for the implementation. - Discuss spec-impacting changes before coding: If a change touches behavior covered by an existing spec, or exposes a gap between the code and the spec, AI agents MUST discuss the implementation direction and the required spec update with maintainers before starting the code change.
- Update specs with the design: Any design proposal that changes or clarifies spec-covered behavior MUST include the corresponding spec updates in the same change set. When the design is large or controversial, prefer a spec/design-only PR first, then follow with implementation PRs.
- API IT impact comes first: Before adding, changing, deleting, or
deprecating any HTTP API, AI agents MUST analyze the affected
test/openapi-testcoverage and update the API IT scenario matrix, test cases, and coverage registry in the same change set. If the functional path cannot be exercised in standalone IT, cover boundary/error scenarios and document the reason. - Java SDK IT impact comes first: Before adding, changing, deleting, or
deprecating any public Java SDK interface, factory, model, listener behavior,
lifecycle behavior, or exception mapping, AI agents MUST analyze and update
test/java-sdk-testcoverage, including scenario documentation. If the end-to-end success path is impractical, cover SDK parameter validation, boundary behavior, and controlled exceptions. - 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 standalone-server integration tests
mvn -pl test/openapi-test -Pintegration-test -DskipTests=false verify
mvn -pl test/java-sdk-test -Pjava-sdk-integration-test -DskipTests=false verify
mvn -pl test/maintainer-sdk-test -Pmaintainer-sdk-integration-test -DskipTests=false verify
# 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 -DskipTestsBefore committing Java code or tests, AI agents MUST run Spotless for the affected module or nearest aggregator:
- Run
mvn spotless:applyfirst. - Run
mvn spotless:checkfor the same scope. - Then run the relevant compile/check/test command.
- Commit only after Spotless and the relevant validation pass.
Do not rely on checkstyle:check, spotbugs:check, or git diff --check as a
substitute for Spotless. Spotless uses the project formatter and may accept
formatting that generic whitespace checks report differently.
Follows 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/.
Before coding any API, SDK, plugin, storage, runtime, or domain change, AI
agents MUST consult the relevant specs below. If the intended behavior
differs from the existing spec, do not silently implement the code first:
discuss the change with maintainers and update the affected specs as part of
the design. For broad or uncertain changes, submit a spec/design PR first so
the contract is reviewed before implementation.
English:
- Design foundation: Nacos Design Spec, Resource Model Spec, Compatibility And Deprecation 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, Client Runtime Spec, Client Connection And Failover Spec, Client Ability Negotiation Spec, Client Local Cache And Redo Spec, Runtime Push And Reconnect 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 Consistency, Dump, And Visibility 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 Ephemeral Distro Consistency Spec, Naming Persistent CP Consistency 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: Integration And Adapter Spec, 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
- Testing model: API Integration Test Spec, Java SDK Integration Test Spec
Simplified Chinese:
- 设计基础: Nacos 设计规范, 资源模型规范, 兼容与废弃策略规范, 基础能力规范, 服务端生命周期与环境配置规范, 集群成员规范, 远程连接生命周期规范, 请求过滤与运行时上下文规范, 内部 RPC 与集群请求规范, AP 一致性规范, CP 一致性规范, 持久化与 Dump 规范, 任务执行规范, 事件分发与 NotifyCenter 规范, 可观测钩子规范, 核心功能规范
- 接口模型: HTTP API 规范, 鉴权规范, 响应与错误规范, V3 API 范围, gRPC API 规范, SDK 规范, Java SDK 实现规范, 客户端运行时规范, 客户端连接与故障切换规范, 客户端能力协商规范, 客户端本地缓存与 Redo 规范, 运行时推送与重连规范
- 领域模型: Config 规范, Config 资源规范, Config 发布与查询规范, Config 监听与 Watch 规范, Config 灰度发布规范, Config 持久化与历史规范, Config 一致性、Dump 与可见性规范, Config 容量与运维规范, Naming 规范, Naming 资源规范, Naming 实例生命周期规范, Naming 发现与订阅规范, Naming 健康检查与保护规范, Naming 元数据与 Selector 规范, Naming 一致性与客户端状态规范, Naming 临时服务 Distro 一致性规范, Naming 持久服务 CP 一致性规范, Naming 运维规范, AI Registry 规范, AI 资源模型规范, AI 资源生命周期规范, AI Registry 适配器规范, MCP Server 规范, A2A Agent 规范, Prompt 规范, Skill 规范, AgentSpec 规范, Core 运维规范, Console 规范, 分布式锁规范
- 扩展模型: 集成与适配器规范, 插件规范
- 安全模型: 鉴权与权限规范, 鉴权插件规范, RAM 鉴权插件规范, OIDC 鉴权插件规范, 可见性插件规范, 默认鉴权插件实现规范
- 测试模型: API 集成测试规范, Java SDK 集成测试规范
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_APIFor every HTTP API addition, modification, deletion, or deprecation, handle
test/openapi-test before the API change is considered complete:
- Read the affected controller, form/request model, validators, service path, response model, exception handling, and matching specs.
- Build or update the scenario matrix for expected capability, boundary/validation behavior, and exception/error handling.
- Add, update, or remove API IT cases for the changed contract. The goal is API scenario coverage, not line or branch coverage.
- Update
test/openapi-test/API_TEST_COVERAGE.mdand the matching*_API_TEST_SCENARIOS.mddocument. - If the functional success path is hard to exercise in standalone IT, at least cover boundary and error scenarios and document the uncovered path.
For every Java SDK public contract change, handle test/java-sdk-test before
the SDK change is considered complete:
- Read the public interface, implementation, request/response model, listener path, lifecycle code, exception mapping, and matching SDK/client specs.
- Build or update the scenario matrix for factory/lifecycle behavior, expected capability, boundary/validation behavior, listener/subscription behavior, and exception handling.
- Add, update, or remove Java SDK IT cases for the changed SDK contract. Assert SDK return values, callbacks, remote side effects, and typed exceptions.
- Update
test/java-sdk-test/JAVA_SDK_IT_COVERAGE.md. - Keep SDK ITs as external-client tests against a standalone Nacos server; do not start Spring or Nacos inside the test class.
import 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.