This is an automated email from the ASF dual-hosted git repository.
hansva pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hop.git
The following commit(s) were added to refs/heads/main by this push:
new ebe1e70ab5 structure and content updates for Getting Started guide.
fixes #8447 (#8452)
ebe1e70ab5 is described below
commit ebe1e70ab5c23999ec2dfe42f8caf67de5a43e0f
Author: Bart Maertens <[email protected]>
AuthorDate: Sat Sep 19 17:36:30 2026 +0200
structure and content updates for Getting Started guide. fixes #8447 (#8452)
---
.../gs-hop-gui-create-pipeline-2.png | Bin 42763 -> 0 bytes
.../gs-hop-gui-create-pipeline-3.png | Bin 73652 -> 0 bytes
.../gs-hop-gui-create-pipeline-5.png | Bin 7579 -> 0 bytes
.../gs-hop-gui-create-pipeline-7.png | Bin 115333 -> 0 bytes
.../gs-hop-gui-create-pipeline-8.png | Bin 115236 -> 0 bytes
.../gs-hop-gui-create-pipeline-9.png | Bin 118494 -> 0 bytes
.../gs-hop-gui-create-workflow-2.png | Bin 42763 -> 0 bytes
.../gs-hop-gui-create-workflow-3.png | Bin 66749 -> 0 bytes
.../gs-hop-gui-create-workflow-5.png | Bin 7579 -> 0 bytes
.../gs-hop-gui-create-workflow-7.png | Bin 112901 -> 0 bytes
.../gs-hop-gui-create-workflow-save.png | Bin 40818 -> 0 bytes
.../getting-started/gs-hop-gui-run-pipeline-2.png | Bin 45420 -> 0 bytes
.../getting-started/gs-hop-gui-run-pipeline-4.png | Bin 40551 -> 0 bytes
docs/hop-user-manual/modules/ROOT/nav.adoc | 9 +-
.../ROOT/pages/getting-started/hop-concepts.adoc | 7 +-
.../getting-started/hop-download-install.adoc | 127 +++++-
.../pages/getting-started/hop-gui-pipelines.adoc | 224 +++++++----
.../pages/getting-started/hop-gui-workflows.adoc | 159 +++++---
.../ROOT/pages/getting-started/hop-gui.adoc | 61 +--
.../ROOT/pages/getting-started/hop-next-steps.adoc | 66 +++-
.../ROOT/pages/getting-started/hop-projects.adoc | 107 +++++
.../ROOT/pages/getting-started/hop-tools.adoc | 434 +++++----------------
.../pages/getting-started/hop-what-is-hop.adoc | 103 +++--
.../modules/ROOT/pages/getting-started/index.adoc | 25 +-
.../modules/ROOT/pages/hop-gui/perspectives.adoc | 20 +-
.../hop-gui/perspectives-list.adoc} | 12 -
26 files changed, 763 insertions(+), 591 deletions(-)
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-2.png
b/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-2.png
deleted file mode 100644
index 19778f0dc9..0000000000
Binary files
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-2.png
and /dev/null differ
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-3.png
b/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-3.png
deleted file mode 100644
index 7e05ea8cb6..0000000000
Binary files
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-3.png
and /dev/null differ
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-5.png
b/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-5.png
deleted file mode 100644
index c569f11caa..0000000000
Binary files
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-5.png
and /dev/null differ
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-7.png
b/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-7.png
deleted file mode 100644
index 3b9fe912e0..0000000000
Binary files
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-7.png
and /dev/null differ
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-8.png
b/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-8.png
deleted file mode 100644
index 01e2af4b51..0000000000
Binary files
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-8.png
and /dev/null differ
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-9.png
b/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-9.png
deleted file mode 100644
index d2b20cd17b..0000000000
Binary files
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-pipeline-9.png
and /dev/null differ
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-workflow-2.png
b/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-workflow-2.png
deleted file mode 100644
index 19778f0dc9..0000000000
Binary files
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-workflow-2.png
and /dev/null differ
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-workflow-3.png
b/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-workflow-3.png
deleted file mode 100644
index d23edd619a..0000000000
Binary files
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-workflow-3.png
and /dev/null differ
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-workflow-5.png
b/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-workflow-5.png
deleted file mode 100644
index c569f11caa..0000000000
Binary files
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-workflow-5.png
and /dev/null differ
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-workflow-7.png
b/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-workflow-7.png
deleted file mode 100644
index 9f44725687..0000000000
Binary files
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-workflow-7.png
and /dev/null differ
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-workflow-save.png
b/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-workflow-save.png
deleted file mode 100644
index 8153b21afa..0000000000
Binary files
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-create-workflow-save.png
and /dev/null differ
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-run-pipeline-2.png
b/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-run-pipeline-2.png
deleted file mode 100644
index 2dbdf57596..0000000000
Binary files
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-run-pipeline-2.png
and /dev/null differ
diff --git
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-run-pipeline-4.png
b/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-run-pipeline-4.png
deleted file mode 100644
index c53c1edb04..0000000000
Binary files
a/docs/hop-user-manual/modules/ROOT/assets/images/getting-started/gs-hop-gui-run-pipeline-4.png
and /dev/null differ
diff --git a/docs/hop-user-manual/modules/ROOT/nav.adoc
b/docs/hop-user-manual/modules/ROOT/nav.adoc
index 371b587e12..eba4f81a41 100644
--- a/docs/hop-user-manual/modules/ROOT/nav.adoc
+++ b/docs/hop-user-manual/modules/ROOT/nav.adoc
@@ -16,12 +16,13 @@ under the License.
////
* xref:getting-started/index.adoc[Getting Started]
** xref:getting-started/hop-what-is-hop.adoc[What is Hop]
-** xref:getting-started/hop-concepts.adoc[Hop Concepts]
** xref:getting-started/hop-download-install.adoc[Download & Install]
-** xref:getting-started/hop-tools.adoc[Tools]
+** xref:getting-started/hop-concepts.adoc[Hop Concepts]
** xref:getting-started/hop-gui.adoc[Hop Gui Overview]
-** xref:getting-started/hop-gui-pipelines.adoc[Pipelines]
-** xref:getting-started/hop-gui-workflows.adoc[Workflows]
+** xref:getting-started/hop-gui-pipelines.adoc[Your first pipeline]
+** xref:getting-started/hop-gui-workflows.adoc[Your first workflow]
+** xref:getting-started/hop-projects.adoc[Projects and environments]
+** xref:getting-started/hop-tools.adoc[The Hop toolbox]
** xref:getting-started/hop-next-steps.adoc[Next Steps]
* xref:hop-vs-kettle/index.adoc[Kettle/PDI and Hop]
** xref:hop-vs-kettle/hop-vs-kettle.adoc[Hop vs Kettle]
diff --git
a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-concepts.adoc
b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-concepts.adoc
index ba0acffb3e..7628429e17 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-concepts.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-concepts.adoc
@@ -17,7 +17,7 @@ under the License.
[[HopConcepts]]
:imagesdir: ../../assets/images
:page-pagination:
-:description: Getting Started (2/8): before going into the details of
workflows and pipelines, we'll walk through the core terminology used in Hop.
+:description: Getting Started (3/9): before going into the details of
workflows and pipelines, we'll walk through the core terminology used in Hop.
= Hop Concepts
@@ -37,6 +37,11 @@ All transforms in a pipeline run in parallel.
* **Workflows** are collections of **actions**, connected by **hops**.
All actions in a workflow run sequentially by default.
+* **Metadata items** are the definitions you create once and reuse everywhere:
relational database connections,
xref:pipeline/pipeline-run-configurations/pipeline-run-configurations.adoc[run
configurations], xref:metadata-types/hop-server.adoc[Hop Servers],
xref:metadata-types/data-set.adoc[data sets],
xref:metadata-types/pipeline-unit-test.adoc[unit tests], and many more.
+A pipeline refers to a database connection by name; the connection itself is
defined once, in the project.
+Change it in one place and everything that uses it follows.
+See the xref:metadata-types/index.adoc[full list of metadata types].
+
* **Projects** are logical collections of hop code and configuration.
**Environments** contain the environment-specific (e.g. dev, uat, prd)
metadata.
diff --git
a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-download-install.adoc
b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-download-install.adoc
index fd5c5256f8..a06ebcf90b 100644
---
a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-download-install.adoc
+++
b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-download-install.adoc
@@ -17,30 +17,131 @@ under the License.
[[DownloadInstall]]
:imagesdir: ../../assets/images
:page-pagination:
-:description: Getting Started (3/8): Installing Hop is as easy and accessible
as possible: download, unzip, start.
+:description: Getting Started (2/9): installing Hop is download, unzip, start.
This page also covers the Java requirement, the Docker images, and the one
configuration step worth doing before you begin.
-= Download and Install Hop
+= Download and install Hop
Hop is designed to be as easy and accessible to use as possible.
+There is no installer and no server to set up: download, unzip, start.
-Getting and starting Hop couldn't be easier:
+== Check your Java
-== Download
+Hop is self-contained. The only thing it needs is a Java runtime.
-Download Hop from the http://hop.apache.org/download/[downloads page].
+The official Java version for Hop is **21**.
-== Prerequisites
+[source,shell]
+----
+java -version
+----
-Hop is self contained, all you need is a Java runtime.
-Hop official java version is 21. Check the
https://java.com/en/download/help/download_options.html[Java docs] to download
and install a Java runtime for your operating system.
+You should see something like:
-== Install
+[source,shell]
+----
+openjdk version "21.0.10" 2026-01-20
+OpenJDK Runtime Environment (build 21.0.10)
+OpenJDK 64-Bit Server VM (build 21.0.10, mixed mode, sharing)
+----
-Unzip Hop to a folder of your choice.
-From that folder, you'll be able to run the different Hop
xref:hop-tools/index.adoc[tools] through their corresponding scripts.
+If that command is not found, or reports an older version, install a Java 21
runtime first.
+See xref:supported-jvms.adoc[Supported Java Versions] for which runtimes are
known to work, and which one to avoid.
-Recommended next step: point Hop at a user-level config folder so upgrades
keep your projects and settings. In Hop Gui use *Tools → Configure Hop
environment...*, or from the install directory run `./hop setup apply
--defaults` (then restart). See xref:hop-tools/hop-setup.adoc[Hop setup].
+== Download and unzip
-Now that you have Hop installed, let's have a look at all of the Hop tools you
have at your disposal.
+Download the client from the https://hop.apache.org/download/[Apache Hop
downloads page] and unzip it to a folder of your choice.
+That folder is your Hop installation.
+Everything you need is in it:
+[options="header"]
+|===
+|What|Where
+|The launcher scripts|`hop`, `hop.bat` and the individual `hop-*.sh` /
`hop-*.bat` scripts
+|Configuration|`config/`
+|Plugins|`plugins/`
+|Projects created for you|`config/projects/default` and
`config/projects/samples`
+|===
+
+== One step worth doing now
+
+By default Hop keeps its configuration inside the installation folder.
+That means an upgrade - a new unzip - leaves your projects and settings behind
in the old folder.
+
+Point Hop at a user-level configuration folder instead, once, before you start:
+
+[tabs]
+====
+Windows::
++
+--
+[source,shell]
+----
+hop.bat setup apply --defaults
+----
+--
+
+Linux, macOS::
++
+--
+[source,shell]
+----
+./hop setup apply --defaults
+----
+--
+====
+
+Restart Hop afterwards.
+You can do the same thing from the GUI later with *Tools -> Configure Hop
environment...*.
+
+See xref:hop-tools/hop-setup.adoc[Hop Setup] for what it changes and how to
undo it.
+
+== Start Hop Gui
+
+[tabs]
+====
+Windows::
++
+--
+[source,shell]
+----
+hop-gui.bat
+----
+--
+
+Linux, macOS::
++
+--
+[source,shell]
+----
+./hop-gui.sh
+----
+--
+====
+
+The first start takes a little longer than the ones after it, because Hop
scans and registers its plugins.
+
+== Other ways to run Hop
+
+Unzipping the client is the right way to start, but it is not the only option:
+
+[options="header",cols="25%,45%,30%"]
+|===
+|Option|When you'd use it|Read more
+
+|Docker - `apache/hop`
+|Running pipelines and workflows in a container, and Hop Server. This is how
most production deployments run.
+|xref:docker-container.adoc[Hop in Docker]
+
+|Docker - `apache/hop-web`
+|Hop Gui in a browser, for shared or hosted development environments.
+|xref:hop-web-docker.adoc[Hop Web in Docker]
+
+|Hop Web
+|The same Hop Gui, running in a browser instead of on your desktop.
+|xref:hop-gui/hop-web.adoc[Hop Web]
+|===
+
+TIP: xref:installation-configuration.adoc[Installation and Configuration]
covers system requirements, memory settings and the environment variables Hop
reads at startup.
+
+Now that Hop is running, let's look at the words Hop uses for things.
diff --git
a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-gui-pipelines.adoc
b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-gui-pipelines.adoc
index 54d2c62a28..47b07c60d5 100644
---
a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-gui-pipelines.adoc
+++
b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-gui-pipelines.adoc
@@ -17,119 +17,203 @@ under the License.
[[HopGuiPipelines]]
:imagesdir: ../../assets/images
:page-pagination:
-:description: Getting Started (6/8): Pipelines are one of the two main file
types in Hop. Learn how to add transforms and connect them through hops before
your run, preview and debug your first pipeline.
+:description: Getting Started (5/9): build, preview and run your first
pipeline. You'll create rows, add a sequence number, look at the data before
you run anything, and write the result to a file.
-= Pipelines
+= Your first pipeline
-In xref:getting-started/hop-concepts.adoc[Concepts], we walked through
pipelines, transforms and hops.
-Let’s remember:
+In xref:getting-started/hop-concepts.adoc[Concepts] we said a pipeline is a
set of transforms connected by hops, and that all transforms run in parallel.
-* A pipeline consists of a chain of transforms that read, process or write
data.
-Transforms are connected by hops.
-Hops have a direction but can't create loops, which effectively makes
Pipelines DAGs (Directed Acyclic Graphs).
-* A transform is each basic operation in your pipeline.
-Each transform performs an operation on the data: reads from a source,
operates on data in the pipeline or writes to to a target.
-* A hop in a pipeline passes data between transforms.
+This page turns that into a working pipeline.
+It is deliberately small, but it is a complete one: it creates data, changes
it, lets you look at it, and writes it out.
+That read - change - write shape is what almost every pipeline you build later
will look like.
-== Create a Pipeline
+You will need nothing but a Hop installation.
+No database, no sample files, no network.
-There are two ways to create a pipeline.
+== Create a pipeline
-* click on the **New** option on the Horizontal toolbar and select the
Pipeline option.
+Click *New* in the main toolbar and pick *Pipeline*, or use *File -> New ->
Pipeline*.
-image:getting-started/gs-hop-gui-create-pipeline-1.png[]
+image:getting-started/gs-hop-gui-create-pipeline-1.png[The New option in the
main toolbar]
-* File -> New -> Pipeline 
-image:getting-started/gs-hop-gui-create-pipeline-2.png[] +
-image:getting-started/gs-hop-gui-create-pipeline-3.png[]
+You now have an empty pipeline canvas, with the pipeline toolbar above it.
-Your new pipeline is created.
-You’ll see the dialog below.
+image:getting-started/gs-hop-gui-create-pipeline-4.png[An empty pipeline
canvas]
-image:getting-started/gs-hop-gui-create-pipeline-4.png[width=65%]
+Save it right away with `CTRL-S` and call it `first-pipeline.hpl`.
+Hop can run a pipeline straight from the editor, but you will need the file on
disk in the xref:getting-started/hop-gui-workflows.adoc[next chapter].
-== Add and connect Transforms
+== Add the first transform
-=== Add Transforms
+Click anywhere on the empty canvas.
+The context dialog opens: this is how you add transforms.
-Now you are ready to add the first transform.
-Click anywhere in the pipeline canvas, the area where you’ll see the image
below.
+image:getting-started/gs-hop-gui-create-pipeline-6.png[The context dialog]
-image:getting-started/gs-hop-gui-create-pipeline-5.png[]
+Type in the search box to filter, then click or use the arrow keys and *Enter*
to add.
-After clicking you will see the context dialog.
-This is the dialog you'll use every time you need to select transforms to add
to your pipeline.
+Every pipeline has to start with a
xref:pipeline/pipeline-sources.adoc[pipeline source]: a transform that produces
rows instead of reading them from an incoming hop.
+Search for `Generate rows` and add it.
-image:getting-started/gs-hop-gui-create-pipeline-6.png[]
+TIP: search for `pipeline source` in the context dialog to see all transforms
that can start a pipeline.
-Use the search box in this dialog to find the transforms you need.
-Click or use the arrow keys and hit enter to add a transform to your pipeline.
+=== Configure Generate rows
-Start with a xref:pipeline/pipeline-sources.adoc[pipeline source] (a transform
that does not need incoming hops).
-Search for `pipeline source` in this dialog, or pick Generate Rows.
-For now, add a xref:pipeline/transforms/rowgenerator.adoc[Generate Rows] and a
xref:pipeline/transforms/addsequence.adoc[Add Sequence] transform to your
pipeline.
+Double-click the new transform to open its dialog, and set:
-image:getting-started/gs-hop-gui-create-pipeline-add-two-transforms.png[]
+[options="header"]
+|===
+|Field|Value
+|Transform name|`generate orders`
+|Limit|`100`
+|===
-TIP: check the xref:pipeline/transforms.adoc[full list of transforms].
-There are 186 transforms available in Hop 0.99, but you'll soon get to know
the most commonly used ones.
+In the *Fields* table at the bottom, add one row:
-=== Create a Hop
+[options="header"]
+|===
+|Name|Type|Value
+|`product`|String|`Widget`
+|===
-There are a number of ways to create a hop:
+Click *OK*.
-* **shift-drag**: while holding down the shift key on your keyboard.
-Click on a transform, while holding down your primary mouse button, drag to
the second transform.
-Release the primary mouse button and the shift key.
-* **scroll-drag**: scroll-click on a transform , while holding down your
mouse’s scroll button, drag to the second transform.
-Release the scroll button.
-* click on a transform in your pipeline to open the context dialog (the dialog
you opened in the '**click anywhere**' step).
-Click the 'Create hop' image:getting-started/icons/HOP.svg[Create
hop,25px,align="bottom"] button and select the transform you want to create the
hop to.
+This transform now produces 100 identical rows, each with a single `product`
field.
+Identical rows are not very interesting, so let's make them distinct.
-image:getting-started/gs-hop-gui-create-pipeline-create-hop.png[]
+== Add a second transform and connect it
-== Run your pipeline
+Click the canvas again, search for `Add sequence` and add it.
-Running a pipeline to see how it performs can be done in one of the following
tasks:
+image:getting-started/gs-hop-gui-create-pipeline-add-two-transforms.png[Two
transforms on the canvas]
-* Using the Run icon.
+Open it and set:
-image:getting-started/gs-hop-gui-run-pipeline-1.png[]
+[options="header"]
+|===
+|Field|Value
+|Transform name|`number the orders`
+|Name of value|`order_id`
+|Start at value|`1000`
+|Increment by|`1`
+|===
-* Select Run and click on Start Execution from the toolbar.
+Leave *Use counter to calculate sequence* checked.
+That is the default, and it means Hop counts internally instead of asking a
database for the next value, so this works without a database connection.
-image:getting-started/gs-hop-gui-run-pipeline-2.png[]
+Now connect the two transforms.
+There are three ways to create a hop:
-* Press F8
+* **shift-drag**: hold *Shift*, press your primary mouse button on `generate
orders`, drag to `number the orders` and release.
+* **scroll-drag**: press the scroll button on `generate orders`, drag to
`number the orders` and release.
+* click `generate orders` to open its context dialog and use the *Create hop*
image:getting-started/icons/HOP.svg[Create hop,25px,align="bottom"] button.
-You will see the Run Options dialog.
+image:getting-started/gs-hop-gui-create-pipeline-create-hop.png[Creating a hop
between two transforms]
-image:getting-started/gs-hop-gui-run-pipeline-3.png[] +
+The arrow on the hop shows which way the rows travel.
+Hops in a pipeline cannot form a loop.
-image:getting-started/gs-hop-gui-run-pipeline-4.png[]
+== Look at the data before you run anything
-TIP: a 'local' runtime configuration is created when you first start Hop Gui.
-Check the available
xref:pipeline/pipeline-run-configurations/pipeline-run-configurations.adoc[runtime
configurations] for other engines to run your pipelines on.
+This is the step that makes Hop quick to work with, and it is worth learning
before anything else.
-Make sure your configuration is selected and hit Launch.
+Right-click `number the orders` and choose *Preview & debug output*, then
click *Quick Launch*.
-You'll see green check marks in the upper right corner of the transforms when
a pipeline ran successfully.
+Hop runs just enough of the pipeline to fill a preview window, and shows you
the actual rows:
-image:getting-started/gs-hop-gui-run-pipeline-5.png[]
+[options="header"]
+|===
+|product|order_id
+|Widget|1000
+|Widget|1001
+|Widget|1002
+|===
-After each run, the execution results are displayed in the panel on the bottom
of your window.
-The Execution Results contains two tabs:
+Two things are worth noticing.
-* transform metrics
-* logging
+`order_id` exists even though no transform "wrote" it to disk: fields are
created as rows travel down the pipeline.
+And you got this without configuring an output, a connection or a run
configuration.
+Preview early and often - it is much faster than running a whole pipeline to
find out that a field is wrong.
-The Transform Metrics tab displays metrics per transform.
+TIP: xref:pipeline/run-preview-debug-pipeline.adoc[Run, Preview and Debug a
Pipeline] covers previewing a subset of rows, pausing on a condition, and
debugging.
-image:getting-started/gs-hop-gui-run-pipeline-6.png[]
+== Write the result out
-The logging tab displays the log of the pipeline according to the log level
chosen on execution.
+A preview is not a result. Let's write the rows to a file.
-image:getting-started/gs-hop-gui-run-pipeline-7.png[]
+Click the canvas, search for `Text file output` and add it.
+Create a hop from `number the orders` to the new transform.
-TIP: for more detailed information, check out the
xref:pipeline/run-preview-debug-pipeline.adoc[Run, Preview and Debug a
Pipeline] page.
+Open it and, on the *File* tab, set:
+[options="header"]
+|===
+|Field|Value
+|Transform name|`write orders`
+|Filename|`+${java.io.tmpdir}/hop-orders+`
+|Extension|`csv`
+|===
+
+`+${java.io.tmpdir}+` is a xref:fields-parameters-variables.adoc[variable].
+Hop exposes every Java system property as one, so this resolves to your
system's temporary folder on any operating system.
+Anywhere Hop accepts a path, it accepts a variable.
+
+Go to the *Fields* tab and click *Get Fields*.
+Hop reads the fields coming in over the hop and fills the table with `product`
and `order_id`.
+Click *OK*.
+
+NOTE: *Get Fields* only works when the incoming hop exists and the transforms
before it are configured, because Hop asks them what they produce. If the table
stays empty, check the hop.
+
+== Run the pipeline
+
+Press *F8*, or click *Run* in the pipeline toolbar.
+
+image:getting-started/gs-hop-gui-run-pipeline-1.png[The Run button in the
pipeline toolbar]
+
+The run options dialog opens.
+
+image:getting-started/gs-hop-gui-run-pipeline-3.png[The pipeline run options
dialog]
+
+A `local`
xref:pipeline/pipeline-run-configurations/pipeline-run-configurations.adoc[pipeline
run configuration] is created the first time you start Hop Gui.
+Select it and click *Launch*.
+
+Green check marks in the corner of each transform mean the pipeline finished
without errors.
+
+image:getting-started/gs-hop-gui-run-pipeline-5.png[A pipeline that ran
successfully]
+
+== Read the results
+
+The *Execution Results* panel at the bottom of the window is where you find
out what happened.
+
+The *Metrics* tab shows one line per transform, with rows read, written and
rejected, and the time each one took.
+`write orders` should show 100 rows written.
+
+image:getting-started/gs-hop-gui-run-pipeline-6.png[The Metrics tab]
+
+The *Logging* tab shows the log for the run, at the log level you picked in
the run options dialog.
+When something goes wrong, this is where the reason is.
+
+image:getting-started/gs-hop-gui-run-pipeline-7.png[The logging tab]
+
+Now open `hop-orders.csv` in your temporary folder.
+The log line for `write orders` tells you the full path if you are not sure
where that is.
+
+[source,csv]
+----
+product;order_id
+Widget;1000
+Widget;1001
+Widget;1002
+----
+
+That is a complete pipeline: it created data, changed it, and wrote it
somewhere you can use it.
+
+== What you learned
+
+* A pipeline starts with a xref:pipeline/pipeline-sources.adoc[source]
transform and moves rows along hops.
+* Fields are created and changed as rows travel; you don't declare them up
front.
+* *Preview* shows you real rows without running or configuring the whole
pipeline.
+* Variables work anywhere Hop accepts a path.
+* *Execution Results* tells you how many rows moved and what went wrong.
+
+Next, we'll build a workflow that runs this pipeline and reacts to whether it
worked.
diff --git
a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-gui-workflows.adoc
b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-gui-workflows.adoc
index b13b8c5aaa..157f861c20 100644
---
a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-gui-workflows.adoc
+++
b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-gui-workflows.adoc
@@ -17,81 +17,148 @@ under the License.
[[HopGuiWorkflows]]
:imagesdir: ../../assets/images
:page-pagination:
-:description: Getting Started (7/8): Workflows in Hop are where you'll do most
of the orchestration work: set the stage by fetching files, checking resource
availability etc before your start to do actually run workflows and pipelines.
We'll walk through what it takes to build and run a basic first workflow.
+:description: Getting Started (6/9): build a workflow that runs the pipeline
you just created, and takes a different path depending on whether it worked.
-= Workflows
+= Your first workflow
-In xref:getting-started/hop-concepts.adoc[Concepts], we walked through
workflows, actions and hops.
-Let’s remember:
+A pipeline moves rows.
+A workflow decides *what runs, in what order, and what happens when something
fails*.
-* A _workflow_ is by default a sequential process that has a starting point
and one or more endpoints.
-* An _action_ is an item of workflow functionality that executes pipelines
already implemented or any other element that allows orchestrating the
execution of the data integration processes.
-* A _hop_ in a _workflow_ can conditionally connect _actions_ and determine
which _action_ the _workflow_ needs to execute next.
+That difference is the point of this chapter.
+We'll build a workflow that runs the pipeline from the
xref:getting-started/hop-gui-pipelines.adoc[previous chapter] and reports a
different message depending on the outcome.
-== Create a Workflow
+Remember from xref:getting-started/hop-concepts.adoc[Concepts]:
-There are two ways to create a workflow.
+* A **workflow** is a sequence of **actions** connected by **hops**, with a
start point and one or more end points.
+* Unlike transforms in a pipeline, actions run **one after another**, not in
parallel.
+* A **hop** in a workflow can be conditional: it decides which action runs
next based on whether the previous one succeeded.
-* Click on the New option on the Horizontal toolbar and select the Workflow
option.
+== Create a workflow
-image:getting-started/gs-hop-gui-create-workflow-1.png[]
+Click *New* in the main toolbar and pick *Workflow*, or use *File -> New ->
Workflow*.
-* File -> New -> Workflow
+image:getting-started/gs-hop-gui-create-workflow-1.png[The New option in the
main toolbar]
-image:getting-started/gs-hop-gui-create-workflow-2.png[]
+Your new workflow already contains one action.
-image:getting-started/gs-hop-gui-create-workflow-3.png[]
+image:getting-started/gs-hop-gui-create-workflow-4.png[A new workflow with the
Start action]
-Your new workflow is created, and you’ll see the dialog below.
+NOTE: Hop adds a xref:workflow/actions/start.adoc[Start] action to every new
workflow. It is where execution begins, and it is also where you configure a
schedule if you want the workflow to repeat.
-image:getting-started/gs-hop-gui-create-workflow-4.png[]
+Save the workflow as `first-workflow.hwf`, in the same folder as
`first-pipeline.hpl`.
-NOTE: Note that when you create a workflow, Apache Hop automatically adds
http://localhost:1313/manual/latest/workflow/actions/start.html[Start^] action
by default.
+== Run the pipeline from the workflow
-== Add and connect actions
+Click anywhere on the canvas to open the context dialog, search for `Pipeline`
and add the xref:workflow/actions/pipeline.adoc[Pipeline] action.
-=== Add Actions
+image:getting-started/gs-hop-gui-create-workflow-6.png[The workflow context
dialog]
-Now you are ready to add the first action.
-Click anywhere in the workflow canvas, the area where you’ll see the image
below.
+Open the new action and set:
-image:getting-started/gs-hop-gui-create-workflow-5.png[]
+[options="header"]
+|===
+|Field|Value
+|Action name|`run first pipeline`
+|Pipeline|`+${PROJECT_HOME}/first-pipeline.hpl+`
+|===
-After clicking you will see a dialog:
+This is the step the workflow exists for, so it is worth being precise about
it: the *Pipeline* field is what ties the workflow to the pipeline you built.
+Use the *Browse* button if you prefer to pick the file, but note what Hop
fills in.
-image:getting-started/gs-hop-gui-create-workflow-6.png[]
+`+${PROJECT_HOME}+` is a variable that points at the folder of the current
project.
+Using it instead of an absolute path is what lets the same workflow run on
your laptop, on a colleague's machine and on a server.
+You'll see more of this in xref:getting-started/hop-projects.adoc[Projects and
environments].
-Just like you did with pipelines, use the search box in this dialog to find
the actions you need.
-Click or use the arrow keys and hit enter to add an action to your workflow.
+Now connect *Start* to `run first pipeline`.
+Creating a hop works exactly as it does in a pipeline:
-For now, add a xref:workflow/actions/pipeline.adoc[Pipeline] action to your
workflow.
+* **shift-drag** from one action to the other, or
+* **scroll-drag**, or
+* click the action and use the *Create hop*
image:getting-started/icons/HOP.svg[Create hop,25px,align="bottom"] button in
its context dialog.
-TIP: check the xref:workflow/actions.adoc[full list of actions].
-There are over 50 actions available in Hop 0.70, but you'll soon get to know
the most commonly used ones.
+image:getting-started/gs-hop-gui-create-workflow-add-pipeline-action.png[The
Pipeline action connected to Start]
-=== Create a hop
+== React to the outcome
-Creating a hop is identical to creating a hop in a pipeline:
+A workflow that only runs one thing is not doing much.
+Let's make it respond to what happened.
-* **shift-drag**: while holding down the shift key on your keyboard.
-Click on an action, while holding down your primary mouse button, drag to the
second action.
-Release the primary mouse button and the shift key.
-* **scroll-drag**: scroll-click on an action , while holding down your mouse’s
scroll button, drag to the second action.
-Release the scroll button.
-* click on an action in your pipeline to open the '**click anywhere**' dialog.
-Click the 'Create hop' image:getting-started/icons/HOP.svg[Create
hop,25px,align="bottom"] button and select the action you want to create the
hop to.
+Add two xref:workflow/actions/writetolog.adoc[Write to log] actions:
-image:getting-started/gs-hop-gui-create-workflow-add-pipeline-action.png[]
+[options="header"]
+|===
+|Action name|Log level|Log message
+|`report success`|Basic|`Orders file written.`
+|`report failure`|Error|`The orders pipeline failed.`
+|===
-Save your workflow:
+Create a hop from `run first pipeline` to `report success`, and a second hop
from `run first pipeline` to `report failure`.
-image:getting-started/gs-hop-gui-create-workflow-save.png[]
+By default both hops are green: they fire when the action succeeds.
+Right-click the hop to `report failure` and choose *Failure hop*.
+It turns red.
-At first, we have the Workflow run configuration session.
-A Workflow Run Configuration is a metadata object in Apache Hop and defines
where the workflow is executed.
+You now have the basic shape of every production workflow:
-Select the 'local' workflow runtime configuration that is available by default
in your Hop installation and click 'Launch'.
+....
+Start ──▶ run first pipeline ──✔──▶ report success
+ │
+ └───────────✘──▶ report failure
+....
-image:getting-started/gs-hop-gui-create-workflow-run.png[]
+Right-clicking a hop gives you three choices:
-You’ll now have an execution results pane very similar to the pipeline
execution results.
+[options="header"]
+|===
+|Hop type|Colour|When the next action runs
+|*Unconditional hop*|black|always, whatever the previous action did
+|*Success hop*|green|only when the previous action succeeded
+|*Failure hop*|red|only when the previous action failed
+|===
+
+This is the main thing workflows give you that pipelines cannot: pipelines
have no notion of "and if that fails, do this instead".
+
+== Run the workflow
+
+Save with `CTRL-S`, then press *F8* or click *Run*.
+
+image:getting-started/gs-hop-gui-create-workflow-run.png[The workflow run
options dialog]
+
+A workflow run configuration decides *where* the workflow runs.
+A `local` one is created for you the first time you start Hop Gui.
+Select it and click *Launch*.
+
+The *Execution Results* panel works like the pipeline one.
+Its *Metrics* tab lists one line per action, in the order they ran, with the
comment, result and reason for each.
+
+You should see `Start`, `run first pipeline` and `report success` execute, and
`report failure` skipped.
+In the *Logging* tab you'll find your own message:
+
+[source,shell]
+----
+report success - Orders file written.
+----
+
+== Prove the failure path works
+
+An error path you have never seen run is a guess, not a safety net.
+
+Open `run first pipeline` and change the *Pipeline* field to a file that does
not exist, for example `+${PROJECT_HOME}/nope.hpl+`.
+Run the workflow again.
+
+This time `run first pipeline` fails, `report success` is skipped and your
error message appears in the log.
+The workflow itself is marked as failed, which is what a scheduler or a
xref:hop-server/index.adoc[Hop Server] would pick up.
+
+Set the *Pipeline* field back when you're done.
+
+== What you learned
+
+* Workflows run actions in sequence; pipelines run transforms in parallel.
+* A Pipeline action is how a workflow runs a pipeline, and `+${PROJECT_HOME}+`
is how it stays portable.
+* Hops in a workflow are conditional, and that is where error handling lives.
+* Every new workflow starts from a xref:workflow/actions/start.adoc[Start]
action, which is also where scheduling is configured.
+
+TIP: check the xref:workflow/actions.adoc[full list of actions] for everything
you can orchestrate: files, mail, conditions, scripts, other workflows, and
more.
+
+You have now built and run both Hop file types.
+Next, we'll put them in a project so the paths keep working outside your own
machine.
diff --git
a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-gui.adoc
b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-gui.adoc
index f067699de5..1626f44b32 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-gui.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-gui.adoc
@@ -15,17 +15,17 @@ specific language governing permissions and limitations
under the License.
////
[[HopGui]]
-:imagesdir: ../../assets/images/
+:imagesdir: ../../assets/images
:page-pagination:
-:description: Getting Started (5/8): Hop Gui is Hop's visual development
environment where you design, run and debug your workflows and pipelines. In
this step, we'll take a quick tour of the user interface and describe some of
the functionalities in Hop GUI.
+:description: Getting Started (4/9): Hop Gui is Hop's visual development
environment. A quick tour of the window, the toolbars and the perspectives
before you build your first pipeline.
-= Hop Gui
+= Hop Gui overview
-The Apache Hop GUI is your local development environment to build, run,
preview and debug workflows and pipelines.
+Hop Gui is where you build, run, preview and debug workflows and pipelines.
-== Start the Apache Hop GUI
+Before we start building, here's a short tour so you know what you're looking
at.
-As we've seen in xref:getting-started/hop-tools.adoc[Hop Tools], starting
Hop-Gui is easy:
+== Start Hop Gui
[tabs]
====
@@ -33,51 +33,60 @@ Windows::
+
--
[source,shell]
+----
hop-gui.bat
+----
--
Linux, macOS::
+
--
[source,shell]
-./hop-gui.sh
+----
+./hop-gui.sh
+----
--
====
-== Walking through the Hop GUI
+== The main window
-After starting the Apache Hop GUI, you’ll be presented with the window below.
-
-image:getting-started/gs-hop-gui-overview-1.png[Hop Gui Overview]
+image:getting-started/gs-hop-gui-overview-1.png[The Hop Gui window]
{nbsp} +
-Let's divide the view into two parts:
+There are two toolbars, and everything else is the work area.
-image:getting-started/gs-hop-gui-overview-2.png[Hop Gui Overview]
-
+image:getting-started/gs-hop-gui-overview-2.png[The Hop Gui toolbars]
-* The **main toolbar** offers a range of functions, including creating new
files (such as pipelines and workflows) and adding metadata. It also provides
options for managing projects and environments, as well as tools specifically
for handling pipelines, workflows, and project settings.
-* The **perspectives toolbar** includes switcher icons between the various
perspectives.
+The **main toolbar**, along the top, creates new files (pipelines, workflows,
metadata), opens and saves them, and holds the run and preview controls for
whatever you have open.
+The **perspectives toolbar**, down the left-hand side, switches between the
different things you can do in Hop Gui.
-** image:icons/data_orch.svg[width="24px"]
xref:hop-gui/perspective-data-orchestration.adoc[Data Orchestration]
+At the **bottom left** of the status bar you'll find the active project and
environment.
+You'll use those in xref:getting-started/hop-projects.adoc[Projects and
environments].
-** image:icons/execution.svg[width="24px"]
xref:hop-gui/perspective-execution-information.adoc[Execution Information]
+== Perspectives
-** image:icons/gear.svg[width="24px"]
xref:hop-gui/perspective-configuration.adoc[Configuration]
+A perspective is a mode of the whole window.
+You'll spend nearly all of your time in the first one, Data Orchestration,
which is where pipelines and workflows are edited.
-** image:icons/metadata.svg[width="24px"]
xref:hop-gui/perspective-metadata.adoc[Metadata]
+include::../snippets/hop-gui/perspectives-list.adoc[]
-** image:icons/folder.svg[width="24px"]
xref:hop-gui/perspective-file-explorer.adoc[File explorer]
+Switch perspective by clicking its icon, or cycle through them with
`CTRL-SHIFT-arrow-up` and `CTRL-SHIFT-arrow-down`.
-** image:icons/database.svg[width="24px"]
xref:hop-gui/perspective-database.adoc[Database]
+== Worth knowing early
-** image:icons/plugin.svg[width="24px"]
xref:hop-gui/perspective-plugin.adoc[Plugins explorer]
+Click anywhere::
+Most of Hop Gui is driven by clicking on empty canvas or on an item, which
opens a context dialog with everything you can do from there.
+You'll use it constantly in the next chapter.
-** image:icons/neo4j_logo.svg[width="24px"]
xref:hop-gui/perspective-neo4j.adoc[Neo4j]
+`CTRL-F` searches everything::
+Not just the open file: it searches metadata, pipelines and workflows across
the project.
+See xref:hop-gui/perspective-search.adoc[Search].
-Let's see how we can use Hop Gui to do what Hop is all about: create pipelines
and workflows!
+There are shortcuts for most things::
+See xref:hop-gui/shortcuts.adoc[Keyboard Shortcuts].
-INFO: check the xref:../hop-gui/index.adoc[Hop Gui] section of the Hop
documentation for a more detailed tour of the Hop Gui.
+TIP: the xref:hop-gui/index.adoc[Hop Gui] section of this manual has the
detailed tour, including how to xref:hop-gui/disable-ui-elements.adoc[hide
parts of the UI] for new users.
+Let's build a pipeline.
diff --git
a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-next-steps.adoc
b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-next-steps.adoc
index 1867d6699a..6bb033009f 100644
---
a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-next-steps.adoc
+++
b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-next-steps.adoc
@@ -14,26 +14,60 @@ KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
////
-[[NetSteps]]
+[[NextSteps]]
:imagesdir: ../../assets/images
:page-pagination:
:page-pagination-no-next:
-:description: Getting Started (8/8): You now know the basic Hop terminology
and tools, and you've created and have run your first pipeline and workflow.
Here's an overview of topics you could explore to continue building your Hop
knowledge.
+:description: Getting Started (9/9): You've built and run a pipeline, a
workflow and a project. Here's where to go next, depending on what you want to
do.
-= Next Steps
+= Next steps
-You now know what Hop is and how to create your first workflows and pipelines.
+You've built a pipeline, orchestrated it from a workflow, handled a failure
path, and put both in a project.
+That is the core loop of working with Hop. Everything else is more of it.
-There's a lot more to discover in Hop.
-Here are a couple of topics you may want to look into:
+Where you go next depends on what you're trying to do.
-* xref:pipeline/pipelines.adoc[Pipelines] takes closer look at the various
aspects of creating and running pipelines, and contains the entire list of
transforms that are at your disposal
-* xref:workflow/workflows.adoc[Workflows] takes a closer look at the various
aspects of create and running workflows, and contains the entire list of
actions that are at your disposal
-* xref:fields-parameters-variables.adoc[Fields, parameters, and variables]
compares the three ways Hop moves data and configuration
-* xref:how-to-guides/change-data-capture.adoc[Change Data Capture] covers the
three ways Hop detects inserts, updates and deletes: log sniffing, filtered
selection, and snapshot comparison.
-* xref:best-practices/index.adoc[Best Practices] covers a number of things you
might want to think about while using Apache Hop.
-* xref:projects/index.adoc[Projects] explains how to work with projects and
environments
-* xref:how-to-guides/scheduling-workflows-and-pipelines.adoc[Scheduling
workflows and pipelines] shows how to start a run from cron, systemd, Jenkins,
a Kubernetes CronJob or Apache Airflow
-* xref:hop-server/deploying.adoc[Deploying Hop Server] covers the three common
ways to get a project onto a running server
-* xref:vfs.adoc[VFS] explains how you can access resources in the 3 main cloud
platforms: AWS, Azure and GCP.
-* xref:logging/logging-basics.adoc[Logging] explains how to configure Hop for
your desired log level and target platform
+== Build more pipelines
+
+* xref:pipeline/pipelines.adoc[Pipelines] - the full picture, including the
complete xref:pipeline/transforms.adoc[list of transforms]
+* xref:pipeline/run-preview-debug-pipeline.adoc[Run, Preview and Debug a
Pipeline] - preview a subset, pause on a condition, step through rows
+* xref:pipeline/errorhandling.adoc[Error Handling] - send failing rows down a
separate hop instead of stopping
+* xref:fields-parameters-variables.adoc[Fields, parameters and variables] -
three things that look alike in the UI and behave differently
+* xref:pipeline/pipeline-unit-testing.adoc[Pipeline Unit Tests] - golden data
sets and assertions for your pipelines
+
+== Orchestrate more
+
+* xref:workflow/workflows.adoc[Workflows] - the full picture, including the
complete xref:workflow/actions.adoc[list of actions]
+* xref:how-to-guides/scheduling-workflows-and-pipelines.adoc[Scheduling
workflows and pipelines] - cron, systemd, Jenkins, Kubernetes CronJob and
Apache Airflow
+
+== Connect to your data
+
+* xref:database/databases.adoc[Databases] - relational connections and the
drivers Hop ships
+* xref:vfs.adoc[VFS] - read and write on AWS, Azure and GCP as if they were
local files
+* xref:how-to-guides/change-data-capture.adoc[Change Data Capture] - log
sniffing, filtered selection and snapshot comparison
+* xref:metadata-types/index.adoc[Metadata types] - everything you can define
once and reuse
+
+== Run it somewhere else
+
+* xref:projects/index.adoc[Projects] - the full reference for projects and
environments
+* xref:hop-server/deploying.adoc[Deploying Hop Server] - three ways to get a
project onto a running server
+* xref:docker-container.adoc[Hop in Docker] - the `apache/hop` image
+*
xref:pipeline/pipeline-run-configurations/pipeline-run-configurations.adoc[Pipeline
run configurations] - run the same pipeline on Apache Spark, Apache Flink or
Google Dataflow without changing it
+* xref:logging/logging-basics.adoc[Logging] - log levels and where to send the
output
+
+== Work like a team
+
+* xref:hop-gui/hop-gui-git.adoc[Working with git] - commit, diff and browse
history from inside Hop Gui
+* xref:best-practices/index.adoc[Best Practices] - what experienced Hop
developers wish they had known
+* xref:linting/index.adoc[Linting] - static checks on pipelines, workflows and
metadata, locally or in CI
+
+== Coming from Kettle or PDI?
+
+* xref:hop-vs-kettle/hop-vs-kettle.adoc[Hop vs Kettle] - what changed and why
+* xref:hop-vs-kettle/if-you-know-kettle.adoc[If you know Kettle] - the
vocabulary mapping
+* xref:hop-vs-kettle/import-kettle-projects.adoc[Upgrade Kettle to Hop] -
convert an existing repository
+
+== Get help
+
+Hop is an Apache project, and the community is where questions get answered.
+See https://hop.apache.org/community/[the community pages] for the mailing
lists, chat and issue tracker.
diff --git
a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-projects.adoc
b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-projects.adoc
new file mode 100644
index 0000000000..07b0fb73aa
--- /dev/null
+++ b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-projects.adoc
@@ -0,0 +1,107 @@
+////
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+////
+[[GettingStartedProjects]]
+:imagesdir: ../../assets/images
+:page-pagination:
+:description: Getting Started (7/9): put your pipeline and workflow in a
project so paths, metadata and configuration keep working on someone else's
machine.
+
+= Projects and environments
+
+So far you have been working in the `default` project, which is what Hop
enables when you haven't chosen anything else.
+That is fine for a first pipeline.
+It stops being fine the moment you want to share your work, run it on a
server, or have a `dev` and a `prd` version of the same connection.
+
+This chapter is the short version.
+xref:projects/projects-environments.adoc[Projects and Environments] has the
full reference.
+
+== What a project gives you
+
+A **project** is a folder plus a `project-config.json`.
+Grouping your work into one buys you three things:
+
+Portable paths::
+`+${PROJECT_HOME}+` always points at the project folder, so
`+${PROJECT_HOME}/first-pipeline.hpl+` resolves on your laptop, on a
colleague's machine and in a container, without anyone editing a path.
+You already used this in the
xref:getting-started/hop-gui-workflows.adoc[Pipeline action].
+
+A home for metadata::
+Database connections, run configurations and every other
xref:projects/metadata.adoc[metadata] object live in the project's metadata
folder.
+They travel with the project instead of sitting in your personal configuration.
+
+Something you can commit::
+A project folder is an ordinary folder of files. It goes into Git as-is, which
is what makes review, history and CI possible.
+
+An **environment** is the other half: it holds the values that differ between
`dev`, `test` and `prd` - hostnames, credentials, file locations - as variables
in one or more property files outside the project.
+Same project, different environment, different target database, and no
branching or editing of pipelines.
+
+== Create a project
+
+The active project is shown at the bottom left of the Hop Gui status bar, next
to a briefcase icon.
+
+image:hop-gui/environment/the-active-project-at-the-bottom-left.png[The active
project at the bottom left]
+
+Click it and choose *Add project...*, then *In a folder*.
+
+image:hop-gui/environment/add-project-menu.png[The Add project menu]
+
+In the project properties dialog, fill in the *Basic* tab:
+
+[options="header"]
+|===
+|Field|Value
+|Name|`getting-started`
+|Home folder|a new, empty folder of your choice
+|===
+
+Everything else can keep its default.
+The *Folders* tab already points metadata, datasets and unit tests at
`+${PROJECT_HOME}+` subfolders, and the *Parent project* tab inherits from
`default`, which is where the `local` run configurations you have been using
come from.
+
+Click *OK*.
+Hop creates the folder structure and switches to the new project.
+
+TIP: *From version control* clones a project straight from Git instead, which
is usually how you pick up a project someone else created.
+
+== Move your work into it
+
+Copy `first-pipeline.hpl` and `first-workflow.hwf` into the new project
folder, then open them from there.
+
+Because you wrote the Pipeline action's path as
`+${PROJECT_HOME}/first-pipeline.hpl+` rather than an absolute path, the
workflow still finds its pipeline.
+Nothing to edit.
+
+That is the whole point, and it is worth doing once deliberately: run the
workflow again from the new project and watch it work unchanged.
+
+NOTE: if you had typed an absolute path such as
`/home/you/first-pipeline.hpl`, this is exactly where it would have broken.
Prefer `+${PROJECT_HOME}+` from the start.
+
+== Add an environment
+
+The active environment sits next to the project in the status bar, with a cube
icon.
+Click it and choose *Add environment...*.
+
+image:hop-gui/environment/environment-add.png[The Add environment menu]
+
+Give it a name and a *Purpose* (`Development`, `Testing`, `Production` and
others are predefined), and point it at one or more property files holding your
environment-specific variables.
+
+Those variables then resolve anywhere Hop accepts one: in a transform field, a
database connection's hostname, a file path.
+Switching environment switches the values, and nothing inside the project
changes.
+
+== What you learned
+
+* A project is a folder of files that can be shared, committed and deployed as
a unit.
+* `+${PROJECT_HOME}+` is what keeps a project working somewhere other than the
machine it was built on.
+* Metadata belongs to the project, not to you.
+* Environments hold the per-stage values, so one project can run against dev,
test and production.
+
+TIP: the xref:hop-gui/hop-gui-git.adoc[git integration] in Hop Gui works on
the project folder, so you can commit, diff and browse history without leaving
Hop.
diff --git
a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-tools.adoc
b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-tools.adoc
index 698ff25ce1..d47856ea10 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-tools.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-tools.adoc
@@ -17,413 +17,153 @@ under the License.
[[HopTools]]
:imagesdir: ../../assets/images
:page-pagination:
-:description: Getting Started (4/8): Hop comes with a number of GUI and
command line tools to not only design and run workflows and pipelines, but also
to manage your projects and environments, to search import, translate and more.
+:description: Getting Started (8/9): Hop ships a set of command line tools
next to Hop Gui, for running, configuring, searching, importing and serving
your projects.
-= Hop Tools
+= The Hop toolbox
-Hop contains a number of tools that are optimized for the various tasks Hop
developers and administrators need to perform.
+You'll spend most of your time in Hop Gui, but a project that only runs from a
desktop GUI is not much use in production.
-== Hop GUI
+The split is roughly this: **designing** pipelines and workflows and
**creating** metadata is what Hop Gui is for.
+**Configuring** and **running** them is where the command line takes over, and
that is the half a scheduler, a container or a CI/CD pipeline needs.
-include::../snippets/hop-tools/hop-gui.adoc[]
+== One command to start them all
-TIP: Hop Gui is designed to be platform independent. +
-xref:../hop-gui/hop-web.adoc[Hop Web] is a version of Hop Gui that works on
browsers and mobile devices.
-
-The command below starts Hop GUI for your operating system.
-
- +
+Since Hop 2.x there is a single `hop` launcher in the installation folder.
+It replaces the individual `hop-run`, `hop-conf`, `hop-gui`, ... scripts, and
plugins can add their own commands to it.
[tabs]
====
Windows::
+
--
-[source,bash]
-----
-hop-gui.bat
-----
---
-
-Linux, macOS::
-+
---
-[source,bash]
-----
-./hop-gui.sh
-----
---
-====
-
-Expected output: Hop Gui starts.
-
-== Hop Conf
-
-include::../snippets/hop-tools/hop-conf.adoc[]
-
-The example `hop-conf` command below lists your available projects.
-
- +
-
-[tabs]
-====
-
-Windows::
-+
---
-[source,bash]
-----
-hop-conf.bat -pl
-----
-
-Expected output:
[source,shell]
----
-C:\Program Files\Microsoft\jdk-11.0.17.8-hotspot\\bin\java" -classpath
lib\core\*;lib\beam\*;lib\swt\win64\* -Djava.library.path=lib\core;lib\beam
-Xmx2048m -DHOP_AUDIT_FOLDER=.\audit -DHOP_PLATFORM_OS=Windows
-DHOP_PLATFORM_RUNTIME=Conf -DHOP_AUTO_CREATE_CONFIG=Y
org.apache.hop.config.HopConfig -pl
-===[Starting
HopConfig]=========================================================
-Projects:
- default : config/projects/default
- Configuration file:
file:\C:\<YOUR_PATH>\hop\config\projects\default\project-config.json
- samples : config/projects/samples
- Parent project: default
- Configuration file:
file:\C:\<YOUR_PATH>\hop\config\projects\samples\project-config.json
+hop.bat help
----
-
--
Linux, macOS::
+
--
-[source,bash]
-----
-./hop-conf.sh -pl
-----
-
-Expected output:
-
-[source,bash]
-----
-Projects:
- default : config/projects/default
- Configuration file:
file:<YOUR_PATH>/hop/config/projects/default/project-config.json
- samples : config/projects/samples
- Parent project: default
- Configuration file:
file:<YOUR_PATH>/hop/config/projects/samples/project-config.json
-
-----
---
-
-
-====
-
-See the xref:../hop-tools/hop-conf/hop-conf.adoc[Hop Tools -> Hop Conf]
documentation for more information.
-
-== Hop Encrypt
-
-include::../snippets/hop-tools/hop-encrypt.adoc[]
-
- +
-
-The example below prints the encrypted Hop password `mypassword`.
-
- +
-
-[tabs]
-====
-
-Windows::
-+
---
-[source,bash]
-----
-hop-encrypt.bat -hop mypassword
-----
-
-Expected output:
-
[source,shell]
----
-===[Environment Settings - hop-encrypt.bat]====================================
-Java identified as "C:\Program Files\Microsoft\jdk-11.0.17.8-hotspot\\bin\java"
-HOP_OPTIONS=-Xmx64m -DHOP_AUDIT_FOLDER=.\audit -DHOP_PLATFORM_OS=Windows
-DHOP_PLATFORM_RUNTIME=GUI
-Command to start Hop will be:
-"C:\Program Files\Microsoft\jdk-11.0.17.8-hotspot\\bin\java" -classpath
lib\core\*;lib\beam\*;lib\swt\win64\* -Djava.library.path=lib\core;lib\beam
-Xmx64m -DHOP_AUDIT_FOLDER=.\audit -DHOP_PLATFORM_OS=Windows
-DHOP_PLATFORM_RUNTIME=GUI org.apache.hop.core.encryption.Encr -hop mypassword
-===[Starting
HopEncrypt]=========================================================
-Encrypted 2be98afc86aa79f9dbb18bd63c99dbdde
+./hop help
----
--
-
-Linux, macOS::
-+
---
-[source,bash]
-----
-./hop-encrypt.sh -hop mypassword
-----
-
-Expected output:
-[source, shell]
-----
-Encrypted 2be98afc86aa79f9dbb18bd63c99dbdde
-----
-
---
-
-====
-
-See the xref:../hop-tools/hop-encrypt.adoc[Hop Tools -> Hop Encrypt]
documentation for more information.
-
-== Hop Run
-
-include::../snippets/hop-tools/hop-run.adoc[]
-
-The example below runs the `switch-case-basic.hpl` pipeline in the samples
project (`-j`) with the
xref:pipeline/pipeline-run-configurations/native-local-pipeline-engine.adoc[local
native pipeline run configuration] (`-r`).
-
- +
-
-[tabs]
====
-Windows::
-+
---
-[source,shell]
-----
-hop-run.bat -r local -j samples -f
${PROJECT_HOME}/transforms/switch-case-basic.hpl
-----
-
-Expected output:
+`help` lists the commands available in *your* installation, which depends on
the plugins you have installed:
[source,shell]
----
-C:\<YOUR_PATH>\hop>echo off
-===[Environment Settings - hop-run.bat]===================================
-Java identified as "C:\Program Files\Microsoft\jdk-11.0.17.8-hotspot\\bin\java"
-HOP_OPTIONS="-Xmx2048m" -DHOP_AUDIT_FOLDER=.\audit -DHOP_PLATFORM_OS=Windows
-DHOP_PLATFORM_RUNTIME=Run -DHOP_AUTO_CREATE_CONFIG=Y
-Consolidated parameters to pass to HopRun are
--r local -j samples -f ${PROJECT_HOME}/transforms/switch-case-basic.hpl
-Command to start HopRun will be:
-"C:\Program Files\Microsoft\jdk-11.0.17.8-hotspot\\bin\java" -classpath
lib\core\*;lib\beam\*;lib\swt\win64\*
--Djava.library.path=lib\core;lib\beam "-Xmx2048m" -DHOP_AUDIT_FOLDER=.\audit
--DHOP_PLATFORM_OS=Windows -DHOP_PLATFORM_RUNTIME=Run
-DHOP_AUTO_CREATE_CONFIG=Y org.apache.hop.run.HopRun
--r local -j samples -f ${PROJECT_HOME}/transforms/switch-case-basic.hpl
-===[Starting HopRun]=========================================================
-2022/12/16 07:07:47 - HopRun - Enabling project 'samples'
-2022/12/16 07:07:47 - HopRun - Starting pipeline:
config/projects/samples/transforms/switch-case-basic.hpl
-2022/12/16 07:07:47 - switch-case-basic - Executing this pipeline using the
Local Pipeline Engine with run configuration 'local'
-2022/12/16 07:07:47 - switch-case-basic - Execution started for pipeline
[switch-case-basic]
-2022/12/16 07:07:47 - Test Data.0 - Finished processing (I=0, O=0, R=0, W=5,
U=0, E=0)
-2022/12/16 07:07:47 - Switch id.0 - Finished processing (I=0, O=0, R=5, W=5,
U=0, E=0)
-2022/12/16 07:07:47 - Output 2.0 - Finished processing (I=0, O=0, R=1, W=1,
U=0, E=0)
-2022/12/16 07:07:47 - Output 1.0 - Finished processing (I=0, O=0, R=1, W=1,
U=0, E=0)
-2022/12/16 07:07:47 - Output 4.0 - Finished processing (I=0, O=0, R=1, W=1,
U=0, E=0)
-2022/12/16 07:07:47 - Output default.0 - Finished processing (I=0, O=0, R=1,
W=1, U=0, E=0)
-2022/12/16 07:07:47 - Output 3.0 - Finished processing (I=0, O=0, R=1, W=1,
U=0, E=0)
-2022/12/16 07:07:47 - switch-case-basic - Pipeline duration : 0.435 seconds [
0.435" ]
+Commands:
+ help Display help information about the specified command.
+ conf Configure Hop
+ encrypt Encrypt secrets
+ gui The Hop GUI
+ import Import metadata
+ run Run a pipeline or workflow
+ search Search in Hop metadata
+ server Run a Hop server
+ setup Configure Hop environment variables
----
---
+Two options are worth knowing before anything else, because nearly every
command takes them:
-Linux, macOS::
-+
---
-[source,shell]
-----
-./hop-run.sh -r local -j samples -f
${PROJECT_HOME}/transforms/switch-case-basic.hpl
-----
+[options="header"]
+|===
+|Option|What it does
+|`-j`, `--project`|enable a project before the command runs
+|`-e`, `--environment`|enable an environment before the command runs
+|===
-Expected output:
+So running your workflow from the
xref:getting-started/hop-projects.adoc[previous chapter] looks like this:
[source,shell]
----
-2022/12/16 06:59:03 - HopRun - Enabling project 'samples'
-2022/12/16 06:59:03 - HopRun - Relative path filename specified:
config/projects/samples//transforms/switch-case-basic.hpl
-2022/12/16 06:59:03 - HopRun - Starting pipeline:
config/projects/samples//transforms/switch-case-basic.hpl
-2022/12/16 06:59:03 - switch-case-basic - Executing this pipeline using the
Local Pipeline Engine with run configuration 'local'
-2022/12/16 06:59:03 - switch-case-basic - Execution started for pipeline
[switch-case-basic]
-2022/12/16 06:59:04 - Test Data.0 - Finished processing (I=0, O=0, R=0, W=5,
U=0, E=0)
-2022/12/16 06:59:04 - Switch id.0 - Finished processing (I=0, O=0, R=5, W=5,
U=0, E=0)
-2022/12/16 06:59:04 - Output default.0 - Finished processing (I=0, O=0, R=1,
W=1, U=0, E=0)
-2022/12/16 06:59:04 - Output 1.0 - Finished processing (I=0, O=0, R=1, W=1,
U=0, E=0)
-2022/12/16 06:59:04 - Output 4.0 - Finished processing (I=0, O=0, R=1, W=1,
U=0, E=0)
-2022/12/16 06:59:04 - Output 3.0 - Finished processing (I=0, O=0, R=1, W=1,
U=0, E=0)
-2022/12/16 06:59:04 - Output 2.0 - Finished processing (I=0, O=0, R=1, W=1,
U=0, E=0)
-2022/12/16 06:59:04 - switch-case-basic - Pipeline duration : 0.668 seconds [
0.668" ]
+./hop run -j getting-started -r local -f '${PROJECT_HOME}/first-workflow.hwf'
----
---
-====
+NOTE: the older `hop-run.sh`, `hop-conf.sh` and friends still ship and still
work. New examples in this manual use `hop <command>`.
-xref::../hop-run/index.adoc[Hop Tools -> Hop Run]
+== The tools
-== Hop Search
+[options="header",cols="20%,50%,30%"]
+|===
+|Tool|What you use it for|Read more
-include::../snippets/hop-tools/hop-search.adoc[]
+|`hop gui`
+|The visual development environment: build, preview, run and debug pipelines
and workflows.
+|xref:hop-tools/hop-gui.adoc[Hop Gui]
-The example below searches in the samples project `-j` for `switch-case`.
+|`hop run`
+|Run a pipeline or workflow. This is what a scheduler, a CI job or a container
calls.
+|xref:hop-run/index.adoc[Hop Run]
- +
+|`hop conf`
+|Manage projects, environments and cloud configuration from a script.
+|xref:hop-tools/hop-conf/hop-conf.adoc[Hop Conf]
-[tabs]
-====
+|`hop setup`
+|Point Hop at a user-level config folder so your projects and settings survive
an upgrade.
+|xref:hop-tools/hop-setup.adoc[Hop Setup]
-Windows::
-+
---
-[source, shell]
-----
-hop-search.bat -j samples -x switch-case
-----
+|`hop server`
+|Run a Hop Server to execute pipelines and workflows remotely, over REST.
+|xref:hop-server/index.adoc[Hop Server]
-Expected output:
-[source,shell]
-----
-C:\<YOUR_PATH>\hop>echo off
-===[Environment Settings - hop-search.bat]===================================
-Java identified as "C:\Program Files\Microsoft\jdk-11.0.17.8-hotspot\\bin\java"
-HOP_OPTIONS=-Xmx2048m -DHOP_AUDIT_FOLDER=.\audit -DHOP_PLATFORM_OS=Windows
-DHOP_PLATFORM_RUNTIME=Search
--DHOP_AUTO_CREATE_CONFIG=Y
-Command to start Hop will be:
-"C:\Program Files\Microsoft\jdk-11.0.17.8-hotspot\\bin\java" -classpath
lib\core\*;lib\beam\*;lib\swt\win64\*
--Djava.library.path=lib\core;lib\beam -Xmx2048m -DHOP_AUDIT_FOLDER=.\audit
-DHOP_PLATFORM_OS=Windows
--DHOP_PLATFORM_RUNTIME=Search -DHOP_AUTO_CREATE_CONFIG=Y
org.apache.hop.config.HopConfig -j samples -x switch-case
-===[Starting
HopConfig]=========================================================
-Enabling project 'samples'
-Searching in project : samples
-Searching for [switch-case] Case sensitive? true Regular expression? true
-Searching in location : Project samples
------------------------------------------------------------------------------------
-file:///C:/<YOUR_PATH>/hop/config/projects/samples/beam/pipelines/switch-case.hpl
: null(switch-case) : matching property value: switch-case
file:///C:/<YOUR_PATH>/hop/config/projects/samples/beam/pipelines/switch-case.hpl
: switch-case(switch-case) : matching property value: switch-case
-file:///C:/<YOUR_PATH>/hop/config/projects/samples/beam/pipelines/switch-case.hpl
: switch-case(switch-case) : pipeline transform property : filePrefix
-----
---
-
-Linux, macOS::
-+
---
-[source,shell]
-----
-./hop-search.sh -j samples -x switch-case
-----
-
-Expected output:
-[source,shell]
-----
-Enabling project 'samples'
-Searching in project : samples
-Searching for [switch-case] Case sensitive? true Regular expression? true
-Searching in location : Project samples
------------------------------------------------------------------------------------
-file://<YOUR_PATH>/hop/config/projects/samples/beam/pipelines/switch-case.hpl
: null(switch-case) : matching property value: switch-case
-file://<YOUR_PATH>/hop/config/projects/samples/beam/pipelines/switch-case.hpl
: switch-case(switch-case) : matching property value: switch-case
-file://<YOUR_PATH>/hop/config/projects/samples/beam/pipelines/switch-case.hpl
: switch-case(switch-case) : pipeline transform property : filePrefix
-----
---
-
-====
+|`hop search`
+|Search across all the metadata in a project: which pipeline uses this
connection, where is this field set.
+|xref:hop-tools/hop-search.adoc[Hop Search]
-See the xref:../hop-tools/hop-search.adoc[Hop Tools -> Hop Search]
documentation for more information.
+|`hop encrypt`
+|Obfuscate a password so it isn't stored in clear text in a configuration file.
+|xref:hop-tools/hop-encrypt.adoc[Hop Encrypt]
-== Hop Server
+|`hop import`
+|Convert a Kettle/PDI repository into a Hop project.
+|xref:hop-vs-kettle/import-kettle-projects.adoc[Import Kettle projects]
-include::../snippets/hop-tools/hop-server.adoc[]
+|`hop doc`
+|Generate documentation for your own Hop project, in Markdown or HTML.
+|xref:hop-tools/hop-doc.adoc[Hop Doc]
+|===
-The example command below starts the most basic server on your machine
`localhost` on port `8081`.
+Some tools are optional plugins rather than part of the standard client:
- +
+[options="header",cols="20%,50%,30%"]
+|===
+|Tool|What you use it for|Read more
-[tabs]
-====
-Windows::
-+
---
-[source,bash]
-----
-hop-server.bat localhost 8081
-----
+|Marketplace
+|Install optional plugins into a running Hop client from a Maven repository.
+|xref:hop-tools/hop-marketplace.adoc[Hop Marketplace]
-Expected output:
-[source, shell]
-----
-C:\<YOUR_PATH\hop>echo off
-===[Environment Settings - hop-server.bat]====================================
-Java identified as "C:\Program Files\Microsoft\jdk-11.0.17.8-hotspot\\bin\java"
-HOP_OPTIONS=-Xmx2048m -DHOP_AUDIT_FOLDER=.\audit -DHOP_PLATFORM_OS=Windows
-DHOP_PLATFORM_RUNTIME=GUI -DHOP_AUTO_CREATE_CONFIG=Y
-Command to start Hop will be:
-"C:\Program Files\Microsoft\jdk-11.0.17.8-hotspot\\bin\java" -classpath
lib\core\*;lib\beam\*;lib\swt\win64\*
--Djava.library.path=lib\core;lib\beam -Xmx2048m -DHOP_AUDIT_FOLDER=.\audit
-DHOP_PLATFORM_OS=Windows
--DHOP_PLATFORM_RUNTIME=GUI -DHOP_AUTO_CREATE_CONFIG=Y
org.apache.hop.www.HopServer localhost 8081
-===[Starting
HopServer]=========================================================
-2022/12/16 07:33:44 - HopServer - Enabling project 'default'
-2022/12/16 07:33:44 - HopServer - Installing timer to purge stale objects
after 1440 minutes.
-2022/12/16 07:33:44 - HopServer - Created listener for webserver @ address :
localhost:8081
-----
+|`hop lint`
+|Static analysis over a project: check pipelines, workflows and metadata
without running them. Useful as a build step.
+|xref:hop-tools/hop-lint.adoc[Hop Lint]
-Your Hop Server is available at \http://localhost:8081, log on with the
default username `cluster`, password `cluster`.
+|PyHop
+|Drive Hop from Python.
+|xref:hop-tools/hop-python/hop-python.adoc[Hop Python]
-Hit `CTRL-C` to stop the server.
+|Hop Arrow
+|Expose pipeline output over an Apache Arrow Flight server.
+|xref:hop-tools/hop-arrow-command.adoc[Hop Arrow]
+|===
---
+TIP: Hop Gui also runs in a browser. See xref:hop-gui/hop-web.adoc[Hop Web]
and xref:hop-web-docker.adoc[Hop Web in Docker].
-Linux, macOS::
-+
---
-[source,bash]
-----
-./hop-server.sh localhost 8081
-----
+== Try one
-Expected output:
+The quickest way to see the command line in action is to run something you
already built:
[source,shell]
----
-2022/12/16 07:20:19 - HopServer - Enabling project 'default'
-2022/12/16 07:20:19 - HopServer - Installing timer to purge stale objects
after 1440 minutes.
-2022/12/16 07:20:19 - HopServer - Created listener for webserver @ address :
localhost:8081
+./hop run -j getting-started -r local -f '${PROJECT_HOME}/first-pipeline.hpl'
----
-Your Hop Server is available at \http://localhost:8081, log on with the
default username `cluster`, password `cluster`.
-
-Hit `CTRL-C` to stop the server.
-
---
-
-====
-
-Read more about xref::../hop-server/index.adoc[Hop Server]
-
-== Hop Import
-
-include::../snippets/hop-tools/hop-import.adoc[]
-
- +
-
-The example command below prints the `hop-import` help. Check the
xref:hop-vs-kettle/import-kettle-projects.adoc[] docs for more information.
-
- +
-
-[tabs]
-====
-
-Windows::
-+
---
-[code, shell]
-----
-hop-import.bat
-----
---
-
-Linux, macOS::
-+
---
-[code,shell]
-----
-./hop-import.sh
-----
---
-
-====
-
-Read more at xref:hop-vs-kettle/import-kettle-projects.adoc[Import Kettle
(PDI) projects]
+You get the same log you saw in the *Logging* tab of Hop Gui, on stdout.
+That is the whole deployment story for a lot of Hop projects: the same file,
the same run configuration, started by cron, a Kubernetes CronJob or Airflow
instead of by you.
+See xref:how-to-guides/scheduling-workflows-and-pipelines.adoc[Scheduling
workflows and pipelines] for the details.
diff --git
a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-what-is-hop.adoc
b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-what-is-hop.adoc
index a7a052ca0b..2661521449 100644
---
a/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-what-is-hop.adoc
+++
b/docs/hop-user-manual/modules/ROOT/pages/getting-started/hop-what-is-hop.adoc
@@ -17,43 +17,94 @@ under the License.
[[WhatIsHop]]
:imagesdir: ../../assets/images
:page-pagination:
-:description: Getting Started (1/8): before we're diving into Hop, we'll have
a quick look at the visual design, metadata, kernel + plugin architecture and
runtimes
+:description: Getting Started (1/9): Apache Hop is a metadata-driven data
integration and orchestration platform. Pipelines and workflows are designed
visually and then managed like any other software project.
= What is Apache Hop?
-== Visual Design and Metadata
+Apache Hop is a **metadata-driven data integration and data orchestration
platform**.
-Apache Hop, short for **H**op **O**rchestration **P**latform, is a data
orchestration and data engineering platform that aims to facilitate all aspects
of data and metadata orchestration.
-Hop lets you focus on the problem you're trying to solve without technology
getting in the way.
-Simple tasks should be easy, complex tasks need to be possible.
+== Metadata driven
-Hop allows data professionals to work **visually**, using **metadata** to
describe how data should be processed.
-Visual design enables data developers to focus on *what* they want to do
instead of *how* that task needs to be done.
-This focus on the task at hand lets Hop developers be more productive than
they would be when writing code.
+Everything in Hop is metadata.
-== Architecture
+The pipelines that read, combine and transform your data are metadata.
+So are the workflows that orchestrate them, the connections to the databases,
files and services you work with, and the run configurations that decide where
and how any of it executes.
-Hop was designed to be as flexible as possible: at the core is the small but
powerful Hop engine.
-All functionality is added through plugins: the default Hop installation comes
with about 400 plugins.
-You can remove or add third-party plugins according to your needs to tailor
Hop to be exactly what you need.
-Hop is designed to work in any scenario, from IoT to huge volumes of data,
on-prem, in the cloud, on a bare OS or in containers and kubernetes.
+Nothing in a Hop pipeline is bound to a specific database, file format or
processing engine.
+A pipeline describes *what* should happen to your data; the metadata around it
decides *where* that happens and *against what*.
+That separation is what lets the same pipeline run against a developer's local
database and a production warehouse, or on your laptop and on a Spark cluster,
without being rewritten.
-== Flexible Runtimes
+Hop takes this a step further with
xref:pipeline/metadata-injection.adoc[metadata injection]: a template pipeline
that receives its metadata at runtime, so one pipeline can process a hundred
different files or tables instead of you building a hundred near-identical
pipelines.
-Hop developers create **workflows** and **pipelines** in a visual development
environment called Hop Gui.
-These workflows and pipelines can be executed on a variety of engines:
workflows and pipelines can run on the native Hop engine, both locally and
remotely.
-Pipelines can also run on Apache Spark, Apache Flink and Google Dataflow
through the Apache Beam runtime configurations. +
+== Built to fit your architecture
-In workflows and pipelines, hundreds of operations can be applied on the data:
read from and write to a variety of source and target platforms, but also
combine, enrich, clean and in many other ways manipulate data.
-Depending on the engine and selected functionality, your data can be processed
in batch, streaming or in a batch/streaming hybrid.
+Hop is designed to blend into the data architecture you already run:
relational databases, files, object stores on AWS, Azure and Google Cloud,
NoSQL and graph databases, message queues, REST and SOAP services, SaaS
platforms.
+Hop connects them and moves data between them.
-== Use Cases
+That is also why Hop is deliberately lightweight.
+At the core is a small, fast engine; everything else is a plugin, and you add
or remove plugins to make your installation exactly what you need and nothing
more.
+The plugin architecture is open, so you can write your own and load them the
same way.
-A number of common use cases for Hop are:
+The result runs anywhere from an edge device in an IoT scenario to a cluster
processing very large volumes, on bare metal, in a container, or on Kubernetes.
-* Loading large data sets into databases taking advantage of the cloud,
clustered, and massively parallel processing environments.
-* Data warehouse population with built-in support for Slowly Changing
Dimensions (SCD), xref:how-to-guides/change-data-capture.adoc[Change Data
Capture (CDC)], and surrogate key creation.
-* Integrate between diverse data architectures, combining relational
databases, files, NoSQL databases like Neo4j, MongoDB, Cassandra etc
-* Data migration between different databases and applications.
-* Data profiling and data cleansing.
+== Designed visually, managed like software
+Hop developers build pipelines and workflows **visually**, in a full
development environment called xref:hop-gui/index.adoc[Hop Gui], available on
Windows, macOS and Linux and in the browser as xref:hop-gui/hop-web.adoc[Hop
Web].
+
+Visual design means you describe the problem instead of the plumbing, and it
means the next person to open your pipeline can see what it does at a glance
instead of reading through hundreds of lines of code.
+
+What Hop does *not* do is trap that work in a proprietary tool.
+A pipeline is a plain file on disk, and a project is an ordinary folder of
them.
+From that point on, a Hop project is managed like any other software project:
+
+Version control::
+Projects and environments live in Git. Branch, review, diff and roll back like
any other repository. Hop Gui has xref:hop-gui/hop-gui-git.adoc[git
integration] built in, so you can do most of it without leaving the tool.
+
+Unit tests::
+xref:pipeline/pipeline-unit-testing.adoc[Pipeline unit tests] validate a
pipeline's output against a golden data set. Logging tells you a pipeline ran;
a unit test tells you it produced the right data. Regression tests keep a fixed
bug fixed.
+
+Static analysis::
+xref:linting/index.adoc[Linting] checks pipelines, workflows and metadata
without running them or connecting to anything, so it is safe to run on every
commit.
+
+CI/CD::
+Everything Hop needs to run is on the command line, so building, testing and
deploying a Hop project is an ordinary build pipeline. Promote the same project
from development through test to production by pointing it at a different
environment.
+
+== Flexible runtimes
+
+You design a pipeline once and choose at runtime where it executes.
+A
xref:pipeline/pipeline-run-configurations/pipeline-run-configurations.adoc[run
configuration] is metadata like everything else, so switching engines does not
mean redesigning anything.
+
+Workflows run on Hop's own engine,
xref:pipeline/pipeline-run-configurations/native-local-pipeline-engine.adoc[locally]
or on a remote xref:hop-server/index.adoc[Hop Server].
+
+Pipelines have more options:
+
+[options="header",cols="30%,70%"]
+|===
+|Engine|What it's for
+
+|xref:pipeline/pipeline-run-configurations/native-local-pipeline-engine.adoc[Native
local]
+|The default. Runs on the machine you're on, and handles a very large share of
real workloads on its own.
+
+|xref:pipeline/pipeline-run-configurations/native-remote-pipeline-engine.adoc[Native
remote]
+|The same engine on a xref:hop-server/index.adoc[Hop Server], with
xref:pipeline/pipeline-run-configurations/native-load-balancing-pipeline-engine.adoc[load
balancing] across several servers when you need it.
+
+|xref:pipeline/pipeline-run-configurations/native-spark-pipeline-engine.adoc[Native
Spark]
+|Executes the pipeline directly as a Spark job, without translating it through
another framework. Runs locally, on a cluster through `spark-submit`, and on
xref:pipeline/spark/databricks.adoc[Databricks]. This is also the path to
xref:pipeline/spark/lakehouse.adoc[Delta Lake and Apache Iceberg] tables.
+
+|xref:pipeline/beam/getting-started-with-beam.adoc[Apache Beam]
+|Mainly used to run pipelines on
xref:pipeline/pipeline-run-configurations/beam-dataflow-pipeline-engine.adoc[Google
Cloud Dataflow]. Beam run configurations for
xref:pipeline/pipeline-run-configurations/beam-spark-pipeline-engine.adoc[Spark]
and
xref:pipeline/pipeline-run-configurations/beam-flink-pipeline-engine.adoc[Flink]
are also available.
+|===
+
+Depending on the engine and the transforms you use, data is processed in
batch, streaming, or a mix of the two.
+
+== Use cases
+
+Hop is used for, among many other things:
+
+* Populating and maintaining data warehouses, with built-in support for Slowly
Changing Dimensions (SCD), xref:how-to-guides/change-data-capture.adoc[Change
Data Capture (CDC)] and surrogate keys.
+* Loading large data sets into databases, data warehouses and cloud object
storage.
+* Building and maintaining xref:pipeline/spark/lakehouse.adoc[lakehouse
tables] on Delta Lake and Apache Iceberg.
+* Integrating across diverse architectures: relational databases, files,
object stores, NoSQL and graph databases such as MongoDB, Cassandra and Neo4j,
REST and SOAP services, and SaaS platforms.
+* Processing streaming data, for example from Apache Kafka, on its own or
alongside batch.
+* Migrating data between databases and applications.
+* Data profiling, validation and cleansing.
diff --git a/docs/hop-user-manual/modules/ROOT/pages/getting-started/index.adoc
b/docs/hop-user-manual/modules/ROOT/pages/getting-started/index.adoc
index d0c41d40c7..48589a7a7c 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/getting-started/index.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/getting-started/index.adoc
@@ -24,17 +24,20 @@ under the License.
This guide walks you through the Hop basics.
-We'll focus on the core knowledge you need to move around in Hop, without
going in detail.
-At the end of this guide, there will be links to dive deeper into various Hop
topics.
+It is built around one small example that you'll carry from chapter to
chapter: a pipeline that creates and writes data, a workflow that runs it and
handles failure, and a project that holds both.
+By the end you'll have built and run something real, and you'll know where to
look for everything else.
-This is what we'll cover:
+Set aside about an hour.
+All you need is a machine with Java on it.
-* xref:getting-started/hop-what-is-hop.adoc[What is Hop?]
-* xref:getting-started/hop-concepts.adoc[Concepts]
-* xref:getting-started/hop-download-install.adoc[Download & Install]
-* xref:getting-started/hop-tools.adoc[Tools]
-* xref:getting-started/hop-gui.adoc[Hop Gui overview]
-* xref:getting-started/hop-gui-pipelines.adoc[Pipelines]
-* xref:getting-started/hop-gui-workflows.adoc[Workflows]
-* xref:getting-started/hop-next-steps.adoc[Next Steps]
+This is what we'll cover:
+. xref:getting-started/hop-what-is-hop.adoc[What is Hop?] - what the platform
is for
+. xref:getting-started/hop-download-install.adoc[Download & Install] - get it
running
+. xref:getting-started/hop-concepts.adoc[Concepts] - the vocabulary
+. xref:getting-started/hop-gui.adoc[Hop Gui overview] - find your way around
+. xref:getting-started/hop-gui-pipelines.adoc[Your first pipeline] - build,
preview and run it
+. xref:getting-started/hop-gui-workflows.adoc[Your first workflow] -
orchestrate it
+. xref:getting-started/hop-projects.adoc[Projects and environments] - make it
portable
+. xref:getting-started/hop-tools.adoc[The Hop toolbox] - run it without the GUI
+. xref:getting-started/hop-next-steps.adoc[Next Steps] - where to go from here
diff --git a/docs/hop-user-manual/modules/ROOT/pages/hop-gui/perspectives.adoc
b/docs/hop-user-manual/modules/ROOT/pages/hop-gui/perspectives.adoc
index 1c031ed6cc..87eeed35e4 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/hop-gui/perspectives.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/hop-gui/perspectives.adoc
@@ -26,22 +26,4 @@ Use the keyboard shortcuts `CTRL-SHIFT-arrow-up` and
`CTRL-SHIFT-arrow-down` to
Here are the available perspectives:
-* image:icons/data_orch.svg[width="24px"]
xref:hop-gui/perspective-data-orchestration.adoc[Data Orchestration]
-
-* image:icons/execution.svg[width="24px"]
xref:hop-gui/perspective-execution-information.adoc[Execution Information]
-
-* image:icons/gear.svg[width="24px"]
xref:hop-gui/perspective-configuration.adoc[Configuration]
-
-* image:icons/metadata.svg[width="24px"]
xref:hop-gui/perspective-metadata.adoc[Metadata]
-
-* image:icons/folder.svg[width="24px"]
xref:hop-gui/perspective-file-explorer.adoc[File explorer]
-
-* image:icons/database.svg[width="24px"]
xref:hop-gui/perspective-database.adoc[Database] (also as a floating window or
bottom-dock tab)
-
-* image:icons/ai-provider.svg[width="24px"]
xref:hop-gui/perspective-ai-advisor.adoc[AI Assistant] (also as a floating
window or bottom-dock tab; off by default)
-
-* image:icons/plugin.svg[width="24px"]
xref:hop-gui/perspective-plugin.adoc[Plugins explorer]
-
-* image:icons/neo4j_logo.svg[width="24px"]
xref:hop-gui/perspective-neo4j.adoc[Neo4j]
-
-TIP: Project-wide search is not a left-toolbar perspective. Open it with
`CTRL-F` (*Edit → Find*). See xref:hop-gui/perspective-search.adoc[Search].
\ No newline at end of file
+include::../snippets/hop-gui/perspectives-list.adoc[]
diff --git a/docs/hop-user-manual/modules/ROOT/pages/hop-gui/perspectives.adoc
b/docs/hop-user-manual/modules/ROOT/pages/snippets/hop-gui/perspectives-list.adoc
similarity index 73%
copy from docs/hop-user-manual/modules/ROOT/pages/hop-gui/perspectives.adoc
copy to
docs/hop-user-manual/modules/ROOT/pages/snippets/hop-gui/perspectives-list.adoc
index 1c031ed6cc..f35d87c5b3 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/hop-gui/perspectives.adoc
+++
b/docs/hop-user-manual/modules/ROOT/pages/snippets/hop-gui/perspectives-list.adoc
@@ -14,18 +14,6 @@ KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
////
-
-= Hop Gui Perspectives
-:imagesdir: ../assets/images
-:description: Hop Gui provides a number of perspectives for a variety of
tasks. You'll spend most of your time in the data orchestration perspective,
building workflows and pipelines, but other perspectives for metadata
management, file management and more offer tons of functionality.
-
-Hop comes with a number of perspectives built in.
-
-Change the current perspectives by clicking on the icon in the left-hand
toolbar, or through the corresponding keyboard shortcut.
-Use the keyboard shortcuts `CTRL-SHIFT-arrow-up` and `CTRL-SHIFT-arrow-down`
to cycle through perspectives.
-
-Here are the available perspectives:
-
* image:icons/data_orch.svg[width="24px"]
xref:hop-gui/perspective-data-orchestration.adoc[Data Orchestration]
* image:icons/execution.svg[width="24px"]
xref:hop-gui/perspective-execution-information.adoc[Execution Information]