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:
Prefer to do it by hand?
Register it
In your vendure-config.ts:
Run the migration
The plugin adds its own table(s). Generate + run the migration like any other:
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.
/geo-block/site-configPublic: channel rules the storefront polls/geo-block/checkPublic: per-request decision + reason (logs to audit)/geo-block/presetsPublic: the preset catalogue (37 entries)/geo-block/admin/channelsAdmin: list channels with current rules/geo-block/admin/saveAdmin: save a channel's rules/geo-block/admin/statsAdmin: block totals + top countries + daily series/geo-block/admin/simulateAdmin: dry-run a visitor against current rules/geo-block/admin/gcAdmin: prune old audit rowsFAQ
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.