Nanflows Popup
Popups, slide-ins, banners and inline forms for WordPress. The free plugin.
by Nanflows · github.com/nanflows/nanflows-popup-lite · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/nanflows/nanflows-popup-lite/archive/refs/heads/main.zipPopups, slide-ins, top banners, bottom bars and inline forms for WordPress, with visual editing, targeting, triggers and templates.
This is the free plugin, and it is complete on its own: nothing here stops working or nags you into buying something. A paid add-on, Nanflows Popup Pro, extends it through the filters and JavaScript hooks below; this plugin does not require it and does not contain it.
What it does
- Types — modal, slide-in, top banner, bottom bar, inline.
- A visual editor — drag-and-drop canvas with rows and columns, typography and spacing on every element, and a live preview per device.
- Triggers — time on page, scroll depth, click.
- Targeting — pages, post types, archives, search, 404, logged-in status, WooCommerce pages, and visitor rules such as UTM, referrer and cookie.
- Frequency — every visit, once a session, once every N days, stop after a close or a conversion.
- Forms — leads stored in your own database, CSV export, consent checkbox, spam protection with Turnstile or reCAPTCHA v3.
- Integrations — Mailchimp, Brevo, and a signed webhook that reaches anything else.
- Templates — 25 ready-made designs.
Two things worth knowing
Targeting survives page caches. Rules that depend on the visitor rather than the page — UTM, referrer, cookie, cart value, schedule — are not decided on the server, because a cached page has no visitor. The server passes them and the browser decides, so a cached page still targets correctly.
Countdown timers stay correct behind a cache for the same reason: the deadline is sent, not the remaining time.
Development
docker compose up -d # http://localhost:8080
composer install && npm install && npm run build
The compose file mounts this directory into wp-content/plugins/, so an edit on
disk is live on the site.
| Command | What it covers |
|---|---|
npm test |
Front-end and editor units (Jest) |
./vendor/bin/phpunit |
PHP units, WordPress stubbed with Brain Monkey |
npm run test:e2e |
Playwright, against the WordPress above |
The E2E suite runs one test at a time on purpose: each test changes what is published on one shared site. It is also sensitive to machine load, so before chasing a failure, re-run the failing test on its own.
build/ is committed because WordPress.org runs no build step and a fresh clone
should work before anyone runs npm. Regenerate it with npm run build after
changing anything under src/.
Extending it
Pro is not special: it uses the same public extension points any plugin can.
PHP filters and actions — nanflows_runtime_config, nanflows_dialog_types,
nanflows_type_layout, nanflows_type_style, nanflows_starter_elements,
nanflows_sanitize_type_options, nanflows_popup_extra_markup,
nanflows_subscribe_response, nanflows_integration_providers,
nanflows_settings_panels, nanflows_overview_panels, nanflows_matched_popups,
nanflows_lead_captured, and nanflows_loaded to boot against a loaded plugin.
JavaScript — registerTrigger(), addGate() for a visitor decision made in
the browser, convert(), the nanflows:subscribed event, and [data-nf-extra]
inputs that are sent along with a lead.
Licence
GPL-2.0-or-later. See LICENSE.