Skip to content
/ dakia Public

Dakia is an advanced API Gateway designed with developers in mind, offering a fully configurable, extensible and programmable solution. With Dakia, developers are treated as first-class citizens, enabling them to customize and tailor the gateway to fit the unique needs...

License

Notifications You must be signed in to change notification settings

ats1999/dakia

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

1

Dakia: The Developer-Centric API Gateway

Dakia is an advanced API Gateway designed with developers in mind, offering a fully configurable, extensible and programmable solution. With Dakia, developers are treated as first-class citizens, enabling them to customize and tailor the gateway to fit the unique needs...

Feature highlights

  • Configurable: Easily manage API configurations using various formats like YAML, JSON, and HTTP API calls.
  • Extensible: Add new functionality with support for custom middleware and plugins, written in any programming language (Rust, Java, C++, etc.).
  • Fully Programmable: Tailor the API Gateway to your specific needs with custom plugins and middleware in multiple languages.
  • Zero Downtime Upgrades: Perform upgrades and restarts without affecting the availability of your services.
  • Dynamic Middleware: Add, remove, or modify middleware on the fly without disrupting service.
  • Request and Response Management: Modify requests before they reach the upstream or read/write responses to meet your application's needs.
  • Real-Time Configuration: Modify your gateway configuration in real time with no downtime, using HTTP API calls.

Dakia ensures your services stay performant, reliable, and highly customizable, giving you full control.

Limitations ☠️

These limitations will be addressed over time as we continue to improve the dakia.

  • Currently supports only UTF-8 character encoding.
  • Only the round-robin load balancing algorithm is available at the moment.
  • IPv6 addresses are not supported at this time; only IPv4 is supported.
  • Currently it supports only HTTP protocol

Reasons to use Dakia

  • Security - Built with Rust, Dakia ensures enhanced memory safety and reduces vulnerabilities compared to services written in C/C++.
  • Performance - Powered by pingora, a battle tested protocol implemention, as it has been serving more than 40M+ internet requests per second for more than a few years.
  • Customization - You need ultimate customization, you can configure, extend and even further program in multiple languages.
  • Asynchronous and Multi-Threaded – Dakia is designed to handle tasks concurrently, ensuring efficient and high-performance request processing by default.

Architecture

flowchart TB
 subgraph Downstream["Downstream"]
    direction TB
        n1["Client 1"]
        n2["Client 2"]
  end
 subgraph Proxy["Proxy"]
        direction TB
        Start["Start"]
        RequestFilter["Request Filter"]
        UpstreamPeerSelection["Upstream Peer Selection"]
        BeforeUpstreamRequest["Before Upstream Request"]
        AfterUpstreamResponse["After Upstream Response"]
        BeforeDownstreamResponse["Before Downstream Response"]
        End["End"]
  end
 subgraph Dakia["Dakia"]
        direction TB
        Proxy
        subgraph Components["Dynamic Modules"]
            direction TB
            Interceptor
            Filter
            Extension
        end

        LoadBalancer["Load Balancer"]
        Router

        subgraph ConfigManager
            Storage
        end

        Proxy --> Components
        Extension & Interceptor --> Filter
        Proxy & LoadBalancer --> ConfigManager
        Router --> LoadBalancer & Components

  end
 subgraph Upstream["Upstream"]
    direction TB
        server1[" "]
        server2[" "]
        server3[" "]
  end
    Start --> RequestFilter
    RequestFilter --> UpstreamPeerSelection
    UpstreamPeerSelection --> BeforeUpstreamRequest & Router
    BeforeUpstreamRequest --> AfterUpstreamResponse
    AfterUpstreamResponse --> BeforeDownstreamResponse
    BeforeDownstreamResponse --> End
    Downstream <--> Dakia
    Dakia <--> Upstream

    n1@{ icon: "azure:intune-app-protection", pos: "b"}
    n2@{ icon: "azure:intune-app-protection", pos: "b"}
    server1@{ icon: "aws:res-servers", pos: "b"}
    server2@{ icon: "aws:res-servers", pos: "b"}
    server3@{ icon: "aws:res-servers", pos: "b"}
    style Downstream color:none
Loading

Getting started

📊 Progress Tracker

Task Status
Configurable(Only yaml supported for now) Done ✅
Virtual Host Done ✅
Wild card host matching (Wiki) Done ✅
Wild card route (Wiki) Done ✅
Proxy Done ✅
HTTP Protocol Suport Done ✅
Upstream SSL support Done ✅
Load Balancer Done ✅
Filter (MongoDB like query support) Done ✅
Dakia CLI Done ✅
PCRE support for pattern matching Done ✅
Extension, Interceptor & Interceptions Phases (Inbuilt Rust) In-Progress 🚀
Extension,Interceptor(Rust,Java, JavaScript) Pending
UDS Support Pending
Load Balancer Algoriths (Least connection, Least response time, IP/Url hash, Service Discovery) Pending
SSL Support Pending
Certbot Integration Pending
Controller (API to manage dakia over REST) Pending
TCP/UDP Proxy Pending
Web Socket Proxy Pending
gRPC Proxy Pending
Docs Pending

About

Dakia is an advanced API Gateway designed with developers in mind, offering a fully configurable, extensible and programmable solution. With Dakia, developers are treated as first-class citizens, enabling them to customize and tailor the gateway to fit the unique needs...

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages