Overview
Restate Server exposes several network services:| Service | Default Port | Description |
|---|---|---|
| Ingress | 8080 | HTTP API for invoking services and managing invocations |
| Admin | 9070 | Admin API for registering deployments and introspection |
| Fabric | 5122 | Node-to-node communication for clustered deployments |
Listen Modes
Restate supports three listen modes controlled by thelisten-mode configuration option:
| Mode | Description |
|---|---|
all | [Default] Listen on both TCP and Unix sockets |
tcp | Only listen on TCP sockets |
unix | Only listen on Unix domain sockets |
restate.toml
Unix Domain Sockets
When Unix sockets are enabled (the default), Restate creates socket files under the data directory:| Service | Socket Path |
|---|---|
| Ingress | restate-data/<node-name>/ingress.sock |
| Admin | restate-data/<node-name>/admin.sock |
| Fabric | restate-data/<node-name>/fabric.sock |
- Local development without port conflicts
- Tools like
curlthat support--unix-socket - Secure local communication without exposing network ports
Cascading Configuration
Networking configuration follows a cascading model where global options provide defaults that can be overridden per-service. The resolution order is:- Global options (top-level in config file) apply to all services
- Per-service options (in
[admin],[ingress]sections) override global options for that specific service - Environment variables override config file values
- Command-line arguments have the highest precedence
bind-ip = "192.168.1.10" at the top level, all services will bind to that IP unless a specific service overrides it with its own bind-address.
The following options cascade from global to per-service:
use-random-portslisten-modebind-ipadvertised-host
bind-port(each service has its own default port)advertised-address(auto-generated per service, but can be explicitly set for full control)
networking.message-size-limit cascades to component-specific limits. See Message Size Limits for details.
Configuring Ports and Addresses
Global Options
These options apply to all services unless overridden per-service:| Option | Default | Description |
|---|---|---|
bind-ip | 0.0.0.0 | Local interface IP to bind on |
bind-port | 5122 | Port for the fabric service |
use-random-ports | false | Use random available ports instead of defaults |
advertised-host | Auto-detected | Hostname to advertise to peers |
restate.toml
Per-Service Configuration
Each service can override the global settings. Usebind-port to change just the port while keeping the default bind IP (0.0.0.0):
restate.toml
bind-address for full control over both IP and port:
restate.toml
Environment Variable Overrides
All networking options can be set via environment variables:| Config Option | Environment Variable |
|---|---|
listen-mode | RESTATE_LISTEN_MODE |
use-random-ports | RESTATE_USE_RANDOM_PORTS |
bind-ip | RESTATE_BIND_IP |
bind-port | RESTATE_BIND_PORT |
bind-address | RESTATE_BIND_ADDRESS |
advertised-host | RESTATE_ADVERTISED_HOST |
advertised-address | RESTATE_ADVERTISED_ADDRESS |
Advertised Addresses
Advertised addresses are the URLs that Restate publishes for others to connect to its services. Each service has its own advertised address that is automatically generated based on the bound address and detected network configuration. You can optionally set these explicitly if you need full control.Restate does not validate the reachability of advertised addresses. It trusts that the configured addresses are correct and reachable by the intended clients or peers.
Fabric Advertised Address
The fabric advertised address (configured at the top level) is the network address that cluster nodes use to communicate with each other. This is the most critical advertised address and requires careful consideration:- Must be resolvable and reachable from all other nodes in the cluster
- Should not be behind a proxy to avoid performance issues or connectivity problems
- Should be unique within the cluster
restate.toml
Ingress Advertised Address
The ingress advertised address is shared with:- The Admin UI (Web UI service playground)
- The Restate CLI (
restatecommand)
restate whoami, this is the address they will see for the ingress endpoint.
Unlike the fabric address, it’s perfectly fine to expose the ingress behind an HTTPS proxy or load balancer on a different host:
restate.toml
Admin Advertised Address
The admin advertised address is used by:- The Restate CLI for administrative operations
- The Admin UI for deployment management
restate whoami for the admin endpoint. Like the ingress address, it can be behind a proxy if needed:
restate.toml
Auto-Detection
Restate automatically generates advertised addresses for all services based on:- The listen mode (TCP vs Unix)
- The bound address
- The publicly routable IP address of the host (auto-detected)
When to Set Explicitly
You may want to explicitly set advertised addresses when:- Running ingress or admin behind a load balancer or reverse proxy
- In containerized environments where auto-detection doesn’t work correctly
- Using NAT with specific port mappings
- You want users to connect via a specific hostname or domain
advertised-host (recommended for simple cases):
restate.toml
- Fabric:
http://restate.mycompany.internal:5122/ - Admin:
http://restate.mycompany.internal:9070/ - Ingress:
http://restate.mycompany.internal:8080/
advertised-address for full control:
restate.toml
Docker and Kubernetes
In Docker Compose or Kubernetes, set the fabric advertised address to the internal hostname that other containers/pods can resolve:Random Ports
For testing or running multiple instances on the same host, enable random port selection:- Restate prints the actual bound addresses on startup
- Unix sockets remain at predictable paths, so tools can connect via Unix socket while ports are dynamic
- Use
restate-server --no-logoto have the addresses printed first on stdout (useful for scripting)
Common Configurations
Local Development (Default)
No configuration needed. Restate listens on:- TCP:
0.0.0.0:8080(ingress),0.0.0.0:9070(admin),0.0.0.0:5122(fabric) - Unix:
restate-data/<node-name>/*.sock
Multi-Node Cluster
restate.toml
Running Multiple Instances on Same Host
When running multiple Restate instances on the same host, each instance needs unique ports and a separate data directory:restate-1.toml
restate-2.toml
TCP Only (No Unix Sockets)
restate.toml
CLI Options
Networking options can also be set via command-line flags:restate-server --help for the full list of CLI options.
Message Size Limits
Restate enforces message size limits to prevent oversized messages from causing issues during network transmission and replication. The limits follow a cascading configuration model similar to other networking options.Global Limit
The primary configuration option isnetworking.message-size-limit, which controls the maximum size of messages transmitted over the cluster internal network:
| Option | Default | Description |
|---|---|---|
networking.message-size-limit | 32 MiB | Maximum size of network messages between cluster nodes |
restate.toml
Cascading to Component Limits
Several components have their own message size limits that cascade from the globalnetworking.message-size-limit:
| Component | Config Option | Description |
|---|---|---|
| Invoker | worker.invoker.message-size-limit | Maximum size of journal messages from services |
| Metadata Client | metadata-client.message-size-limit | Maximum size of metadata messages |
- If not set: Defaults to
networking.message-size-limit - If set explicitly: Clamped to not exceed
networking.message-size-limit
Example: Increasing Limits
To allow larger Virtual Object state values or journal entries, increase the global limit:restate.toml
restate.toml
Increasing message size limits affects memory usage and network bandwidth. Only increase these limits if your workload requires larger payloads, and ensure your infrastructure can handle the increased resource requirements.
Deprecated Options
The following options are deprecated and will be removed in a future release:| Deprecated Option | Replacement |
|---|---|
[admin] advertised-admin-endpoint | [admin] advertised-address |
[ingress] advertised-ingress-endpoint | [ingress] advertised-address |