<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://volt.build/changelog/feed.xml" rel="self" type="application/atom+xml" /><link href="https://volt.build/" rel="alternate" type="text/html" /><updated>2026-11-08T14:27:05-05:00</updated><id>https://volt.build/changelog/feed.xml</id><title type="html">VoltBuilder | Changelog</title><subtitle>App Builds Made Simple!</subtitle><entry><title type="html">November 2026</title><link href="https://volt.build/changelog/2026-11-04-november-2026/" rel="alternate" type="text/html" title="November 2026" /><published>2026-11-04T00:00:00-05:00</published><updated>2026-11-04T00:00:00-05:00</updated><id>https://volt.build/changelog/november-2026</id><content type="html" xml:base="https://volt.build/changelog/2026-11-04-november-2026/"><![CDATA[<h2 id="november-2026-builds">Builds</h2>

<p><strong>Added</strong></p>

<ul>
  <li>An iOS beta build image is available on the beta servers, with macOS 26.7.2,
Xcode 26.6, Node.js 26.13.0 and npm 12.2.2. To use it, email
<a href="mailto:support@volt.build">support@volt.build</a> and ask for beta access, then
check <strong>Build using beta servers?</strong> on the <a href="/upload/">upload page</a>. The
<a href="https://forum.volt.build/t/ios-beta-macos-26-xcode-26-6-and-node-js-26-testers-wanted/2308">beta announcement</a>
on the forum lists what we’d like testers to check. The versions on the
<a href="/docs/build-environment/">Build environment</a> page are for the default
servers. Node.js 26.13.0 includes the fix for CVE-2026-111497; see the
<a href="/news/2026/11/04/cve-2026-111497-node2shell.html">security statement</a>.</li>
</ul>

<p><strong>Changed</strong></p>

<ul>
  <li>The default Android build image was rebuilt on 4 November. The main change is
Node.js, which moves from 24.x to 26.x. npm goes from 12.2.0 to 12.2.1,
Gradle from 8.14.5 to 8.14.6 and Kotlin from 2.4.20 to 2.4.21. The Cordova
CLI, the JDKs, the Android build-tools and platforms, and the pre-cached
<code class="language-plaintext highlighter-rouge">cordova-android</code> versions are unchanged. The full list is on the
<a href="/docs/build-environment/">Build environment</a> page. The Node.js version on
this image includes the fix for CVE-2026-111497; see the
<a href="/news/2026/11/04/cve-2026-111497-node2shell.html">security statement</a>.</li>
</ul>

<h2 id="november-2026-signing-in">Signing in</h2>

<p><strong>Fixed</strong></p>

<ul>
  <li>If your browser blocks session storage, clicking Log in now shows “Sign-in
couldn’t start because this browser is blocking session storage. Enable site
storage, then try again.”</li>
  <li>If your browser blocks local storage, or has no room left in it, the page now
shows a notice when it loads: “Sign-in requires browser site storage. Enable
storage for this site or free up browser storage, then try logging in again.”
Log in does not start a sign-in while that notice is showing, and it goes away
once storage works again.</li>
</ul>

<h2 id="november-2026-documentation">Documentation</h2>

<p><strong>Fixed</strong></p>

<ul>
  <li>The documentation pages no longer raise a script error when the browser blocks
session storage. In that case the side menu does not remember its scroll
position between pages.</li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[Builds]]></summary></entry><entry><title type="html">Late October 2026</title><link href="https://volt.build/changelog/2026-10-26-late-october-2026/" rel="alternate" type="text/html" title="Late October 2026" /><published>2026-10-26T00:00:00-04:00</published><updated>2026-10-26T00:00:00-04:00</updated><id>https://volt.build/changelog/late-october-2026</id><content type="html" xml:base="https://volt.build/changelog/2026-10-26-late-october-2026/"><![CDATA[<h2 id="late-october-2026-builds">Builds</h2>

<p><strong>Added</strong></p>

<ul>
  <li>Capacitor iOS builds can now be signed with more than one provisioning
profile, for projects that include an app extension such as a share
extension. List the extra profiles in <code class="language-plaintext highlighter-rouge">voltbuilder.json</code> as project-relative
paths: <code class="language-plaintext highlighter-rouge">iosDevelopmentExtra</code> for a debug build, <code class="language-plaintext highlighter-rouge">iosDistributionExtra</code> for a
release build. Each target is signed with the profile whose bundle identifier
matches it, an exact match first and otherwise the longest wildcard match, and
the same set of profiles is used when the archive is exported. If a target has
no matching profile the build stops with “No provisioning profile found for
iOS target” and the target’s name and bundle identifier. An extra profile path
that does not exist, points outside the project, or is not a file is rejected
by the pre-build check, and a profile with a malformed UUID gives a “Malformed
mobileprovision” error. See
<a href="/docs/set_up-capacitor/#signing-app-extensions">Signing app extensions</a> in
the Capacitor setup guide.</li>
  <li>The documentation now has a <a href="/docs/build-environment/">Build environment</a>
