0.5.0
Excalibur 0.5 includes many new features and improvements to the project. Here are some of the highlights:
- Refreshed Interface: We've updated the user interface of the Excalibur app to follow Material Design 3 and to use TailwindCSS's colours.
- File Upload Progress: Previously the upload progress of files was left as indeterminate. Now it shows the actual progress of the upload!
- New Move Dialog: The old move dialog was a bit clunky and unpolished. In this update, we've replaced it with a new, more user-friendly dialog.
- File Searching: You can now search for files in the Excalibur app. You can also just download the files directly from the search results!
The Excalibur documentation website was also updated in this release.
Do note that there are some breaking changes to the Excalibur server in this release. Please follow the 0.5 upgrade guide to upgrade your Excalibur instance to version 0.5.
Read all about the changes to Excalibur below. Enjoy!
App
🔒️ Security
- 🔒️ Amended some
POSTrequests to have their bodies encrypted- Specifically, the
/api/files/mkdir,/api/files/move, and/api/files/renameendpoints used to send theirPOSTbodies in the clear. Now they are encrypted using the shared end-to-end encryption key
- Specifically, the
- 🔒️ Path parameters will now be encrypted by default
- 🔒️ Overridden version minima of several dependencies in
pnpm-workspace.yamlto address security vulnerabilities:- CVE-2026-25547:
@isaacs/brace-expansionto5.0.1 - CVE-2025-69873:
ajvto6.14.0 - CVE-2026-25639:
axiosto1.13.5 - CVE-2026-2739:
bn.js@<4.12.3to5.2.3andbn.js@>=5.0.0 <5.2.3to5.2.3 - CVE-2026-32141:
flattedto3.4.0 - CVE-2026-26996, CVE-2026-27903, and CVE-2026-27904:
minimatch@<3.1.4to3.1.4,minimatch@>=5.0.0 <5.1.8to5.1.8,minimatch@>=9.0.0 <9.0.7to9.0.7, andminimatch@>=10.0.0 <10.2.3to10.2.3 - CVE-2026-2391:
qsto6.14.2 - CVE-2026-27606:
rollupto4.59.0 - CVE-2026-26960, CVE-2026-29786, and CVE-2026-31802:
tarto7.5.11 - CVE-2026-31988:
yauzlto3.2.1
- CVE-2026-25547:
✨ New Features
- 💄 Refreshed the look of the app
- Updated colour palette for light and dark modes
- Changed look of some components to match Material Design 3
- 🚸 Added file upload progress to all upload jobs
- ✨ Created a new move dialog
- ✨ Added ability to search for files
- ✨ Added a crypto key strength option in the settings
- The default key strength is 128 bits; you can change it to 192 or 256 bits as needed
- ✨ Added caps lock indicator to login page
🔄 Changes
- 🚸 Changed the way toasts are displayed to allow new toasts to replace old ones
- 🚸 Modified the server compatibility message to include the version of Excalibur that is incompatible with the server
- ✏️ Changed "Operations" to "Crypto" in the settings
🐛 Bug Fixes
- 🐛 Fixed an issue where the toast popup on the file explorer will block the floating action button's actions
♻️ Code Refactoring
- ♻️ Allowed ExEF strength to be configured independently of the given encryption key
- ⚰️ Removed heartbeat check
- Heartbeat check is no longer necessary as the client can simply observe the responses to the requests made to the server
- ♻️ Changed
Cypress.env()calls toCypress.expose()in tests, following the advice of this migration guide - ♻️ Replaced references to
process.env.NODE_ENV === "development"and the like with a reference to the newIS_DEVconstant - 🔧 Configured Android project to use Daemon JVM Toolchains
⬆️ Dependencies
-
⬆️ Updated Capacitor dependencies:
@capacitor/androidfrom8.0.0to8.2.0@capacitor/appfrom8.0.0to8.0.1@capacitor/clifrom8.0.0to8.2.0@capacitor/corefrom8.0.0to8.2.0@capacitor/filesystemfrom8.0.0to8.1.2@capacitor/keyboardfrom8.0.0to8.0.1@capacitor/preferencesfrom8.0.0to8.0.1@capacitor/privacy-screenfrom2.0.0to2.0.1@capawesome/capacitor-file-pickerfrom8.0.0to8.0.2capacitor-blob-writerfrom1.1.19to1.1.20
-
⬆️ Updated ESLint development dependencies:
eslintfrom9.39.2to9.39.3eslint-plugin-cypressfrom5.2.1to6.1.0eslint-plugin-react-refreshfrom0.4.26to0.5.2typescript-eslintfrom8.52.0to8.56.1
-
⬆️ Updated Electron dependencies:
dmg-builderfrom26.4.0to26.8.1electron-builderfrom26.4.0to26.8.1electron-builder-squirrel-windowsfrom26.4.0to26.8.1electron-updaterfrom6.7.3to6.8.3
-
⬆️ Updated Ionic dependencies:
@ionic/corefrom8.7.16to8.8.1@ionic/reactfrom8.7.16to8.8.1@ionic/react-routerfrom8.7.16to8.8.1
-
⬆️ Updated React dependencies:
reactfrom19.2.3to19.2.4react-domfrom19.2.3to19.2.4
-
⬆️ Updated TailwindCSS dependencies:
tailwindcssfrom4.1.18to4.2.1@tailwindcss/vitefrom4.1.18to4.2.1
-
⬆️ Updated Vite dependencies:
vite-plugin-node-polyfillsfrom0.24.0to0.25.0vitestfrom4.0.16to4.1.0@vitejs/plugin-reactfrom5.1.2to5.1.4
-
⬆️ Updated
immerfrom11.1.3to11.1.4 -
⬆️ Updated
cypressdevelopment dependency from15.8.2to15.11.0 -
⬆️ Updated
globalsdevelopment dependency from17.0.0to17.4.0 -
⬆️ Updated
lint-stageddevelopment dependency from16.2.7to16.3.3 -
⬆️ Updated
prettierdevelopment dependency from3.7.4to3.8.1 -
⬆️ Updated type dependencies:
@types/nodefrom25.0.6to25.5.0@types/reactfrom19.2.8to19.2.14
🧹 Miscellaneous
- 🧑💻 Added some internal test pages for development purposes:
TestPage(/dev/test): Basic test page for developmentExEFPage(/dev/exef): Test page for ExEF encryption/decryption
Server
🔒️ Security
- 🔒️ Path parameters can now be specified as encrypted by adding the
X-Encrypted: trueheader- The encrypted value must use the ExEF and be URL-safe base64 encoded
- 🔒️ Overridden version minima of
pyjwtinpyproject.tomlto2.12.0to address CVE-2026-32597 (#15)
💥 Breaking Changes
- 💥 Changed CLI options for the
startcommand:--hostcan now be specified with-h--portcan now be specified with-p--encrypt-responses/--no-encrypt-responsesno longer has the short forms of-e/-E--delayno longer has the short form of-d--enable-cors/--disable-corsno longer has the short forms of-c/-C--clean-up-logs/--no-clean-up-logscan now be specified with-c/-C
- 💥 Removed heartbeat endpoint (
/api/well-known/heartbeat)- We removed this endpoint as its use is no longer necessary. We assume that the client will be able to discern whether they are still connected to the server by observing the responses to the requests made to the server
- Accordingly, the default template value of the
logging.no_log_endpointsconfiguration option was updated to remove this endpoint
- 💥 Changed the
pathin upload file endpoint (/api/files/upload/{path:path}) to be the file path instead of the file's containing directory; also removed thenamequery parameter - 💥 Renamed
/api/files/list/{path}'swith_exef_headerquery parameter toinclude_exef_size
✨ New Features
- ✨ Added new file searching endpoint at
/api/files/search - 🔧 Added a crypto key strength configuration field
- The default key strength is 128 bits; you can change it to 192 or 256 bits as needed
- ✨ Added a new CLI option to the
startcommand to enable or disable Proof of Possession (PoP) checking- It is recommended to only disable PoP checking when debugging
🔄 Changes
- 🔧 Added the
/api/docsendpoint as a default endpoint that is ignored in thelogging.no_log_endpointsfield - 🗃️ Updated DuckDB from 1.3 Ossivalis to 1.4 Andium (LTS)
♻️ Code Refactoring
- ♻️ Replace references to
os.getenvandos.environwith calls to functions inenv.pyfor easier management and less repeated code - ♻️ Renamed internal use of
EXCALIBUR_SERVER_POP_ENABLEDtoEXCALIBUR_SERVER_ENABLE_POP - ♻️ Modified style of cryptography middleware logging to make it show up on the logs again
- 🚚 Renamed
listings.pyinexcalibur_server/src/filestoutils.py
⬆️ Dependencies
- ⬆️ Updated minimum
uvversion from0.9.3inpyproject.tomland0.9.18in GitHub actions to0.9.30- We will be updating the
uvversion to the0.10.xseries in the future
- We will be updating the
- ⬆️ Updated
alembicfrom1.18.0to1.18.4 - ⬆️ Updated
duckdbfrom1.3.2to1.4.4 - ⬆️ Updated
fastapifrom0.128.0to0.135.1 - ⬆️ Updated
pydantic-settingsfrom2.12.0to2.13.1 - ⬆️ Updated
pyjwtfrom2.10.1to2.12.1 - ⬆️ Updated
sqlalchemyfrom2.0.45to2.0.48 - ⬆️ Updated
sqlmodelfrom0.0.31to0.0.37 - ⬆️ Updated
tomlkitfrom0.13.3to0.14.0 - ⬆️ Updated
typerfrom0.21.1to0.24.1 - ⬆️ Updated
uvicornfrom0.40.0to0.41.0 - ⬆️ Updated
ipythondevelopment dependency from9.9.0to9.10.0 - ⬆️ Updated
ruffdevelopment dependency from0.14.11to0.15.6