EthanSivan opened a new issue, #12890:
URL: https://github.com/apache/apisix/issues/12890
### Current Behavior
Write a custom idempot.lua, save it and get an error: schema validate
failed: schema not found, path:plugins.custom-idempot
### Expected Behavior
_No response_
### Error Logs
/usr/local/openresty//luajit/bin/luajit ./apisix/cli/apisix.lua init
/usr/local/openresty//luajit/bin/luajit ./apisix/cli/apisix.lua init_etcd
trying to initialize the data of etcd
2026/01/12 09:48:27 [warn] 1#1: low address bits of 127.0.0.1/24 are
meaningless in /usr/local/apisix/conf/nginx.conf:246
nginx: [warn] low address bits of 127.0.0.1/24 are meaningless in
/usr/local/apisix/conf/nginx.conf:246
2026/01/12 09:48:27 [warn[] 55#55: *7 [lua] plugin.lua:219: load(): new
plugins:
{"openwhisk":true,"openfunction":true,"serverless-post-function":true,"chaitin-waf":true,"multi-auth":true,"openid-connect":true,"authz-casbin":true,"authz-casdoor":true,"wolf-rbac":true,"ldap-auth":true,"hmac-auth":true,"basic-auth":true,"jwt-auth":true,"jwe-decrypt":true,"key-auth":true,"consumer-restriction":true,"attach-consumer-label":true,"forward-auth":true,"opa":true,"authz-keycloak":true,"proxy-cache":true,"body-transformer":true,"ai-prompt-template":true,"ai-prompt-decorator":true,"ai-prompt-guard":true,"ai-rag":true,"ai-rate-limiting":true,"ai-proxy-multi":true,"ai-proxy":true,"ai-aws-content-moderation":true,"ai-aliyun-content-moderation":true,"proxy-mirror":true,"proxy-rewrite":true,"workflow":true,"api-breaker":true,"limit-conn":true,"limit-count":true,"limit-req":true,"gzip":true,"traffic-split":true,"response-rewrite":true,"mcp-bridge":true,"degraphql":true,"kafka-proxy":true,"grpc-tra
nscode":true,"grpc-web":true,"http-dubbo":true,"cas-auth":true,"redirect":true,"datadog":true,"lago":true,"real-ip":true,"ai":true,"client-control":true,"proxy-control":true,"request-id":true,"zipkin":true,"ext-plugin-pre-req":true,"fault-injection":true,"mocking":true,"serverless-pre-function":true,"cors":true,"ip-restriction":true,"ua-restriction":true,"referer-restriction":true,"csrf":true,"uri-blocker":true,"request-validation":true,"inspect":true,"example-plugin":true,"aws-lambda":true,"azure-functions":true,"ai-request-rewrite":true,"ext-plugin-post-resp":true,"ext-plugin-post-req":true,"tencent-cloud-cls":true,"clickhouse-logger":true,"file-logger":true,"udp-logger":true,"syslog":true,"rocketmq-logger":true,"kafka-logger":true,"tcp-logger":true,"sls-logger":true,"google-cloud-logging":true,"skywalking-logger":true,"splunk-hec-logging":true,"http-logger":true,"loggly":true,"echo":true,"elasticsearch-logger":true,"loki-logger":true,"prometheus":true,"public-api":true},
context:
init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 52#52: *4 [lua] plugin.lua:219: load(): new
plugins:
{"openwhisk":true,"openfunction":true,"serverless-post-function":true,"chaitin-waf":true,"multi-auth":true,"openid-connect":true,"authz-casbin":true,"authz-casdoor":true,"wolf-rbac":true,"ldap-auth":true,"hmac-auth":true,"basic-auth":true,"jwt-auth":true,"jwe-decrypt":true,"key-auth":true,"consumer-restriction":true,"attach-consumer-label":true,"forward-auth":true,"opa":true,"authz-keycloak":true,"proxy-cache":true,"body-transformer":true,"ai-prompt-template":true,"ai-prompt-decorator":true,"ai-prompt-guard":true,"ai-rag":true,"ai-rate-limiting":true,"ai-proxy-multi":true,"ai-proxy":true,"ai-aws-content-moderation":true,"ai-aliyun-content-moderation":true,"proxy-mirror":true,"proxy-rewrite":true,"workflow":true,"api-breaker":true,"limit-conn":true,"limit-count":true,"limit-req":true,"gzip":true,"traffic-split":true,"response-rewrite":true,"mcp-bridge":true,"degraphql":true,"kafka-proxy":true,"grpc-tra
nscode":true,"grpc-web":true,"http-dubbo":true,"cas-auth":true,"redirect":true,"datadog":true,"lago":true,"real-ip":true,"ai":true,"client-control":true,"proxy-control":true,"request-id":true,"zipkin":true,"ext-plugin-pre-req":true,"fault-injection":true,"mocking":true,"serverless-pre-function":true,"cors":true,"ip-restriction":true,"ua-restriction":true,"referer-restriction":true,"csrf":true,"uri-blocker":true,"request-validation":true,"inspect":true,"example-plugin":true,"aws-lambda":true,"azure-functions":true,"ai-request-rewrite":true,"ext-plugin-post-resp":true,"ext-plugin-post-req":true,"tencent-cloud-cls":true,"clickhouse-logger":true,"file-logger":true,"udp-logger":true,"syslog":true,"rocketmq-logger":true,"kafka-logger":true,"tcp-logger":true,"sls-logger":true,"google-cloud-logging":true,"skywalking-logger":true,"splunk-hec-logging":true,"http-logger":true,"loggly":true,"echo":true,"elasticsearch-logger":true,"loki-logger":true,"prometheus":true,"public-api":true},
context:
init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 54#54: *6 [lua] plugin.lua:219: load(): new
plugins:
{"openwhisk":true,"openfunction":true,"serverless-post-function":true,"chaitin-waf":true,"multi-auth":true,"openid-connect":true,"authz-casbin":true,"authz-casdoor":true,"wolf-rbac":true,"ldap-auth":true,"hmac-auth":true,"basic-auth":true,"jwt-auth":true,"jwe-decrypt":true,"key-auth":true,"consumer-restriction":true,"attach-consumer-label":true,"forward-auth":true,"opa":true,"authz-keycloak":true,"proxy-cache":true,"body-transformer":true,"ai-prompt-template":true,"ai-prompt-decorator":true,"ai-prompt-guard":true,"ai-rag":true,"ai-rate-limiting":true,"ai-proxy-multi":true,"ai-proxy":true,"ai-aws-content-moderation":true,"ai-aliyun-content-moderation":true,"proxy-mirror":true,"proxy-rewrite":true,"workflow":true,"api-breaker":true,"limit-conn":true,"limit-count":true,"limit-req":true,"gzip":true,"traffic-split":true,"response-rewrite":true,"mcp-bridge":true,"degraphql":true,"kafka-proxy":true,"grpc-tra
nscode":true,"grpc-web":true,"http-dubbo":true,"cas-auth":true,"redirect":true,"datadog":true,"lago":true,"real-ip":true,"ai":true,"client-control":true,"proxy-control":true,"request-id":true,"zipkin":true,"ext-plugin-pre-req":true,"fault-injection":true,"mocking":true,"serverless-pre-function":true,"cors":true,"ip-restriction":true,"ua-restriction":true,"referer-restriction":true,"csrf":true,"uri-blocker":true,"request-validation":true,"inspect":true,"example-plugin":true,"aws-lambda":true,"azure-functions":true,"ai-request-rewrite":true,"ext-plugin-post-resp":true,"ext-plugin-post-req":true,"tencent-cloud-cls":true,"clickhouse-logger":true,"file-logger":true,"udp-logger":true,"syslog":true,"rocketmq-logger":true,"kafka-logger":true,"tcp-logger":true,"sls-logger":true,"google-cloud-logging":true,"skywalking-logger":true,"splunk-hec-logging":true,"http-logger":true,"loggly":true,"echo":true,"elasticsearch-logger":true,"loki-logger":true,"prometheus":true,"public-api":true},
context:
init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 49#49: *1 [lua] plugin.lua:219: load(): new
plugins:
{"openwhisk":true,"openfunction":true,"serverless-post-function":true,"chaitin-waf":true,"multi-auth":true,"openid-connect":true,"authz-casbin":true,"authz-casdoor":true,"wolf-rbac":true,"ldap-auth":true,"hmac-auth":true,"basic-auth":true,"jwt-auth":true,"jwe-decrypt":true,"key-auth":true,"consumer-restriction":true,"attach-consumer-label":true,"forward-auth":true,"opa":true,"authz-keycloak":true,"proxy-cache":true,"body-transformer":true,"ai-prompt-template":true,"ai-prompt-decorator":true,"ai-prompt-guard":true,"ai-rag":true,"ai-rate-limiting":true,"ai-proxy-multi":true,"ai-proxy":true,"ai-aws-content-moderation":true,"ai-aliyun-content-moderation":true,"proxy-mirror":true,"proxy-rewrite":true,"workflow":true,"api-breaker":true,"limit-conn":true,"limit-count":true,"limit-req":true,"gzip":true,"traffic-split":true,"response-rewrite":true,"mcp-bridge":true,"degraphql":true,"kafka-proxy":true,"grpc-tra
nscode":true,"grpc-web":true,"http-dubbo":true,"cas-auth":true,"redirect":true,"datadog":true,"lago":true,"real-ip":true,"ai":true,"client-control":true,"proxy-control":true,"request-id":true,"zipkin":true,"ext-plugin-pre-req":true,"fault-injection":true,"mocking":true,"serverless-pre-function":true,"cors":true,"ip-restriction":true,"ua-restriction":true,"referer-restriction":true,"csrf":true,"uri-blocker":true,"request-validation":true,"inspect":true,"example-plugin":true,"aws-lambda":true,"azure-functions":true,"ai-request-rewrite":true,"ext-plugin-post-resp":true,"ext-plugin-post-req":true,"tencent-cloud-cls":true,"clickhouse-logger":true,"file-logger":true,"udp-logger":true,"syslog":true,"rocketmq-logger":true,"kafka-logger":true,"tcp-logger":true,"sls-logger":true,"google-cloud-logging":true,"skywalking-logger":true,"splunk-hec-logging":true,"http-logger":true,"loggly":true,"echo":true,"elasticsearch-logger":true,"loki-logger":true,"prometheus":true,"public-api":true},
context:
init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 53#53: *5 [lua] plugin.lua:219: load(): new
plugins:
{"openwhisk":true,"openfunction":true,"serverless-post-function":true,"chaitin-waf":true,"multi-auth":true,"openid-connect":true,"authz-casbin":true,"authz-casdoor":true,"wolf-rbac":true,"ldap-auth":true,"hmac-auth":true,"basic-auth":true,"jwt-auth":true,"jwe-decrypt":true,"key-auth":true,"consumer-restriction":true,"attach-consumer-label":true,"forward-auth":true,"opa":true,"authz-keycloak":true,"proxy-cache":true,"body-transformer":true,"ai-prompt-template":true,"ai-prompt-decorator":true,"ai-prompt-guard":true,"ai-rag":true,"ai-rate-limiting":true,"ai-proxy-multi":true,"ai-proxy":true,"ai-aws-content-moderation":true,"ai-aliyun-content-moderation":true,"proxy-mirror":true,"proxy-rewrite":true,"workflow":true,"api-breaker":true,"limit-conn":true,"limit-count":true,"limit-req":true,"gzip":true,"traffic-split":true,"response-rewrite":true,"mcp-bridge":true,"degraphql":true,"kafka-proxy":true,"grpc-tra
nscode":true,"grpc-web":true,"http-dubbo":true,"cas-auth":true,"redirect":true,"datadog":true,"lago":true,"real-ip":true,"ai":true,"client-control":true,"proxy-control":true,"request-id":true,"zipkin":true,"ext-plugin-pre-req":true,"fault-injection":true,"mocking":true,"serverless-pre-function":true,"cors":true,"ip-restriction":true,"ua-restriction":true,"referer-restriction":true,"csrf":true,"uri-blocker":true,"request-validation":true,"inspect":true,"example-plugin":true,"aws-lambda":true,"azure-functions":true,"ai-request-rewrite":true,"ext-plugin-post-resp":true,"ext-plugin-post-req":true,"tencent-cloud-cls":true,"clickhouse-logger":true,"file-logger":true,"udp-logger":true,"syslog":true,"rocketmq-logger":true,"kafka-logger":true,"tcp-logger":true,"sls-logger":true,"google-cloud-logging":true,"skywalking-logger":true,"splunk-hec-logging":true,"http-logger":true,"loggly":true,"echo":true,"elasticsearch-logger":true,"loki-logger":true,"prometheus":true,"public-api":true},
context:
init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 51#51: *3 [lua] plugin.lua:219: load(): new
plugins:
{"openwhisk":true,"openfunction":true,"serverless-post-function":true,"chaitin-waf":true,"multi-auth":true,"openid-connect":true,"authz-casbin":true,"authz-casdoor":true,"wolf-rbac":true,"ldap-auth":true,"hmac-auth":true,"basic-auth":true,"jwt-auth":true,"jwe-decrypt":true,"key-auth":true,"consumer-restriction":true,"attach-consumer-label":true,"forward-auth":true,"opa":true,"authz-keycloak":true,"proxy-cache":true,"body-transformer":true,"ai-prompt-template":true,"ai-prompt-decorator":true,"ai-prompt-guard":true,"ai-rag":true,"ai-rate-limiting":true,"ai-proxy-multi":true,"ai-proxy":true,"ai-aws-content-moderation":true,"ai-aliyun-content-moderation":true,"proxy-mirror":true,"proxy-rewrite":true,"workflow":true,"api-breaker":true,"limit-conn":true,"limit-count":true,"limit-req":true,"gzip":true,"traffic-split":true,"response-rewrite":true,"mcp-bridge":true,"degraphql":true,"kafka-proxy":true,"grpc-tra
nscode":true,"grpc-web":true,"http-dubbo":true,"cas-auth":true,"redirect":true,"datadog":true,"lago":true,"real-ip":true,"ai":true,"client-control":true,"proxy-control":true,"request-id":true,"zipkin":true,"ext-plugin-pre-req":true,"fault-injection":true,"mocking":true,"serverless-pre-function":true,"cors":true,"ip-restriction":true,"ua-restriction":true,"referer-restriction":true,"csrf":true,"uri-blocker":true,"request-validation":true,"inspect":true,"example-plugin":true,"aws-lambda":true,"azure-functions":true,"ai-request-rewrite":true,"ext-plugin-post-resp":true,"ext-plugin-post-req":true,"tencent-cloud-cls":true,"clickhouse-logger":true,"file-logger":true,"udp-logger":true,"syslog":true,"rocketmq-logger":true,"kafka-logger":true,"tcp-logger":true,"sls-logger":true,"google-cloud-logging":true,"skywalking-logger":true,"splunk-hec-logging":true,"http-logger":true,"loggly":true,"echo":true,"elasticsearch-logger":true,"loki-logger":true,"prometheus":true,"public-api":true},
context:
init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 50#50: *2 [lua] plugin.lua:219: load(): new
plugins:
{"openwhisk":true,"openfunction":true,"serverless-post-function":true,"chaitin-waf":true,"multi-auth":true,"openid-connect":true,"authz-casbin":true,"authz-casdoor":true,"wolf-rbac":true,"ldap-auth":true,"hmac-auth":true,"basic-auth":true,"jwt-auth":true,"jwe-decrypt":true,"key-auth":true,"consumer-restriction":true,"attach-consumer-label":true,"forward-auth":true,"opa":true,"authz-keycloak":true,"proxy-cache":true,"body-transformer":true,"ai-prompt-template":true,"ai-prompt-decorator":true,"ai-prompt-guard":true,"ai-rag":true,"ai-rate-limiting":true,"ai-proxy-multi":true,"ai-proxy":true,"ai-aws-content-moderation":true,"ai-aliyun-content-moderation":true,"proxy-mirror":true,"proxy-rewrite":true,"workflow":true,"api-breaker":true,"limit-conn":true,"limit-count":true,"limit-req":true,"gzip":true,"traffic-split":true,"response-rewrite":true,"mcp-bridge":true,"degraphql":true,"kafka-proxy":true,"grpc-tra
nscode":true,"grpc-web":true,"http-dubbo":true,"cas-auth":true,"redirect":true,"datadog":true,"lago":true,"real-ip":true,"ai":true,"client-control":true,"proxy-control":true,"request-id":true,"zipkin":true,"ext-plugin-pre-req":true,"fault-injection":true,"mocking":true,"serverless-pre-function":true,"cors":true,"ip-restriction":true,"ua-restriction":true,"referer-restriction":true,"csrf":true,"uri-blocker":true,"request-validation":true,"inspect":true,"example-plugin":true,"aws-lambda":true,"azure-functions":true,"ai-request-rewrite":true,"ext-plugin-post-resp":true,"ext-plugin-post-req":true,"tencent-cloud-cls":true,"clickhouse-logger":true,"file-logger":true,"udp-logger":true,"syslog":true,"rocketmq-logger":true,"kafka-logger":true,"tcp-logger":true,"sls-logger":true,"google-cloud-logging":true,"skywalking-logger":true,"splunk-hec-logging":true,"http-logger":true,"loggly":true,"echo":true,"elasticsearch-logger":true,"loki-logger":true,"prometheus":true,"public-api":true},
context:
init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 56#56: *8 [lua] plugin.lua:219: load(): new
plugins:
{"openwhisk":true,"openfunction":true,"serverless-post-function":true,"chaitin-waf":true,"multi-auth":true,"openid-connect":true,"authz-casbin":true,"authz-casdoor":true,"wolf-rbac":true,"ldap-auth":true,"hmac-auth":true,"basic-auth":true,"jwt-auth":true,"jwe-decrypt":true,"key-auth":true,"consumer-restriction":true,"attach-consumer-label":true,"forward-auth":true,"opa":true,"authz-keycloak":true,"proxy-cache":true,"body-transformer":true,"ai-prompt-template":true,"ai-prompt-decorator":true,"ai-prompt-guard":true,"ai-rag":true,"ai-rate-limiting":true,"ai-proxy-multi":true,"ai-proxy":true,"ai-aws-content-moderation":true,"ai-aliyun-content-moderation":true,"proxy-mirror":true,"proxy-rewrite":true,"workflow":true,"api-breaker":true,"limit-conn":true,"limit-count":true,"limit-req":true,"gzip":true,"traffic-split":true,"response-rewrite":true,"mcp-bridge":true,"degraphql":true,"kafka-proxy":true,"grpc-tra
nscode":true,"grpc-web":true,"http-dubbo":true,"cas-auth":true,"redirect":true,"datadog":true,"lago":true,"real-ip":true,"ai":true,"client-control":true,"proxy-control":true,"request-id":true,"zipkin":true,"ext-plugin-pre-req":true,"fault-injection":true,"mocking":true,"serverless-pre-function":true,"cors":true,"ip-restriction":true,"ua-restriction":true,"referer-restriction":true,"csrf":true,"uri-blocker":true,"request-validation":true,"inspect":true,"example-plugin":true,"aws-lambda":true,"azure-functions":true,"ai-request-rewrite":true,"ext-plugin-post-resp":true,"ext-plugin-post-req":true,"tencent-cloud-cls":true,"clickhouse-logger":true,"file-logger":true,"udp-logger":true,"syslog":true,"rocketmq-logger":true,"kafka-logger":true,"tcp-logger":true,"sls-logger":true,"google-cloud-logging":true,"skywalking-logger":true,"splunk-hec-logging":true,"http-logger":true,"loggly":true,"echo":true,"elasticsearch-logger":true,"loki-logger":true,"prometheus":true,"public-api":true},
context:
init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 59#59: *9 [lua] plugin.lua:219: load(): new
plugins:
{"openwhisk":true,"openfunction":true,"serverless-post-function":true,"chaitin-waf":true,"multi-auth":true,"openid-connect":true,"authz-casbin":true,"authz-casdoor":true,"wolf-rbac":true,"ldap-auth":true,"hmac-auth":true,"basic-auth":true,"jwt-auth":true,"jwe-decrypt":true,"key-auth":true,"consumer-restriction":true,"attach-consumer-label":true,"forward-auth":true,"opa":true,"authz-keycloak":true,"proxy-cache":true,"body-transformer":true,"ai-prompt-template":true,"ai-prompt-decorator":true,"ai-prompt-guard":true,"ai-rag":true,"ai-rate-limiting":true,"ai-proxy-multi":true,"ai-proxy":true,"ai-aws-content-moderation":true,"ai-aliyun-content-moderation":true,"proxy-mirror":true,"proxy-rewrite":true,"workflow":true,"api-breaker":true,"limit-conn":true,"limit-count":true,"limit-req":true,"gzip":true,"traffic-split":true,"response-rewrite":true,"mcp-bridge":true,"degraphql":true,"kafka-proxy":true,"grpc-tra
nscode":true,"grpc-web":true,"http-dubbo":true,"cas-auth":true,"redirect":true,"datadog":true,"lago":true,"real-ip":true,"ai":true,"client-control":true,"proxy-control":true,"request-id":true,"zipkin":true,"ext-plugin-pre-req":true,"fault-injection":true,"mocking":true,"serverless-pre-function":true,"cors":true,"ip-restriction":true,"ua-restriction":true,"referer-restriction":true,"csrf":true,"uri-blocker":true,"request-validation":true,"inspect":true,"example-plugin":true,"aws-lambda":true,"azure-functions":true,"ai-request-rewrite":true,"ext-plugin-post-resp":true,"ext-plugin-post-req":true,"tencent-cloud-cls":true,"clickhouse-logger":true,"file-logger":true,"udp-logger":true,"syslog":true,"rocketmq-logger":true,"kafka-logger":true,"tcp-logger":true,"sls-logger":true,"google-cloud-logging":true,"skywalking-logger":true,"splunk-hec-logging":true,"http-logger":true,"loggly":true,"echo":true,"elasticsearch-logger":true,"loki-logger":true,"prometheus":true,"public-api":true},
context:
init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 52#52: *4 [lua] plugin.lua:269: load_stream():
new plugins:
{"syslog":true,"limit-conn":true,"traffic-split":true,"ip-restriction":true,"mqtt-proxy":true},
context: init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 55#55: *7 [lua] plugin.lua:269: load_stream():
new plugins:
{"syslog":true,"limit-conn":true,"traffic-split":true,"ip-restriction":true,"mqtt-proxy":true},
context: init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 53#53: *5 [lua] plugin.lua:269: load_stream():
new plugins:
{"syslog":true,"limit-conn":true,"traffic-split":true,"ip-restriction":true,"mqtt-proxy":true},
context: init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 51#51: *3 [lua] plugin.lua:269: load_stream():
new plugins:
{"syslog":true,"limit-conn":true,"traffic-split":true,"ip-restriction":true,"mqtt-proxy":true},
context: init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 56#56: *8 [lua] plugin.lua:269: load_stream():
new plugins:
{"syslog":true,"limit-conn":true,"traffic-split":true,"ip-restriction":true,"mqtt-proxy":true},
context: init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 50#50: *2 [lua] plugin.lua:269: load_stream():
new plugins:
{"syslog":true,"limit-conn":true,"traffic-split":true,"ip-restriction":true,"mqtt-proxy":true},
context: init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 49#49: *1 [lua] plugin.lua:269: load_stream():
new plugins:
{"syslog":true,"limit-conn":true,"traffic-split":true,"ip-restriction":true,"mqtt-proxy":true},
context: init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 54#54: *6 [lua] plugin.lua:269: load_stream():
new plugins:
{"syslog":true,"limit-conn":true,"traffic-split":true,"ip-restriction":true,"mqtt-proxy":true},
context: init_worker_by_lua*
2026/01/12 09:48:27 [warn[] 59#59: *9 [lua] plugin.lua:269: load_stream():
new plugins:
{"syslog":true,"limit-conn":true,"traffic-split":true,"ip-restriction":true,"mqtt-proxy":true},
context: init_worker_by_lua*
### Steps to Reproduce
## Title
**APISIX installed via Helm cannot load custom in-tree plugins even when
plugin files and config are present**
---
## Environment
- **APISIX version**: 3.14.1-ubuntu
- **Installation method**: Helm Chart
- **Kubernetes**: v1.33.3
- **Deployment type**: traditional
- **Plugin type**: Custom Lua plugin (non-ext-plugin / in-tree style)
---
## What I tried (Steps)
### 1. Install APISIX via Helm
```bash
helm install apisix apisix/apisix \
--namespace apisix \
--create-namespace \
--set gateway.type=NodePort \
--set admin.enabled=true \
--set etcd.persistence.enabled=true
```
APISIX starts successfully with default plugins.
---
### 2. Add a custom in-tree plugin
Create a custom plugin file:
```text
custom-context.lua
```
The plugin has a valid structure:
- `name`
- `priority`
- `schema`
- `access(conf, ctx)` implemented
```
-- custom-access-logger.lua
local core = require("apisix.core")
local schema = {
type = "object",
properties = {},
additionalProperties = false,
}
local _M = {
name = "custom-access-logger",
priority = 100,
version = 1.0,
schema = schema,
}
function _M.log(conf, ctx)
if ngx.status >= 400 then
return
end
if not ctx.custom_ctx then
return
end
local now = ngx.now()
local latency = now - (ctx.custom_ctx.start_time or now)
local access_log = {
event_type = "apisix_access_log",
request_id = ctx.custom_ctx.request_id,
traceparent = ctx.custom_ctx.traceparent,
method = ctx.custom_ctx.method,
uri = ctx.custom_ctx.uri,
status = ngx.status,
latency_ms = math.floor(latency * 1000),
timestamp = os.date("!%Y-%m-%dT%H:%M:%SZ")
}
core.log.info(
"APISIX_ACCESS_LOG ",
core.json.encode(access_log)
)
end
return _M
```
---
### 3. Mount the plugin file into the Pod
Mount the plugin without overwriting built-in plugins, for example:
```text
/usr/local/apisix/custom_plugins/apisix/plugins/custom-context.lua
```
And configure Lua search path:
```yaml
apisix:
extra_lua_path: "/usr/local/apisix/custom_plugins/?.lua;;"
```
---
### 4. Enable the plugin in `config.yaml`
```yaml
apisix:
plugins:
- custom-context
```
---
### 5. Restart APISIX Pod
```bash
kubectl rollout restart deploy apisix -n apisix
```
---
## Expected Behavior
- APISIX should attempt to load `custom-context`
- The plugin should appear in startup logs (e.g. `plugin.lua: load(): new
plugins`)
- The plugin should be available for use via Admin API / route configuration
---
## Actual Behavior
- APISIX starts normally
- No error logs
- No warning logs
- `custom-context` **never appears** in the loaded plugin list
- The plugin is silently ignored
Startup logs only show built-in plugins.
---
## Conclusion / Questions
- Is it expected behavior that **APISIX installed via Helm cannot load new
custom in-tree plugins without rebuilding the image**?
- Is `ext-plugin` the **only supported extension mechanism** for Helm-based
deployments?
- If so, could this limitation be documented more explicitly in Helm /
plugin documentation?
---
### Environment
- APISIX version (run `apisix version`):
- Operating system (run `uname -a`):Linux k8s-master
5.10.134-19.1.al8.x86_64 #1 SMP Wed Jun 25 10:21:27 CST 2025 x86_64 x86_64
x86_64 GNU/Linux
- OpenResty / Nginx version (run `openresty -V` or `nginx -V`):use k8s
- etcd version, if relevant (run `curl
http://127.0.0.1:9090/v1/server_info`):
- APISIX Dashboard version, if relevant:
- Plugin runner version, for issues related to plugin runners:
- LuaRocks version, for installation issues (run `luarocks --version`):
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]