-
-
Notifications
You must be signed in to change notification settings - Fork 126
Home
This project is a fork of Rainloop and aims to apply hardening, modernization and a more lightweight experience.
For a detailed overview on installing SnappyMail, please see the installation instructions.
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
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 |
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 |