0.6.0
Welcome to Excalibur 0.6.0! This release brings significant security improvements, numerous bug fixes, and performance improvements. Here are some of the highlights:
- New Authentication Protocol: Excalibur now uses the state-of-the-art Augmented Password-based Authenticated Key Exchange (aPAKE) protocol OPAQUE-3DH as the default authentication protocol instead of the legacy Secure Remote Password (SRP) protocol.
- Database-Backed Filesystem: Excalibur moved away from relying on operating-system file management to a database-backed filesystem for a more "logical" organization of files and folders.
- File Name Obfuscation: File and folder names can now be obfuscated to the server and other users for enhanced privacy.
- More Sorting Options: Added more sorting options for the file explorer page, including file size, file type, and creation time.
The Excalibur documentation website was also updated in this release.
Do note that there are several breaking changes to Excalibur in this version. Please follow the 0.6 upgrade guide to upgrade your Excalibur instance to version 0.6. Do also take note of all the breaking changes made to the server API if you are using it.
Read all about the changes to Excalibur below. Enjoy!
Appโ
๐๏ธ Securityโ
- ๐๏ธ Overridden version minima of dependencies in
pnpm-workspace.yamlto address security vulnerabilities:- CVE-2026-34601, CVE-2026-41674, CVE-2026-41675, CVE-2026-41672, CVE-2026-41673:
@xmldom/xmldomto0.8.13
- CVE-2026-34601, CVE-2026-41674, CVE-2026-41675, CVE-2026-41672, CVE-2026-41673:
โจ New Featuresโ
-
โจ Implemented the OPAQUE-3DH protocol to replace the Secure Remote Password (SRP) protocol for increased security
-
โจ Implemented obfuscation of file and folder names
- That is, file and folder names would appear to be obfuscated to the server and to other users
- Names are obfuscated using a key derived from the vault key
- New users can toggle this feature while signing up
- This feature is disabled by default for existing users, but can be enabled in the "server settings" submenu
-
โจ Added more sorting options for the file explorer page:
- File size
- File type
- Creation time
-
โจ Added creation times to file and folder listings
-
๐ Added a new server settings submenu that contains the server vault key
๐ Changesโ
-
๐ Changed default login protocol from Secure Remote Password (SRP) to OPAQUE-3DH
- Old accounts can still log in using SRP
- An option to upgrade to OPAQUE-3DH will be shown when logging in with SRP
-
๐ Changed default registration protocol from Secure Remote Password (SRP) to OPAQUE-3DH
-
๐ธ Updated registration flow so that users are automatically logged in after registration
-
๐ธ Made the file change listener attempt to reconnect to the server upon initial disconnect
-
๐ Split up settings page's contents into multiple subpages for cleaner navigation
-
๐ Made the scrollbar for the file explorer breadcrumbs look nicer
-
๐ Updated file explorer interface to display the file listener status (i.e., connected or disconnected)
-
๐ Added current running Excalibur version to update dialog (to allow comparing with the latest release version)
-
โฐ๏ธ Removed vault key dialog
- The vault key is now shown in the server settings submenu
๐ Bug Fixesโ
- ๐ Fixed an issue where the login page still shows the user being logged in even though they are not
๐๏ธ Deprecationsโ
- ๐๏ธ Deprecated Secure Remote Password (SRP) related code
- Code will be removed in a future update
โป๏ธ Code Refactoringโ
- ๐ Renamed
lib/securitytolib/authin the main package
โฌ๏ธ Dependenciesโ
-
๐๏ธ Added minimum age that dependencies need to be released before accepting updates
-
โ Added
mimedependency -
โ Added
seedrandomdependency (and@types/seedrandomas a development dependency) -
โ Removed
@vitejs/plugin-legacydependency -
โฌ๏ธ Updated Ionic dependencies:
@ionic/corefrom8.8.2to8.8.6@ionic/reactfrom8.8.2to8.8.6@ionic/react-routerfrom8.8.2to8.8.6
-
โฌ๏ธ Updated Vite dependencies:
vitefrom7.3.1to8.0.12vite-plugin-node-polyfillsfrom0.25.0to0.26.0vitestfrom4.1.2to4.1.5@vitejs/plugin-reactfrom5.1.4to6.0.1
-
โฌ๏ธ Updated Capacitor dependencies:
@capacitor/androidfrom8.2.0to8.3.3@capacitor/appfrom8.0.1to8.1.0@capacitor/corefrom8.2.0to8.3.3@capacitor/clifrom8.2.0to8.3.3@capacitor/keyboardfrom8.0.2to8.0.3
-
โฌ๏ธ Updated Electron dependencies:
electronfrom39.2.7to41.5.1electron-vitefrom5.0.0to6.0.0-beta.1
-
โฌ๏ธ Updated TailwindCSS dependencies:
tailwindcssfrom4.2.1to4.3.0@tailwindcss/vitefrom4.2.1to4.3.0
-
โฌ๏ธ Updated React dependencies:
reactfrom19.2.4to19.2.5react-domfrom19.2.4to19.2.5
-
โฌ๏ธ Updated
immerfrom11.1.4to11.1.8 -
โฌ๏ธ Updated
baseline-browser-mappingfrom2.10.7to2.10.29 -
๐ Pinned
typescriptdevelopment dependency version to5.x.x(currently5.9.3) -
โฌ๏ธ Updated ESLint development dependencies:
eslintfrom9.39.3to9.39.4@eslint/jsfrom9.39.2to9.39.4eslint-plugin-chai-friendlyfrom1.1.0to1.2.0eslint-plugin-cypressfrom6.1.0to6.4.1eslint-plugin-react-hooksfrom7.0.1to7.1.1typescript-eslintfrom8.56.1to8.59.2
-
โฌ๏ธ Updated Prettier development dependencies:
prettierfrom3.8.1to3.8.3prettier-plugin-tailwindcssfrom0.7.2to0.8.0
-
โฌ๏ธ Updated
globalsdevelopment dependency from17.4.0to17.6.0 -
โฌ๏ธ Updated
lint-stageddevelopment dependency from16.3.3to16.4.0 -
โฌ๏ธ Updated
start-server-and-testdevelopment dependency from2.1.5to3.0.4 -
โฌ๏ธ Updated
cypressdevelopment dependency from15.11.0to15.14.2 -
โฌ๏ธ Updated
@types/nodedevelopment dependency from25.5.0to25.6.2
๐งน Miscellaneousโ
- ๐จ Added a new
update_deps.pyscript to automate the generation of dependency updates' news fragments - ๐งน Moved MIME type determination into client (instead of being on the server)
- ๐งน Configured some E2E tests to not run other tests in the suite if any one of the tests fails
- ๐งน Added more Cypress end-to-end tests:
- Item renaming
- Item deletion
- ๐งน Split the tests that were originally in
crud.cy.tsinto multiple files for more modular testing - ๐งน Migrated the android
FolderOpenerPluginto Kotlin - ๐งน Updated
.browserslistrcto Ionic v8 versions - ๐งน Updated GitHub action
android-actions/setup-androidtov4 - ๐งน Updated GitHub action
pnpm/action-setuptov5
Serverโ
๐ฅ Breaking Changesโ
-
๐ฅ Changed CLI options for the
startcommand:- Renamed
--enable-cors/--disable-corsto--enable-cors-validation/--no-cors-validation(since--disable-corswas misleading)
- Renamed
-
๐ฅ Added a new option
--auth-protocolto theexcalibur user addcommand- It defaults to the new OPAQUE authentication mechanism (
OPAQUE-3DH) - For SRP compatibility, use
--auth-protocol=SRP
- It defaults to the new OPAQUE authentication mechanism (
-
๐ฅ The
Filetype no longer returns amimetypevalue; it is up to the client to derive the MIME type of the file. This affects the following endpoints:/api/files/search(which returns a list of file-score pairs)/api/files/list/{path}(which returns a list of files or directories)
-
๐ฅ Certain endpoints' response content have been removed as their response codes sufficiently indicate the success/failure of the operation. In particular, these endpoints now no longer return any content for the
200 OKstatus code:/api/files/move(previously returnedItem Moved)/api/files/mkdir/{path}(previously returnedDirectory created)/api/files/rename/{path}(previously returnedItem renamed)/api/files/upload/{path}(previously returnedFile uploaded)
-
๐ฅ We will now use
uv's0.10.xseries to build and install the server package, updating the minimum version from0.9.30inpyproject.tomland GitHub actions to0.10.9
โจ New Featuresโ
-
โจ Implemented the OPAQUE-3DH protocol to replace the Secure Remote Password (SRP) protocol
- Added a new registration endpoint (
/api/auth/opaque/register) to handle OPAQUE registration flows- This endpoint also allows existing users using SRP to upgrade to OPAQUE
- Added a new login endpoint (
/api/auth/opaque) to handle OPAQUE login flows
- Added a new registration endpoint (
-
โจ Implemented a new database-backed file management system, moving away from relying on operating-system file management
- Folders are now "logical" and not tied to actual directories on the filesystem
- Files' names are now stored in the database instead of on the filesystem
- Files are now stored in a single directory on the filesystem, with their database ID as the filename
-
โจ Added new endpoints to get and edit additional user info (
/api/users/info/{username}and/api/users/edit-info/{username}respectively)- These additional user info are used solely by the client; the server does not use them
-
โจ Added a new endpoint (
/api/files/all) to get all files and folders in the user's file system -
โจ Added a new backup command to the CLI (
excalibur backup) -
โจ Made responses return
X-Content-Type-OptionsandX-Frame-Optionsheaders- The values are
X-Content-Type-Options: nosniffandX-Frame-Options: DENY
- The values are
๐ Changesโ
-
๐๏ธ Modified the Excalibur database:
- Modified the
Usertable:- Added
auth_protocol,additional_info, andregistration_recordfields - Made
srp_group,srp_salt, andsrp_verifierfields optional (since they are not used for the OPAQUE-3DH protocol)
- Added
- Added the
FSItemtable
- Modified the
-
๐๏ธ Added authentication protocol information (
auth_protocol) to be returned by the security details endpoint (/api/users/security/{username}) -
๐๏ธ The
FileandDirectorytypes now return acreation_timefield representing the creation timestamp of the item. This affects the following endpoints:/api/files/search(which returns a list of file-score pairs)/api/files/list/{path}(which returns a list of files or directories)
-
๐๏ธ The following endpoints no longer return the corresponding response codes:
/api/files/download/{path}: Removed406 Not Acceptable, corresponding to an "Illegal or invalid path"/api/files/upload/{path}: Removed406 Not Acceptable, corresponding to an "Illegal or invalid path"414 URI Too Long, corresponding to a file path that is too long
/api/files/mkdir/{path}: Removed406 Not Acceptable, corresponding to an "Illegal or invalid path"414 URI Too Long, corresponding to a directory path that is too long
/api/files/list/{path}: Removed406 Not Acceptable, corresponding to an "Illegal or invalid path"/api/files/check/path/{path}: Removed406 Not Acceptable, corresponding to an "Illegal or invalid path"414 URI Too Long, corresponding to a directory path that is too long
/api/files/check/dir/{path}: Removed406 Not Acceptable, corresponding to an "Illegal or invalid path"/api/files/delete/{path}: Removed406 Not Acceptable, corresponding to an "Illegal or invalid path"/api/files/move/{path}: Removed406 Not Acceptable, corresponding to an "Illegal or invalid path"414 URI Too Long, corresponding to a path that is too long
/api/files/rename/{path}: Removed406 Not Acceptable, corresponding to an "Illegal or invalid path", replacing it with400 Bad Requestcorresponding to an "Illegal or invalid name"414 URI Too Long, corresponding to a path that is too long
The documentation has been updated to reflect these changes.
-
๐งน Subdirectories returned by
/api/files/list/{path}will no longer haveitemsreturned- Previously, any subdirectories'
itemsfield would be set tonull. Now the field is omitted entirely
- Previously, any subdirectories'
๐ Bug Fixesโ
-
๐ Fixed a bug where unbounded timestamps in the future were allowed as timestamps during the Proof-of-Possession (PoP) validation process
- Now only timestamps within the configured tolerance are allowed
-
๐ Fixed wrong exception being returned if the WebSocket credentials are incorrect
-
๐ Fixed certain CLI commands (i.e.,
excalibur db uiandexcalibur test) returning incorrect error codes -
๐ Fixed an issue where multiple file listener connections with the same communications UUID from the authentication token would override each other, causing all non-latest connections to not receive any updates from the server
-
๐ Fixed a bug where returning nothing in some endpoints gives "Response content shorter than Content-Length" internal server errors
-
โ๏ธ Fixed typo in the add user endpoint documentation.
๐๏ธ Deprecationsโ
-
๐ฅ Removed old operating-system file management code
- Please migrate to the new system using the
excalibur db migrate-filescommand
- Please migrate to the new system using the
-
๐๏ธ Deprecated Secure Remote Password (SRP) related code
- Users can still register and log in with SRP, but it is recommended to use OPAQUE-3DH instead
- Endpoints and code relating to SRP will be removed in a future update
โฌ๏ธ Dependenciesโ
-
๐๏ธ Added minimum age that dependencies need to be released before accepting updates
-
โ Removed
watchdogdependency -
โฌ๏ธ Updated
fastapifrom0.135.2to0.136.1 -
โฌ๏ธ Updated
gitpythonfrom3.1.46to3.1.50 -
โฌ๏ธ Updated
packagingfrom26.0to26.2 -
โฌ๏ธ Updated
pydanticfrom2.12.5to2.13.4 -
โฌ๏ธ Updated
pydantic-settingsfrom2.13.1to2.14.1 -
โฌ๏ธ Updated
tomlkitfrom0.14.0to0.15.0 -
โฌ๏ธ Updated
typerfrom0.24.1to0.25.1 -
โฌ๏ธ Updated
uvicornfrom0.41.0to0.46.0 -
โฌ๏ธ Updated
ipythondevelopment dependency from9.10.0to9.10.1 -
โฌ๏ธ Updated
pytestdevelopment dependency from9.0.2to9.0.3 -
โฌ๏ธ Updated
rapidfuzzdependency from3.14.3to3.14.5 -
โฌ๏ธ Updated
ruffdevelopment dependency from0.15.6to0.15.12 -
โฌ๏ธ Updated
sqlmodeldependency from0.0.37to0.0.38
๐งน Miscellaneousโ
- ๐งน Changed the scheme name of the
HTTPBearerinstance from "SRP-Identity" to "Auth-Identity". - ๐งโ๐ป Added an option to return the ACK as a string for the debug
/api/auth/ackendpoint (as_string=true) - ๐จ Added a new
update_deps.pyscript to automate the generation of dependency updates' news fragments - ๐งน Fixed bug in the internal
_add_new_field()function present in theexcalibur config updatecommand