Hulo Global
Plugins

Geo Block

37 region presets, soft-block mode, IP allowlist, audit log, "what-if" simulator.

What it does

Built for production from day one.

Per-channel geo-restrictions you can actually understand. Pick from 37 hand-curated region presets (EU, EEA, Schengen, GCC, ANZAC, NATO, OECD, Commonwealth, English-speaking, MENA, ASEAN, Nordic, …) or add countries manually. Soft-block mode for "browse-only" markets. IP allowlist for offices and payment processors. Every block decision is logged for the admin Stats panel.

37 region presets

One-click setups: EU, EEA, EFTA, Schengen, Nordic, DACH, Benelux, Balkans, GCC, MENA, ASEAN, APAC, East Asia, South Asia, LATAM, North America, Caribbean, Oceania, ANZ, G7, G20, BRICS, OECD, NATO, Five Eyes, Commonwealth, English-speaking, and more.

Per-channel rules

Each Vendure channel gets its own rules — perfect for multi-storefront installs (e.g. one UK-only channel, one EU channel).

Soft-block (browse-only)

Mode toggle: full block hides the storefront entirely; soft mode renders it with a banner explaining you don't ship to their country and hiding checkout.

IP allowlist with CIDR

IPs or IPv4 ranges (`203.0.113.0/24`) that bypass every rule. For your office, oncall, monitoring probes, payment processors.

Audit log + stats

Every block decision logged with country, region, IP, UA, channel and reason. Admin Stats tab shows top blocked countries, daily series, and reason breakdown.

"What-if" simulator

Test exactly what your rules will do for a hypothetical visitor — country, UK region, IP — before saving anything to production.

Custom block page

Per-channel message, optional redirect URL and optional logo URL. Or fall back to sensible defaults per block reason.

UK sub-region filter

When GB is allowed, optionally restrict to ENG / WLS / SCT / NIR. Driven from the standard ISO subdivision codes.

Proxy-aware

Reads `cf-ipcountry` / Akamai / Fastly region headers when present. Saves a MaxMind lookup per request.

Scheduled maintenance window

Plugin option for a date-range lockdown — every visitor is blocked (except the IP allowlist) until the window closes.

Install

Three steps, five minutes.

Add the package

Or run the one-line installer that does steps 1–3 for you:

curl -sSL https://huloglobal.com/vendure-plugins/geo-block/install.sh | bash

Prefer to do it by hand?

yarn add @huloglobal/vendure-plugin-geo-block

Register it

In your vendure-config.ts:

# vendure-config.ts import { GeoBlockPlugin } from '@huloglobal/vendure-plugin-geo-block'; export const config: VendureConfig = { plugins: [ GeoBlockPlugin.init({ publicBaseUrl: 'https://shop.example.com', licenceKey: process.env.HULO_LICENCE_KEY_GEO_BLOCK, }), // ... your other plugins ], };

Run the migration

The plugin adds its own table(s). Generate + run the migration like any other:

yarn migration:generate AddGeoBlockPluginTables yarn migration:run

That's it. The admin UI tab appears immediately. Without a licence key the plugin runs in a degraded evaluation mode — fine for trying things out. Buy a key →

HTTP endpoints

Every route exposed.

GET/geo-block/site-configPublic: channel rules the storefront polls
GET/geo-block/checkPublic: per-request decision + reason (logs to audit)
GET/geo-block/presetsPublic: the preset catalogue (37 entries)
GET/geo-block/admin/channelsAdmin: list channels with current rules
POST/geo-block/admin/saveAdmin: save a channel's rules
GET/geo-block/admin/statsAdmin: block totals + top countries + daily series
POST/geo-block/admin/simulateAdmin: dry-run a visitor against current rules
POST/geo-block/admin/gcAdmin: prune old audit rows

FAQ

Common questions.

How do I get a licence key?

Buy here — Stripe Checkout, monthly or lifetime. You'll receive the JWT key by email; set it as HULO_LICENCE_KEY_GEO_BLOCK in your .env.

Does it work without a key?

Yes — the plugin boots in a degraded "evaluation" mode. You can install, configure, and inspect the admin UI before committing.

Where is data stored?

In your Vendure database. The plugin adds its own tables via a migration — your data never leaves your server.

Will it survive a Vendure upgrade?

It targets Vendure 3.x (compatibility set to ^3.0.0). Major version bumps will be tested against new Vendure releases.

Ready to ship?

Buy a key, drop the plugin in, ship today.