@ansuz ansuz released this Feb 12, 2019 · 4 commits to master since this release

Raccoon release (v2.17.0)


Image courtesy of Wikimedia commons


For this release we planned to resolve issues discovered in our beta release of encrypted spreadsheets, work towards providing an easier experience for contributors who wish to translate CryptPad, and resolve some minor usability issues that had been bothering us.

Update notes

  • This release introduces a new clientside dependency. Run bower update to install requirejs-plugins.
  • We investigated using Weblate for translating CryptPad, but in order to do so we have to migrate from our current translation format (Javascript files) to JSON. Administrators running recent version of CryptPad shouldn't have any trouble using the new system as long as they have not modified their translation files directly. Extensions to the translation dictionaries present in /customize/translations/ should continue to work as expected. Anyone experiencing difficulty upgrading from older version of CryptPad to 2.17.0 can visit our chat channel for advice on how to proceed.


  • We've received some updates from some of our German-speaking contributors to our Deutsch translation.
  • We now perform more strict validation for the secret values encoded after the hash, since one of our users discovered that CryptPad failed silently when provided with an invalid hash.
  • As requested, the CryptDrive now displays a lock icon for password protected pads.
  • When you click 'Show in folder' from the search or recent pads interface, the selected file will be at the top of the screen. Previously the file was selected, but we didn't scroll to its location in the resulting folder, so it could be out of view if that folder had many files.
  • We've tweaked the styles of some of the rendered Markdown in both our code and slide editors.
  • Finally, we've added the same pad creation screen to our spreadsheet editor as is normally present within our other editors. This will allow users to mark a spreadsheet as owned (allowing them to delete it at a later time) and as having a pre-set expiration time.

Bug fixes

  • Very long words and lines are now wrapped correctly in the Kanban app.
  • The rest of the bug fixes for this release were all applied to the spreadsheet editor:
    • Spreadsheets with additional worksheets were prone to errors caused when some clients did not receive instructions to update the identifier for a worksheet. This caused those spreadsheets to fail to load entirely.
    • We have added two buttons to the spreadsheet editor's app toolbar:
      • a properties button like those on our other editors, to provide basic information about the document
      • an import button, to process exported documents. Unlike our other import buttons, the spreadsheet editor is currently limited to importing when you are the only editor present in the session.
    • We've resolved some errors in how the history of a spreadsheet was counted against user quotas. Similarly, we've made sure to delete some extraneous information associated with spreadsheets when they are deleted from users' CryptDrives.
    • In the event of a server error, the spreadsheet editor will lock itself and proceed in read-only mode
Assets 2

@ansuz ansuz released this Jan 29, 2019 · 48 commits to master since this release

Quokka release (v2.16.0)


Image courtesy of Jin Xiang on Flickr


We set aside an additional week for this release in order to deploy encrypted spreadsheets, which we've been working toward for a long time. This feature combines our usual focus on privacy with OnlyOffice's spreadsheet editor.

At least for this first release we're still considering this functionality to be highly experimental. We've done our best to make this new application fun and easy to use, however, it will still require a lot of work before it supports all the features that you can expect from our other editors. We welcome you to try it out and report any difficulties you encounter, though you may want to wait before you start using it for all your financial documents.

Update notes

  • OnlyOffice requires more lax Content Security Policy headers than the rest of the platform. Compare your configuration against config.example.js.
  • If you are running a customized application_config.js, you may need to update availablePadTypes and registeredOnlyTypes. See the wiki for more details.
  • In addition to a few serverside changes for the new spreadsheet editor, this release fixes a bug that affected system administrators who had set custom limits for some users and disabled communication with our payment server. Restart your server after updating for these changes to take effect.


  • We've implemented a feature we call ephemeral channels, which we use for displaying other users' cursors in our rich text, code, and slide editors. Ephemeral channels behave exactly like our regular server messaging infrastructure except that no history is stored.
  • We've added additional highlighting modes in our code editor for C, C++, Java, and Objective-C
  • We've imposed a limit of five items for the table which displays upload progress, in order to keep it from taking up too much space on the screen when users upload many files in one session.


  • @3n2pS3P5kG23S96yxRbUHAZajuH2F reported an issue shortly after our last release which threw an error if our feedback API was disabled. The fix was on our master branch, but now it will be properly tagged.
  • We noticed an issue in our code editor where imported .md files were interpreted as text, instead of markdown. This caused the preview pane to stop working.
  • We also discovered an issue which had broken our CryptDrive import function, but as far as we know it did not affect any users. It should be working as intended now.
  • Unfortunately, we don't do a lot of testing on Internet Explorer 11, but one of our users was kind enough to report an error. We tracked down a few uses of APIs which do not exist on IE11, and replaced them with compatible functions, so now users of IE11 will be able to enjoy CryptPad once more.
