Skip to content

Compare

KahunaCart vs Kirby ecommerce: Merx and Kirby Kart

Merx and Kirby Kart provide starting points for custom stores on Kirby. KahunaCart includes shipping calculations, order emails and payment-provider refunds within Grav. This page compares the included features and the work left to your project.

The short answer

Which fits your project?

Use these requirements to identify the better fit, then check the feature and pricing tables below.

Choose Merx or Kirby Kart when

  • You already use Kirby and want to keep its content and development workflow.
  • You have a developer to implement the store-specific tax, shipping and email behavior.
  • You prefer Merx's shared definition for order fields, checkout forms and validation.
  • You want Kirby Kart's fourteen listed payment providers and its documented security defaults.

Choose KahunaCart when

  • You need tax zones, product tax classes and configurable shipping rates.
  • You want order emails, PDF invoices and provider-backed refunds included.
  • You need variants, stock tracking, coupons and reporting ready to configure.
  • You want translated catalog fields and order emails that retain the customer's language.

Headline differences

What each plugin supplies

Order emails

Merx provides an email example for developers to build on. Kirby Kart uses email for sign-in but leaves order messages to the project. KahunaCart includes configurable, translatable order and account emails, processed through background jobs. See the email guide.

Tax

The assessed Merx version applies a product-level tax percentage. Kirby Kart delegates tax to the payment provider. KahunaCart includes zones, tax classes, inclusive pricing and EU rate presets. It does not validate VAT numbers or apply reverse charge automatically. See the tax guide for the limits of the presets.

Shipping

Merx and Kirby Kart leave shipping calculations to the project. KahunaCart provides configurable zones, weight and item-based rates, formulas, surcharges, free-shipping thresholds and split parcels. These are configured rates; live carrier drivers are not included. See the shipping guide.

Refunds

Neither Kirby plugin includes the provider-backed refund workflow assessed here. KahunaCart submits full or partial refunds to the payment provider and tracks pending refunds until confirmation.

Custom development

Merx is a toolkit for building a store around Kirby content. Custom showcase features should be budgeted as project work. KahunaCart includes more catalog and operations tools, while keeping the storefront customizable through Twig.

Bookings and rentals

KahunaCart's paid Bookings add-on adds an appointment picker, class capacity, shared resources and a staff diary. Rentals extends it with nightly stays and seasonal pricing. If these are part of a Kirby project, assess the booking solution and its checkout integration separately; the new matrix rows mark unverified support explicitly.

Side by side

Feature comparison

Selected categories from the full comparison. Identical rows without additional notes are omitted; the remaining rows show differences in support and availability. Booking and rental rows were checked on 21 September 2026. Bookings and Rentals are paid KahunaCart add-ons. Unverified cells indicate that support has not been established.

  • ✓ In the box
  • + Official add-on
  • 3rd Third-party
  • ~ Partial
  • ✗ Not available
  • ? Unverified
