Run a multi-currency European shop

A European shop usually needs to show and charge in several currencies and speak several languages. Cartwright handles both natively: turn on multi-currency to charge in the customer’s selected currency (a Stripe presentment-currency charge with the FX rate snapshotted on the order), and declare your locales in one config line to get per-locale routes, automatic hreflang, and per-entity content translation. VAT is handled by Stripe Tax (EU OSS) or a built-in single rate.

Who it’s for

EU/Nordic merchants selling cross-border who need DKK/EUR/USD and Danish/English/German from day one.

Charge, don’t just display

Multi-currency charges in the customer’s currency and records currency + FX rate on the order for clean receipts, refunds, and accounting.

Languages + hreflang

Add a locale in brand.config; routes and hreflang appear automatically, and products, categories, pages, services, and posts are translatable.

VAT

Stripe Tax for managed multi-country VAT (EU OSS, VAT-ID, invoicing), or the built-in single rate — correct at checkout either way.

Frequently asked

Does Cartwright actually charge in the customer’s currency?
Yes — with multi-currency enabled, the Stripe PaymentIntent is created in the customer’s presentment currency with the converted amount, and the order snapshots the currency and FX rate.
How do I add a language?
Add the locale to the `locales` array in brand.config.ts. Routing and hreflang update automatically, and the translation admin covers products, categories, pages, services, and blog posts.
How is EU VAT handled?
Via Stripe Tax for managed multi-country VAT (EU OSS, VAT-ID, invoicing), or a built-in single rate if you prefer.

Start in one command

npx create-cartwright@latest my-shop

See the docs or compare Cartwright.