This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/hop-website.git
The following commit(s) were added to refs/heads/asf-site by this push:
new edffb5cc8c Website updated to 45a48e9
edffb5cc8c is described below
commit edffb5cc8ca53282c003be54649607fa426916ae
Author: jenkins <[email protected]>
AuthorDate: Thu Sep 24 12:25:19 2026 +0000
Website updated to 45a48e9
---
dev-manual/next/metadata-plugins.html | 63 ++++++++-
manual/next/concepts.html | 55 ++++++++
manual/next/metadata-types/rest-connection.html | 2 +-
manual/next/pipeline/formatting-values.html | 150 ++++++++++++++++++++-
manual/next/pipeline/transforms/addconstant.html | 3 +-
manual/next/pipeline/transforms/datagrid.html | 3 +-
.../pipeline/transforms/google-sheets-input.html | 3 +-
manual/next/pipeline/transforms/http.html | 20 +++
manual/next/pipeline/transforms/httppost.html | 20 +++
manual/next/pipeline/transforms/rest.html | 2 +-
manual/next/pipeline/transforms/rowgenerator.html | 3 +-
.../next/pipeline/transforms/textfileoutput.html | 7 +-
manual/next/projects/projects-environments.html | 1 +
.../snippets/field-metadata/field-columns.html | 3 +-
manual/next/snippets/hop-concepts/data-types.html | 55 ++++++++
manual/next/workflow/actions/http.html | 49 ++++++-
16 files changed, 424 insertions(+), 15 deletions(-)
diff --git a/dev-manual/next/metadata-plugins.html
b/dev-manual/next/metadata-plugins.html
index b50a5ba8f6..4e246fbc67 100644
--- a/dev-manual/next/metadata-plugins.html
+++ b/dev-manual/next/metadata-plugins.html
@@ -544,7 +544,11 @@ The class which carries this annotation will contain the
metadata.</p>
<div class="ulist">
<ul>
<li>
-<p>key : this uniquely identifies the plugin and will be the name of the
folder in which the metadata resides when serialising to JSON (see below)</p>
+<p>key : this uniquely identifies the plugin and will be the name of the
folder in which the metadata resides when serialising to JSON (see below).
+Use lower-case words separated by dashes, see <a
href="#metadata-key-naming">Choosing a key</a>.</p>
+</li>
+<li>
+<p>legacyKeys : the keys this metadata type was known under before its key was
renamed (optional), see <a href="#metadata-key-renaming">Renaming a key</a></p>
</li>
<li>
<p>name : a human-readable name</p>
@@ -563,6 +567,63 @@ The class which carries this annotation will contain the
metadata.</p>
<div class="paragraph">
<p>Example: <a
href="https://github.com/apache/hop/blob/f8f2ad2d0bc0cfd143ae90cc32e73b6c9e1cda78/engine/src/main/java/org/apache/hop/partition/PartitionSchema.java#L47"
rel="noopener" target="_blank">PartitionSchema.java</a></p>
</div>
+<div class="sect2">
+<h3 id="metadata-key-naming"><a class="link"
href="#metadata-key-naming">Choosing a key</a></h3>
+<div class="paragraph">
+<p>The key is more than an internal ID.
+It is the name of the folder in a project which holds the metadata objects
(<code>metadata/<key>/<name>.json</code>), it is written into the
metadata exported for remote execution, and it is the ID used to disable the
type in <code>disabledGuiElements</code>.
+Users see it and check it into version control, so it is effectively
public.</p>
+</div>
+<div class="paragraph">
+<p>Use lower-case words separated by dashes (kebab-case) which describe the
type, like the existing <code>pipeline-run-configuration</code>,
<code>sftp-connection</code> or <code>mail-server-connection</code>.
+Don’t use the Java class name or PascalCase
(<code>MailServerConnection</code>): the folders in a project then no longer
follow one convention.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="metadata-key-renaming"><a class="link"
href="#metadata-key-renaming">Renaming a key</a></h3>
+<div class="paragraph">
+<p>Changing the key of an existing metadata type would make all the objects
users already have invisible, because they live in a folder named after the old
key.
+If you have to rename a key, move the old one to <code>legacyKeys</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<div class="code-lang" data-pagefind-ignore>java</div><pre class="highlightjs
highlight is-highlighted"><code class="language-java hljs"
data-lang="java"><span class="hljs-meta">@HopMetadata(
+ key = "mail-server-connection",
+ legacyKeys = {"MailServerConnection"},
+ name = "i18n::MailServerConnection.name",
+ ...)</span>
+<span class="hljs-keyword">public</span> <span
class="hljs-keyword">class</span> <span class="hljs-title
class_">MailServerConnection</span> <span class="hljs-keyword">extends</span>
<span class="hljs-title class_">HopMetadataBase</span> <span
class="hljs-keyword">implements</span> <span class="hljs-title
class_">IHopMetadata</span> {</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>With a legacy key in place:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>objects in the folder named after the legacy key are still listed and
loaded.
+If an object exists in both folders, the one in the folder named after the
current key wins.</p>
+</li>
+<li>
+<p>saving an object always writes it to the folder named after the current key
and removes the copy in the legacy folder.
+Projects move to the new folder one object at a time, as users edit them.</p>
+</li>
+<li>
+<p>deleting an object removes it from all the folders.</p>
+</li>
+<li>
+<p>a metadata export which uses the legacy key, for example one sent by an
older Hop client to a Hop server, is still understood.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Code which looks for metadata files or compares type keys should use
<code>HopMetadataUtil.getAllKeys()</code>,
<code>HopMetadataUtil.matchesKey()</code> or
<code>JsonMetadataSerializer.findFilename()</code> rather than the
<code>key</code> alone, so it also finds objects which haven’t moved
yet.</p>
+</div>
+<div class="paragraph">
+<p>Note that older Hop versions only know the old key: once an object has been
saved by a newer version, older versions no longer see it.
+Mention the rename in the release notes.</p>
+</div>
+</div>
</div>
</div>
<div class="sect1">
diff --git a/manual/next/concepts.html b/manual/next/concepts.html
index 5561fa6470..3f3ab34903 100644
--- a/manual/next/concepts.html
+++ b/manual/next/concepts.html
@@ -3066,6 +3066,61 @@ A common issue is the decimal separator, which differs
between environments: an
</div>
</div>
<div class="sect2">
+<h3 id="boolean-type"><a class="link" href="#boolean-type">Boolean</a></h3>
+<div class="paragraph">
+<p>A Boolean field holds <code>true</code>, <code>false</code> or null.</p>
+</div>
+<div class="paragraph">
+<p><strong>Reading text as a Boolean</strong></p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Without a Format, <code>Y</code>, <code>yes</code>, <code>true</code> (in
any case) and <code>1</code> are read as true. Any other text is read as false,
and empty text is null.</p>
+</li>
+<li>
+<p>With a Boolean Format such as <code>on/off</code>, text that matches the
true or the false part of the mask (ignoring case) is read as that value.
+Text that matches neither part falls back to the rules above.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p><strong>Writing a Boolean as text</strong></p>
+</div>
+<div class="paragraph">
+<p>This applies wherever Hop turns a Boolean into text: Write to log, the
preview grid, text files, Concat fields and so on.</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>With a Boolean Format, Hop prints the true or the false part of the
mask.</p>
+</li>
+<li>
+<p>Without a Format, the field’s <strong>Length</strong> decides: a
length of 3 or more prints <code>true</code> / <code>false</code>, any other
length (including no length) prints <code>Y</code> / <code>N</code>.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>A Boolean Format is the text for true, a slash, and the text for false, for
example <code>true/false</code>, <code>Y/N</code>, <code>1/0</code> or
<code>yes/no</code>.
+The mask must contain exactly one slash, so neither text can contain a slash
itself.
+Spaces around the slash are ignored, and the two texts must differ in more
than upper and lower case.
+The Format column offers the common masks for Boolean fields, and you can type
any other pair, for example <code>Ja/Nein</code> to write German words.
+See <a href="pipeline/formatting-values.html#boolean-own-format" class="xref
page">Your own true and false text</a>.</p>
+</div>
+<div class="paragraph">
+<p><strong>Why two Boolean fields can print differently</strong></p>
+</div>
+<div class="paragraph">
+<p>The length is often set for you rather than by you.
+Converting a String field to a Boolean, for example in the Meta-data tab of <a
href="pipeline/transforms/selectvalues.html" class="xref page">Select
Values</a>, keeps the String’s length.
+A <code>true</code>/<code>false</code> column read from a database with length
4 therefore becomes a Boolean of length 4 and prints <code>true</code>, while a
Boolean read by JSON Input has no length and prints <code>Y</code>.
+Both values are the same <code>true</code>.</p>
+</div>
+<div class="paragraph">
+<p>Set a Boolean Format on the fields to get the same text everywhere,
whatever their length.</p>
+</div>
+</div>
+<div class="sect2">
<h3 id="_timestamp"><a class="link" href="#_timestamp">Timestamp</a></h3>
<div class="paragraph">
<p>A Timestamp value can be created from a Date, String, Number, or another
Timestamp.</p>
diff --git a/manual/next/metadata-types/rest-connection.html
b/manual/next/metadata-types/rest-connection.html
index bfc1d923dc..8101cbaf03 100644
--- a/manual/next/metadata-types/rest-connection.html
+++ b/manual/next/metadata-types/rest-connection.html
@@ -3271,7 +3271,7 @@ For <code>LINK_HEADER</code> and
<code>BODY_NEXT_URL</code>, the path on the RES
<h2 id="_samples"><a class="link" href="#_samples">Samples</a></h2>
<div class="sectionbody">
<div class="paragraph">
-<p><a
href="https://github.com/apache/hop/blob/main/plugins/transforms/rest/src/main/samples/metadata/restconnection/github-releases.json"
rel="noopener" target="_blank">github-releases.json</a> — public GitHub API,
<code>LINK_HEADER</code> pagination (used by <a
href="https://github.com/apache/hop/blob/main/plugins/transforms/rest/src/main/samples/transforms/rest-client-github-releases-loop.hpl"
rel="noopener" target="_blank">rest-client-github-releases-loop.hpl</a> in the
REST transfor [...]
+<p><a
href="https://github.com/apache/hop/blob/main/plugins/transforms/rest/src/main/samples/metadata/rest-connection/github-releases.json"
rel="noopener" target="_blank">github-releases.json</a> — public GitHub API,
<code>LINK_HEADER</code> pagination (used by <a
href="https://github.com/apache/hop/blob/main/plugins/transforms/rest/src/main/samples/transforms/rest-client-github-releases-loop.hpl"
rel="noopener" target="_blank">rest-client-github-releases-loop.hpl</a> in the
REST transfo [...]
</div>
</div>
</div>
diff --git a/manual/next/pipeline/formatting-values.html
b/manual/next/pipeline/formatting-values.html
index ba9706719d..c22019e735 100644
--- a/manual/next/pipeline/formatting-values.html
+++ b/manual/next/pipeline/formatting-values.html
@@ -2840,7 +2840,7 @@ They do <strong>not</strong> change the value stored in a
database.</p>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Format /
Conversion mask</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Number or
date pattern used to parse and print the value.
+<td class="tableblock halign-left valign-top"><p class="tableblock">Number,
date or Boolean pattern used to parse and print the value.
See <a href="#">Formatting numbers and dates</a>.</p></td>
</tr>
<tr>
@@ -2849,6 +2849,7 @@ See <a href="#">Formatting numbers and dates</a>.</p></td>
Number / BigNumber: significant digits.
Integer: display width (leading zeros when writing).
Date: length of the printed string (for example <code>4</code> prints only the
year).
+Boolean without a Format: <code>3</code> or more prints <code>true</code> /
<code>false</code>, anything else prints <code>Y</code> / <code>N</code>.
Use <code>-1</code> when unset.</p></td>
</tr>
<tr>
@@ -3475,6 +3476,153 @@ Otherwise a reader in another zone — or the same
pipeline after a DST weekend
</div>
</div>
<div class="sect1">
+<h2 id="_boolean_formats"><a class="link" href="#_boolean_formats">Boolean
formats</a></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>A Boolean format is the text for true, a slash, and the text for false.
+It is used both to print a Boolean and to read one from text.</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 33.3333%;">
+<col style="width: 33.3333%;">
+<col style="width: 33.3334%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Format</th>
+<th class="tableblock halign-left valign-top">true</th>
+<th class="tableblock halign-left valign-top">false</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>true/false</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>true</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>false</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>Y/N</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>Y</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>N</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>1/0</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>1</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>0</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>yes/no</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>yes</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>no</code></p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>Without a format, the Length of the field decides how a Boolean is printed.
+See <a href="../concepts.html#boolean-type" class="xref page">Boolean</a> for
the details.</p>
+</div>
+<div class="sect2">
+<h3 id="boolean-own-format"><a class="link" href="#boolean-own-format">Your
own true and false text</a></h3>
+<div class="paragraph">
+<p>The list above only holds suggestions.
+You can type any pair into the Format column, so a file can use the words of
its readers' language:</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 33.3333%;">
+<col style="width: 33.3333%;">
+<col style="width: 33.3334%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Format</th>
+<th class="tableblock halign-left valign-top">true</th>
+<th class="tableblock halign-left valign-top">false</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>Ja/Nee</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>Ja</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>Nee</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>Ja/Nein</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>Ja</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>Nein</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>Oui/Non</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>Oui</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>Non</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>Sí/No</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>Sí</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>No</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>on/off</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>on</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>off</code></p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>For example, to write German Booleans with <a
href="transforms/textfileoutput.html" class="xref page">Text File
Output</a>:</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Open the <strong>Fields</strong> tab and click <strong>Get
Fields</strong>.</p>
+</li>
+<li>
+<p>Check that the <strong>Type</strong> of the field is <code>Boolean</code>.
+Text File Output does not convert types, so a field that arrives as a String
has to be converted first, for example with <a
href="transforms/selectvalues.html" class="xref page">Select Values</a>.</p>
+</li>
+<li>
+<p>Type <code>Ja/Nein</code> in the <strong>Format</strong> column.</p>
+</li>
+</ol>
+</div>
+<div class="paragraph">
+<p>Every <code>true</code> is then written as <code>Ja</code> and every
<code>false</code> as <code>Nein</code>, whatever format or length the field
had before.
+A null stays empty.</p>
+</div>
+<div class="paragraph">
+<p>To read such a file again, give the field the same Format in <a
href="transforms/textfileinput.html" class="xref page">Text File Input</a> or
in the Meta-data tab of <a href="transforms/selectvalues.html" class="xref
page">Select Values</a>.
+Reading ignores case, so <code>ja</code>, <code>JA</code> and <code>Ja</code>
are all true.
+Text that matches neither word falls back to the standard rules:
<code>Y</code>, <code>yes</code>, <code>true</code> and <code>1</code> are
true, anything else is false.</p>
+</div>
+<div class="paragraph">
+<p>Keep these rules in mind when you define your own format:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Use exactly one slash: the text before it means true, the text after it
means false.
+Neither word can contain a slash, and a mask with more than one slash (such as
the date mask <code>yyyy/MM/dd</code>) is not treated as a Boolean format.</p>
+</li>
+<li>
+<p>Both words must be non-empty.</p>
+</li>
+<li>
+<p>Spaces around the slash are not part of the words: <code>Ja / Nein</code>
writes <code>Ja</code> and <code>Nein</code>.</p>
+</li>
+<li>
+<p>Pick two words that differ in more than upper and lower case.
+Reading ignores case, so a format like <code>Yes/yes</code> could never tell
true from false and is not treated as a Boolean format.</p>
+</li>
+<li>
+<p>Text File Output ignores all formats when <strong>Fast data dump (no
formatting)</strong> is enabled, and then writes <code>true</code> or
<code>false</code>.</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
<h2 id="_rounding"><a class="link" href="#_rounding">Rounding</a></h2>
<div class="sectionbody">
<div class="sect2">
diff --git a/manual/next/pipeline/transforms/addconstant.html
b/manual/next/pipeline/transforms/addconstant.html
index c0a3c0bee1..37ef33e227 100644
--- a/manual/next/pipeline/transforms/addconstant.html
+++ b/manual/next/pipeline/transforms/addconstant.html
@@ -2895,7 +2895,7 @@ They do <strong>not</strong> change the value stored in a
database.</p>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Format /
Conversion mask</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Number or
date pattern used to parse and print the value.
+<td class="tableblock halign-left valign-top"><p class="tableblock">Number,
date or Boolean pattern used to parse and print the value.
See <a href="../formatting-values.html" class="xref page">Formatting numbers
and dates</a>.</p></td>
</tr>
<tr>
@@ -2904,6 +2904,7 @@ See <a href="../formatting-values.html" class="xref
page">Formatting numbers and
Number / BigNumber: significant digits.
Integer: display width (leading zeros when writing).
Date: length of the printed string (for example <code>4</code> prints only the
year).
+Boolean without a Format: <code>3</code> or more prints <code>true</code> /
<code>false</code>, anything else prints <code>Y</code> / <code>N</code>.
Use <code>-1</code> when unset.</p></td>
</tr>
<tr>
diff --git a/manual/next/pipeline/transforms/datagrid.html
b/manual/next/pipeline/transforms/datagrid.html
index 246d59bf5b..caf24f123b 100644
--- a/manual/next/pipeline/transforms/datagrid.html
+++ b/manual/next/pipeline/transforms/datagrid.html
@@ -2907,7 +2907,7 @@ They do <strong>not</strong> change the value stored in a
database.</p>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Format /
Conversion mask</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Number or
date pattern used to parse and print the value.
+<td class="tableblock halign-left valign-top"><p class="tableblock">Number,
date or Boolean pattern used to parse and print the value.
See <a href="../formatting-values.html" class="xref page">Formatting numbers
and dates</a>.</p></td>
</tr>
<tr>
@@ -2916,6 +2916,7 @@ See <a href="../formatting-values.html" class="xref
page">Formatting numbers and
Number / BigNumber: significant digits.
Integer: display width (leading zeros when writing).
Date: length of the printed string (for example <code>4</code> prints only the
year).
+Boolean without a Format: <code>3</code> or more prints <code>true</code> /
<code>false</code>, anything else prints <code>Y</code> / <code>N</code>.
Use <code>-1</code> when unset.</p></td>
</tr>
<tr>
diff --git a/manual/next/pipeline/transforms/google-sheets-input.html
b/manual/next/pipeline/transforms/google-sheets-input.html
index 90f13dff43..a4337e17ed 100644
--- a/manual/next/pipeline/transforms/google-sheets-input.html
+++ b/manual/next/pipeline/transforms/google-sheets-input.html
@@ -2965,7 +2965,7 @@ They do <strong>not</strong> change the value stored in a
database.</p>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Format /
Conversion mask</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Number or
date pattern used to parse and print the value.
+<td class="tableblock halign-left valign-top"><p class="tableblock">Number,
date or Boolean pattern used to parse and print the value.
See <a href="../formatting-values.html" class="xref page">Formatting numbers
and dates</a>.</p></td>
</tr>
<tr>
@@ -2974,6 +2974,7 @@ See <a href="../formatting-values.html" class="xref
page">Formatting numbers and
Number / BigNumber: significant digits.
Integer: display width (leading zeros when writing).
Date: length of the printed string (for example <code>4</code> prints only the
year).
+Boolean without a Format: <code>3</code> or more prints <code>true</code> /
<code>false</code>, anything else prints <code>Y</code> / <code>N</code>.
Use <code>-1</code> when unset.</p></td>
</tr>
<tr>
diff --git a/manual/next/pipeline/transforms/http.html
b/manual/next/pipeline/transforms/http.html
index 62ce673129..dd0f81a8c7 100644
--- a/manual/next/pipeline/transforms/http.html
+++ b/manual/next/pipeline/transforms/http.html
@@ -2873,6 +2873,12 @@
<td class="tableblock halign-left valign-top"><p class="tableblock">Name of
the transform; this name has to be unique in a single pipeline</p></td>
</tr>
<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">REST
connection</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional.
+The name of a <a href="../../metadata-types/rest-connection.html" class="xref
page">REST connection</a> that supplies the client for this transform: the
proxy, the credentials, the TLS settings and the timeouts.
+When one is selected, those fields below are not used, and the URL may be a
path that is resolved against the connection’s base URL.</p></td>
+</tr>
+<tr>
<td class="tableblock halign-left valign-top"><p
class="tableblock">URL</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The base
URL string</p></td>
</tr>
@@ -2926,6 +2932,20 @@ Enabling this will also allow you to specify the name of
the input field.</p></t
<td class="tableblock halign-left valign-top"><p class="tableblock">The port
number of the Proxy Server to be used</p></td>
</tr>
<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Proxy
username</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The user
name for a proxy that requires authentication.
+The credentials of the web server are never offered to the proxy, and vice
versa.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Proxy
password</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The
password that goes with the proxy user name.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Ignore
proxy for hosts</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Target
hosts to reach directly instead of through the proxy.
+Separate the entries with <code>|</code> and use <code><strong></code> as a
wildcard, for example
<code>localhost|127.</strong>|*.internal.example.com</code>.</p></td>
+</tr>
+<tr>
<td class="tableblock halign-left valign-top"><p
class="tableblock">Parameters</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Area where
you define the parameter name-value pairs to pass on the URL</p></td>
</tr>
diff --git a/manual/next/pipeline/transforms/httppost.html
b/manual/next/pipeline/transforms/httppost.html
index 8d744bd1ff..9cb782f78e 100644
--- a/manual/next/pipeline/transforms/httppost.html
+++ b/manual/next/pipeline/transforms/httppost.html
@@ -2864,6 +2864,12 @@
</thead>
<tbody>
<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">REST
connection</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional.
+The name of a <a href="../../metadata-types/rest-connection.html" class="xref
page">REST connection</a> that supplies the client for this transform: the
proxy, the credentials, the TLS settings and the timeouts.
+When one is selected, those fields below are not used, and the URL may be a
path that is resolved against the connection’s base URL.</p></td>
+</tr>
+<tr>
<td class="tableblock halign-left valign-top"><p
class="tableblock">URL</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Web
service URL to submit to.</p></td>
</tr>
@@ -2941,6 +2947,20 @@ This option can reduce this memory overhead by reducing
the time to keep a close
<td class="tableblock halign-left valign-top"><p class="tableblock">Proxy
port</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Port
number of the proxy server, if you use one.</p></td>
</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Proxy
username</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The user
name for a proxy that requires authentication.
+The credentials of the web server are never offered to the proxy, and vice
versa.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Proxy
password</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The
password that goes with the proxy user name.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Ignore
proxy for hosts</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Target
hosts to reach directly instead of through the proxy.
+Separate the entries with <code>|</code> and use <code><strong></code> as a
wildcard, for example
<code>localhost|127.</strong>|*.internal.example.com</code>.</p></td>
+</tr>
</tbody>
</table>
</div>
diff --git a/manual/next/pipeline/transforms/rest.html
b/manual/next/pipeline/transforms/rest.html
index a3f4b57b6d..f9617646c6 100644
--- a/manual/next/pipeline/transforms/rest.html
+++ b/manual/next/pipeline/transforms/rest.html
@@ -3422,7 +3422,7 @@ Accept: application/json
<h2 id="_samples"><a class="link" href="#_samples">Samples</a></h2>
<div class="sectionbody">
<div class="paragraph">
-<p><a
href="https://github.com/apache/hop/blob/main/plugins/transforms/rest/src/main/samples/transforms/rest-client-github-releases-loop.hpl"
rel="noopener" target="_blank">rest-client-github-releases-loop.hpl</a> —
lists <code>apache/hop</code> GitHub releases via <code>LINK_HEADER</code>
pagination (<code>per_page=5</code>), splits <code>$[*]</code>, and parses
fields with a JSON Input transform. Connection metadata: <a
href="https://github.com/apache/hop/blob/main/plugins/transforms/r [...]
+<p><a
href="https://github.com/apache/hop/blob/main/plugins/transforms/rest/src/main/samples/transforms/rest-client-github-releases-loop.hpl"
rel="noopener" target="_blank">rest-client-github-releases-loop.hpl</a> —
lists <code>apache/hop</code> GitHub releases via <code>LINK_HEADER</code>
pagination (<code>per_page=5</code>), splits <code>$[*]</code>, and parses
fields with a JSON Input transform. Connection metadata: <a
href="https://github.com/apache/hop/blob/main/plugins/transforms/r [...]
</div>
</div>
</div>
diff --git a/manual/next/pipeline/transforms/rowgenerator.html
b/manual/next/pipeline/transforms/rowgenerator.html
index e5bc043713..4f37931d27 100644
--- a/manual/next/pipeline/transforms/rowgenerator.html
+++ b/manual/next/pipeline/transforms/rowgenerator.html
@@ -2946,7 +2946,7 @@ They do <strong>not</strong> change the value stored in a
database.</p>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Format /
Conversion mask</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Number or
date pattern used to parse and print the value.
+<td class="tableblock halign-left valign-top"><p class="tableblock">Number,
date or Boolean pattern used to parse and print the value.
See <a href="../formatting-values.html" class="xref page">Formatting numbers
and dates</a>.</p></td>
</tr>
<tr>
@@ -2955,6 +2955,7 @@ See <a href="../formatting-values.html" class="xref
page">Formatting numbers and
Number / BigNumber: significant digits.
Integer: display width (leading zeros when writing).
Date: length of the printed string (for example <code>4</code> prints only the
year).
+Boolean without a Format: <code>3</code> or more prints <code>true</code> /
<code>false</code>, anything else prints <code>Y</code> / <code>N</code>.
Use <code>-1</code> when unset.</p></td>
</tr>
<tr>
diff --git a/manual/next/pipeline/transforms/textfileoutput.html
b/manual/next/pipeline/transforms/textfileoutput.html
index 6375b5c2e5..6d619f4dfb 100644
--- a/manual/next/pipeline/transforms/textfileoutput.html
+++ b/manual/next/pipeline/transforms/textfileoutput.html
@@ -3021,7 +3021,8 @@ UNIX files have lines are separated by linefeeds.</p>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Fast data
dump (no formatting)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Improves
the performance when dumping large amounts of data to a text file by not
including any formatting information.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Improves
the performance when dumping large amounts of data to a text file by not
including any formatting information.
+Field formats are ignored, so a Boolean is written as <code>true</code> or
<code>false</code>.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Split
every …​ rows</p></td>
@@ -3066,7 +3067,9 @@ The table below describes each of the options for
configuring the field properti
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p
class="tableblock">Format</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Select a
format to apply to the field value. Only applies to numbers and dates.
+<td class="tableblock halign-left valign-top"><p class="tableblock">Select a
format to apply to the field value. Applies to numbers, dates and Booleans.
+For a Boolean, the format is the text for true, a slash and the text for
false, so <code>Ja/Nein</code> writes German words instead of <code>Y</code> /
<code>N</code>.
+You can type your own pair, see <a
href="../formatting-values.html#boolean-own-format" class="xref page">Your own
true and false text</a>.
See <a href="../formatting-values.html" class="xref page">Formatting numbers
and dates</a>.</p></td>
</tr>
<tr>
diff --git a/manual/next/projects/projects-environments.html
b/manual/next/projects/projects-environments.html
index 6c683bf7c8..283ed606b8 100644
--- a/manual/next/projects/projects-environments.html
+++ b/manual/next/projects/projects-environments.html
@@ -3348,6 +3348,7 @@ Open the environment properties dialog and select the
<strong>System resources</
</div>
<div class="paragraph">
<p>After switching to a project, click the environment indicator (cube icon)
next to the project name and choose an environment from the menu.
+The menu only lists the environments of the active project, plus environments
that are not linked to any project.
All open files will be restored, including their zoom level and other UI
settings.</p>
</div>
<div class="paragraph">
diff --git a/manual/next/snippets/field-metadata/field-columns.html
b/manual/next/snippets/field-metadata/field-columns.html
index af0824b756..df6b138d85 100644
--- a/manual/next/snippets/field-metadata/field-columns.html
+++ b/manual/next/snippets/field-metadata/field-columns.html
@@ -2784,7 +2784,7 @@ They do <strong>not</strong> change the value stored in a
database.</p>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Format /
Conversion mask</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Number or
date pattern used to parse and print the value.
+<td class="tableblock halign-left valign-top"><p class="tableblock">Number,
date or Boolean pattern used to parse and print the value.
See <a href="../../pipeline/formatting-values.html" class="xref
page">Formatting numbers and dates</a>.</p></td>
</tr>
<tr>
@@ -2793,6 +2793,7 @@ See <a href="../../pipeline/formatting-values.html"
class="xref page">Formatting
Number / BigNumber: significant digits.
Integer: display width (leading zeros when writing).
Date: length of the printed string (for example <code>4</code> prints only the
year).
+Boolean without a Format: <code>3</code> or more prints <code>true</code> /
<code>false</code>, anything else prints <code>Y</code> / <code>N</code>.
Use <code>-1</code> when unset.</p></td>
</tr>
<tr>
diff --git a/manual/next/snippets/hop-concepts/data-types.html
b/manual/next/snippets/hop-concepts/data-types.html
index e0c90d8779..04880b79f2 100644
--- a/manual/next/snippets/hop-concepts/data-types.html
+++ b/manual/next/snippets/hop-concepts/data-types.html
@@ -2893,6 +2893,61 @@ A common issue is the decimal separator, which differs
between environments: an
</div>
</div>
<div class="sect2">
+<h3 id="boolean-type"><a class="link" href="#boolean-type">Boolean</a></h3>
+<div class="paragraph">
+<p>A Boolean field holds <code>true</code>, <code>false</code> or null.</p>
+</div>
+<div class="paragraph">
+<p><strong>Reading text as a Boolean</strong></p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Without a Format, <code>Y</code>, <code>yes</code>, <code>true</code> (in
any case) and <code>1</code> are read as true. Any other text is read as false,
and empty text is null.</p>
+</li>
+<li>
+<p>With a Boolean Format such as <code>on/off</code>, text that matches the
true or the false part of the mask (ignoring case) is read as that value.
+Text that matches neither part falls back to the rules above.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p><strong>Writing a Boolean as text</strong></p>
+</div>
+<div class="paragraph">
+<p>This applies wherever Hop turns a Boolean into text: Write to log, the
preview grid, text files, Concat fields and so on.</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>With a Boolean Format, Hop prints the true or the false part of the
mask.</p>
+</li>
+<li>
+<p>Without a Format, the field’s <strong>Length</strong> decides: a
length of 3 or more prints <code>true</code> / <code>false</code>, any other
length (including no length) prints <code>Y</code> / <code>N</code>.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>A Boolean Format is the text for true, a slash, and the text for false, for
example <code>true/false</code>, <code>Y/N</code>, <code>1/0</code> or
<code>yes/no</code>.
+The mask must contain exactly one slash, so neither text can contain a slash
itself.
+Spaces around the slash are ignored, and the two texts must differ in more
than upper and lower case.
+The Format column offers the common masks for Boolean fields, and you can type
any other pair, for example <code>Ja/Nein</code> to write German words.
+See <a href="../../pipeline/formatting-values.html#boolean-own-format"
class="xref page">Your own true and false text</a>.</p>
+</div>
+<div class="paragraph">
+<p><strong>Why two Boolean fields can print differently</strong></p>
+</div>
+<div class="paragraph">
+<p>The length is often set for you rather than by you.
+Converting a String field to a Boolean, for example in the Meta-data tab of <a
href="../../pipeline/transforms/selectvalues.html" class="xref page">Select
Values</a>, keeps the String’s length.
+A <code>true</code>/<code>false</code> column read from a database with length
4 therefore becomes a Boolean of length 4 and prints <code>true</code>, while a
Boolean read by JSON Input has no length and prints <code>Y</code>.
+Both values are the same <code>true</code>.</p>
+</div>
+<div class="paragraph">
+<p>Set a Boolean Format on the fields to get the same text everywhere,
whatever their length.</p>
+</div>
+</div>
+<div class="sect2">
<h3 id="_timestamp"><a class="link" href="#_timestamp">Timestamp</a></h3>
<div class="paragraph">
<p>A Timestamp value can be created from a Date, String, Number, or another
Timestamp.</p>
diff --git a/manual/next/workflow/actions/http.html
b/manual/next/workflow/actions/http.html
index fe3b3d7175..779ab6a0e7 100644
--- a/manual/next/workflow/actions/http.html
+++ b/manual/next/workflow/actions/http.html
@@ -2797,6 +2797,9 @@
<div class="paragraph">
<p>If HTTP traffic is too heavy in your corporate environment, you may choose
to use a proxy server with HTTP authentication.</p>
</div>
+<div class="paragraph">
+<p>The proxy and the web server each keep their own credentials, so the ones
you fill in for the server are never offered to the proxy operator.</p>
+</div>
</div>
</div>
<div class="sect1">
@@ -2821,6 +2824,12 @@
<td class="tableblock halign-left valign-top"><p class="tableblock">The name
of the workflow action.</p></td>
</tr>
<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">REST
connection</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional.
+The name of a <a href="../../metadata-types/rest-connection.html" class="xref
page">REST connection</a> that supplies the client for this action: the proxy,
the credentials, the TLS settings and the timeouts.
+When one is selected, the fields on the Authentication and Proxy tabs are not
used, and the URL below may be a path that is resolved against the
connection’s base URL.</p></td>
+</tr>
+<tr>
<td class="tableblock halign-left valign-top"><p
class="tableblock">URL</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The HTTP
URL of the file to retrieve, or the directory name to store an uploaded file
to.</p></td>
</tr>
@@ -2852,6 +2861,10 @@ Otherwise, the file is only retrieved once</p></td>
</div>
<div class="sect2">
<h3 id="_authentication_tab"><a class="link"
href="#_authentication_tab">Authentication Tab</a></h3>
+<div class="paragraph">
+<p>These credentials belong to the web server the URL points at.
+They are sent to that server only: a proxy that asks for authentication of its
own is answered with the proxy credentials on the Proxy tab, never with
these.</p>
+</div>
<table class="tableblock frame-all grid-all" style="width: 90%;">
<colgroup>
<col style="width: 25%;">
@@ -2872,17 +2885,45 @@ Otherwise, the file is only retrieved once</p></td>
<td class="tableblock halign-left valign-top"><p
class="tableblock">Password</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">If a
username is defined, this is the password for it</p></td>
</tr>
+</tbody>
+</table>
+</div>
+<div class="sect2">
+<h3 id="_proxy_tab"><a class="link" href="#_proxy_tab">Proxy Tab</a></h3>
+<table class="tableblock frame-all grid-all" style="width: 90%;">
+<colgroup>
+<col style="width: 25%;">
+<col style="width: 75%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Option</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Proxy
server for upload</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The URL of
a proxy server that you want to connect to the HTTP URL through</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Proxy
host</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The host
name of a proxy server to route the request through.
+Leave it empty to connect directly.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Proxy
port</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">If a proxy
server is defined, this is the port number it listens on</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If a proxy
server is defined, this is the port number it listens on.
+The default is 8080.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Proxy
username</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The user
name for a proxy that requires authentication.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Proxy
password</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The
password that goes with the proxy user name.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Ignore
proxy for hosts</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">A regular
expression list of exceptions for proxy redirection.
+<td class="tableblock halign-left valign-top"><p class="tableblock">Target
hosts to reach directly instead of through the proxy.
+Separate the entries with <code>|</code> and use <code><strong></code> as a
wildcard, for example
<code>localhost|127.</strong>|*.internal.example.com</code>.
This may be useful when working on an intranet or VPN</p></td>
</tr>
</tbody>