# 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/).                                                                   |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://adamite.gitbook.io/docs/server/functions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
