0.3.0
ยท 11795 words
Excalibur 0.3 brings about huge changes to the project. Here are some of the highlights:
- Desktop Support: Excalibur now runs as a standalone desktop application on Windows, macOS, and Ubuntu!
- Multiple Concurrent Jobs: Support for multiple current uploads/downloads is here! Folder uploads are now also possible.
- Auto Token Refreshing: There's no more token expiry countdown! The authentication token now refreshes automatically.
- Item Moving: You can now move items between folders.
- The user interface for moving items is a bit clunky. This will be worked on in the next update.
The Excalibur documentation website was also updated in this release.
Unfortunately, this release does bring about some breaking changes. Please follow the 0.3 upgrade guide to upgrade your Excalibur instance to version 0.3.
Read all about the changes to Excalibur below. Enjoy!
Appโ
๐ Securityโ
- Updated the Excalibur Encryption Format (ExEF) to version 3, which includes the following changes:
- Reduced size of the
Versionfield from 2 bytes to 1 byte - Replaced
Key Sizefield withCipher IDfield for greater flexibility of choice of encryption algorithm, and reduced its size from 2 bytes to 1 byte - Added
Header MACfield for quick verification of the decryption key (solving the issue of 'decrypting' the entire file before seeing that the AES-GCM tag does not match)
- Reduced size of the
- Use proof-of-possession token along any heartbeat request that asks for authentication validity
โจ Additionsโ
- Added auto token refreshing, eliminating the need for a countdown before logout
- Added support for multiple in-progress upload/download tasks
- Added ability to cancel in-progress upload/download tasks
- Added support for full-folder uploads
- Added ability for the app to listen for any folder changes from the server
- Added support for Electron desktop builds
- Added ability to move items between folders
- The current UI for moving items is a bit clunky; this will be improved upon in a future release
- Added support for drag-and-drop uploads for non-mobile builds
- Created a new user sign up page
- New users will now need to provide the Account Creation Key (ACK) mnemonic to create an account
- In particular, we now use BIP39 to generate a mnemonic from ACK
- Added a "parent directory" option to subfolders to allow you to navigate back to the parent directory
- Made right-clicking bring up the context menu
- Added a new setting to allow users to change files'/folders' icon types:
- Default: files' icons are outlined, folders' icons are solid
- Reversed: files' icons are solid, folders' icons are outlined
- All Outlined: all icons are outlined
- All Solid: all icons are solid
- Added automatic checking for updates
โ๏ธ Changesโ
- Changed vault key dialog to show a mnemonic of the vault key instead of the raw hex
- The mnemonic is generated using BIP39
- Changed the default crypto chunk size from 512 KiB to 256 KiB
๐ Performance Improvementsโ
- Moved most encryption/decryption operations to crypto workers
- Refactored code that handles encryption/decryption of requests. This should improve the speed and responsiveness of the cryptographic operations in the file explorer
- Use chunked file reads on native systems to improve the efficiency of the app
- Included local font files in the app to make loading faster
- Made the server URL check in the server choice page run in parallel, reducing the total time needed to check all possible API URLs
๐ง Fixesโ
- Fixed an issue where scrolling the file list does not keep the breadcrumbs and file header at the top of the page
- Fixed an issue where the server version does not refresh even after the server gets updated
- Fixed a bug where kicking back to the login screen did not log out the user, still displaying the username on the side menu on the login page
- Fixed several dark/light mode inconsistencies
โ ๏ธ Deprecationsโ
- Deprecated ExEF version 2 in favour of ExEF version 3
๐๏ธ Removalsโ
- Removed credits from app; moved credits to the website instead
- Removed support for PWA-on-server builds
๐ฆ Dependenciesโ
- Switched to
pnpmfor dependency management - Updated
js-yamltransitive dependency version from4.1.0to4.1.1to address CVE-2025-64718 - Updated
globtransitive dependency version from11.0.3to11.1.0to address CVE-2025-64756 - Updated Capacitor to Version 8. This required updates to a few dependencies:
@capacitor/androidfrom7.4.3to8.0.0@capacitor/appfrom7.1.0to8.0.0@capacitor/corefrom7.4.3to8.0.0@capacitor/clifrom7.4.3to8.0.0@capacitor/filesystemfrom7.1.4to8.0.0@capacitor/keyboardfrom7.0.3to8.0.0@capacitor/preferencesfrom7.0.2to8.0.0@capacitor/privacy-screenfrom1.1.1to2.0.0@capacitor/screen-orientationfrom7.0.2to8.0.0@capawesome/capacitor-file-pickerfrom7.2.0to8.0.0
- Updated android dependencies:
- AGP from
8.13.0to8.13.2 - AndroidX activity from
1.9.2to1.11.0 - AndroidX core from
1.15.0to1.17.0 - AndroidX Espresso Core from
3.6.1to3.7.0 - AndroidX fragment from
1.8.4to1.8.9 - AndroidX JUnit from
1.2.1to1.3.0 - AndroidX WebKit from
1.12.1to1.14.0 - Core splash screen from
1.0.1to1.2.0 - Cordova Android from
10.1.1to14.0.1
- AGP from
- Updated Cypress from
15.3.0to15.8.1 - Updated ESLint dependencies:
eslintfrom9.37.0to9.39.2@eslint/jsfrom9.37.0to9.39.2eslint-plugin-react-hooksfrom7.0.0to7.0.1eslint-plugin-react-refreshfrom0.4.23to0.4.26typescript-eslintfrom8.46.1to8.50.1
- Updated Ionic dependencies:
@ionic/corefrom8.7.5to8.7.15@ionic/reactfrom8.7.5to8.7.15@ionic/react-routerfrom8.7.5to8.7.15
- Updated Prettier dependencies:
prettierfrom3.6.2to3.7.4prettier-plugin-tailwindcssfrom0.6.14to0.7.2@trivago/prettier-plugin-sort-importsfrom5.2.2to6.0.0
- Updated React dependencies:
reactfrom19.2.0to19.2.3react-domfrom19.2.0to19.2.3
- Updated TailwindCSS dependencies:
tailwindcssfrom4.1.14to4.1.18@tailwindcss/vitefrom4.1.14to4.1.18
- Updated Vite dependencies:
vitefrom7.1.11to7.3.0@vitejs/plugin-reactfrom5.0.4to5.1.2
- Updated
globalsfrom16.4.0to16.5.0 - Updated
jsonwebtokenfrom9.0.3to9.0.4 - Updated
lint-stagedfrom16.2.3to16.2.4 - Updated
lint-stagedfrom16.2.4to16.2.6 - Updated
vitestfrom3.2.4to4.0.16 - Updated various type dependencies:
@types/nodefrom24.10.1to25.0.3@types/reactfrom19.2.0to19.2.7@types/react-domfrom19.2.0to19.2.3
โ๏ธ Internalโ
- Made end-to-end Cypress tests more reliable
- Added more Cypress end-to-end tests
- Added tests for invalid ExEF file handling
- Bump GitHub actions' actions versions
actions/checkoutfromv5tov6actions/setup-nodefromv5tov6actions/setup-pythonfromv5tov6actions/upload-artifactfromv5tov6astral-sh/setup-uvfromv6.5.0tov7(with correspondinguvversion bumped from0.8.17to0.9.18)
- Fixed incorrect attestation path for the PWA in the
release-builds.ymlworkflow - Refactored the structure of the
FileExplorerpage to be less complex and more maintainable - Slightly modified TailwindCSS class specification to be aligned to the "canonical form" and also reduce spurious styling
Serverโ
๐ Securityโ
- Updated the Excalibur Encryption Format (ExEF) to version 3, which includes the following changes:
- Reduced size of the
Versionfield from 2 bytes to 1 byte - Replaced
Key Sizefield withCipher IDfield for greater flexibility of choice of encryption algorithm, and reduced its size from 2 bytes to 1 byte - Added
Header MACfield for quick verification of the decryption key (solving the issue of 'decrypting' the entire file before seeing that the AES-GCM tag does not match)
- Reduced size of the
- Added a requirement for a proof-of-possession (PoP) token to be sent along any heartbeat request that asks for authentication validity
โจ Additionsโ
- Added SRP proof-of-possession checking for some WebSocket endpoints
- Added
configsubcommands to the CLI:config validate: Validates the config fileconfig update: Updates the config file to the latest version
- Added a WebSocket endpoint (
/api/files/listen) that allows clients to listen for directory changes - Added an endpoint for token refreshing
- Added an endpoint that allows moving of items
- Added an option (
--log/--no-logor-l/-L) that enables/disables logging to console - Added a new configuration field to automatically delete old logs
โ๏ธ Changesโ
- Changed account creation key to be a 32-byte random key
- Using
excalibur user ackwill now print the mnemonic for the key instead of the key itself
- Using
- Changed delay parameter in the CLI to accept both an incoming and outgoing delay (both in milliseconds)
- Changed option that enables/disables logging to file from
--logging/--no-logging(-l/-L) to--log-to-file/--no-log-to-file(-f/-F) - Changed the WebSocket ping interval from the Uvicorn default 20 seconds to 30 seconds
- Disabled WebSocket logs
- Edited some API endpoints' descriptions to be more descriptive
- Tags that are not relevant to the current running of the server (e.g., non-debug mode, non-PWA) are now hidden
๐ง Fixesโ
- Fixed issue with server not correctly handling delay for WebSockets' requests
โ ๏ธ Deprecationsโ
- Deprecated ExEF version 2 in favour of ExEF version 3
๐๏ธ Removalsโ
- Removed support for PWA server builds
๐ฆ Dependenciesโ
- Updated
aiofilesfrom24.1.0to25.1.0 - Updated
alembicfrom1.16.5to1.17.2 - Updated
cachetoolsfrom6.2.0to6.2.4 - Updated
fastapifrom0.118.0to0.127.0 - Updated Pydantic dependencies:
pydanticfrom2.11.9to2.12.5pydantic-corefrom2.33.2to2.41.5pydantic-settingsfrom2.11.0to2.12.0
- Updated
sqlalchemyfrom2.0.43to2.0.45 - Updated
sqlmodelfrom0.0.25to0.0.29 - Updated
typerfrom0.19.2to0.20.1 - Updated
uvicornfrom0.37.0to0.40.0 - Updated
ipythondevelopment dependency from9.6.0to9.8.0 - Updated
pytestdevelopment dependency from8.4.2to9.0.2 - Updated
ruffdevelopment dependency from0.13.3to0.14.10
โ๏ธ Internalโ
- Updated minimum supported
uvpackage manager version from0.8.17to0.9.3 - Added an internal debugging endpoint that generates a PoP header
- Changed internal PoP check flag from
EXCALIBUR_SERVER_HMAC_ENABLEDtoEXCALIBUR_SERVER_POP_ENABLED - Changed references to RFC7231 status codes to the latest RFC9110 names (see Starlette #2939):
HTTP_413_REQUEST_ENTITY_TOO_LARGEtoHTTP_413_CONTENT_TOO_LARGEHTTP_414_REQUEST_URI_TOO_LONGtoHTTP_414_URI_TOO_LONGHTTP_416_REQUESTED_RANGE_NOT_SATISFIABLEtoHTTP_416_RANGE_NOT_SATISFIABLEHTTP_422_UNPROCESSABLE_ENTITYtoHTTP_422_UNPROCESSABLE_CONTENT
- Edited the
excalibur testcommand to allow running specific tests - Refactored the code in the
filessubdirectory of the API - Removed reference to
license-filesinpyproject.toml