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.
- 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.
The latest release is Scriptella 1.4 (Java 17 baseline), published on August 14, 2026.
Scriptella 1.4 is available from GitHub Releases and Maven Central.
See the changelog for the release details and compatibility changes.
| Version | Java |
|---|---|
| Scriptella 1.4 | Java 17 |
| Scriptella 1.3 (Java 8 compatibility release) | Java 8 |
Download a published release from GitHub Releases or https://scriptella.org/download.html.
Unzip the binary distribution, change to the extracted directory, and run an ETL file:
java -jar scriptella.jar path/to/file.etl.xmlAdd JDBC drivers and other provider JARs with the connection classpath
attribute as needed. See the
tutorial and
reference.
Install Scriptella 1.4 with curl:
curl -fsSL https://scriptella.org/install.sh | shThe 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:
scriptella.sh path/to/file.etl.xmlThe installer does not install Java; Scriptella 1.4 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.
Create people.csv next to scriptella.jar:
id,name
1,Ada
2,GraceThen create csv-to-sql.etl.xml in the same directory:
<!DOCTYPE etl SYSTEM "http://scriptella.org/dtd/etl.dtd">
<etl>
<connection id="input" driver="csv" url="people.csv"/>
<connection id="output" driver="text" url="load.sql"/>
<query connection-id="input">
<script connection-id="output">
INSERT INTO people (id, name) VALUES ($id, '$name');
</script>
</query>
</etl>The flow is source row to nested action:
<query connection-id="input">asks the CSV connection for rows. The CSV driver treats the first line as headers and emits one row for each remaining line.- The nested
<script connection-id="output">runs once for every emitted row. Itsconnection-idselects the destination; nesting supplies the current source row. $idand$nameexpand values from that current row. This example writes text, so substitution is intentional. When the destination is JDBC, use?idand?nameparameters to bind SQL values safely.
Run it from that directory:
java -jar scriptella.jar csv-to-sql.etl.xml
cat load.sqlThe generated load.sql contains one INSERT statement per CSV data row. No
database or JDBC driver is required.
The real power comes from nesting a target <script> inside a source <query>
to transform or copy each row. For a complete MySQL-to-PostgreSQL example that
writes directly to a database with JDBC parameter binding, see
docs/first-migration.md.
The tutorial has additional database
and file integration examples.
Scriptella is split into a core module and optional provider modules.
scriptella-core contains the ETL engine, service-provider API, and generic
JDBC bridge. It can use any vendor JDBC driver supplied by the application;
the vendor's JAR is not part of Scriptella core.
scriptella-drivers contains an opinionated collection of built-in adapters,
including database aliases, CSV, text, Velocity, Spring, mail, and scripting
providers. It depends on scriptella-core, but core does not depend on the
drivers module. Third-party drivers and providers can be supplied separately
through a connection's classpath attribute.
Published artifacts use group ID org.scriptella (from 1.2 onward). Example for
the core module:
<dependency>
<groupId>org.scriptella</groupId>
<artifactId>scriptella-core</artifactId>
<version>1.4</version>
</dependency>Drivers and tools modules follow the same version. For most Maven-based JDBC
usage, scriptella-core is sufficient together with your database's JDBC
driver. Add scriptella-drivers when you need Scriptella's built-in aliases or
specialized providers, or use the binary distribution/all-in-one JAR for the
assembled product. Optional provider runtime libraries may still need to be
supplied separately; see the provider documentation.
Requires Java 17+ and Maven 3.6+:
mvn clean installRelease packaging uses Ant 1.10.17 and is validated on JDK 17 and JDK 25;
artifacts remain Java 17-compatible (--release 17).
- Website: https://scriptella.org
- Reference: https://scriptella.org/reference/
- API docs: https://scriptella.org/docs/api/
- Core database compatibility and validation targets: docs/core-database-compatibility.md
- Command-line usage contract and automation templates: docs/cli-usage.md
- Release history: CHANGELOG.md
- Maintainer guide: docs/MAINTAINING.md
Packaged documentation may also appear under docs/ in distribution archives.
- Bugs and features: GitHub Issues
- Discussion: GitHub Discussions
- Support: scriptella.org/support.html; commercial inquiries: scriptella@gmail.com
Pull requests and well-scoped issue reports for compatibility, correctness, and maintenance work are welcome. Broad feature development is not currently the project focus.
This software is licensed under the terms in the file named LICENSE in this
directory (Apache License, Version 2.0).
Thank you for using Scriptella.
The Scriptella Project Team
https://scriptella.org