Assets 2

@ansuz ansuz released this Jan 9, 2019 · 161 commits to master since this release

Pademelon release (v2.15.0)


image courtesy of wikimedia commons


For this release we planned to improve upon last release's introduction of the display of other users' cursors in our code and slide editors by adding the same functionality to our rich text editor.

Beyond just producing software, the CryptPad team has also begun to produce peer-reviewed papers.
We have previously published Private Document Editing with Some Trust as a part of the 2018 proceedings of the ACM Symposium on Document Engineering. We have recently been accepted for publication as a part of HCI-CPT: the first international conference on HCI (Human Computer Interaction) for cybersecurity, privacy and trust. In preparation for this publication we've begun to collect additional usage data in order to inform the wider community of our findings regarding usability of cryptography-based collaboration systems.

Update notes

  • Updating to version 2.15.0 from 2.14.0 should only require that update to the latest clientside code via git, and update any cache-busting parameters you've set.
  • Several of our third-party clientside dependencies have been updated, and you may optionally run bower update to receive their latest versions.
  • As explained above, we have added a number of new keys to our existing feedback system. The new keys are detailed below
    • HOME_SUPPORT_CRYPTPAD informs us when users discover our opencollective campaign from the CryptPad home page
    • UPGRADE_ACCOUNT informs us when someone clicks the upgrade account button from their CryptDrive or settings page
    • SUPPORT_CRYPTPAD is not active on our CryptPad instance, since this key is only sent when clicking the donate button which is shown when upgraded accounts are disabled
    • DELETE_ACCOUNT_AUTOMATIC informs us when somebody deletes their account automatically from the settings page. Automatic account deletion is only available for accounts created since version 1.29.0
    • DELETE_ACCOUNT_MANUAL informs us when a user generates the proof of their account ownership which is required for manual account deletion. This feature is available only for accounts predating version 1.29.0
    • OWNED_DRIVE_MIGRATION informs us when a user migrates their CryptDrive from our legacy format (which does not support automatic deletion) to our newer format (which does) via the settings page
    • PASSWORD_CHANGED informs us when a user changes their password from the settings page
    • NO_WEBRTC informs us when a users browser does not support WebRTC at all via a crude test which never actually runs any WebRTC-based code
    • SUBSCRIPTION_BUTTON informs us when a user navigates to our paid account administration panel from their settings page
    • LOGOUT_EVERYWHERE informs us when a user executes the command to log out of their account on all remote devices from the settings page
  • We've implemented the ability to configure which applications are available on a particular CryptPad instance via cryptpad/customize/application_config.js. Two arrays (config.availablePadTypes and config.registeredOnlyTypes) define which applications are available to everyone, and which applications are available to registered users. Due to a bug which was discovered, this behaviour is incorrect for our encrypted file viewer, and as a result encrypted files cannot currently be disabled. This will be addressed in our next release.


  • Our rich text editor now displays other users' cursors when editing with a group. Preferences for this behaviour can be defined via the settings page.
  • Links in our rich text editor can now be clicked more easily, as a small tooltip with a clickable link will be displayed above the editable link in the document.
  • Users who wish to be notified of spelling errors in their rich text pads can enable spellcheck via the settings page.
  • As noted above, various pad types can be disabled by instance administrators via customize/application_config.js.
  • We've enabled a feature in the settings page which will migrate users' CryptDrive from our legacy format to our latest format (which supports automatic deletion). Only users with accounts dating back to version 1.29.0 will notice any difference.
  • We've worked to improve some usability issues presented by the interaction of owned files and shared folders. Since only the owner of an owned document can delete it the owner must keep a record of that document in their CryptDrive even if they place it in a shared folder (where someone else could delete it while they are offline). As such, owned documents were always copied to shared folders instead of being moved, and this proliferation of copies made it more difficult for users to organize their CryptDrives. Duplicated owned documents which are kept in your CryptDrive can now be hidden via the settings page. If those files are removed from a shared folder by another user, the hidden duplicate will be revealed in the root of your CryptDrive's tree.
  • Finally, we've implemented the ability to copy documents to multiple shared folders via an entry in the right-click menu for any such document.


  • We've improved the styles for displaying other users' cursors in the code and slide editors to avoid moving your view of the text when someone else highlights it.
  • We've also changed some of the logic for how often other users' cursors are updated and displayed, so as to maximize the accuracy of their position and not show incorrect placements while you are typing.
  • We fixed a bug which caused errors while loading your CryptDrive after a shared folder had been deleted.
