# Client SDK Overview
- Samples: https://github.com/uber/cadence-java-samples (opens new window)
- JavaDoc documentation: https://www.javadoc.io/doc/com.uber.cadence/cadence-client (opens new window)
APIs to implement activity: accessing activity info, or sending heartbeat.
APIs for external application code to interact with Cadence workflows: start workflows, send signals or query workflows.
APIs to implement workflows.
APIs to configure and start workers.
APIs to write unit tests for workflows.
Samples of how to use the basic feature: activity, local activity, ChildWorkflow, Query, etc. This is the most important package you need to start with.
An end-to-end example to write workflow using SAGA APIs.
An end-to-end example to write workflows to download a file, zips it, and uploads it to a destination.
An important requirement for such a workflow is that while a first activity can run on any host, the second and third must run on the same host as the first one. This is achieved through use of a host specific task list. The first activity returns the name of the host specific task list and all other activities are dispatched using the stub that is configured with it. This assumes that FileProcessingWorker has a worker running on the same task list.