Skip to content
the-djmaze edited this page Mar 3, 2021 · 13 revisions

SnappyMail

This project is a fork of Rainloop and aims to apply hardening, modernization and a more lightweight experience.

Installation

For a detailed overview on installing SnappyMail, please see the installation instructions.

Changes

This fork implements the following changes in comparison to upstream:

  • Privacy/GDPR friendly (removed Sentry, Gravatar, Facebook, Google, Twitter, DropBox, OwnCloud and X-Mailer links/inclusion)
  • More secure admin hashing algorithm (uses password_hash/password_verify)
  • Added features/functionality:
    • Auth failed attempts written to syslog (for fail2ban and others)
    • Option to remove background/font colors from messages for real "dark mode"
    • Modified Squire HTML editor as replacement for CKEditor
    • Better memory garbage collection management
    • Advanced Sieve filter scripts editor
    • No user-agent detection (use device width)
    • Split Admin specific JavaScript code from User code
  • More modern PHP approach:
    • Requires PHP 7.3+ with the mbstring extension
    • Replaced pclZip with PharData and ZipArchive
    • Prefer the yaml extension, fallback to the old Spyc
  • Removed features/functionality:
    • Background video support
    • BackwardCapability (class \RainLoop\Account)
    • ChangePassword (plugins won't work)
    • OAuth support
    • POP3 support (this fork supports only IMAP)
  • Ongoing removal of old JavaScript code
  • Dropped gulp-uglify in favor of gulp-terser
  • Replaced webpack with rollup

Removal of old JavaScript

This fork uses downsized/simplified versions of scripts and has no support for Internet Explorer, resulting in increased performance and a smaller pageload - which benefits mobile devices. Things might work in Edge 15-18, Firefox 47-62 and Chrome 54-68 due to one polyfill for array.flat().

  • Removed pikaday
  • Removed underscore
  • Removed polyfills
  • Removed Modernizr
  • Removed nanoscroll
  • Removed lightgallery
  • Removed jQuery
  • Removed matchmedia-polyfill
  • Removed momentjs (use Intl)
  • Removed opentip (use CSS)

RainLoop 1.15 vs SnappyMail

js/* RainLoop Snappy
admin.js 2.158.025 110.283
app.js 4.215.733 518.179
boot.js 672.433 4.726
libs.js 647.679 227.780
polyfills.js 325.908 0
serviceworker.js 0 285
TOTAL 8.019.778 861.253
js/min/* RainLoop Snappy RL gzip SM gzip RL brotli SM brotli
admin.min.js 255.514 55.895 73.899 15.992 60.674 14.239
app.min.js 516.000 252.825 140.430 73.089 110.657 61.565
boot.min.js 66.456 2.525 22.553 1.391 20.043 1.201
libs.min.js 574.626 115.768 177.280 42.792 151.855 38.097
polyfills.min.js 32.608 0 11.315 0 10.072 0
TOTAL 1.445.204 427.013 425.477 133.264 353.301 115.102
TOTAL (no admin) 1.189.690 371.118 351.061 117.272 292.627 100.863

For a user its around 66% smaller and faster than traditional RainLoop.

css/* RainLoop Snappy RL gzip SM gzip SM brotli
app.css 340.334 113.842 46,959 19.342 16.575
app.min.css 274.791 94.441 39.618 17.414 15.264
boot.css 2.066 913 742
boot.min.css 1.696 818 664
admin.css 52.753 10.259 8.964
admin.min.css 42.311 9.098 8.088

Replaced CKEditor with Squire

The Squire implementation is not 100% compatible yet, but it shows the massive overhead of CKEditor.

Still TODO:

  • support for tables (really needed?!?)
  • support BIDI (really needed?!?)
normal min gzip min gzip
squire 128.826 47.074 33.671 15.596
ckeditor ? 520.035 ? 155.916

PHP73 branch

There is a branch that only incorporates the PHP 7.3 changes, this branch can be found at https://github.com/the-djmaze/SnappyMail/tree/php73

Clone this wiki locally