Assets 2

@ansuz ansuz released this Dec 13, 2018 · 205 commits to master since this release

Opossum release (v2.14.0)



For this release we chose to focus on our in-pad chat functionality and the ability to show your cursor's position to other users in the same pad.

Update notes

  • We've released an updated version of a serverside dependency: chainpad-server
    • this addresses a recently introduced bug which is capable of sending more history than clients require under certain circumstances
    • to use this updated dependency, run npm update and restart your server


  • Our code editor is now capable of displaying other user's cursors within your view of the document.
    • this is enabled by default, but you can choose not to share your own cursor, and to disable the display of other users' cursors in your document
    • your initial color is chosen randomly, but you can choose any color you like within the settings page alongside the other configuration options for cursors
  • After some consideration, we have chosen to change the permissions around the chat functionality embedded within every pad.
    • previously we had allowed viewers to participate in chat, even though they could not change the document.
    • we decided that this was counter-intuitive
    • in the event of an XSS vulnerability it could be used as a vector for privilege escalation
    • as such, we have modified our embedded chat functionality to only allow editors to participate
    • this change is not backwards-compatible, and so the embedded chat boxes will have dropped their older history
      • our assumption is that this will be an improvement for the majority of our users, and that it's fairly safe to drop older history given that chat is a relatively new feature
      • if this has affected you in an adverse way, the information is still accessible, and you can contact us if you need a way to recover that information
  • Finally, it is now possible to print the rendered markdown content in our code editor, thanks to a contribution from @joldie
Assets 2

@ansuz ansuz released this Nov 27, 2018 · 230 commits to master since this release

Numbat release (v2.13.0)


Image courtesy of dilettantiquity on flickr


This release features long-awaited improvements to our Rich Text Pad.
This work was done over a short period, and we're releasing it now so that users can take advantage of the improvements as soon as possible.

Update notes

  • We've fixed a bug related to chat via an update to our messaging server. To install the update, run npm update. This server improvement is backwards compatible, so you can update your clientside or serverside dependencies in either order. Restart your server for the changes to take effect.
  • You can run bower update in order to take advantage of the latest clientside dependencies. Depending on when you last updated you may benefit from updates to Codemirror or some other clientside libraries.


  • We've refactored a great deal of CryptPad's Remote Procedure Call mechanisms related to chat. This should simplify CryptPad and make potential bugs less likely to occur.


  • The behaviour of the cursor in our rich text editor has been greatly improved. Your experience when collaboratively editing should be noticeably better.
  • Characters inserted into rich text pads were sometimes dropped due to a race condition between CKEditor and ChainPad, but this asynchronous behaviour has been resolved. As such the editor should be much more reliable.
  • Deleting chat history from the server now removes it from your chat interface and that of remote messengers, where it previously would require a reload of the interface to see the correct chat history.
  • We now correctly set owners of a shared chat channel such that either chat participant in a one-to-one room can delete the history.
  • If you request history with a lastKnownHash which is not in the history, the server informs you that it is not there via a direct message. Clients fall back to a classic full retreival of the history. Previously this would fail, and print a message to the server's stdout.
  • Firefox users may have noticed that when they clicked the dropdown menus for styles in the CKEditor toolbar, their scrollbar would jump to the top of the document. Their scroll position is now preserved in cases where it would previously have been disrupted.
