Skip to content
the-djmaze edited this page Jul 28, 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 (re-implemented as plugin)
    • 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 91.598
app.js 4.215.733 454.046
boot.js 672.433 2.861
libs.js 647.679 217.881
polyfills.js 325.908 0
serviceworker.js 0 285
TOTAL 8.019.778 766.671
js/min/* RainLoop Snappy RL gzip SM gzip RL brotli SM brotli
admin.min.js 255.514 47.631 73.899 14.320 60.674 12.796
app.min.js 516.000 233.722 140.430 68.676 110.657 58.037
boot.min.js 66.456 1.621 22.553 968 20.043 810
libs.min.js 574.626 106.182 177.280 38.479 151.855 34.497
polyfills.min.js 32.608 0 11.315 0 10.072 0
TOTAL 1.445.204 389.156 425.477 122.443 353.301 106.140
TOTAL (no admin) 1.189.690 341.525 351.061 108.123 292.627 93.344

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

css/* RainLoop Snappy RL gzip SM gzip SM brotli
app.css 340.334 98.323 46,959 17.821 15.355
app.min.css 274.791 80.298 39.618 15.963 14.045
boot.css 1.326 664 545
boot.min.css 1.071 590 474
admin.css 40.369 8.467 7.389
admin.min.css 31.901 7.430 6.599

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
Clone this wiki locally