Tax 8 features
Tax: KahunaCart compared with 2 other platforms
Feature KahunaCart Merx Kirby Kart
Tax zones by country / region / postcode
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
Tax zones can match by country, then by region or state, then by postcode, so you can charge one rate nationally and a different rate in a specific area without treating them as separate stores. A store that only sells in one country only needs to set up one zone.
Multiple rates stacking (state + county)
KahunaCart: In the box Merx: Partial Kirby Kart: Not available
Several tax rates can stack within one zone, for example a state rate plus a county rate, and a receipt shows each one separately rather than one combined figure. One limit: only a single zone can match an order at a time, so you cannot have two overlapping zones both apply to the same order.
Tax-inclusive pricing
KahunaCart: In the box Merx: In the box Kirby Kart: Not available
Whether a price includes tax is decided per line rather than once for the whole store. KahunaCart asks four questions in order: does this product say so on its own, is there a price preference for the customer's region, is there one for the currency they are paying in, and failing all three, what does the store-wide setting say. A shop selling to the UK and to the US can quote both correctly at the same time. If a customer turns out to be outside the zone whose tax was baked into the price, the store can take that tax back off, and it does that as a negative tax line rather than as a discount, so your discount figures stay right. A store can also print "incl. VAT" or "excl. VAT" under every price, worked out by the same four questions and named with the tax zone's own word for the tax, so the note never disagrees with the checkout.
Tax on shipping, apportioned correctly across rates
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
When shipping is taxed under more than one rate, the tax on postage is split fairly between them based on the mix of goods in the order, with no rounding loss. Whether shipping is taxed is set per rate, not per zone, so within one zone you can tax postage under one rate and not another.
EU VAT rate preset shipped
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
The standard VAT rate for every EU country can be added to your store in one step. This covers standard rates only, not reduced rates for specific product categories, and rates are not automatically kept up to date if a country changes its rate. Registration thresholds and other VAT obligations remain something you need to handle yourself.
VAT-number validation / reverse charge
KahunaCart: Partial Merx: Not available Kirby Kart: Not available
The reverse charge itself is there for orders you enter: staff can record the customer's VAT ID on a manual order and tick Don't charge tax, and the order is priced without VAT (a price that includes VAT is charged net) and the invoice, receipt and credit note print the VAT ID and a reverse-charge line in your own words. A checkout field can also collect a VAT number from customers. What is missing is the checking: KahunaCart does not look the number up on VIES or zero-rate a storefront order by itself, so a store selling business-to-business across EU borders still checks each number and enters those orders by hand. Automatic validation is planned as a tax add-on.
Third-party tax service connector (Avalara / TaxJar)
KahunaCart: Partial Merx: Not available Kirby Kart: Not available
The connection point an external tax service plugs into is in core, and the services themselves are not. A tax engine is bound per tax zone rather than once for the whole store, so one shop can hand its US sales to an outside service and keep its own EU VAT rates for Europe. An engine that says it manages its own rates takes the zone, class and rate editors away with it, and the store stops offering to edit rates it no longer owns. What is not in the box is any actual connector: nothing talks to an external tax service until the planned tax add-on ships. A payment provider that handles tax on your behalf sidesteps the question already.
Merchant-of-record providers charged with no local tax
KahunaCart: In the box Merx: Not available Kirby Kart: Partial
When you use a payment provider that acts as merchant of record and handles tax on your behalf, KahunaCart recalculates the order with no local tax added on its own side, whichever tax setup you normally use. One known limitation: the cart page still shows your store's own local tax estimate before that provider is selected at checkout.
Shipping & fulfilment 11 features
Shipping & fulfilment: KahunaCart compared with 2 other platforms
Feature KahunaCart Merx Kirby Kart
Shipping zones
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
Shipping methods are grouped into zones that match a customer's address, so what a customer is offered depends on where they are shipping to, rather than everyone seeing the same flat rate.
Weight-banded rates
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
Shipping rates can be based on weight bands, for example one price up to two kilograms and another above that. The weight used is locked in at the time of the order, so changing a product's weight later never changes what an old order was charged. If an order's weight does not fit any band for a method, that method simply is not offered rather than defaulting to a wrong price.
Free-shipping threshold
KahunaCart: In the box Merx: Partial Kirby Kart: Not available
Free shipping is offered on whichever of five requirements you pick: always, with a free-delivery coupon, over a minimum order amount, over the minimum or with a coupon, or over the minimum and with a coupon. A separate switch decides whether the minimum is compared against the basket as priced or against the basket after discounts, which is the setting that answers the "does my fifty-pound threshold count before or after the coupon?" argument, and it defaults to the comparison KahunaCart has always made so an existing threshold keeps behaving exactly as it did. Shipping and tax count toward neither number, so postage can never pay for itself.
Local pickup
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
Local pickup can be offered as a shipping option with its own cost. If you want named branches with their own addresses, opening hours and tax, see the collection points row below.
Live carrier rates
KahunaCart: Partial Merx: Not available Kirby Kart: Not available
The contract a carrier plugs into is in core, and no carrier is. A rate driver is handed the destination, the parcel, its weight and its declared value, and answers with prices, or with the reason a particular service is not available. A shipping method names the carrier and the service it prices, so you still decide which methods your shop offers and the driver only decides what one of them costs. Quotes are cached for as long as you say, with a button in the admin to rebuild them. If a driver is slow, switched off or broken, its methods are shown as unavailable with the reason beside them and checkout carries on with the offline method you nominated, rather than stalling. What is still missing is a driver: no live rates, no label purchasing and no automatic tracking until the planned shipping add-on ships. Tracking numbers are entered by hand until then.
Tracking numbers recorded on the order
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
Each shipment records a carrier and tracking number, and a tracking link is built automatically for a wide range of carriers, or you can paste in your own link for others. The tracking link appears in the shipping confirmation email and in the customer's own order history.
Partial / multi-shipment fulfilment
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
An order can be shipped in multiple parcels over time, with each shipment recording exactly which items and quantities it went out with. The order's fulfilment status is worked out automatically from what has actually shipped, rather than being set by hand. Stock is not deducted until the order is fully complete, and a shipment cannot be undone, so correcting an under-shipment means shipping the rest separately.
Packing slip
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
A packing slip can be generated as a PDF for a whole order or for a single parcel, using the same document engine as the invoice.
Add-on contract for shipping methods
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
Every shipping method is priced through one door, and an add-on that prices a method goes through that same door rather than beside it, so a customer can never be shown an option that came out of a second calculation nobody checked. A rate-calculator add-on can quote against any method the store offers, put back a method the store would have refused, and attach details like a courier name and an estimated delivery day for your theme to print, with no template change on your side. Methods also gained the rate types an add-on would otherwise have had to build for itself: a charge per item, a charge per kilogram, a percentage of the order, a floor and a ceiling on the total, and a short cost formula you write in the admin. A method can require a shipping class, refuse one, or ignore the question entirely, and a per-class charge can either be added on top of the tabulated rate or take its place, chosen per method. And a shipping profile splits one order into several parcels, each priced by its own method.
Named pickup locations, taxed at the counter
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
Collection points are real places, not one flat pickup price. Each one has a full address, opening hours per weekday with a line for exceptions, an instruction you can translate, an optional collection charge and a code your documents print. The part that matters most is tax: an order collected at a counter is taxed at that counter, matched on the branch's own country, state and postcode, so a Dublin shop charges Irish tax on an order a French customer collects. A collected order never has a delivery address at all: checkout stops asking for one, and none is stored. The branch, its address, its hours and its instruction print on the receipt, the confirmation email, the invoice and the packing slip, laid out by the same address formatter every other address goes through. A branch that has closed is switched off rather than deleted, so the orders that named it still print where they went.
Print-on-demand fulfilment
KahunaCart: Official add-on Merx: Not available Kirby Kart: Not available
The Print on Demand add-on connects Printful, Printify and Gelato, and you can use several at once. You design a product in the provider's own dashboard and import it into the store, the provider's live shipping rates are offered at checkout, and a paid order goes to the provider, by default as a draft you review and send, or automatically if you prefer. The provider's tracking comes back onto the order as shipments, and products that are not in a provider's catalog can still be made from print files the store holds, routed by SKU.
Refunds & returns 7 features
Refunds & returns: KahunaCart compared with 2 other platforms
Feature KahunaCart Merx Kirby Kart
Refunds issued through the provider API
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
A refund is a real request sent to your payment provider, not just a status you set by hand, so the money actually moves and the order reflects that it did.
Credit note on refund
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
A credit note, required by law in most of the EU, is issued automatically whenever a refund is confirmed. It gets its own numbering sequence, separate from the invoice, and states the tax being credited back, all as a PDF.
Partial refunds
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
Partial refunds are supported, and the refund button only appears when your payment provider actually supports them, so you are never offered an option that would fail. When a coupon discount was spread across several items, refunding just one of them correctly gives back that item's own share of the discount, worked out automatically.
Asynchronous / pending refunds modelled properly
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
Refunds that a payment provider processes asynchronously are handled properly. A refund awaiting confirmation is shown as pending, is held out of the refundable balance so it cannot be double counted, and does not change the order's status until it is actually confirmed.
Restock on refund
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
When issuing a refund, you can choose to restock the returned items. This is safe even if a refund confirmation is somehow processed twice: stock is only ever put back once. A digital product refunded in full also has its download access revoked, and restocking only happens once the refund is actually confirmed by the provider, so nothing is put back on the shelf for a refund that fails.
Returns / RMA workflow
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
Built in since 1.5.6. The customer picks the items to send back and how many of each, from their receipt or account, inside the window your return policy sets, counted from delivery. Final-sale items and downloads are left out. You approve it with a return number, your instructions and an optional label (uploaded, linked, or bought through a shipping add-on), mark it received with how many arrived and how many are damaged, and the sound items go back into stock. The refund then opens already filled in for you to confirm.
Customer can ask for a refund, and you decide
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
A customer asks for a refund from their receipt or their account, picks a reason and adds a note, and you get a notification, a card on the dashboard and a filter on the Orders list. Approve runs the ordinary refund, in full or in part; Decline sends the customer a note in your own words. The request is offered inside a window you set, and outside it the same spot points at your contact page. Money never moves without you.
Customers & accounts 7 features
Customers & accounts: KahunaCart compared with 2 other platforms
Feature KahunaCart Merx Kirby Kart
Customer account area shipped (orders, downloads, addresses)
KahunaCart: In the box Merx: Not available Kirby Kart: Partial
Customers get a full account area covering past orders, digital downloads, saved addresses and wishlists. If your store uses two-factor login, a session still completing that second step sees nothing until it is fully verified. Access to this data is enforced centrally, so a theme cannot accidentally show one customer another's orders.
Customer groups
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
Customers can be organised into groups, each with an optional automatic discount, and you can rename a group at any time without breaking any coupons or rules tied to it. One group can be set as the default, covering logged-out visitors too, so your shop window shows the same price a guest would actually be charged rather than a confusing mismatch. Group membership can be used to scope coupons, sales and price lists.
Wishlist
KahunaCart: In the box Merx: Not available Kirby Kart: In the box
Customers can keep multiple named wishlists, for example a gift registry, a holiday list and a personal re-order list, rather than just one saved-for-later pile. Each list can be kept private or shared with a link, and a shared list is never publicly indexed, so only someone with the link can see it. A visitor without an account can still build a wishlist that merges into their account once they log in, and a customer can keep up to 20 lists of up to 500 items each.
B2B (companies, purchase orders, quotes, credit terms)
KahunaCart: Partial Merx: Partial Kirby Kart: Not available
Quotes are supported: you can send a customer a formal quote that they accept or decline through a link, with an expiry date, and a merchant can also record an answer for a quote that came back by phone. Orders taken by phone or email get the customer's trade prices and address, and can carry their VAT ID and the reverse charge. What is not yet supported is the rest of business-to-business selling: company accounts for buyers, purchase order numbers, and pay-later credit terms. Those are good candidates for a future add-on rather than more built into core.
Passwordless / magic-link customer login
KahunaCart: In the box Merx: Not available Kirby Kart: In the box
A customer can ask for a sign-in link by typing their email address, and a single-use link arrives that signs them in without a password. For a shop where most customers only return a couple of times a year, that is friendlier than asking them to remember a password or forcing account creation. The form answers the same sentence to every address, whether or not anyone shops here, so it cannot be used to find out who your customers are. The link opens a page with one button rather than signing anyone in as it is fetched, because corporate mail scanners follow links in an inbox and would otherwise use the link up before the customer clicked it. Using the link, asking for another, or setting a password each cancel any link still outstanding. Forgotten passwords, two-factor login and remember-me are still handled by Grav's own login system underneath KahunaCart, and KahunaCart never signs anyone in itself.
GDPR erasure and retention scheduling
KahunaCart: In the box Merx: Not available Kirby Kart: Partial
You can set up automatic data retention rules, such as removing abandoned carts after a set time or anonymising old completed orders, each with its own time window and all switched off by default, so nothing is deleted until you decide what to keep. A log is kept of what each rule removed and when, which is exactly what a data protection request needs to show, and completed orders are anonymised rather than deleted outright so your revenue and tax reports still add up correctly afterward. You can also reassign orders between customers, and erasing a customer checks first for any reason it should be blocked, such as an unresolved order, rather than deleting silently.
Member-only products restricted to customer groups
KahunaCart: In the box Merx: Unverified Kirby Kart: Unverified
A product can name the customer groups allowed to buy it, and to everybody else it is not there: absent from the shop page, from category and tag pages and the counts beside them, from search, from related-product blocks and from the sitemap. A concert can sell a member ticket at one price beside a general admission ticket at another, each with its own limits, and the member one simply is not in the shop for anybody else. Its own link still opens, on purpose, because whoever follows it is usually a member who has not signed in yet, so the page shows a members-only notice and a sign-in link where the buy button was. Add-to-cart refuses, and checkout asks again over every line before it starts a payment, because a group can change in between. Groups already kept in Grav can decide a customer's group at sign-in, so a store with a members user group does not keep a second list by hand.
Bookings & rentals 6 features
Bookings & rentals: KahunaCart compared with 2 other platforms
Feature KahunaCart Merx Kirby Kart
Appointment booking with available time slots
KahunaCart: Official add-on Merx: Unverified Kirby Kart: Unverified
Book appointments through the Bookings add-on. Set service durations, opening hours, notice periods and buffers. Customers choose an available time and use the store checkout.
Shared staff and resource availability
KahunaCart: Official add-on Merx: Unverified Kirby Kart: Unverified
Bookings checks staff, rooms and equipment across services. A booking can require several resources at once, such as a therapist and a treatment room. Working hours, time off and capacity determine which slots are available.
Group sessions with limited places
KahunaCart: Official add-on Merx: Unverified Kirby Kart: Unverified
Bookings supports scheduled classes with a capacity for each session. Sell individual dates or a whole course, keep attendance registers and offer cancelled places to a waiting list.
Nightly accommodation with check-in and check-out dates
KahunaCart: Official add-on Merx: Unverified Kirby Kart: Unverified
The Rentals add-on requires Bookings. It adds a date-range picker, nightly stays, guest limits, minimum stays and arrival and departure rules. Sell a whole property or a pool of equivalent rooms through the existing checkout.
Seasonal rates for nightly stays
KahunaCart: Official add-on Merx: Unverified Kirby Kart: Unverified
Rentals supports date-based rate bands and weekend prices. Add extra-guest charges and a cleaning fee for each stay. The quoted price is held while the guest completes checkout.
Rental availability import and export through iCal
KahunaCart: Official add-on Merx: Unverified Kirby Kart: Unverified
Bookings and Rentals exchange availability with listing sites through iCal feeds. Channel exports omit guest details. Updates are periodic and can leave a double-booking window; this is not a real-time channel manager. See the sync limits.
i18n, currency & multi-store 6 features
i18n, currency & multi-store: KahunaCart compared with 2 other platforms
Feature KahunaCart Merx Kirby Kart
Translated product content
KahunaCart: In the box Merx: Partial Kirby Kart: Partial
Product content such as titles and descriptions can be translated per field, so a product can have a German title paired with an English summary and both display correctly. If a translation is missing, the original language is shown instead of a blank space. Shops that only use one language see no extra overhead at all.
Per-language product URLs
KahunaCart: Partial Merx: Partial Kirby Kart: Not available
Product URLs are the same in every language rather than translated per language. This is a known trade off for search visibility, and a fully translated URL structure is being considered as a future improvement.
Emails render in the order's language
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
The language a customer used while shopping is saved with their order, and it is used consistently afterwards. Shipping and tax labels, cart line titles, and every email about that order stay in the language the customer originally shopped in, even if the shop's default language changes later.
Translated admin strings shipped for languages beyond English
KahunaCart: Partial Merx: Partial Kirby Kart: Unverified
Admin screens are only available in English today, so this is a partial rather than a tick. Everything a translator needs is in place: the translation system itself, a Crowdin project that takes contributed language packs, a command that exports the source strings and reports how complete each pack is, and a written guide for contributors. A finished pack drops into the plugin with no code change and any key it is missing falls back to English on its own, so what is left is contributors rather than work on our side.
Multi-store from one install
KahunaCart: Not available Merx: Not available Kirby Kart: Not available
There is no multi-store, multi-vendor or marketplace support. Several separate shops can share the same database server, but they cannot share one catalogue across multiple storefronts. This is planned as core work, and the underlying database is already partly prepared for it.
Per-country address rules for layout, required fields, postcode and phone
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
Each country carries its own address rules as a row you can edit: the order its address lines print in, the postcode pattern, the phone pattern, and which address fields it will not do without. A postcode rule that refuses valid post, or a required field nobody in that country has, is a save on a Tuesday afternoon rather than a wait for a release, and it changes that country and nothing else. Values ship for the thirty largest ecommerce markets plus every country your own tax and shipping zones already name; every other country gets an empty row, falls back to the generic layout and takes an order exactly as it did before. One formatter draws every address, so a German address prints its postcode before its city on the checkout review, the receipt, the invoice, the packing slip and the address book, or on none of them. The shipped phone rules are a format check rather than a national numbering plan, on purpose: refusing a valid number is worse than letting a typo through. A country's required fields only apply when the basket holds something that has to be delivered, so a cart of downloads still checks out with no address at all.
Notifications & emails 6 features
Notifications & emails: KahunaCart compared with 2 other platforms
Feature KahunaCart Merx Kirby Kart
Transactional emails shipped and editable
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
Sixteen order and account emails are included, each sent as both HTML and plain text, and every piece of text in them can be translated with no need to edit the templates themselves. Every message the store queues for a customer is also written to an email log, one row per message, listing the kind, the recipient, the subject, the order it was about, whether it was sent or failed, how many attempts it took and the transport's own words on the last failure. The row is written before the send, so a message that never left is visible rather than invisible, and a retry updates the same row instead of adding another. There is no open tracking, no tracking pixel and no click tracking anywhere in KahunaCart.
Merchant-facing on/off switch per email
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
The Notifications screen lists the sixteen emails and the store copy that is sent to the shop, each with its own on and off switch and its own template picker. Switching a message off queues no job at all, so an email a shop does not want costs nothing to leave behind. Point a message at your own pair of templates and the shipped pair stays underneath, so Restore shipped template is a button rather than a reinstall, and nothing on the screen can be deleted. An add-on registers its own messages into the same list, so everything a shop sends is managed in one place.
Email branding without editing a template
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
You can set your brand colour, button colour and logo for order emails directly from the admin, without editing a template, and these are applied in a way that works even in email clients with limited style support. Deeper customisation, such as header layout, font choice or footer text, still requires editing a template.
Chat, webhook and phone push notifications to the merchant (Slack, Discord, Telegram, Pushover, ntfy)
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
Set up channels once, with a Send test on each: email, Slack, Discord, Telegram, Pushover and ntfy for a phone, or a webhook of your own. Then tick, per message, where each one goes: a sale, a payment landing, a refund, a cancellation, and the problems you want woken up for, such as a declined payment, a provider that stops answering, a rejected webhook, a chargeback, stalled background jobs, low stock or a customer asking for a refund. Push messages carry a priority, so a chargeback rings a phone and a sale does not. Customer email addresses and postal addresses are never included in chat messages, by design, and a customer cannot use their own name to mass mention everyone in your Discord server.
Outbound store webhooks with HMAC signing
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
KahunaCart can send outbound webhooks to your own systems when events happen, each one cryptographically signed so you can verify it really came from KahunaCart. If one of your endpoints is failing, only that endpoint is retried, so a single broken listener does not cause duplicate deliveries to your other, healthy ones.
Low-stock alerting
KahunaCart: In the box Merx: Not available Kirby Kart: Not available
Low stock is reported in three places: a dedicated report, an admin panel and a notification. Checks run on a regular schedule rather than only at the moment of a sale, since stock levels can change in more places than checkout. The alert automatically clears once stock is replenished.

