{"id":15661751,"url":"https://github.com/jgramoll/kong-rust-pdk","last_synced_at":"2025-05-05T22:49:29.264Z","repository":{"id":86062931,"uuid":"408328921","full_name":"jgramoll/kong-rust-pdk","owner":"jgramoll","description":"Plugin Development Kit (PDK) in Rust. Supports writing custom plugins for Kong (https://github.com/Kong/kong)","archived":false,"fork":false,"pushed_at":"2022-01-06T21:17:48.000Z","size":125,"stargazers_count":18,"open_issues_count":1,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-31T00:24:51.596Z","etag":null,"topics":["kong","pdk","prost","protobuf","rust-lang","tokio-rs"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jgramoll.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-20T06:07:24.000Z","updated_at":"2024-12-24T17:58:19.000Z","dependencies_parsed_at":null,"dependency_job_id":"6151a496-cfcd-4ee2-90c5-43d99884d236","html_url":"https://github.com/jgramoll/kong-rust-pdk","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgramoll%2Fkong-rust-pdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgramoll%2Fkong-rust-pdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgramoll%2Fkong-rust-pdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgramoll%2Fkong-rust-pdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jgramoll","download_url":"https://codeload.github.com/jgramoll/kong-rust-pdk/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252590523,"owners_count":21772935,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kong","pdk","prost","protobuf","rust-lang","tokio-rs"],"created_at":"2024-10-03T13:29:09.414Z","updated_at":"2025-05-05T22:49:29.259Z","avatar_url":"https://github.com/jgramoll.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kong Rust PDK\r\n\r\n## Example\r\n\r\n```toml\r\n# Cargo.toml\r\n[dependencies]\r\nkong-rust-pdk = { git = \"https://github.com/jgramoll/kong-rust-pdk\" }\r\nserde = \"1.0\"\r\ntokio = { version = \"1.11\", features = [\"macros\", \"rt-multi-thread\"] }\r\n```\r\n\r\n```rs\r\n// src/main.rs\r\nuse kong_rust_pdk::{macros::*, pdk::Pdk, server, Error, Plugin};\r\n\r\nconst VERSION: \u0026str = \"0.1\";\r\nconst PRIORITY: usize = 1;\r\n\r\n#[tokio::main]\r\nasync fn main() -\u003e Result\u003c(), Box\u003cdyn std::error::Error\u003e\u003e {\r\n    server::start::\u003cConfig\u003e(VERSION, PRIORITY).await?;\r\n\r\n    Ok(())\r\n}\r\n\r\n#[plugin_config]\r\nstruct Config {\r\n    message: String,\r\n}\r\n\r\nimpl Default for Config {\r\n    fn default() -\u003e Self {\r\n        Self {\r\n            message: String::from(\"default message\"),\r\n        }\r\n    }\r\n}\r\n\r\n#[plugin_impl]\r\nimpl Plugin for Config {\r\n    async fn access\u003cT: Pdk\u003e(\u0026self, kong: \u0026mut T) -\u003e Result\u003c(), Error\u003e {\r\n        let method = kong.request().get_method().await?;\r\n\r\n        kong.response().set_status(204).await?;\r\n\r\n        kong.response()\r\n            .set_header(\"x-hello-from-rust\", \u0026method)\r\n            .await?;\r\n\r\n        Ok(())\r\n    }\r\n}\r\n```\r\n\r\n## Modules\r\n\r\n* kong-rust-pdk-macro - macros for use in pdk implementation\r\n* kong-rust-pdk-proto - convert .proto file to rust objects\r\n* kong-rust-pdk       - core logic for pluginserver\r\n* serde-prost-types   - wrapper for prost-types to support serde annotations\r\n\r\n## Local dev\r\n\r\nStart plugin server\r\n```\r\nRUST_LOG=info cargo run --bin helloworld\r\n```\r\n\r\nSend command from kong to run plugin\r\n```\r\ncargo run --bin kong_mock\r\n```\r\n\r\ndebug macro\r\n```\r\ncargo expand --bin helloworld\r\n```\r\n ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjgramoll%2Fkong-rust-pdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjgramoll%2Fkong-rust-pdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjgramoll%2Fkong-rust-pdk/lists"}