Cryptpad Versions Save

Collaborative office suite, end-to-end encrypted and open-source.

2024.3.0

2 weeks ago

Goals

This release is aimed at instance administrators with new features and changes in the way CryptPad is installed. This marks a major release and we are also taking the opportunity to change the way we number CryptPad versions, moving to a date-based format (from semver to calver). For full details on the reasons behind this change please read our March 2024 status blog post. The short version is that this is our Spring 2024 release with number 2024.3.0 and that we are aiming for the following schedule going forward, sticking to the YYYY.MM.micro format:

  • šŸ’ Spring 2024.3.0
  • šŸŒ» Summer 2024.6.0 end June 2024
  • šŸ Autumn 2024.9.0 end September 2024
  • ā„ļø Winter 2024.12.0 end December 2024

Features

  • Admin and moderation changes #1438
    • Support system refactoring with a new help-desk functionality, allowing non-admins to be moderators and handle support tickets
    • New instance customization features from the admin panel
      • Instance logo
      • Instance accent color
    • Admin panel code refactoring

Improvements

  • Completed accessibility improvements for all dropdown menus #1380
  • Developer experience #1436 with new .editorconfig and updated .gitignore files

Fixes

  • Fix Notifications replaying (#1399) #1428
  • Fix hover and focus styling of toolbar menus #1417
  • Fix ssoauth path regex #1411
  • File upload broken with a specific size #1419
  • User menu displays may include consecutive separators #1402
  • Diagram
    • Enable and fix internal drawio exports #1439
  • OnlyOffice
    • Do not allow OnlyOffice comments in view mode #1424

Dependencies

OnlyOffice

  • OnlyOffice is now a separate module #1435
    • avoids having compiled binaries in the main code repository
    • first step towards new instances only downloading the current version + any future updates (i.e. avoiding 1.7GB of historical OnlyOffice versions they will never use).

Starting with this version, OnlyOffice applications (Sheets, Document, Presentation) are not bundled with CryptPad anymore. You can install/update them by running the installation script we provide:

./install-onlyoffice.sh
# press q to close the license screen
# and Y āŽ to accept the OnlyOffice license

For Docker users that want to use OnlyOffice, please read our updated Docker installation guide.

Others

  • Bump follow-redirects from 1.15.4 to 1.15.6 #1432
  • Bump jose from 4.15.3 to 4.15.5 #1426
  • Bump express from 4.18.2 to 4.19.2 #1451

Upgrade notes

If you are upgrading from a version older than 5.7 please read the upgrade notes of all versions between yours and 5.7 to avoid configuration issues.

To upgrade:

  1. Stop your server
  2. Get the latest code with git
git fetch origin --tags
git checkout 2024.3.0
npm ci
npm run install:components
./install-onlyoffice.sh
# press q to close the license screen
# and Y āŽ to accept the OnlyOffice license
  1. Restart your server
  2. Review your instance's checkup page to ensure that you are passing all tests

5.7.0

2 months ago

5.7.0

Goals

This release includes some features that could not be included into 5.6.0, namely instance invitations and support for images in diagrams. It also includes bug fixes in the drive, calendar and many other places.

Features

  • Instance administrators can now issue invitation links that can be used to create one account each, even if registration is closed on the instance. An optional User Directory can help keep track of the known accounts on the instance. This feature is designed for the needs of enterprise customers who use their own instance, hence allowing administrators access to more information than on a public-facing service #1395
  • Diagram documents now support images #1295

Fixes

  • Fix access modal issues after password change #1394
  • Drive
    • Shared folder access list #1388
    • File icons in drive #1386
    • Emptying trash with multiple folders and files fails #1344
    • Shared folder and drive, read-only link issue #1238
    • Loss of access to a shared folder after a double password change #1365
  • Files
    • PDFjs rendering issue with Firefox 121 #1393
  • Rich Text
    • Fix richtext issues #1392
      • Duplicated element in table of content (TOC) #1336
      • Anchors don't work anymore #1226
      • Rows and columns numbers in tables can't be modified anymore #1358
  • Forms
    • Fix issue with duplicating choice/checkbox grid questions #1359
    • Date question datepicker/input field now displays correctly #1357
    • Duplicated ā€œEnterā€ event sent when navigating with keyboard #1396
  • Kanban
    • Kanban item export #1360
  • Calendar
    • Calendar datepicker on mobile now easily toggled #1368
    • Behaviour change: keep the offset between start and end date constant when updating the start date (otherwise it was possible to create events that end before even starting that thus donā€™t appear in the calendar)
    • Calendar yearly recurring event - wrong month name #1398
  • Admin
    • Encoding issues in broadcast messages #1379
  • Deployment
    • Fix Cryptpad is unhealthy on Docker #1350 thanks to @llaumgui

Dependencies

  • Bump follow-redirects from 1.15.3 to 1.15.4 #1378

Upgrade notes

If you are upgrading from a version older than 5.6.0 please read the upgrade notes of all versions between yours and 5.6.0 to avoid configuration issues.

āš ļø Before proceeding note that this upgrade requires changes to the Nginx configuration, please see full diff below.

To upgrade:

  1. Stop your server
  2. Get the latest code with git
git fetch origin --tags
git checkout 5.7.0
  1. Update dependencies
npm ci
npm run install:components
  1. Restart your server
  2. Review your instance's checkup page to ensure that you are passing all tests

Nginx config changes

diff --git a/docs/example-advanced.nginx.conf b/docs/example-advanced.nginx.conf
index cb827b4b0..f2b32e959 100644
--- a/docs/example-advanced.nginx.conf
+++ b/docs/example-advanced.nginx.conf
@@ -14,6 +14,8 @@ server {
 
     # Let's Encrypt webroot
     include letsencrypt-webroot;
+    # Include mime.types to be able to support .mjs files (see "types" below)
+    include mime.types;
 
     # CryptPad serves static assets over these two domains.
     # `main_domain` is what users will enter in their address bar.
@@ -166,11 +168,6 @@ server {
     # We've applied other sandboxing techniques to mitigate the risk of running WebAssembly in this privileged scope
     if ($uri ~ ^\/unsafeiframe\/inner\.html.*$) { set $unsafe 1; }
 
-    # draw.io uses inline script tags in it's index.html. The hashes are added here.
-    if ($uri ~ ^\/components\/drawio\/src\/main\/webapp\/index.html.*$) {
-        set $scriptSrc "'self' 'sha256-dLMFD7ijAw6AVaqecS7kbPcFFzkxQ+yeZSsKpOdLxps=' 'sha256-6g514VrT/cZFZltSaKxIVNFF46+MFaTSDTPB8WfYK+c=' resource: https://${main_domain}";
-    }
-
     # privileged contexts allow a few more rights than unprivileged contexts, though limits are still applied
     if ($unsafe) {
         set $scriptSrc "'self' 'unsafe-eval' 'unsafe-inline' resource: https://${main_domain}";
@@ -179,6 +176,11 @@ server {
     # Finally, set all the rules you composed above.
     add_header Content-Security-Policy "default-src 'none'; child-src $childSrc; worker-src $workerSrc; media-src $mediaSrc; style-src $styleSrc; script-src $scriptSrc; connect-src $connectSrc; font-src $fontSrc; img-src $imgSrc; frame-src $frameSrc; frame-ancestors $frameAncestors";
 
+    # Add support for .mjs files used by pdfjs
+    types {
+        application/javascript mjs;
+    }
+
     # The nodejs process can handle all traffic whether accessed over websocket or as static assets
     # We prefer to serve static content from nginx directly and to leave the API server to handle
     # the dynamic content that only it can manage. This is primarily an optimization

5.6.0

3 months ago

Goals

This release introduces support for integrating CryptPad instances with Single-Sign On authentication. It brings a lot of improvements and fixes to Form, Calendar, and other parts of CryptPad. This release begins to improve the accessibility of the toolbar towards full WCAG compliance which we hope to achieve in the near future.

Features

  • Authentication
    • This version paves the way for SSO authentication for a CryptPad instance via a plugin (est. release Jan. 2024) #1320
    • New setting to make Two-Factor Authentication mandatory for all user accounts on an instance #1341
  • Form
    • New button to duplicate a question #1305
  • Calendar
    • New description field for calendar events #1299

Improvements

  • Accessibility of toolbars and some drop-down menus #1290
    • "+ New" drop-down menu in Drive and Team Drive #1191
    • New Ctrl + e modal #1192
    • Code contact request notifications as headings #1197
    • DOM order of toolbar #1198
    • Notifications menu not accessible via Keyboard #1201
    • Sidebar "tabs" not accessible via keyboard #1203
    • Implement keyboard navigation of toolbar menus #1209
    • CryptDrive page needs a logical tab order #1151
    • Elements not accessible using the keyboard #1162
    • Calendar event modal date-picker is cut-off at some screen resolutions #1280
    • Visible focus #1206
  • Rich Text
    • Improvements to the Rich Text toolbar and layout for mobile usage #1296
  • Calendar
    • Handling the move of repeating events from a calendar to another #1308
  • Kanban
    • Changed positioning of kanban tag container on smaller screens #1307
  • New option to increase the number of teams slots for premium users only #1315
  • Improve licensing information, CryptPad code now complies with the REUSE specifications #1300
  • Deployment
    • Basic configuration for Apache HTTPd #1332 thanks @nisbet-hubbard
    • Add Docker health check #1287 thanks @llaumgui
  • Cleanup
    • Old // XXX comments #1334
    • Outdated/misplaced files #1327

Fixes

  • Fix browser autocomplete issues (password, numbers, etc.) #1342
  • Drive
    • Container height fills screen #1304
    • Context menu on mobile #1301
  • OnlyOffice applications
    • Use correct mime type for .wasm files (export functionality) #1288
    • Fix filter functionality in Sheets #1319
  • Form
    • Fix an error upon importing a template in forms #1316
    • Can now set form closing date/time on mobile #1305
    • Can now edit time options for poll questions on mobile #1305
    • Dates in CSV exports of forms are now in ISO (not timestamp) format #1305
    • Page breaks are no longer visible in conditional sections when condition is not met #1305
    • Final submission page now has margins #1305
    • Question blocks on mobile are now only draggable at the top of the block to make scrolling possible #1305
  • Whiteboard
    • Fix a few export-related issues #1328
  • Calendar
    • Reformat www/calendar/export.js #1314
    • Fix a bug with stopping the recurrence of a calendar event #1312
    • Calendar creates itself twice when navigating with the keyboard #1250
    • Fix timezone in Daylight Saving Time issues #1317
  • Translations
    • Revise the translation of zh #1329 thanks @toomore

Dependencies

  • Added Moment.js for improved handling of dates in Calendar (added as part of #1317)

Deployment

We fixed an issue with the Systemd service file and logging, you'll need to add the following lines to your cryptpad.service before continuing by following the upgrade notes below.

# Restart service after 10 seconds if node service crashes
RestartSec=2

+ # Proper logging to journald
+ StandardOutput=journal
+ StandardError=journal+console

User=cryptpad
Group=cryptpad

Upgrade notes

If you are upgrading from a version older than 5.5.0 please read the upgrade notes of all versions between yours and 5.5.0 to avoid configuration issues.

To upgrade:

  1. Reload the Systemd daemon, required due to the changes in the Deployment section
sudo systemctl daemon-reload
  1. Stop your server
  2. Get the latest code with git
git fetch origin --tags
git checkout 5.6.0
  1. Get the latest dependencies and components
npm ci
npm run install:components
  1. Restart your server
  2. Review your instance's checkup page to ensure that you are passing all tests

5.5.0

6 months ago

Features

  • Moderation and content deletion features #1253
    • Moderation
      • archive an entire account and its owned documents from its public key
      • restore this entire account if necessary
    • Placeholder
      • unavailable documents now provide improved messages communicating the reason they are unavailable:
        • Deleted by an owner
        • Deleted by an admin + reason from admin team (user account or document)
        • Deleted for inactivity (documents not stored in a user drive and inactive)
        • Protected with a new password (user account or document)
      • it is no longer possible to re-use an previous password for a password-protected document
  • Only Office upgrade to 7.3.3.60
    • New version of x2t for document conversions

Improvements

  • Accessibility

  • Mobile usage

    • Fix the instance links layout on the home-page #1085
    • Display full file upload progress modal #1086
    • Add text to Teams buttons #1093
    • Fix button spacings #1104, #1106
    • Add even space between category buttons #1113 thanks to @lemondevxyz
    • Allow the About panel to be closed #1088
    • Calendar
      • Display full event edit panel #1094
      • Make menu usable #971
    • Kanban
      • Hide markdown help button instead of breaking the layout #1117
      • Added margin for horizontal scroll #1039
      • Remove margin from cards and columns #1120
  • Instance admin

    • Added a warning to /admin/#stats about a process that can crash the instance #1176
    • Added a setting to display a status page for the instance #1172
  • Replace the "sign up" button on the log-in page with a link #1164

  • Add support for Webp images [#1008] thanks @lukasdotcom

  • improvements and bug fixes for the archival of inactive documents

Fixes

  • Revert a button spacing regression introduced with 5.4.0 #1229
  • Login bug on the new Safari following macOS/iPadOS 14 #1257
  • Mermaid diagrams were sometimes displayed over each other in Code documents #1244
  • Own responses to a form could not be deleted #1239
  • Timezone differences caused errors in Forms "date/time" polls
  • The large attachment button did not look consistent in Forms #1237
  • The recent tab in the drive was missing column titles #1233
  • An export file type dropdown was hidden inside a popup #1241
  • Guest emoji avatars were not displayed constistently #1188
  • "Early Access" apps were not shown on the instance home page even when active
  • OnlyOffice document conversions
    • Fix PDF export from Presentation document #913
    • Print sheets with long links #1032
    • Fix some .xlsx imports #1240

Dependencies

  • Pin CKEditor to 4.22.1 #1248
  • Prevent x2t from being cached #1278

Deployment

We now support Nginx with two configurations (find more information in our administrator guide):

  • New recommended "basic" nginx config for small instances: example.nginx.conf
  • Update to the old "advanced" config: example-advanced.nginx.conf
    • Add 2 lines in the "blob|block" section
# Requests for blobs and blocks are now proxied to the API server
# This simplifies NGINX path configuration in the event they are being hosted in a non-standard location
# or with odd unexpected permissions. Serving blobs in this manner also means that it will be possible to
# enforce access control for them, though this is not yet implemented.
# Access control (via TOTP 2FA) has been added to blocks, so they can be handled with the same directives.
location ~ ^/(blob|block)/.*$ {
    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' "${allowed_origins}";
        add_header 'Access-Control-Allow-Credentials' true;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'application/octet-stream; charset=utf-8';
        add_header 'Content-Length' 0;
        return 204;
    }
    # Since we are proxying to the API server these headers can get duplicated
    # so we hide them
    proxy_hide_header 'X-Content-Type-Options';
    proxy_hide_header 'Access-Control-Allow-Origin';
    proxy_hide_header 'Permissions-Policy';
    proxy_hide_header 'X-XSS-Protection';
+   proxy_hide_header 'Cross-Origin-Resource-Policy';
+   proxy_hide_header 'Cross-Origin-Embedder-Policy';
    proxy_pass http://localhost:3000;
}
  • Fix DrawIO hash not matching the latest version
    # draw.io uses inline script tags in it's index.html. The hashes are added here.
    if ($uri ~ ^\/components\/drawio\/src\/main\/webapp\/index.html.*$) {
-        set $scriptSrc "'self' 'sha256-6zAB96lsBZREqf0sT44BhH1T69sm7HrN34rpMOcWbNo=' 'sha256-6g514VrT/cZFZltSaKxIVNFF46+MFaTSDTPB8WfYK+c=' resource: https://${main_domain}";
+        set $scriptSrc "'self' 'sha256-dLMFD7ijAw6AVaqecS7kbPcFFzkxQ+yeZSsKpOdLxps=' 'sha256-6g514VrT/cZFZltSaKxIVNFF46+MFaTSDTPB8WfYK+c=' resource: https://${main_domain}";
    }

Upgrade notes

If you are upgrading from a version older than 5.4.1 please read the upgrade notes of all versions between yours and 5.4.1 to avoid configuration issues.

To upgrade:

  1. Stop your server
  2. Get the latest code with git
git fetch origin --tags
git checkout 5.5.0
  1. Update dependencies
npm ci
npm run install:components
  1. Restart your server

  2. Review your instance's checkup page to ensure that you are passing all tests

5.4.1

7 months ago

Goals

This point release aims to fix some deployment related issues that were identified with 5.4.0

Fixes

  • Typo in example Nginx config [#1184]
  • Enable port 3003 on Docker [#1183]
  • Bind websocket to the address specified in the httpAddress setting [#1182 #1186]
  • Fix production CSP headers [#912 thanks @superboum]
  • Fix checkup test when registration is restricted [#1185]
  • Fix collaboration of Nextcloud integration
  • Fix broadcast settings not applied instantly [#1189]

Upgrade notes

If you are upgrading from a version older than 5.4.0 please read the upgrade notes of all versions between yours and 5.4.0 to avoid configuration issues.

To upgrade:

  1. Stop your server
  2. Get the latest code with git
git fetch origin --tags
git checkout 5.4.1
  1. Restart your server
  2. Review your instance's checkup page to ensure that you are passing all tests

5.4.0

8 months ago

Goals

This release introduces two major new features:

  • new Diagram application
  • 2 factor authentication using time-based one-time passwords (TOTP)

Also included are some improvements, dependency updates, and bug fixes

Features

  • Diagram application: integration of Draw.io with CryptPad's encrypted real time collaboration [#1070]
    • Introduce a new app color for Diagram and adjust Whiteboard color [#1059]
  • New 2 Factor Authentication with TOTP [#1071]. To enable for a user account:
    1. Settings > Security & Privacy
    2. Enter your password
    3. Save the recovery code
    4. Snap the QR code with a 2FA app of your choice
    5. āœ… 2FA is enabled
  • Docker deployment is now officially supported [#1064]

Improvements

  • New setting to destroy all documents of which you are the sole owner
  • Settings re-oganization
  • Add favicons in ICO format [#1068 thanks @lemondevxyz]

Bugs / issues

  • Form
    • Make Form question text selectable in participant view [#1046]
    • Add form title to archived notifications [#1065 thanks to @lemondevxyz]
  • Add "make a copy" to office editors [#1067 thanks to @lemondevxyz]
  • Disable the "protect tab" feature in Sheets as it cannot be integrated in CryptPad [#1053]

Dependencies

  • Remove Bower to manage client side dependencies [#989 #1072 thanks to @Pamplemousse] āš ļø Please read upgrade notes carefully if you administer an instance
  • Upgrade Mermaid diagrams to 10.2.4 [#1118]
  • Upgrade CKeditor to 4.22.1 [#1119]

Upgrade notes

āš ļø Please read upgrade notes carefully as this version introduces breaking changes

If you are upgrading from a version older than 5.3.0 please read the upgrade notes of all versions between yours and 5.4.0 to avoid configuration issues.

To upgrade:

  1. Stop your server
  2. Get the latest code with git
git fetch origin --tags
git checkout 5.4.0
  1. Major changes to the Nginx config
    • Access-Control-Allow-Credentials header
    • proxy_pass request for /blob/ and /block/ to the node process
    • new port for the websocket
    • see the full diff
  2. Bower removed
    • To download all dependencies, use npm install
    • Then, to copy client-side dependencies, use npm run install:components
    • www/bower_components can be removed
  3. If you have previously used the build command to enable opengraph preview images
    • Please run npm run build again after upgrading
  4. Restart your server
  5. Review your instance's checkup page to ensure that you are passing all tests

5.3.0

11 months ago

Goals

This release updates OnlyOffice applications to version 7.1 It improves the Form application and other areas of CryptPad with minor features and bug fixes.

Features

  • Upgrade OnlyOffice applications (Sheet, Document, Presentation) to version 7.1

  • Forms

    • New question type: Date [#811]
    • Add Condorcet voting results to ordered list responses
  • Default dark theme switch [#759]: set dark theme as the default for the instance in application_config.js

  • New FreeBSD rc.d init script

Improvements

  • Auto-select document name on edit if it's still the default [thanks to piemonkey]

  • Forms

    • Clarify button text to "Copy Public Link" [#937]
    • Clarify text on the document creation screen so that "Expiration date" (date at which the document will be destroyed) is not confused with the closing date of the form [user feedback]
    • Decimals are now allowed in text questions with type "number" [Forum]
  • Rich Text

    • Move width-toggle button out of the way of the text [#957]
  • Deployment

    • Systemd: Removed outdated logging directives and implemented sandboxing and other hardening best practices
    • Nginx: Invert settings to forbid remote embedding by default
  • Removed unused dev dependencies

Bug Fixes

  • Forms and Kanban

    • Fixed spacing issues with input fields
  • Forms

    • Fixed ways to bypass "required" questions [#1007 #1014]
    • Fix missing notifications for responses
    • Send response notifications to all owners
  • Rich Text

    • Fix scroll issues when clicking on the table of contents
    • Fix double notification for mention + reply in a comment
  • Fix issues with deprecated cache

  • Fix bug that kept certain documents from being "pinned" to the drive. This could lead them to be deleted for inactivity even though they were stored in the drive. Note that storage quotas may increase as a result

Update notes

If you are upgrading from a version older than 5.2.0 please read the upgrade notes of all versions between yours and 5.3.0 to avoid configuration issues.

To upgrade:

  1. Stop your server
  2. Get the latest code with git
git fetch origin --tags
git checkout 5.3.0
  1. Restart your server
  2. Review your instance's checkup page to ensure that you are passing all tests

5.2.1

1 year ago

5.2.1

Goals

This minor releases fixes a bug with one of the Form features introduced in 5.2.0.

We took the opportunity to include two other fixes for older issues.

Bug Fixes

  • The option to delete all responses to a form was not available to form authors when the form had been created in a drive (user or team) using the + NEW button

  • Drag & drop from a shared folder into the Templates folder made documents "disappear". They would reappear in the root of the drive when using a new worker (after all CryptPad tabs had been closed)

  • Clicking a link in a Calendar event location field failed to open

Update notes

Our 5.2.0 release introduced some changes to the Nginx configuration. If you are not already running 5.2.0 we recommend following the upgrade notes for that version first, and then updating to 5.2.1

To do so:

  1. Stop your server
  2. Get the latest code with git
git fetch origin --tags
git checkout 5.2.1
  1. Install the latest dependencies with bower update
  2. Restart your server
  3. Review your instance's checkup page to ensure that you are passing all tests

5.2.0

1 year ago

5.2.0

Goals

This release is focused on addressing long-standing user feedback with new features. The most requested are improvements to Formsā€”multiple submissions and the ability to delete responsesā€”as well as recurring events in Calendar.

Features

  • Forms

    • New setting to allow participants (including Guests) to submit a form multiple times and/or delete their responses
    • Notifications for form owners when new responses are submitted
    • New option for form authors to delete all responses
    • New option for form authors/auditors to export responses as JSON (in addition to existing CSV and CryptPad Sheet)
    • Settings have been refactored in a modal with a summary in the main editor view
    • Display fixes for long questions/options in some question types
  • Calendar

    • New event settings to repeat periodically
      • quick default patterns (e.g. weekly on Mondays, yearly on December 14th, etc), and custom intervals
      • modify one, future, or all events
      • easily stop repetition from event preview
  • Drive

    • New button to filter the drive view by document type
  • Teams

    • Improved onboarding with the ability to use the same invitation link for a set number of people. Previously each link was limited to one use
    • Initial role can now be set for invitation links, the recipient is assigned the role directly when joining, previously all new members joined as "Viewers"
  • Code

    • Asciidoc syntax support AND asciidoc rendering
    • New jade language support
    • Removed duplicate C-language option
  • /checkup/

Update notes

To update from 5.1.0 to 5.2.0:

  1. Read the Nginx section below to ensure you are using the right version and update your reverse proxy configuration to match the settings in our current ./docs/example.nginx.conf
  2. Reload nginx
  3. Stop your API server
  4. Fetch the latest code with git
  5. Install the latest dependencies with bower update and npm i
  6. Restart your server
  7. Review your instance's checkup page to ensure that all tests are passing

Nginx

We added some directives that may cause issues with older versions of Nginx. We now recommend and only support Nginx stable. Please note that if you are running below v1.14.2, applying this update will likely result in breakage.

5.1.0

1 year ago

5.1.0

Goals

We had two new members join our team in the time since our previous release.

Mathilde joined us as an administrator of CryptPad.fr, so we decided to put some unplanned time towards the platform's administrative tooling to simplify some common workflows.

Maxime joined us for a summer internship as a front-end developer, and took initiative on a number of popular issues from our tracker on GitHub.

Update notes

  • We applied a minor optimization to CryptPad's caching rules which should result in a slight decrease of many pages' loading times, thanks to some helpful profiling by one of our users.

  • We have started implementing a very basic build system for CryptPad which, at the moment, is only responsible for generating a few static HTML pages.

    • These pages include the opengraph tags which describe how previews of the page should be rendered in social media posts, messenger applications, and search engine summaries.
    • For the moment we haven't configured the system to build distinct pages for every language, so they will include text which is hardcoded in a single language which defaults to English. This can be configured in config/config.js (for example: preferredLanguage: 'de',). We intend to improve this in the future.
    • They also update the content of the page's <noscript> tag, which is displayed in the event that the user has disabled JavaScript in their browser. The build system includes every translation of this message that is available, rather than just the English and French translations that were displayed previously.
    • We've included some new tests on the checkup page to detect whether these customized pages have been built, and to remind administrators to generate them otherwise (using npm run build).
    • Because the generated pages are based on the current default versions of these pages, updating to future versions of the software without re-building could result in errors due to outdated code being served. We'll include reminders in the update steps as we do for other common errors.
  • In order for the above changes to be effective, you'll need to update your NGINX configuration file. You can use git to see what has changed since v5.0.0 by running git diff 5.0.0...main ./docs in the root of your CryptPad repository.

  • We've updated the home page to use a distinct version of the CryptPad logo for its main image. This makes it easier to customize the home page itself without impacting the rest of the platform. To override the default image, include your own at /customize/CryptPad_logo_hero.svg.

  • Finally, a number of admins had opted into inclusion in our public instance directory but had not configured pages for their privacy policy or terms of service, which caused the checkup page to display an error. We've updated this error message to point directly to the relevant documentation, since the previous values were not sufficiently clear.

To update from 5.0.0 to 5.1.0:

  1. Update your reverse proxy configuration to match the settings in our current ./docs/example.nginx.conf and reload its configuration
  2. Stop your API server
  3. Fetch the latest code with git
  4. Install the latest dependencies with bower update and npm i
  5. Run npm run build to generate the new static pages
  6. Restart your server
  7. Review your instance's checkup page to ensure that you are passing all tests

Features

  • Administration:
    • The instance admin panel now features a "Database" tab which makes it possible to generate reports for accounts, documents, and "login blocks". This finally enables administrators to review document and account metadata, archive or restore data, and generally perform actions that used to require specialized knowledge about the platform's data storage formats.
    • Since the Database tab identifies accounts by their public signing keys, we made it easier to access these keys by adding a button to support tickets which copies the author's key to your clipboard.
  • Thanks to contributors, the platform is now available in Spanish (100%) and European Portuguese (91%).
  • We've updated our mermaid integration to v9.1.7.
  • Spellcheck is now enabled by default in our rich text editor and can be disabled via the settings page in case you have not already done so.
  • Our code editor now includes a highlighting module for asciidoc syntax.
  • The contact page has been updated to reflect that we have migrated our Mastodon account to Fosstodon.org/@cryptpad
  • Various links throughout the platform have been updated to reflect that we've migrated our documentation from docs.cryptpad.fr to docs.cryptpad.org. The old domain now redirects to the new one to preserve compatibility with old instances or any other pages that have linked to it.
  • We've updated our issue templates on GitHub to use their new Issue Forms functionality, making it easier to correctly submit a well-formatted bug report or feature request.
  • The project's readme now includes a widget indicating the completeness of CryptPad's translations on our Weblate instance.
  • We've added a placeholder to pages' basic HTML to make it easier to tell that something is happening before the proper loading screen is displayed.

Bug fixes

  • Thanks to some detailed reports from users of our spreadsheet editor we were able to reproduce an error that caused very large changes to be saved incorrectly. Such changes trigger multi-part messages to be created, but only the first message was correctly sent to the server. The client has now been updated to correctly send each part of the patch.
  • The behaviour of the long-form text input editor in our form app was not consistent with markdown-editing interfaces on the rest of the platform, so we enabled the same functionality as elsewhere.
  • Administration
    • We found that the quantity of support tickets shown for each category was sometimes inaccurate, so we corrected the way this number was computed.
    • A change in the internal format of each instance's name, location, and description caused these fields not to be included in telemetry for instances that had opted into the public instance directory. We've corrected this so such instances provide all the necessary information.
    • We've corrected some logic for displaying configured URLs for privacy policies, terms of service, and similar resources such that relative URLs are considered relative to the top-level domain (rather than the sandbox domain).
    • The "Launch time" value on the admin panel was using a hard-coded rather than the relevant translation, and was not correctly updating when the "Refresh" button was clicked. Both issues have been fixed.
    • Members of editing sessions are correctly informed when administrators archive active channels.
    • The Custom limits section of the API is now displayed in a somewhat nicer table.
  • A flaw in some of the styles for the kanban app made it impossible to add text to an empty card via the usual inline text field UI. Adding placeholder content to this field made the default click events work as expected.
  • Dropdowns with text content containing quotes (such as those that could be created in the form app) caused an invalid CSS selector to be constructed, which resulted in rendering issues. Such quotes are now properly escaped.
  • We found that some message handlers in CryptPad were receiving and trying to parse messages from unexpected sources (browser extensions). These messages triggered parsing errors which cause CryptPad's error screen to be displayed. We now guard against such messages and ignore them when they are not in the expected format or when they otherwise trigger parsing errors.
  • We updated our translation linting script to compare markup and variable substitution patterns across different translations. We identified and fixed quite a few errors (invalid markup, incomplete translations), and expect to have an easier time ensuring consistency going forward.