page listing the tools and versions on the Android and iOS build servers. For
Android it covers the operating system, Node.js, npm, the Cordova CLI, Gradle,
Kotlin, the JDKs, and the Android build-tools and platforms. It also gives the
JDK, build-tools and platform used for each <code class="language-plaintext highlighter-rouge">cordova-android</code> release, and
which Java version Cordova and Capacitor builds use. For iOS it lists macOS,
Xcode, Node.js, npm, the Cordova CLI, CocoaPods and the pre-cached
<code class="language-plaintext highlighter-rouge">cordova-ios</code> versions.</li>
</ul>

<p><strong>Changed</strong></p>

<ul>
  <li>In Capacitor iOS builds, the manual signing settings are now applied only to
the app, app extension, watch and App Clip targets, and only to the
configuration being built: Debug for a debug build, Release for a release
build. Before, every Debug and Release configuration that set a signing style
was switched to your profile, and frameworks and static libraries in the
project were not exempt. A project with an extension target and no profile
that matches it, which previously built with your single profile applied to
everything, now stops with the “No provisioning profile found” error above.</li>
  <li>The comparison table on the About page now shows the current Xcode (26.2),
Cordova (13.0.0) and Android API (36.1) versions. It previously showed Xcode
13.4.0, Cordova 10.1.1 and Android API 30.</li>
</ul>

<h2 id="late-october-2026-uploads">Uploads</h2>

<p><strong>Fixed</strong></p>

<ul>
  <li>If your subscription had expired, the upload page told you “Your account is
not authorized to use the build service. Please contact support.” It now says
“Your subscription expired on” followed by the date, asks you to renew your
plan before uploading, and links to the plans page. The upload buttons stay
disabled.</li>
  <li>If the upload page could not load your build status when it opened, the
upload buttons stayed disabled after a later Check status succeeded, until you
reloaded the page. They are now enabled again as soon as the status check
succeeds.</li>
  <li>When the sign-in service timed out while the upload page was refreshing your
session, the page told you “Authentication error: Timeout when executing
‘fetch’. Please log in again.”, and if it was following a build it stopped
and showed the Log in button. A timeout is now handled like any other
connection problem: the message says the sign-in service could not be reached
and to check your connection, and during a build the Check status button is
shown instead of Log in.</li>
</ul>

<p><strong>Changed</strong></p>

<ul>
  <li>While the upload page is following a build, it now refreshes your sign-in
token before each status check, so a page left open for a long time keeps
checking. If you need to sign in again, the page stops checking and shows the
Log in button. If the token cannot be refreshed because of a network problem,
it stops and keeps the Check status button. Either way the message says that
your upload was accepted, that the build may still be running, and that the
interruption does not mean the build failed.</li>
  <li>If the script that reads your plan from your sign-in token fails to load, the
upload page now says “Upload is temporarily unavailable. Please refresh and
try again.”, hides the login buttons and leaves uploads disabled.</li>
</ul>

<h2 id="late-october-2026-api">API</h2>

<p><strong>Added</strong></p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">POST /v1/app</code> now returns an <code class="language-plaintext highlighter-rouge">X-Request-ID</code> response header on 401
responses as well, so a rejected upload carries an ID you can send us. On this
route the value is a short hash of the <code class="language-plaintext highlighter-rouge">X-Request-ID</code> or <code class="language-plaintext highlighter-rouge">X-Correlation-ID</code>
you sent, not the ID itself, and if you send neither it is generated. If you
have a problem with the API, send us the request ID and we can find that
request in our logs.</li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[Builds]]></summary></entry><entry><title type="html">October 2026</title><link href="https://volt.build/changelog/2026-10-16-october-2026/" rel="alternate" type="text/html" title="October 2026" /><published>2026-10-16T00:00:00-04:00</published><updated>2026-10-16T00:00:00-04:00</updated><id>https://volt.build/changelog/october-2026</id><content type="html" xml:base="https://volt.build/changelog/2026-10-16-october-2026/"><![CDATA[<p>The main change so far this month is that the Android build image we tested in
September is now the default. Other changes include the upload page and the
sign-in page handling failures more clearly.</p>

<h2 id="october-2026-builds">Builds</h2>

<p><strong>Changed</strong></p>

<ul>
  <li>The rebuilt Android build image from the September beta became the default
for Android builds on 14 October. It is the image described in the September
entry: built on Ubuntu 26.04, with JDK 8, 11, 17 and 21 chosen by your
<code class="language-plaintext highlighter-rouge">cordova-android</code> version, and the Gradle, Kotlin, Node and Cordova versions
pinned. The beta option on the upload page no longer sends an Android build to
a separate queue.</li>
</ul>

