Run from source
http://localhost:8080, on loopback only, and uses the dev profile. Open http://localhost:8080/ for the web UI.
To run from source with the quieter profile, name it:
Profiles
A profile is a named set of defaults. With no profile named, the server runs asdev.
Both profiles reject unknown JSON fields in requests, enable the MCP endpoint at
/mcp, and keep sessions in memory unless configured otherwise.
Neither profile turns authentication on or off. The API is open on loopback until you set a key. See Security.
Executable archive
Build an archive and run it with theprod profile:
Native binary
A native binary starts fast and needs no separate runtime. Building it is slow and needs a GraalVM JDK, version 25.prod profile and uses it unless you pass a profile as a command-line argument:
For a native binary, pass profiles on the command line. The environment variable
SPRING_PROFILES_ACTIVE does not replace the built-in prod choice.-Pnative.quick for a faster build that trades run-time speed for build time. Optional parts that depend on build-time decisions, such as the workers role, are fixed when the binary is built. See Remote workers. Use the PostgreSQL stores with the archive build, not the native binary.
Container image
The repository’s Dockerfile builds the native binary in one stage and copies it into a minimal image with no shell and no package manager. The image runs as an unprivileged user (UID 65532) and exposes port 8080.Expose it safely
Publishing the container port makes the API reachable from the network that can reach the host. Publish on loopback (-p 127.0.0.1:8080:8080) when a reverse proxy on the same host fronts the server, and put TLS in that proxy. Use a long random key and named keys with limited roles for clients. See Security.
Keep data
By default everything is in memory. To keep sessions and run history, mount a host directory that the unprivileged user (UID 65532) can write to, and point the file stores at it:Health checks and stop
The image has no shell orcurl, so use an HTTP probe from your orchestrator against GET /actuator/health. Give a container stop a grace period longer than yukta.execution.shutdown-timeout (30 s by default), so running executions can finish. See Graceful shutdown.
The provided image build uses the default build switches: no PostgreSQL stores, no remote workers and no JavaScript script plugin.
Build switches
Some parts are chosen when you build, with-P properties. A running server cannot add or remove them.
Optional plugins and the node types they provide:
The triggers, the console and notify terminals, the built-in flow and transform processors, the supervisors and the control planes are always included. See Plugins.
Management endpoints
With a key set, everything under
/actuator except /actuator/health needs an unrestricted ADMIN key. Change which endpoints are exposed with management.endpoints.web.exposure.include.
The interactive API documentation is at /swagger-ui.html and the OpenAPI description at /v3/api-docs. Neither needs a key.
Serving the web UI
The web UI is part of the executable, so there is nothing separate to deploy. The server answersGET / and any other GET path that is not an API, management, MCP or documentation path with the UI page, so deep links and refresh work.
- Static files under
/assets/and top-level assets are cached for a year. The page itself is never cached. - The page carries a Content-Security-Policy that allows only same-origin scripts and connections, no framing and no objects.
- Behind a reverse proxy with no API key set, add the public host name to
yukta.allowed-hosts, or requests are refused with403. See Security. - Event streams send a keep-alive comment every 15 seconds. A proxy idle timeout longer than that keeps streams open.
Graceful shutdown
On a normal stop signal the server:- Stops admitting new starts. Starts still waiting in the queue are refused.
- Gives running executions
yukta.execution.shutdown-timeout(default30s) to finish. - Releases its leader lease at once, when high availability is on.
- Flushes the queued execution log events, waiting up to 5 seconds.
ABORTED at the next start when the execution log is durable. See Checkpoints and resume.