Download the PHP package swissup/module-breeze-theme-editor without Composer
On this page you can find all versions of the php package swissup/module-breeze-theme-editor. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download swissup/module-breeze-theme-editor
More information about swissup/module-breeze-theme-editor
Files in swissup/module-breeze-theme-editor
Package module-breeze-theme-editor
Short Description Breeze Theme Editor module for Magento 2
License OSL-3.0
Informations about the package module-breeze-theme-editor
Swissup Breeze Theme Editor
Visual theme customization tool for Magento 2 Breeze themes with live preview, draft/publish workflow, and 16+ field types.
๐ Documentation
Full documentation: https://docs.swissuplabs.com/m2/extensions/breeze-theme-editor/
- Installation Guide
- Theme Developer Guide - How to add Theme Editor support to your theme
- Configuration
- User Guide
- GraphQL API
โจ Features
- Live Preview - See changes instantly without page reload
- Draft/Publish Workflow - Test before going live
- 16+ Field Types - Colors, fonts, toggles, images, spacing, repeaters, and more
- Dual Color Format Support - RGB (Breeze 2.0) and HEX (Breeze 3.0) with auto-detection
- Theme Inheritance - Extend parent theme configurations
- Multi-Store Support - Different settings per store view
- Version Control - Publication history with rollback
- Secure Access - Token-based authentication (3-hour sessions)
๐ Quick Start for Theme Developers
1. Create Configuration File
Add etc/theme_editor/settings.json to your theme:
2. Use CSS Variables in Your Theme
The Theme Editor generates CSS variables that you can use in your stylesheets:
3. Field Types Quick Reference
| Type | Description | CSS Output Example |
|---|---|---|
| color | Color picker with RGB/HEX support | --color: 255, 0, 0 (RGB) or --color: #ff0000 (HEX) |
| text | Single line input | --width: 1280px |
| textarea | Multi-line text input | --content: "text..." |
| number | Numeric input | --columns: 4 |
| range | Slider control | --opacity: 0.8 |
| select | Dropdown selector | --variant: primary |
| checkbox | Multiple selection | JSON data |
| toggle | On/Off switch | --enabled: 1 or 0 |
| font_picker | Font selector | --font: "Georgia", serif |
| color_scheme | Predefined color schemes | Multiple CSS vars |
| icon_set_picker | Icon set selector | --icon-set: fontawesome |
| spacing | 4-sided control | --padding: 20px or 10px 20px |
| image_upload | Image upload | --logo: url(...) |
| code | Code editor | CSS/JS code |
| social_links | Social media links | JSON data |
| repeater | Dynamic lists | JSON data for JS |
Color Format Support:
- Breeze 2.0 themes use RGB format:
--color: 255, 0, 0 - Breeze 3.0 themes use HEX format:
--color: #ff0000 - Format is auto-detected from default value or set explicitly via
formatfield
See full documentation: https://docs.swissuplabs.com/m2/extensions/breeze-theme-editor/theme-developer-guide/
๐ GraphQL API Example
The module provides a comprehensive GraphQL API for programmatic access:
API Features:
- 10 Query operations (config, values, publications, presets, etc.)
- 9 Mutation operations (save, publish, rollback, import/export, etc.)
- Full support for draft/publish workflow
- Publication history with changelog tracking
See full API documentation: https://docs.swissuplabs.com/m2/extensions/breeze-theme-editor/graphql-api/
๐จ Color Format Support (Breeze 2.0 vs 3.0)
The Theme Editor supports both RGB and HEX color formats to ensure compatibility with different Breeze versions:
RGB Format (Breeze 2.0)
CSS output: --primary-color: 25, 121, 195
Usage: background: rgb(var(--primary-color))
HEX Format (Breeze 3.0)
CSS output: --primary-color: #1979c3
Usage: background: var(--primary-color)
Auto-Detection
If format is not specified, the Theme Editor automatically detects the format from the default value:
- Contains comma โ RGB format
- Starts with
#โ HEX format - Contains
rgb()wrapper โ RGB format (wrapper is removed)
Note: The GraphQL API includes the format field for all color values.
4. Enable and Access
-
Enable in Admin:
- Go to: Stores > Configuration > Swissup > Breeze Theme Editor
- Select Yes and save
-
Access Theme Editor:
- Click "Open Frontend in Theme Editor Mode" button in admin config
- Or use URL:
https://your-store.com/?breeze_theme_editor_access_token=YOUR_TOKEN - Access token is valid for 3 hours
- Make Changes:
- Panel appears on the right side
- Edit values with live preview
- Click Save Draft or Publish
๐ Sites Behind HTTP Basic Auth
On staging sites protected by HTTP Basic Auth (.htaccess), the browser keeps
asking for the password over and over as soon as the Theme Editor opens.
Why: the admin UI authenticates its GraphQL calls with
Authorization: Bearer <token>. Apache/nginx consumes that header first, tries
to read it as Basic credentials, fails, and answers 401 WWW-Authenticate: Basic
before Magento is ever reached. Every XHR then triggers a native password
prompt, and no correct password can clear it.
Fix (no server access needed): move the token to another header.
Go to Stores > Configuration > Swissup > Breeze Theme Editor > General Settings
and set GraphQL Authorization Header to X-Bte-Authorization.
The admin JS then sends the token there, Basic Auth ignores the unknown header,
and the module copies the value into Authorization server-side, right before
Magento validates the token. Authentication itself is unchanged โ the same JWT,
the same core validator, the same ACL checks.
Same thing from the CLI:
Alternative fix (requires server access): let Bearer requests through Basic Auth โ for the GraphQL endpoint only.
โ ๏ธ Do not apply these rules site-wide. The web server can only check that the header starts with
Bearer, not that the token is valid, so an unscoped rule lets anyone bypass Basic Auth on every route by sending an arbitraryBearervalue. Scoped to the GraphQL endpoint, the exception is limited to a path Magento authenticates itself โ but note that/graphqlis a public API in Magento, so its unauthenticated queries (catalog data and the like) become reachable on the staging site.๐ Substitute your actual endpoint path. The module builds the endpoint from the store base URL, so a subdirectory install answers on
/shop/graphql, not/graphql. Every/graphqlbelow must be replaced with your real path โ the 401 message the Theme Editor shows prints the path it is actually calling. Keep the patterns anchored, and escape regex metacharacters if your base path contains any (/shop.v2/graphqlโ^/shop\.v2/graphql$).
Apache โ in the vhost, where <LocationMatch> matches the URL as it arrived,
before any rewriting. Use <LocationMatch> with an anchored pattern rather than
<Location>: <Location> matches by prefix, so /graphql would also cover
unrelated routes such as /graphql-admin.
<LocationMatch> is not allowed in .htaccess. There, use <If> โ but verify it
with the curl check below, because per-directory configuration is merged after
Magento's rewrite to index.php on some setups:
nginx โ the exception has to be decided at server level, not inside a
location. Magento's routing internally redirects /graphql to index.php,
and the redirected request re-enters the PHP location, which inherits the
server-level auth_basic and challenges again. $request_uri keeps the
original URI across that redirect, so key the realm on it:
Verify with:
A 401 with www-authenticate: Basic means Basic Auth is still intercepting;
anything else means the request reaches Magento.
Then check that a normal page still asks for the password:
This must still return 401. If it returns 200, the rule was applied too
broadly and the whole site is now reachable with an arbitrary Bearer header.
The nginx recipe above was verified against nginx 1.24 with Basic Auth enabled and Magento at the web root:
| request | result |
|---|---|
/graphql with a valid Bearer token |
reaches Magento, authenticated |
/graphql?x=1 with a valid Bearer token |
reaches Magento, authenticated |
/graphql-admin with a Bearer header |
Basic challenge โ not bypassed |
/GraphQL with a Bearer header |
Basic challenge โ not bypassed |
/ with a Bearer header |
Basic challenge โ not bypassed |
/graphql with no auth header |
Basic challenge โ not bypassed |
The Apache variants follow the same idea but were not tested here โ run both curl checks after applying them.
๐ฆ Installation
Via Composer (Recommended)
Manual Installation
- Download the module
- Extract files to
app/code/Swissup/BreezeThemeEditor - Run the following commands:
๐งช Running Tests
This module includes comprehensive test coverage:
- Backend Tests: 25+ PHPUnit tests for PHP code
- Frontend Tests: 24 JavaScript tests for UI components
Backend PHP Tests
Using Docker (Recommended):
Using PHPUnit directly:
Run specific test file:
Frontend JavaScript Tests
Access the browser-based test runner:
URL Parameters:
jstest=1- Enable test modeautorun=1- Automatically run all tests on page loadsuite=<name>- Run specific test suite only
For complete testing documentation, see README-TESTS.md
๐ Requirements
- Magento 2.4.x or higher
- PHP 7.4, 8.0, 8.1, or 8.2
- Breeze Frontend (v2.0+ for RGB format, v3.0+ for HEX format)
๐ค Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Add tests for new features
- Submit a pull request
๐ License
OSL-3.0
๐ฌ Support
- Documentation: https://docs.swissuplabs.com/m2/extensions/breeze-theme-editor/
- Issues: GitHub Issues
- Source Code: GitHub Repository
๐ Links
- Breeze Frontend - Lightning-fast Magento 2 theme
- Swissup Extensions - Premium Magento extensions
All versions of module-breeze-theme-editor with dependencies
magento/framework Version ^103.0
swissup/module-core Version ^1.13.1
swissup/module-logger Version ^2.0