The other direction

Where the Kirby options offer more

Keeping Kirby preserves your site's content model, templates and development workflow. Moving to Grav involves a website rebuild as well as a catalog migration.

Merx uses the same definition for order fields, checkout forms and validation. KahunaCart supports configurable checkout fields, but through a separate system. Merx's newer pricing work also covers contexts beyond the prices KahunaCart keeps for each currency.

Kirby Kart lists fourteen payment providers and includes the specific form and internal-page protections recorded in the matrix. It also keeps site custom fields separate from plugin settings to protect them during updates.

KahunaCart includes rate limiting, expiring order links, sign-in links and shareable wishlists, so these are not absent features. The relevant differences are the particular defaults and workflows each plugin supplies.

The newer Merx version was still in testing at the time of this assessment. Its pricing, tax and order changes should be evaluated against the version you plan to use.

What it costs

License and ongoing costs

Include the Kirby license alongside the commerce plugin. Unverified prices remain unspecified. KahunaCart Bookings and Rentals are optional paid add-ons; the base license totals exclude them.

KahunaCart Merx Kirby Kart
CMS licence, year 1 $0 (Grav) €99 (Kirby basic) €99 (Kirby basic)
Commerce licence $249 €89 plus VAT, one-time per site Per-domain perpetual; price not published in our sources
Year 1, indicative $249 about €190 Kirby plus Kart
Year 2 $99, optional €0 within the current version; an upgrade fee is reserved for the next major version Perpetual
Tax engine Zones, classes, stacking rates, EU preset Flat percentage per product page None, by design
Shipping engine Zones, weight bands, classes, pickup None, has to be built by hand None
Order and account emails 16, included and translated None None
Refunds Through your payment provider, full or partial None None
Variants Product options and generated variants None Included
Payment providers 14: Stripe, PayPal, Polar and offline included; Moneris, Mollie, Square, Paddle, Lemon Squeezy and SumUp are one-time add-ons; four more coming soon PayPal, Stripe and manual invoice 15

