SymmetricDS runs either as a standalone server (using a built-in Jetty), within an application server (such as Apache Tomcat), or embedded into an application. Configuration is done through properties files and a collection of configuration tables at a central node. Both database tables and filesystems can be synchronized across a network of nodes. Configuration allows for selection of tables, columns (vertical filtering), and subsets of rows (horizontal filtering) to synchronize in one direction or both directions. Files are selected by base directory and whether to recurse into directories. Wildcard characters are used to match multiple tables and files. Tables can be grouped into channels that sync based on priority. Groups of nodes are linked together and assigned a transport method of push or pull. A push will connect to the node and send changes when they are ready, while a pull will periodically connect with a node to check if changes are available. Several network topologies are possible by linking node groups, including fan-in/out, multi-master, star, and multi-tier tree. A node can be prepared with an initial load of data to populate its database. Changes are grouped into batches and assigned for delivery to nodes using Routers. Routers can be configured or scripted to filter data and make decisions on which nodes should receive data. Batches are delivered during synchronization and tracked using a sequence number and status, with periodic retries designed to automatically recover from errors. Administration tools for command line and a web-based JMX console are included to manage nodes from a central location. Programming interfaces for Java and REST are included to extend and customize behavior.