# Functions

By default, your Adamite instance will be configured with a basic functions package found in the `functions` folder. This folder is a self-contained NPM package with its own dependencies. The entry point to all of your functions (known as a function root) is a file called `functions/src/index.js`.

```javascript
const { InvokableFunction } = require("@adamite/service-functions");

module.exports = {
  helloWorld: new InvokableFunction(() => {
    console.log("Hello World");
  })
};
```

In this file, you can see a basic invokable function declared, called `helloWorld`. Calling this function using the SDK would result in `"Hello World"` being logged to the server's console.

## Function Types

There are three types of functions you can export within your function root.

| Function Type       | Description                                                                                                                                              |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `InvokableFunction` | A function which can be called or "invoked" from the client at will.                                                                                     |
| `RuntimeFunction`   | A function which is executed when the server starts. This is useful for starting additional servers, establishing connections to external services, etc. |
| `ScheduledFunction` | A function which is executed on a schedule using [cron syntax](https://crontab.guru/).                                                                   |
