Poor man's serverless framework based on Docker, Function as a Service with painless.
Go JavaScript Makefile Ruby Other
Switch branches/tags
Nothing to show
Latest commit c355805 Nov 20, 2017 @metrue metrue Merge pull request #56 from mbesancon/documentation



Poor man's function as a service.
build Go Report Card Go Doc Release


fx is a tool to help you do Function as a Service on your own server. fx can make your stateless function a service in seconds. The most exciting thing is that you can write your functions with most programming languages.

Language Status
Go Supported
Node Supported
Python Supported
Ruby Supported
PHP Supported
Perl Working on
R Working on
Rust Working on

tweet @_metrue or issue is welcome.


  • Docker: make sure Docker installed and running on your server.
  • dep: fx project uses dep to do the golang dependency management.
Build and Run
$ git clone https://github.com/metrue/fx.git
$ cd fx
$ dep ensure
$ go install ./
  • start server
fx serve

now you can make a function to service in a second.

fx up ./examples/functions/func.js

the function defined in examples/functions/func.js is quite simple, it calculates the sum of two numbers then returns:

module.exports = (input) => {
    return parseInt(input.a, 10) + parseInt(input.b, 10)

then you can test your service:

curl -X POST <service url> -H "Content-Type: application/json" -d '{"a": 1, "b": 1}'

of course you can do more.

$ fx serve                                      start f(x) server
$ fx up   func1.js func2.py func3.go ...        deploy a function or a group of functions
$ fx down [service ID] ...                      destroy a function or a group of functions
$ fx list                                       list deployed services
$ fx --version                                  show current version of f(x)

How to write your function

functions example with Go, Ruby, Python, Node, PHP.

  • Go
package main

type Input struct {
	A int32
	B int32

type Output struct {
	Sum int32

func Fx(input *Input) (output *Output) {
	output = &Output{
		Sum: input.A + input.B,
  • Ruby
def fx(input)
    return input['a'] + input['b']
  • Python
def fx(input):
    return input['a'] + input['b']
  • Node
module.exports = (input) => {
    return parseInt(input.a, 10) + parseInt(input.b, 10)
  • PHP
    function Fx($input) {
        return $input["a"]+$input["b"];


Thank you to all the people who already contributed to fx!

metrue pplam mbesancon avelino DaidoujiChen chlins