Skip to content
the-djmaze edited this page Jan 10, 2022 · 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 86.147
app.js 4.215.733 424.544
boot.js 672.433 2.779
libs.js 647.679 208.745
polyfills.js 325.908 0
serviceworker.js 0 285
TOTAL 8.019.778 722.500
js/min/* RainLoop Snappy RL gzip SM gzip RL brotli SM brotli
admin.min.js 255.514 43.195 73.899 13.906 60.674 12.391
app.min.js 516.000 214.890 140.430 65.402 110.657 55.565
boot.min.js 66.456 1.654 22.553 996 20.043 814
libs.min.js 574.626 99.476 177.280 36.501 151.855 32.699
polyfills.min.js 32.608 0 11.315 0 10.072 0
TOTAL 1.445.204 359.215 425.477 116.805 353.301 101.469
TOTAL (no admin) 1.189.690 316.020 351.061 102.899 292.627 89.078

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

css/* RainLoop Snappy RL gzip SM gzip SM brotli
app.css 340.334 84.810 46.959 16.297 14.102
app.min.css 274.791 68.619 39.618 14.424 12.796
boot.css 1.326 664 545
boot.min.css 1.071 590 474
admin.css 30.598 6.900 5.983
admin.min.css 24.578 6.248 5.492

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 122.321 41.906 31.867 14.330
ckeditor ? 520.035 ? 155.916
Clone this wiki locally