
# How to call a server-side function from client-side?

It is possible to call server-side functions from client-side. For security reasons, these functions must first be declared explicitly as RPCs (with the type of their argument).

<!--wodoc:@ class=shared-->
```ocaml
let%rpc f (x : int) : string Lwt.t = ...
...
```
<!--wodoc:@ class=client-->
```ocaml
[%client ... f 4 ... ]
```
The syntax is provided by opam package `ocsigen-ppx-rpc`.

The server-side function (`f` in the example) needs to return a Lwt value.

Server functions are just syntactic sugar for pathless services returning OCaml values.

Note that you need to install `ppx_deriving`, and load our JSON `ppx_deriving` plugin in your project. The plugin is available as the Ocamlfind package `js_of_ocaml.deriving.ppx`.

If the function takes a more complex type, this type must have been declared with `ppx_deriving`. For example,

```ocaml
type t = int * string [@@deriving json]
```
Our infrastructure provides server-side data validation of the data sent, and prevents malformed data from crashing the server.