Assets 2

@ansuz ansuz released this Nov 21, 2018 · 241 commits to master since this release

Manatee release (v2.12.0)


Image courtesy of MaxPixel.net


For this release we aimed to address usability concerns in our Rich Text Pad, since it's our most widely used application. During this time we also received an unexpected security disclosure which we treated as being top priority.

Update notes

  • This release addresses an XSS vulnerability in our chat interface which was discovered thanks to cyberpunkych. In older versions of CryptPad, only the /contacts/ app was affected. In newer versions which feature the embedded chat interface in pads, it is possible to leverage this vulnerability against other users in the same pad. Due to our Sandboxed iframe technique, this vulnerability does not permit an attacker to compromise concurrent editor's accounts, as their user keys are never accessible within the scope of the domain which was subject to exploitation. However, since the chat functionality is available to viewers as well as editors, it could be leveraged to gain access to the keys which permit modification of the document. Despite this limitation, creative attackers could leverage the front-end code to perform phishing attacks, or other forms of social engineering to trick users into handing over their credentials. We recommend that administrators of affected CryptPad instances upgrade to this version as soon as possible. Once more, we'd like to thank cyberpunky for their effort to discover the issue, and for reporting the issue to us in private so that we could fix it without putting our users at risk.
  • On a lighter note, this release features a server-side dependency update which fixes a non-critical bug in our websocket protocol. New users joining a channel which had never been vacated by all its users since its creation would receive the full history instead of only the latest state. To deploy the fix, run npm update and restart your server.


  • As noted above, this release fixes an XSS vulnerability.
  • We realized that each shared-folder in your CryptDrive was using a separate websocket connection to the server instead of routing over the existing websocket connection. This has been fixed.
  • We've improved our cursor-recovery script in the Rich Text Pad app to make it more resilient. In cases where the text changed in two places within one node of the document, your cursor could be displaced. It should behave more predictably now.
  • Another problem in the Rich Text Pad app could lead to conflicts between users when one reverted the change of another. Conflicts should now resolve in a predictable fashion.
  • If you were using the Rich Text Pad in its reduced-width mode (available via your /settings/ page), it was possible to scroll down beyond the white, paper-like styles of the document into an un-styled area of the page. This has been addressed.
  • We discovered that the export functionality for Rich Text Pads was not working due to a semantic difference in a conditional test in Chrome. Export within Chrome should work once more, however, there are serious privacy risks within Chrome/Chromium and we recommend that you consider using a more privacy-friendly browser.

What's new

  • The home page now features a badge advertising the fact that CryptPad is now a winner of the NGI award for Privacy and Trust-enhanced technologies. You can follow the link to our blog post which contains more information.
  • It is now possible to directly download uploaded files from your CryptDrive without opening a new tab, making your content available more quickly.
Assets 2

@yflory yflory released this Nov 6, 2018 · 273 commits to master since this release

Lemur release (v2.11.0)


Photo courtesy of maxpixel.net


This release continued the work on customization features for community instances. We also worked on usability improvements and UI issues.

