-
-
Notifications
You must be signed in to change notification settings - Fork 133
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 | 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 |
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 |