# Scriptella [![GitHub stars](https://img.shields.io/github/stars/scriptella/scriptella-etl?style=flat&logo=github)](https://github.com/scriptella/scriptella-etl/stargazers) [![CI](https://github.com/scriptella/scriptella-etl/actions/workflows/ci.yml/badge.svg)](https://github.com/scriptella/scriptella-etl/actions/workflows/ci.yml) [![Maven Central](https://img.shields.io/maven-central/v/org.scriptella/scriptella-core?logo=apachemaven)](https://central.sonatype.com/artifact/org.scriptella/scriptella-core) [![GitHub release](https://img.shields.io/github/v/release/scriptella/scriptella-etl?logo=github)](https://github.com/scriptella/scriptella-etl/releases/latest) [![DB CI pipeline: PG, MariaDB, Oracle, MSSQL](https://raw.githubusercontent.com/scriptella/scriptella-testcontainers/main/docs/scriptella-testcontainers-tested.svg)](https://github.com/scriptella/scriptella-testcontainers/blob/main/docs/compatibility-results.md#2026-10-05--scriptella-16) Scriptella is a lightweight, XML-driven ETL and database migration tool for Java. Use SQL and scripting languages directly to move and transform data without a proprietary transformation language or graphical designer. ## Why Scriptella? * **SQL-first:** Work in the language best suited to each data source instead of learning a proprietary transformation language. * **Lightweight:** Run jobs from a single configuration file without a server or graphical designer. * **Automation-friendly:** Keep migrations and data jobs in version control and run them locally, in build pipelines, or on a schedule. ## Project status The latest release is **Scriptella 1.6** (Java 17 baseline). Scriptella 1.6 is available from [GitHub Releases](https://github.com/scriptella/scriptella-etl/releases/tag/scriptella-parent-1.6) and [Maven Central](https://central.sonatype.com/artifact/org.scriptella/scriptella-core). See the [changelog](CHANGELOG.md) for the release details and compatibility changes. ## Requirements | Version | Java | | --- | --- | | **Scriptella 1.6** | Java **17** | | **Scriptella 1.3 (Java 8 compatibility release)** | Java **8** | ## Getting Scriptella ### Binary distribution Download a published release from [GitHub Releases](https://github.com/scriptella/scriptella-etl/releases) or [https://scriptella.org/download.html](https://scriptella.org/download.html). Unzip the binary distribution, change to the extracted directory, and run an ETL file: ```bash java -jar scriptella.jar path/to/file.etl.xml ``` Add JDBC drivers and other provider JARs with the connection `classpath` attribute as needed. See the [tutorial](https://scriptella.org/tutorial.html) and [reference](https://scriptella.org/reference/). ### Experimental curl installer Install the latest stable release with `curl`: ```bash curl -fsSL https://scriptella.org/install.sh | sh ``` The installer places Scriptella under `${HOME}/.local/scriptella`. It either adds `${HOME}/.local/scriptella/bin` to an existing startup file or prints the exact PATH command to add manually. The guaranteed command is the packaged `scriptella.sh` launcher: ```bash scriptella.sh path/to/file.etl.xml ``` The installer does not install Java; Scriptella requires Java 17 or newer. When the installer updates a startup file, start a new shell or reload that file before using `scriptella.sh`. Manual ZIP installation and `java -jar scriptella.jar` remain available above. ### Direct SQL execution Scriptella 1.6 runs a SQL file directly against a JDBC connection without ETL XML: ```bash scriptella.sh execute-sql --url jdbc:postgresql://localhost/app --user app schema.sql ``` See the [direct SQL guide](docs/cli-usage.md#10-direct-sql-execution) for driver setup, properties, literal mode, and CLI options. For embedded execution, see [Executing Scriptella from Java](docs/java-execution.md). ### Quick start Create `people.csv` next to `scriptella.jar`: ```csv id,name 1,Ada 2,Grace ``` Then create `csv-to-sql.etl.xml` in the same directory: ```xml ``` The flow is source row to nested action: 1. `` asks the CSV connection for rows. The CSV driver treats the first line as headers and emits one row for each remaining line. 2. The nested `