Update notes

  • This is a simple release. Just download the latest commits and update your cache-busting string.
  • Customized instances may require additionnal changes in order to make customization easier to maintain in the future.
    • The static pages content (home page, FAQ, contact, privacy, etc.) has been moved from ./customize.dist/pages.js to a ./customize.dist/pages/ directory, containing one file per page. This new structure allows administrators to override only some pages instead of all the pages at once.
    • To override a page, just make a copy of its .js file from ./customize.dist/pages to a ./customize/pages and make your changes.


  • We've replaced our Font Awesome application icons with new custom icons. The new icons should be closer to the goals of the apps.
  • We've cancelled the Ctrl+S shortcut from the browser for saving the page. In CryptPad, the result of the browser save was not usable and the content of the pads is automatically saved.
  • As explained above, we've made it easier to customize some specific static pages instead of overriding all of them.
  • Our Markdown renderer should display tables in a nicer and cleaner way (Code and Slide applications).
  • The font size in the code and slide editors can now be changed from the Settings page.
  • We've added a warning text to the CryptDrive export feature from the last release.


  • We've found an issue causing some deleted characters to be inserted back in the document. It could happen when a least one member of the session had the tab not focused in their browser.
  • We've fixed an issue with our code for detecting small (or zoomed) screens in several part of our UI. This will hide some unnecessary elements of the interface at first load and free space for the actual content of the pad.
  • The "present" mode in the Slide application will no longer display the toolbar.
  • We've fixed an issue in the Pad application where the font could be reset to Arial when making a new paragraph.
  • The full CryptDrive export no longer stops when trying to export a very old poll.
Assets 2

@ansuz ansuz released this Oct 23, 2018 · 303 commits to master since this release

Koala release (v2.10.0)


Photo courtesy of Albagloria5 on Flickr


This release continued to improve our shared folder functionality, addressed user concerns about data portability, and implemented various features for customization for different CryptPad instances.

Update notes

  • This release features updates to client-side dependencies. Run bower update to update the following:
    • netflux-websocket
    • chainpad-netflux
  • we've added a new field (fileHost) in config.example.js. It informs clientside code what domain they should use when fetching encrypted blobs.
  • Administrators can now do more to customize their CryptPad server, most notably via the ability to override specific translations. For example, the home page now features a short message which, by default, says that the server is a community-hosted instance of the CryptPad open-source project. On CryptPad.fr, we have replaced this text to talk about our organization. You can do the same by modifying files in cryptpad/customize/translations/, like so:
define(['/common/translations/messages.js'], function (Messages) {
    // Replace the existing keys in your copied file here:
    Messages.home_host = "CryptPad.fr is the official instance of the open-source CryptPad project. It is administered by XWiki SAS, the employee-owned French company which created and maintains the product.";

    return Messages;

Simply change the text assigned to home_host with a blurb about your own organization. We'll update the wiki soon with more info about customization.


  • We've updated our features page to indicate what users get by purchasing a premium account. You can visit our accounts page directly from this list with the click of a button.
  • We've updated our home page to explain more about what CryptPad is.
  • As mentioned above, we've made all of our translation files overrideable.
  • We've made it easier to get your data out of CryptPad, by implementing a complete export of your CryptDrive's content as a zip file. This feature is available on the settings page.
  • Shared folders now support password protection.


  • We fixed an issue which affected users of our Kanban application, which caused the color picker to pop up and get in the way at inopportune moments.
  • We found that when a CryptPad code editor tab finished loading in the background, when it was focused, the markdown preview pane would be blank. We've added a check to try to re-draw the pane in these circumstances.
  • We noticed that anonymous users who used our in-pad chat app could not be distinguished when they both chatted at once. We now add a string at the end of their name which makes it possible to distinguish them.
  • We've updated an internal library (cryptget) such that it correctly tears down realtime sessions after connecting and loading content from the server.
    • We also added better error handling.
  • At some point in the last few releases we broke export of media-tags in rich text pads. They should be back to normal now.
  • Media-Tags also use the configurable value fileHost to construct absolute URLs, instead of using relative URLs to the server.
  • Tall dropdown menus no longer use scrollbars when they are displayed with enough space to display all options.
  • Chrome browser seemed to display our rich text editor correctly, except that no cursor was visible in empty documents. Users will now be able to see where their cursor is placed.
  • It was possible for disconnected users' browsers to enter a bad state after reconnecting. This resulted in that pad being inaccessible until they relaunched their browser. This bad state is now detected and mitigated.
  • Tags for documents in the CryptDrive were stopped functioning correctly as of the last few releases. This release fixes this bug.
Assets 2