servers.md•16.1 kB
# Servers
Starting a Genkit application or developer CLI spawns several server daemons as
either independent processes, threads, goroutines, or coroutines, depending upon
the runtime. The initialization process deals with:
* **Environment-based startup**: In development mode (`GENKIT_ENV=dev`), the
  Reflection server starts automatically.
* **Port selection**: All servers attempt to find available ports, with
  configurable defaults.
* **Registration**: Each server registers itself for cleanup on application
  exit.
* **Runtime files**: Reflection servers write metadata files to enable tool
  discovery (`<working-directory>/.genkit/runtimes/<timestamp>.json`).
* **Traces**: Traces metadata (`<working-directory>/.genkit/traces`).
## Types
| Server Type               | Purpose                                                               | Implementation                            | Notes                                                   |
|---------------------------|-----------------------------------------------------------------------|-------------------------------------------|---------------------------------------------------------|
| Reflection                | Development-time API for inspecting and interacting with Genkit       | Both Go and JavaScript                    | Only starts in development mode (`GENKIT_ENV=dev`)      |
| Flow                      | Exposes registered flows as HTTP endpoints                            | Go (HTTP server) and JavaScript (Express) | Main server for production environment                  |
| Dev UI                    | Web interface for monitoring and interacting with Genkit applications | JavaScript only                           | Provides dashboard, monitoring, and debugging tools     |
| Telemetry                 | Collects and stores traces of Genkit operations                       | JavaScript only                           | Can use local file system or Firestore as backing store |
| Engineering documentation | `mkdocs` instances showing this information                           |                                           | Engineering documentation                               |
## Networking
| Server                    | Host        | Port                                     | Deployment Environment |
|---------------------------|-------------|------------------------------------------|------------------------|
| Flows                     | `localhost` | 3400 (override `PORT`)                   | `'dev'`, `'prod'`      |
| Dev UI/Tools API          | `localhost` | 4000-4099                                | `'dev'`, `'prod'`      |
| Reflection API            | `localhost` | 3100 (override `GENKIT_REFLECTION_PORT`) | `'dev'`                |
| Telemetry                 | `localhost` | 4033 (specified programmatically)        | `'dev'`, `'prod'`      |
| Engineering documentation | `localhost` | 8000                                     | `'dev'`                |
## Implementations
| Server           | Sources                                                                                                                                                                  |
|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Flows            | [JS](https://github.com/firebase/genkit/blob/main/js/plugins/express/src/index.ts), [Go](TODO), [Python](TODO)                                                           |
| Telemetry        | [JS](https://github.com/firebase/genkit/blob/main/genkit-tools/telemetry-server/src/index.ts)                                                                            |
| Dev UI/Tools API | [JS](https://github.com/firebase/genkit/blob/main/genkit-tools/common/src/server/server.ts)                                                                              |
| Reflection       | [JS](https://github.com/firebase/genkit/blob/main/js/core/src/reflection.ts), [Go](https://github.com/firebase/genkit/blob/main/go/genkit/reflection.go), [Python](TODO) |
## Environment Variables
| Environment Variable           | Server/Component                | Default Value | Description                                                                                                                                                           |
|--------------------------------|---------------------------------|---------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `DEBUG`                        | Logger                          | `false`       | Sets the logging level to `'debug'` instead of `'info'`.                                                                                                              |
| `FIREBASE_CONFIG`              | Firebase plugins                | -             | JSON configuration for Firebase services.                                                                                                                             |
| `FIREBASE_DEBUG_FEATURES`      | Firebase plugins                | -             | List of Firebase features to enable debugging for.                                                                                                                    |
| `FIREBASE_DEBUG_MODE`          | Firebase plugins                | `false`       | Enables debug mode for Firebase plugins.                                                                                                                              |
| `FIREBASE_PROJECT_ID`          | Firebase plugins                | -             | Project ID for Firebase services.                                                                                                                                     |
| `FIRESTORE_COLLECTION`         | Firebase Firestore              | -             | Name of Firestore collection to use.                                                                                                                                  |
| `GCLOUD_LOCATION`              | Vertex AI                       | -             | Location for Vertex AI services.                                                                                                                                      |
| `GCLOUD_PROJECT`               | Google Cloud plugins            | -             | Project ID for Google Cloud services.                                                                                                                                 |
| `GCLOUD_SERVICE_ACCOUNT_CREDS` | Google Cloud plugins            | -             | JSON credentials for authenticating with Google Cloud.                                                                                                                |
| `GENKIT_ENV`                   | All servers                     | `'prod'`      | Controls the environment mode. Values: `'dev'` (development) or `'prod'` (production). In `'dev'` mode, additional servers are started such as the Reflection server. |
| `GENKIT_GA_DEBUG`              | Analytics                       | `false`       | Enables debug mode for Google Analytics in the dev tools.                                                                                                             |
| `GENKIT_GA_VALIDATE`           | Analytics                       | `false`       | Enables validation mode for Google Analytics in the dev tools.                                                                                                        |
| `GENKIT_REFLECTION_PORT`       | Reflection Server               | 3100          | The port on which the Reflection API server listens in development mode.                                                                                              |
| `GENKIT_RUNTIME_ID`            | Reflection Server               | Process ID    | Custom identifier for the runtime (see `.genkit/runtimes/<timestamp>.json`).                                                                                          |
| `GENKIT_TELEMETRY_SERVER`      | Telemetry Client (Go/JS/Python) | -             | URL of the telemetry server to send trace data to.                                                                                                                    |
| `GOOGLE_API_KEY`               | Google APIs                     | -             | General API key for Google services, used as fallback.                                                                                                                |
| `GOOGLE_CLOUD_PROJECT`         | Google Cloud plugins            | -             | Alternative name for Project ID for Google Cloud services.                                                                                                            |
| `GOOGLE_GENAI_API_KEY`         | Google Generative AI            | -             | API key for Google's generative AI services.                                                                                                                          |
| `PINECONE_API_KEY`             | Pinecone plugin                 | -             | API key for authenticating with Pinecone vector database.                                                                                                             |
| `PORT`                         | Flow Server                     | 3400          | The port on which the HTTP Flow server listens.                                                                                                                       |
| `WEAVIATE_API_KEY`             | Weaviate plugin                 | -             | API key for authenticating with Weaviate.                                                                                                                             |
| `WEAVIATE_URL`                 | Weaviate plugin                 | -             | URL for the Weaviate vector database.                                                                                                                                 |
## Signal Handling
Many of these servers handle signals to handle graceful termination and clean up.
| Signal    | Handling                          | Handlers             |
|-----------|-----------------------------------|----------------------|
| `SIGTERM` | Graceful termination              | All servers          |
| `SIGINT`  | Graceful termination and clean up | main Genkit instance |
!!! note annotate "Common Signals"
    | Signal               | Number   | Description                                                                                             | Default Action        | Notes                                                           |
    |----------------------|----------|---------------------------------------------------------------------------------------------------------|-----------------------|-----------------------------------------------------------------|
    | `SIGHUP`             | 1        | Hangup signal. Sent when the controlling terminal closes or a process is terminated.                    | Terminate             | Often used to tell daemons to reload their configuration files. |
    | `SIGINT`             | 2        | Interrupt signal. Sent when the user presses `Ctrl+C`.                                                  | Terminate             | Typically used to interrupt a running program.                  |
    | `SIGQUIT`            | 3        | Quit signal. Sent when the user presses `Ctrl+\\`.                                                      | Terminate (core dump) | Similar to SIGINT, but also generates a core dump.              |
    | `SIGILL`             | 4        | Illegal instruction. Sent when a process attempts to execute an invalid instruction.                    | Terminate (core dump) | Indicates a programming error.                                  |
    | `SIGTRAP`            | 5        | Trace/breakpoint trap. Sent when a breakpoint is hit during debugging.                                  | Terminate (core dump) | Used by debuggers.                                              |
    | `SIGABRT` (`SIGIOT`) | 6        | Abort signal. Sent when a process calls the `abort()` function.                                         | Terminate (core dump) | Indicates an abnormal termination.                              |
    | `SIGBUS`             | 7 or 10  | Bus error. Sent when a process attempts to access memory that is not properly aligned.                  | Terminate (core dump) | Indicates a hardware or memory error.                           |
    | `SIGFPE`             | 8        | Floating-point exception. Sent when a process performs an invalid arithmetic operation.                 | Terminate (core dump) | Indicates an arithmetic error.                                  |
    | `SIGKILL`            | 9        | Kill signal. Forces a process to terminate immediately.                                                 | Terminate             | Cannot be caught or ignored.                                    |
    | `SIGUSR1`            | 10 or 30 | User-defined signal 1.                                                                                  | Terminate             | Can be used for custom signal handling.                         |
    | `SIGSEGV`            | 11       | Segmentation violation. Sent when a process attempts to access memory that it is not allowed to access. | Terminate (core dump) | Indicates a memory access error.                                |
    | `SIGUSR2`            | 12 or 31 | User-defined signal 2.                                                                                  | Terminate             | Can be used for custom signal handling.                         |
    | `SIGPIPE`            | 13       | Pipe broken. Sent when a process attempts to write to a pipe that has no readers.                       | Terminate             | Indicates a communication error.                                |
    | `SIGALRM`            | 14       | Alarm clock. Sent when a timer expires.                                                                 | Terminate             | Used for timeouts.                                              |
    | `SIGTERM`            | 15       | Termination signal. Sent by the `kill` command by default.                                              | Terminate             | Allows a process to perform cleanup before exiting.             |
    | `SIGCHLD`            | 17 or 20 | Child process status changed. Sent to a parent process when a child process terminates or stops.        | Ignore                | Used for process management.                                    |
    | `SIGCONT`            | 18 or 19 | Continue signal. Sent to a stopped process to resume execution.                                         | Continue              | Used for job control.                                           |
    | `SIGSTOP`            | 19 or 17 | Stop signal. Forces a process to stop execution.                                                        | Stop                  | Cannot be caught or ignored.                                    |
    | `SIGTSTP`            | 20 or 18 | Terminal stop signal. Sent when the user presses `Ctrl+Z`.                                              | Stop                  | Used for job control.                                           |
    | `SIGTTIN`            | 21       | Terminal input. Sent to a background process that attempts to read from the terminal.                   | Stop                  | Used for job control.                                           |
    | `SIGTTOU`            | 22       | Terminal output. Sent to a background process that attempts to write to the terminal.                   | Stop                  | Used for job control.                                           |