Changelog
What has changed in VoltBuilder, newest first. Longer-form posts are on the blog, and you can subscribe to this changelog by RSS.
-
October 2026
16 Oct 2026The 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.
Builds
Changed
- 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
cordova-androidversion, 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.
Work continues on an iOS build image with Xcode 26.6 on macOS 26.7.1.
Uploads
Fixed
- 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.
Changed
- 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.
Signing in
Changed
- 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.
API
Added
GET /v1/appandPOST /v1/clientnow return anX-Request-IDresponse 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 ownX-Request-ID(a UUID or 32 hex characters) it is returned unchanged. If you sendX-Correlation-IDinstead, that is used. Any other value is replaced by a short hash. The OpenAPI spec now documentsPOST /v1/clientand the header.
Behind the scenes
- Security improvements to the build pipeline.
- 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
-
September 2026
02 Oct 2026This is the first entry in our changelog. From here on, updates land here as they ship. This one covers roughly the last month.
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.
Android build agent beta
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.
- JDK 8, 11, 17 and 21, selected automatically for your
cordova-androidversion - 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
- Kotlin 2.4.20
- Node 24, npm 12.2.0, Cordova 13
- Android build-tools 30.0.3 through 36.1.0; platforms android-29 through android-36.1
- Supports
cordova-android9 through 15, and Capacitor
The image is built by running a real build for every supported
cordova-androidversion and for Capacitor, so the npm and Gradle caches are already warm when your build starts.Three things worth knowing:
gitis now installed in the build image. Plugins referenced by a git URL should install correctly.npm’s git and install-script permissions have been restored. npm 12 tightened its defaults around git dependencies and packages that run install scripts, which broke some plugins. The image restores the previous behaviour.
A note on
cordova-android9. 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 inconfig.xml:<engine name="android" spec="https://github.com/voltbuilder/cordova-android#9.1.1" />A plain
spec="9.0.0"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.This is a beta. To take part, email support@volt.build to request access, then select the beta agent on the upload page.
Uploads
Fixed
- 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.
- Raised upload timeouts. Large projects on slower connections were timing out before the transfer finished.
- An upload interrupted part-way through now returns a clear incomplete-upload error rather than a server error.
- Fixed a server error when uploading from an account that had never run a build.
- Fixed an upload failure when the build ID was missing from the page, and made status polling continue correctly afterwards.
- Authorization problems during upload — an expired subscription, or a plan that does not allow the requested build — now report what actually went wrong.
Added
- Upload progress tracking, so a slow upload looks slow rather than stalled.
- When an upload fails because of a problem on our end, you now get a retry option and a direct route to support.
- 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.
Signing in
Fixed
- An expired session now returns you to the page you were on after signing back in, instead of dropping you at the start.
- Browsers that block storage access are now detected and reported clearly rather than failing silently.
- When the authentication service is slow or unreachable, the upload page degrades gracefully instead of breaking.
- Fixed several JavaScript errors that could leave a page unusable after a failed sign-in.
Builds
Fixed
- Android builds read the application ID from
android-packageNameagain. This had regressed at some point. Whenandroid-packageNameis present it takes precedence.
Added
iosDevAppleIdandiosDistAppleIdlet 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.
API
Added
/v1/appuploads now return stable, documented reasons when a submission is rejected, instead of a bare status code. See the API specification.- An
API-Versionheader on every response, plus a documented versioning and release policy. - Windows platform support is now documented.
Fixed
- An expired subscription now returns a clear
EXPIRED_SUBSCRIPTIONreason up front, rather than accepting the upload and rejecting it afterwards.
Behind the scenes
- Added front-end error monitoring across the site, which is where most of the fixes above came from.
- Routine dependency and security updates across all services.
Next
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.
- JDK 8, 11, 17 and 21, selected automatically for your