https://github.com/mkrd/flask-squeeze
Automatically minify JS/CSS and compress all responses with brotli, defalte or gzip, with caching for static assets
https://github.com/mkrd/flask-squeeze
Last synced: 11 months ago
JSON representation
Automatically minify JS/CSS and compress all responses with brotli, defalte or gzip, with caching for static assets
- Host: GitHub
- URL: https://github.com/mkrd/flask-squeeze
- Owner: mkrd
- License: mit
- Created: 2019-11-27T10:17:05.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2025-06-30T07:40:14.000Z (11 months ago)
- Last Synced: 2025-06-30T08:40:58.646Z (11 months ago)
- Language: CSS
- Homepage:
- Size: 949 KB
- Stars: 14
- Watchers: 1
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README

[](https://pepy.tech/project/flask-squeeze)


Flask-Squeeze is a Flask extension that automatically:
- **Minifies** responses with JavaScript, CSS, and HTML content
- **Compresses** all responses with brotli (preferred), gzip, or deflate compression based on browser support
- **Protects** against the BREACH exploit by adding random padding to compressed responses
- **Caches** static files so they don't need to be re-compressed, with both in-memory and persistent disk caching options
- **Optimizes performance** with intelligent compression levels for static vs. dynamic content
- **Works out-of-the-box** - no changes needed to your existing Flask routes or templates
Files are considered static if the substring "/static/" is in their request path.
Table of Contents
----------------------------------------------------------------------------------------
- [Compatibility](#compatibility)
- [Installation](#installation)
- [Quick Start](#quick-start)
- [Contributing](#contributing)
Compatibility
----------------------------------------------------------------------------------------
- Tested with Python 3.8, 3.9, 3.10, 3.11, 3.12 and 3.13
Installation
----------------------------------------------------------------------------------------
```
pip install Flask-Squeeze
```
Quick Start
----------------------------------------------------------------------------------------
```python
from flask import Flask
from flask_squeeze import Squeeze
squeeze = Squeeze()
def create_app():
app = Flask(__name__)
# Init Flask-Squeeze
squeeze.init_app(app)
# Init all other extensions
# AFTER Flask-Squeeze
return app
```
Thats it! The responses of your Flask app will now get minified and compressed, if the browser supports it.
To control how Flask-Squeeze behaves, the following options exist:
### Basic Options
| Option | Default | Description |
| --- | --- | --- |
| `SQUEEZE_COMPRESS` | `True` | Enable/disable compression |
| `SQUEEZE_MIN_SIZE` | `500` | Minimum file size (bytes) to compress |
| `SQUEEZE_CACHE_DIR` | `None` | Directory for persistent cache (`None` = in-memory only) |
| `SQUEEZE_VERBOSE_LOGGING` | `False` | Enable debug output |
### Minification Options
| Option | Default | Description |
| --- | --- | --- |
| `SQUEEZE_MINIFY_CSS` | `True` | Enable CSS minification |
| `SQUEEZE_MINIFY_JS` | `True` | Enable JavaScript minification |
| `SQUEEZE_MINIFY_HTML` | `True` | Enable HTML minification |
### Compression Levels
| Option | Default | Range | Description |
| --- | --- | --- | --- |
| `SQUEEZE_LEVEL_BROTLI_STATIC` | `11` | 0-11 | Brotli level for static files |
| `SQUEEZE_LEVEL_BROTLI_DYNAMIC` | `1` | 0-11 | Brotli level for dynamic content |
| `SQUEEZE_LEVEL_GZIP_STATIC` | `9` | 0-9 | Gzip level for static files |
| `SQUEEZE_LEVEL_GZIP_DYNAMIC` | `1` | 0-9 | Gzip level for dynamic content |
### Example Configuration
```python
app.config.update({
'SQUEEZE_CACHE_DIR': './cache/flask_squeeze/', # Enable persistent caching
'SQUEEZE_MIN_SIZE': 1000, # Only compress files > 1KB
'SQUEEZE_VERBOSE_LOGGING': True, # Debug mode
})
```
Contributing
----------------------------------------------------------------------------------------
1. **Report bugs** by opening an issue
2. **Submit pull requests** with improvements
3. **Improve documentation**
### Development Setup
```bash
git clone https://github.com/mkrd/Flask-Squeeze.git
cd Flask-Squeeze
uv sync
just test # Run tests
just run-test-app # Run test app
```
License
----------------------------------------------------------------------------------------
MIT License - see [LICENSE](LICENSE) file for details.