Fan-out & Aggregate
Dispatch a single request to multiple upstreams in parallel and combine their responses — merge JSON objects, wrap into an array, or namespace by upstream name.
flows:- path: /api/summary/{user_id}upstreams:- hosts: http://users:8081method: GETpath: /{user_id}/short- hosts: http://orders:8082method: POSTpath: /createaggregation:strategy: mergebest_effort: trueon_conflict:policy: preferprefer_upstream: users
Resilient by Default
Per-upstream circuit breaker, configurable retry with backoff, and load balancing across multiple hosts — out of the box, via YAML. No code required.
policy:retry:max_retries: 3retry_on_statuses: [ 404, 409 ]backoff_delay: 500mscircuit_breaker:max_failures: 3reset_timeout: 10sload_balancing:mode: least_conns
Extend with Plugins
Hook into request and response phases using dynamic .so plugins — modify headers, transform responses, validate tokens, or short-circuit requests.
package mainimport "github.com/starwalkn/kono/sdk"type Plugin struct{}func (p *Plugin) Info() sdk.PluginInfo {return sdk.PluginInfo{Name: "snakeify",Version: "v1",Author: "starwalkn",}}func (p *Plugin) Type() sdk.PluginType {return sdk.PluginTypeResponse}func (p *Plugin) Execute(ctx sdk.Context) error {// transform response JSON keys// to snake_casereturn snakeify(ctx.Response())}