<p>Work continues on an iOS build image with Xcode 26.6 on macOS 26.7.1.</p>

<h2 id="october-2026-uploads">Uploads</h2>

<p><strong>Fixed</strong></p>

<ul>
  <li>For roughly five days, the upload page’s script did not run in Chrome 80 and
other browsers of that age, because it used one piece of syntax they cannot
parse. It is fixed. As far as we can tell, one person was affected.</li>
</ul>

<p><strong>Changed</strong></p>

<ul>
  <li>If the upload page cannot refresh a build’s status after your upload was
accepted, it now says so: the upload was accepted and the build may still be
running. After a server error or a dropped connection it retries after 5, 10
and 20 seconds, then shows a Check status button. Other failures show the
message and the button straight away. The button that stops the page following
a build is now labelled Stop monitoring, and the message after pressing it
says the build may still be running on the server.</li>
</ul>

<h2 id="october-2026-signing-in">Signing in</h2>

<p><strong>Changed</strong></p>

<ul>
  <li>When a sign-in attempt cannot be completed, you now stay on the sign-in page
with a message saying so, instead of being sent back to the home page. The
message is still there if you reload, and signing in again takes you back to
the page you were on. If you turn out to be signed in already, the page says
that instead.</li>
</ul>

<h2 id="october-2026-api">API</h2>

<p><strong>Added</strong></p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">GET /v1/app</code> and <code class="language-plaintext highlighter-rouge">POST /v1/client</code> now return an <code class="language-plaintext highlighter-rouge">X-Request-ID</code> response
header, including on 401 and 403 responses, and browsers on allowed origins
can read it. If you have a problem with the API, send us the request ID and we
can find that request in our logs. If you send your own <code class="language-plaintext highlighter-rouge">X-Request-ID</code> (a UUID
or 32 hex characters) it is returned unchanged. If you send <code class="language-plaintext highlighter-rouge">X-Correlation-ID</code>
instead, that is used. Any other value is replaced by a short hash. The
OpenAPI spec now documents <code class="language-plaintext highlighter-rouge">POST /v1/client</code> and the header.</li>
</ul>

<h2 id="october-2026-behind-the-scenes">Behind the scenes</h2>

<ul>
  <li>Security improvements to the build pipeline.</li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[The main change so far this month is that the Android build image we tested in September is now the default. Other changes include the upload page and the sign-in page handling failures more clearly.]]></summary></entry><entry><title type="html">September 2026</title><link href="https://volt.build/changelog/2026-10-02-september-2026/" rel="alternate" type="text/html" title="September 2026" /><published>2026-10-02T00:00:00-04:00</published><updated>2026-10-02T00:00:00-04:00</updated><id>https://volt.build/changelog/september-2026</id><content type="html" xml:base="https://volt.build/changelog/2026-10-02-september-2026/"><![CDATA[<p>This is the first entry in our changelog. From here on, updates land here as they
ship. This one covers roughly the last month.</p>

<p>Most of it went into the upload and sign-in paths. We added front-end error
monitoring in September, and it surfaced a long tail of problems nobody had
reported to us — a browser silently blocking storage, a session expiring
mid-upload, a large project timing out on a slow connection. Each one is rare on
its own. Together they were enough to cost someone their first build. Most of
what follows came out of working through that list.</p>

<h2 id="android-build-agent-beta">Android build agent beta</h2>

<p>The Android build image has been rebuilt from the ground up. It is now built
directly on Ubuntu 26.04 with the toolchain versions pinned explicitly, replacing
an image layered on top of a third-party Android SDK base.</p>

<ul>
  <li>JDK 8, 11, 17 and 21, selected automatically for your <code class="language-plaintext highlighter-rouge">cordova-android</code> version</li>
  <li>Gradle 8.14.5 on the path, with 6.5, 7.1.1, 7.4.2, 7.6, 8.7, 8.13, 8.14.2 and
8.14.3 also cached, so whichever version your project’s Gradle wrapper asks
for is already on the machine</li>
  <li>Kotlin 2.4.20</li>
  <li>Node 24, npm 12.2.0, Cordova 13</li>
  <li>Android build-tools 30.0.3 through 36.1.0; platforms android-29 through android-36.1</li>
  <li>Supports <code class="language-plaintext highlighter-rouge">cordova-android</code> 9 through 15, and Capacitor</li>
</ul>

<p>The image is built by running a real build for every supported
<code class="language-plaintext highlighter-rouge">cordova-android</code> version and for Capacitor, so the npm and Gradle caches are
already warm when your build starts.</p>

<p>Three things worth knowing:</p>

<p><strong><code class="language-plaintext highlighter-rouge">git</code> is now installed in the build image.</strong> Plugins referenced by a git URL
should install correctly.</p>