Prices recorded in August 2026. Hosting and development exclusions are noted in the table. Kirby Kart pricing was not verified in this assessment. The comparison uses KahunaCart's list price. References: merx.jonathanmeier.io, getkirby.com/buy, kart.bnomei.com, KahunaCart store.

Migrating

Planning a move from a Kirby store

A Merx product can be any page with a price, so migration starts with the site's content model. Map each page's title, slug, description and price to a KahunaCart product and variant.

Review tax percentages and custom fields individually. A percentage alone does not identify a destination tax rule. Variants implemented through pages or custom data also need an explicit mapping.

Merx orders are stored as pages with structured items. Export them to CSV and map the columns in KahunaCart. The importer has presets for WooCommerce and Shopify, but not Merx.

Treat the move as a site rebuild with a catalog migration. For Kirby Kart imports, retain stable source identifiers so repeat runs can match existing products instead of creating duplicates.

Questions

Common questions

How does Merx handle tax?

The assessed version applies a percentage set on the product. It does not include destination-based VAT, VAT-number validation or reverse charge. A newer version in testing changes the tax model, so check the version your project will use.

Does Kirby Kart calculate tax?

Kirby Kart delegates tax to the payment provider rather than including its own tax-rate engine. The provider and your integration determine the supported tax workflow.

Can I move a Merx store?

Yes, with a site-specific export and mapping. Products and variants depend on the original Kirby content model. Orders must be converted to CSV and mapped. Plan for a website rebuild as well as the data migration.

How should I choose between Merx and Kirby Kart?

Compare the payment providers, checkout customization and defaults your project needs. Kart lists fourteen providers; Merx offers a flexible developer toolkit. Both leave shipping, ready-written order emails and provider-backed refunds to project work in this assessment.

Explore KahunaCart before you decide.

Review the pricing and documentation against your store's requirements.

Buy in the store