Skip to main content
Version: 0.9


The KCL language provides multiple general-purpose programming language interfaces, with identical API forms and features.

C/Rust APIs

The core of KCL is developed in Rust, and the C language API is exported externally for packaging and integration in other high-level languages such as Go, Python, etc.


The C-API provided by KCL does not have a REST-API. The REST-API is defined by Protobuf.

Start REST Service

The RestAPI service can be started in the following way:

kcl server

The service can then be requested via the POST protocol:

curl -X POST --data '{}'

The output is

"error": "",
"result": {}

The POST request and the returned JSON data are consistent with the structure defined by Protobuf.


Where the /api:protorpc/BuiltinService.Ping path represents the Ping method of the BuiltinService service.

The complete BuiltinService is defined by Protobuf:

service BuiltinService {
rpc Ping(Ping_Args) returns(Ping_Result);
rpc ListMethod(ListMethod_Args) returns(ListMethod_Result);

message Ping_Args {
string value = 1;
message Ping_Result {
string value = 1;

message ListMethod_Args {
// empty
message ListMethod_Result {
repeated string method_name_list = 1;

The Ping method can verify whether the service is normal, and the ListMethod method can query the list of all services and functions provided.


The KclvmService service is a service related to KCL functionality. The usage is the same as the BuiltinService service.

For example, there is the following Person structure definition:

schema Person:
key: str

"value" in key # 'key' is required and 'key' must contain "value"

Then we want to use Person to verify the following JSON data:

{ "key": "value" }

This can be done through the ValidateCode method of the KclvmService service. Refer to the ValidateCode_Args structure of the ValidateCode method:

message ValidateCode_Args {
string data = 1;
string code = 2;
string schema = 3;
string attribute_name = 4;
string format = 5;

Construct the JSON data required by the POST request according to the ValidateCode_Args structure, which contains the Person definition and the JSON data to be verified:

"code": "\nschema Person:\n key: str\n\n check:\n \"value\" in key # 'key' is required and 'key' must contain \"value\"\n",
"data": "{\"key\": \"value\"}"

Save this JSON data to the vet-hello.json file and verify it with the following command:

$ curl -X POST \ \
-H "accept: application/json" \
--data @./vet-hello.json
"error": "",
"result": {
"success": true