Introduction
Fn Project is an open-source, container-native serverless platform originally created at Oracle. Every function runs inside a standard Docker container, which means any language or binary that can be packaged in a container can be used as a serverless function. It runs on any infrastructure — cloud, on-premises, or a laptop.
What Fn Project Does
- Runs serverless functions packaged as Docker containers on any infrastructure
- Supports any programming language via Docker-based function development kits (FDKs)
- Provides hot function containers that stay warm to reduce cold start latency
- Includes a built-in flow orchestration service for composing multi-step workflows
- Exposes a REST API and CLI for function management, invocation, and monitoring
Architecture Overview
The Fn server is a single Go binary that manages function lifecycle. When a function is invoked via HTTP, the server pulls the corresponding container image, starts it, and routes the request via stdin/stdout. Hot containers remain running between invocations to eliminate cold starts. The server stores function metadata in a SQL database (SQLite by default, MySQL/Postgres for production) and uses an LRU cache for container scheduling.
Self-Hosting & Configuration
- Single binary or Docker-based deployment with
fn start - Configure a production database backend (MySQL or PostgreSQL) via environment variables
- Set up an external Docker registry for multi-node deployments
- Use
fn deployto push function images to a registry and register routes - Scale horizontally by adding Fn server nodes behind a load balancer
Key Features
- Language agnostic: any runtime that fits in a Docker container works
- Hot functions: containers stay warm across invocations to reduce latency
- Fn Flow: built-in orchestration for composing functions into workflows with error handling
- Standards-based: uses OCI container images, no proprietary packaging format
- Multi-cloud portability: runs identically on AWS, GCP, Azure, or bare metal
Comparison with Similar Tools
- AWS Lambda — managed serverless locked to AWS; Fn Project is self-hosted and cloud-agnostic
- OpenFaaS — similar goals but uses a different function packaging model; Fn uses raw Docker containers
- Knative — Kubernetes-native serverless requiring a K8s cluster; Fn runs standalone with Docker only
- Fission — Kubernetes-focused with environment pooling; Fn is container-native without requiring K8s
FAQ
Q: Does Fn Project require Kubernetes? A: No. Fn runs directly on Docker. However, it can optionally be deployed on Kubernetes for orchestration.
Q: How are cold starts handled? A: Fn keeps hot containers alive between invocations. Frequently called functions avoid cold starts entirely. Idle containers are reclaimed after a configurable timeout.
Q: What languages are supported? A: Fn provides official FDKs for Go, Java, Python, Ruby, Node.js, and C#. Any language that runs in a Docker container can be used without an FDK.
Q: Is Fn Project still maintained? A: The project is available on GitHub with community contributions. It is used in production at Oracle Cloud Infrastructure as the basis for Oracle Functions.