LittleHorse is a Java open-source platform designed to orchestrate distributed systems, addressing the challenges related to state management and the coordination of microservices, external APIs, and human tasks. It allows developers to define workflows programmatically using languages such as Java, Go, Python, C#, .NET; eliminating the need for specialized DSLs. The key capabilities include real-time observability, automated error recovery with retries, event-driven coordination, User Task integration, and developer SDKs.
Modern distributed systems often introduce complexities in inter-service coordination, state management, and ensuring reliability. LittleHorse aims to provide intelligent workflow orchestration to manage these underlying issues, such as state consistency and automated retries, allowing developers to concentrate on core business logic rather than infrastructure.
LittleHorse platform’s architecture is centered around the LittleHorse Kernel (formerly the LittleHorse Server), the core engine responsible for executing defined processes (WfSpecs as WfRuns), managing state durably, and ensuring reliable execution. The Kernel is predominantly written in Java, making use of Apache Kafka as a durable write-ahead log, for state persistence and enabling robust recovery from failures. It is designed for diverse use cases including microservice orchestration, business process management, and agentic workflows.
(Image taken from https://littlehorse.io)
Workflow-as-Code is the primary approach to iterate with LittleHorse Kernel. By use of the LittleHorse SDKs, developers define the Workflow Specification (WfSpec), a reusable template outlining the sequence of operations, variable management, conditional branching, parallelism, and error handling strategies for a given process. Following a WfSpec example:
import io.littlehorse.sdk.wfsdk.*; // Required imports
public class KycWorkflow implements Workflow {
@Override public String getName() { return "kyc-workflow"; } // Name of the WfSpec
@Override public void workflow(WorkflowThread wf) {
// Define workflow variables
WfRunVariable customerInfoVar = wf.addVariable("customer-info", VariableType.JSON);
WfRunVariable verificationResultVar = wf.addVariable("verification-result", VariableType.JSON);
// Instruct the Kernel to execute a task named "verify-identity-task"
// Input: customerInfoVar, Output captured in: verificationResultVar
wf.execute("verify-identity-task", customerInfoVar).output(verificationResultVar);
// Define further steps, conditions, etc., based on verificationResultVar...
// wf.execute("notify-customer-task",...);
}
}
Within a WfSpec, there are the Tasks, the individual units of work. A Task is declared via Task Definition (TaskDef), so the developer is able to implement the TaskDef business logic via a Task Method. Let’s see a Java Task Method for “verify-identity-task”:
import io.littlehorse.sdk.worker.LHTaskMethod;
public class VerificationTasks {
@LHTaskMethod("verify-identity-task") // Links method to the Task Definition
public VerificationResult verifyIdentity(CustomerInfo customer) {
System.out.println("Verifying identity for: " + customer.getName());
//... verification logic...
return new VerificationResult(true); // Return result object
}
}
Task Workers, that are separate client applications using the LittleHorse SDK, are responsible for handling Task Methods pooling the LittleHorse kernel. When a WfSpec is being executed it is known as a Workflow Run (WfRun).
Deployment options include an Open Source (OSS) Kernel (SSPLv1 license), the managed LittleHorse Cloud service, and LittleHorse For Kubernetes (LHK). Essential tools include the web-based Dashboard for monitoring , the lhctl
Command-Line Interface, and language-specific SDKs.
Founded in December 2021 by Colt McNealy, son of Sun Microsystems co-founder Scott McNealy, LittleHorse was open-sourced in 2023 to reflect the team’s belief that software built by engineers, for engineers, should be accessible to all. Both Colt and Scott McNealy participated in the opening keynote at JavaOne 2025, titled “Our World, Moved by Java”.
More details about LittleHorse can be found in the LittleHorse QuickStart or GitHub repo. Developers willing to contribute with LittleHorse can find more details in the GitHub repository.