WP Manifestindependent plugin directory
manifest / forms / nanflows-popup-lite

Nanflows Popup

Popups, slide-ins, banners and inline forms for WordPress. The free plugin.

by Nanflows · github.com/nanflows/nanflows-popup-lite · website

0stars
0forks

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.zip

Popups, 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 actionsnanflows_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.

JavaScriptregisterTrigger(), 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.