FnKit — Functions as a Service CLI

Scaffold, develop, and deploy serverless functions using Docker and Git push. No external platforms required.

Get Started View on GitHub


Internet → Caddy (TLS/domains) → fnkit-gateway (auth/routing) → Function containers
                                                                    ↑
                                                    git push → docker build → deploy
                                                    (via remote hook, Forgejo, or GitHub Actions)

Dependencies: Docker + Git. That’s it.

Quick Start

# Install
curl -L https://github.com/functionkit/fnkit/releases/latest/download/fnkit-macos-arm64 -o fnkit
chmod +x fnkit && ./fnkit install

# Create a function
fnkit node my-api
cd my-api

# Run locally
fnkit dev

# Set up CI/CD and deploy
fnkit deploy setup
git add . && git commit -m "init" && git push

Features

Feature Description
Multi-runtime scaffolding Create functions in 9 HTTP runtimes + 3 MQTT runtimes
Local development fnkit dev runs your function locally with hot reload
API Gateway Nginx-based auth gateway with token validation and routing
Orchestrator Multi-function pipelines — sequential chaining or parallel fan-out
Shared Cache Redis-compatible Valkey cache accessible by all functions
Reverse Proxy Automatic HTTPS via Caddy with Let’s Encrypt
Git-push Deploy Remote hook, Forgejo Actions, or GitHub Actions
MQTT Functions Event-driven functions that subscribe to MQTT topics
UNS Plugin Industrial IoT: MQTT monitor → cache → PostgreSQL logger
Container Management List, log, and stop deployed function containers

Supported Runtimes

HTTP (Google Cloud Functions Framework)

Runtime Command   Runtime Command
Node.js fnkit node <name>   Ruby fnkit ruby <name>
Python fnkit python <name>   .NET fnkit dotnet <name>
Go fnkit go <name>   PHP fnkit php <name>
Java fnkit java <name>   Dart fnkit dart <name>
C++ fnkit cpp <name>      

MQTT (FnKit Function Framework)

Runtime Command
Node.js fnkit node-mqtt <name>
Go fnkit go-mqtt <name>
.NET fnkit dotnet-mqtt <name>

Commands

Command Description
fnkit <runtime> <name> Create a new function project
fnkit init Initialize existing directory as a function
fnkit dev Run function locally
fnkit container ls\|logs\|stop Manage deployed containers
fnkit gateway init\|build\|start\|stop Manage API gateway
fnkit gateway orchestrate ... Manage multi-function pipelines
fnkit cache init\|start\|stop Manage shared Valkey cache
fnkit proxy init\|add\|remove\|ls Manage Caddy reverse proxy
fnkit deploy remote\|setup\|init\|status Manage CI/CD pipelines
fnkit mqtt uns\|cache\|log\|status MQTT / UNS plugin commands
fnkit image build\|push Build & push Docker images
fnkit doctor [runtime] Check runtime dependencies

Documentation

  • Installation — Binary downloads, building from source
  • Getting Started — Create, develop, and deploy your first function
  • Runtimes — All supported runtimes and frameworks
  • Commands — Complete CLI reference with all flags and options
  • API Gateway — Token auth, routing, and orchestrator pipelines
  • Shared Cache — Valkey cache setup with language-specific examples
  • Reverse Proxy — Automatic HTTPS and domain management via Caddy
  • Deploy Pipelines — Git-push-to-deploy via remote hook, Forgejo, or GitHub Actions
  • MQTT Functions — Event-driven functions with MQTT topics
  • UNS Plugin — Industrial IoT: MQTT monitor → cache → PostgreSQL logger
  • Production Deployment — Full server setup guide