Skip to content
RPC implementation for Nim based on msgpack4nim
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Build Status

RPC implementation for Nim based on msgpack4nim created by @jangko.


Pre Requirement

Nimble package manager installed

Install Command

nimble install nimrpc


RPC Server

import nimrpc/rpc_server, nimrpc/rpc_type, asyncnet, asyncdispatch, msgpack

# Define your remote proc
# Remote porc must have two params, first is input, second is output (so it's var param).
# Return value must be an int as error code, for example, 0 for success, -1 for error.
proc remoteAdd(param: tuple[v1: int, v2: int], ret: var int): int =
  ret = param.v1 + param.v2
  result = 0

# Create the server
# Currently procs must be resgistered before rpc server starts running.
# Running time proc register will be added in later version
var server = newRpcServer("", Port(4343)) # server listen to
server.register("add", remoteAdd) # register remoteAdd to RPC server binding name "add"
asyncCheck # run RPC server

RPC Client

import nimrpc/rpc_client, nimrpc/rpc_type, net, asyncdispatch

proc main =
  var client = newRpcClient("", Port(4343)) # client send request to
  var ret: int
  var state ="add", (1, 2), ret) # client remote call add
  # Check remote call state first, only process ret value when state == Correct
  if state == Correct:
    echo($state) # output: Correct
    echo($ret) # output: 3

if isMainModule == true:

RPC Async Client

Due to nim compiler bug, async client is not supported currently. It will be added in later version once the bug gets fixed.

You can’t perform that action at this time.