<p><strong>npm’s git and install-script permissions have been restored.</strong> npm 12 tightened
its defaults around git dependencies and packages that run install scripts, which
broke some plugins. The image restores the previous behaviour.</p>

<p><strong>A note on <code class="language-plaintext highlighter-rouge">cordova-android</code> 9.</strong> Apache’s last 9.x release was 9.1.0, in April
2021, and it resolves its dependencies through JCenter/Bintray, which has since
shut down — so a stock cordova-android 9 project no longer builds anywhere. We
maintain our own engine with that repaired, and it is the only way to build a
9.x project on VoltBuilder. It has to be requested explicitly in <code class="language-plaintext highlighter-rouge">config.xml</code>:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;engine name="android" spec="https://github.com/voltbuilder/cordova-android#9.1.1" /&gt;
</code></pre></div></div>

<p>A plain <code class="language-plaintext highlighter-rouge">spec="9.0.0"</code> is rejected; the minimum numeric engine is 10.0.0. We
keep 9.x working rather than developing it, so if you are still on it, moving
up is worth the time.</p>

<p>This is a beta. To take part, email <a href="mailto:support@volt.build">support@volt.build</a>
to request access, then select the beta agent on the
<a href="https://volt.build/upload/">upload page</a>.</p>

<h2 id="uploads">Uploads</h2>

<p><strong>Fixed</strong></p>

<ul>
  <li>Submitting with no file selected, or with a file that is not a zip, now fails
immediately with a clear message instead of starting a build that cannot succeed.</li>
  <li>Raised upload timeouts. Large projects on slower connections were timing out
before the transfer finished.</li>
  <li>An upload interrupted part-way through now returns a clear incomplete-upload
error rather than a server error.</li>
  <li>Fixed a server error when uploading from an account that had never run a build.</li>
  <li>Fixed an upload failure when the build ID was missing from the page, and made
status polling continue correctly afterwards.</li>
  <li>Authorization problems during upload — an expired subscription, or a plan that
does not allow the requested build — now report what actually went wrong.</li>
</ul>

<p><strong>Added</strong></p>

<ul>
  <li>Upload progress tracking, so a slow upload looks slow rather than stalled.</li>
  <li>When an upload fails because of a problem on our end, you now get a retry option
and a direct route to support.</li>
  <li>Every upload carries a correlation ID. If you report a failed upload we can find
that exact attempt in our logs rather than asking you to reproduce it.</li>
</ul>

<h2 id="signing-in">Signing in</h2>

<p><strong>Fixed</strong></p>

<ul>
  <li>An expired session now returns you to the page you were on after signing back
in, instead of dropping you at the start.</li>
  <li>Browsers that block storage access are now detected and reported clearly rather
than failing silently.</li>
  <li>When the authentication service is slow or unreachable, the upload page degrades
gracefully instead of breaking.</li>
  <li>Fixed several JavaScript errors that could leave a page unusable after a failed
sign-in.</li>
</ul>

<h2 id="builds">Builds</h2>

<p><strong>Fixed</strong></p>

<ul>
  <li>Android builds read the application ID from <code class="language-plaintext highlighter-rouge">android-packageName</code> again. This
had regressed at some point. When <code class="language-plaintext highlighter-rouge">android-packageName</code> is present it takes
precedence.</li>
</ul>

<p><strong>Added</strong></p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">iosDevAppleId</code> and <code class="language-plaintext highlighter-rouge">iosDistAppleId</code> let you specify which Apple ID is used for
App Store Connect validation and upload. This matters if your developer account
is associated with more than one Apple ID.</li>
</ul>

<h2 id="api">API</h2>

<p><strong>Added</strong></p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">/v1/app</code> uploads now return stable, documented reasons when a submission is
rejected, instead of a bare status code. See the
<a href="https://volt.build/docs/api-spec.html">API specification</a>.</li>
  <li>An <code class="language-plaintext highlighter-rouge">API-Version</code> header on every response, plus a documented versioning and
release policy.</li>
  <li>Windows platform support is now documented.</li>
</ul>

<p><strong>Fixed</strong></p>

<ul>
  <li>An expired subscription now returns a clear <code class="language-plaintext highlighter-rouge">EXPIRED_SUBSCRIPTION</code> reason up
front, rather than accepting the upload and rejecting it afterwards.</li>
</ul>

<h2 id="behind-the-scenes">Behind the scenes</h2>

<ul>
  <li>Added front-end error monitoring across the site, which is where most of the
fixes above came from.</li>
  <li>Routine dependency and security updates across all services.</li>
</ul>

<h2 id="next">Next</h2>

<p>iOS builds are the current focus, along with further usability and reliability
work, and something to help you work out which plugins will work with your
project before you build.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[This is the first entry in our changelog. From here on, updates land here as they ship. This one covers roughly the last month.]]></summary></entry></feed>