Knowledge Center Blog
  • Theme
  • Auto
  • Light
  • Dark
English EN (US)
Language ✕
  • Deutsche
  • Eesti
  • English
  • Español
  • Français
  • Hrvatski
  • Italiano
  • Latviešu
  • Lietuvių
  • Lëtzebuergesch
  • Malti
  • Nederlands
  • Português (BR)
  • Português (PT)
  • Română
  • Slovenčina
  • Slovenščina
  • Srpski
  • Suomi
  • Türkçe
  • Ελληνικά
  • Български
  • Русский
  • Українська
Log in
Developers Blog
Log in
Home Developers JavaScript client Checkout modes
Search
Developers
JavaScript client
  • Overview
  • Installing the client
  • Constructor options
  • Checkout modes
  • Opening the checkout
  • Events
  • Methods reference
  • Tracking and consent
  • Advanced embed options
  • Troubleshooting
REST API (v2)
PHP SDK
Node.js SDK
Python SDK
WordPress plugin
JavaScript client

Checkout modes

How the client chooses between the inline panel and a pop-up window, why trusted origins decide it, and what to expect during local development.

description View as Markdown

The checkout opens in one of two modes.

Pane is an inline panel rendered inside your page. On desktop it slides in from the right, capped at pane.width; on mobile it slides up from the bottom. The visitor stays on your site, and the panel closes when they press Escape or click the dimmed area.

Popup is a separate browser window, centred on the visitor's screen. The client watches for the window being closed so it can clear the backdrop.

Inline checkout requires a trusted origin

Pane mode renders the Entase checkout in an iframe on your domain, so it is only permitted for domains you have explicitly authorized. Add every domain that opens the checkout to Trusted origins in Settings → Integrations — see Integrations and checkout customization.

Whether the www. prefix is included matters. If you are not sure which form your site serves, add both.

If your domain is not on the list, the checkout still works — it simply opens as a pop-up window.

How 'auto' is resolved

With the default checkoutMode: 'auto', the client decides in this order:

  1. Not HTTPS → pop-up. Inline checkout is never used on an insecure page.
  2. localhost or 127.0.0.1 → pane, with a warning logged to the console. This is a development convenience so you can build against the inline layout; it says nothing about whether your production domain is allowed.
  3. Otherwise → the client asks Entase whether this origin may use inline checkout, sending pk to identify the account. If the answer includes pane, the mode becomes pane.

Until that answer arrives, the mode is popup. This is the behaviour most likely to surprise you: the check is asynchronous, so a book() call fired immediately on page load — before the visitor has had a chance to click anything — can still open a pop-up on a perfectly well-configured domain. In practice a real click always arrives long after the check has completed. If you open the checkout automatically, force the mode instead of relying on detection.

Forcing a mode

Set checkoutMode explicitly to skip detection entirely:

JavaScript
1
const entase = new Entase({ pk: 'YOUR_PUBLISHABLE_KEY', checkoutMode: 'popup' });

Or override it for a single booking:

JavaScript
1
entase.book('EVENT_ID', { checkoutMode: 'popup' });

Forcing 'pane' on a domain that is not a trusted origin does not grant permission — the panel opens, but the checkout inside it cannot communicate with your page. Use 'popup' as a deliberate choice, and leave 'auto' in place when you want inline checkout wherever it is allowed.

An unrecognized value is ignored and treated as 'auto'.

Reading and changing the mode at runtime

JavaScript
12
entase.getCheckoutMode();        // 'pane' or 'popup' — never 'auto'
entase.setCheckoutMode('popup'); // applies to every later book() call

getCheckoutMode() returns the resolved mode, so it reports what will actually happen. Setting the mode back to 'auto' re-runs detection.

Pop-up blockers

Browsers only allow window.open() during a user gesture. Call book() directly inside a click handler — not after an await, a fetch, or a setTimeout, by which point the gesture has expired and the pop-up is blocked.

JavaScript
12345678
// Blocked: the gesture is gone by the time book() runs.
button.addEventListener('click', async () => {
  const event = await fetch('/api/current-event').then(r => r.json());
  entase.book(event.id);
});

// Fine: resolve the id first, open on the click.
button.addEventListener('click', () => entase.book(button.dataset.eventId));

This affects pop-up mode only. Pane mode builds an element in the page and is not subject to it.

Previous Constructor options Next Opening the checkout
Was this article helpful?
On this page
  • Inline checkout requires a trusted origin
  • How 'auto' is resolved
  • Forcing a mode
  • Reading and changing the mode at runtime
  • Pop-up blockers
Learn how to Entase.
© 2026 Entase, Inc.

Entase

  • Events
  • Sign up

Platform

  • Pricing
  • Global reach
  • Integration
  • Marketing tools
  • Booking tools
  • Collaboration

Use cases

  • Theater and opera
  • Concerts and parties
  • Expos, fairs and festivals
  • Museums and attractions
  • Tours and experiences
  • Workshops and seminars
  • Fundraising
  • Tournaments

Knowledge center

  • Organizers
  • Attendees
  • Developers
  • Blog

Legal

  • Terms of use
  • Privacy policy
  • Cookies policy
search Questions? Search
auto_awesome LLM? Read llms.txt
support_agent Need help? Start chat