devmonowar / free-widgets-for-elementor
A lightweight, 100% free set of essential Elementor widgets that the free core doesn't include.
Package info
github.com/devmonowar/free-widgets-for-elementor
Type:wordpress-plugin
pkg:composer/devmonowar/free-widgets-for-elementor
Requires
- php: >=7.4
- composer/installers: ^1.0 || ^2.0
Requires (Dev)
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
A lightweight, 100% free set of essential Elementor widgets that the free core doesn't include — performance-first, clean code, no upsells.
Features
- Essential widgets that fill the gaps Elementor's free core leaves out, grouped under their own Free Widgets category.
- Performance-first: each widget's CSS/JS loads only on pages where the widget is actually used (via Elementor's
get_style_depends()/get_script_depends()). Nothing unused is ever queued. - No bloat: plain CSS and vanilla JavaScript — no jQuery dependency for the widgets, no heavy libraries, no build step.
- Clean, accessible markup: semantic HTML, escaped output, focus states, and
prefers-reduced-motionsupport on animated widgets (Flip Box, Countdown, Logo Carousel, Table of Contents). - Container ready: works inside Elementor's Flexbox and CSS Grid containers.
- Admin dashboard to enable/disable individual widgets, set global design defaults (border radius, shadow, typography), and view system info — all in a single, lightweight option.
- Translation ready & RTL friendly. 100% free, GPL licensed — no account or license key.
Included widgets
| Widget | Notes |
|---|---|
| Pricing Table | Header, price, feature list, button, optional "featured" highlight |
| Flip Box | 3D hover/click flip to a back face with a call to action |
| Team | Photo, role, bio, social links |
| Call To Action | Title, text, button, background |
| Countdown Timer | Counts down to a date/time, optional expired message |
| Post Grid | Responsive grid of posts (image, title, meta, excerpt, read-more) |
| Logo Carousel | Responsive logo/brand carousel with arrows, dots and autoplay |
| Table of Contents | Auto-generated, clickable page outline with smooth scroll and scrollspy |
Requirements
- WordPress 6.0+
- PHP 7.4+
- Elementor (free) — Elementor Pro is not required.
Install
WordPress.org — Plugins → Add New → search for "Free Widgets For Elementor".
Composer — for sites managed with Composer (Bedrock and similar):
composer require devmonowar/free-widgets-for-elementor
The package type is wordpress-plugin, so composer/installers
drops it into wp-content/plugins/ for you. Composer is only a delivery mechanism here — the plugin
itself has no runtime dependency on it and no vendor/ folder.
Architecture
- Namespace
FWFE, prefixfwfe_, CSS class prefixfwfe-. - Manual class loading (
includes/Core/Loader.php) viarequire_once— no Composer, no PSR-4 autoloader, novendor/. - No build tool — plain CSS/JS written straight into
assets/. Asset cache-busting uses the plugin version (time()whileWP_DEBUG). includes/Core/(Plugin, Loader, Assets) ·includes/Hooks/(Admin, Frontend, Elementor) ·includes/Base/Widget_Base.php·includes/Helpers/·includes/Admin/·includes/Widgets/<Name>/Widget.php.- Single option
fwfe_settings. Clean uninstall (uninstall.php).
Development
No build step and no Composer dependency are required to run the plugin. The dev dependencies are only the coding-standards toolchain:
composer install composer lint # PHPCS: WordPress-Core + PHP 7.4 compatibility composer lint:fix # phpcbf, auto-fix where possible
PHP 7.4+ compatible. Coding standard: WordPress-Core (see phpcs.xml.dist). CI runs PHP lint (7.4–8.3) + PHPCS on every push.
Release workflow
- Bump the version in 2 places: the
Version:header infree-widgets-for-elementor.php(the single source of truth —FWFE_VERSIONis read from it) andreadme.txt(Stable tag+ changelog). - Commit and push to
main. Wait for CI (lint + PHPCS) to pass. - Tag the release:
git tag X.Y.Z && git push origin X.Y.Z. The Deploy workflow publishes it to WordPress.org.
Requires GitHub secrets SVN_USERNAME and SVN_PASSWORD (a WordPress.org account with commit access to the plugin).