Compare
KahunaCart vs Payload Ecommerce
Both products integrate commerce with a CMS. Payload extends your CMS collections with prices, variants and inventory; KahunaCart provides a dedicated catalog within Grav. Compare the editorial tools, included store features and custom development required. Documentation checked in August 2026.
The short answer
Which fits your project?
Use these requirements to identify the better fit, then check the feature and pricing tables below.
Choose Payload Ecommerce when
- You already work with Payload and Node.js.
- You need product records to use the CMS's autosave, preview and soft-delete workflow.
- You want flexible data queries and a multilingual staff admin.
- Your team can implement commerce features beyond the plugin's included pricing, variants, inventory and Stripe adapter.
Choose KahunaCart when
- You need tax, shipping, discounts and coupons included.
- You want ready-written order emails, PDF invoices and payment-provider refunds.
- You need configurable payment methods without writing a new adapter.
- You want catalog translations and order emails in the customer's language.
- You prefer a dedicated catalog and storefront running within Grav.
Headline differences
CMS workflows and included commerce tools
Feature scope
Payload's published roadmap lists shipping, tax, gift cards, discounts, bundles, subscriptions and pricing customization as gaps in the assessed plugin. KahunaCart includes tax, configured shipping, coupons, flexible pricing, bundles sold at a set price, gift cards and store credit; subscriptions use a paid add-on.
Checkout calculations
The assessed Payload payment integration charges the sum of item prices. Adding charges or deductions requires custom development around that calculation. KahunaCart calculates promotions, shipping and tax as part of the order total and provides extension points for add-ons.
Product editing
Payload adds commerce fields to CMS collections that the project defines. Products can use its editorial workflow and official storefront template. KahunaCart supplies catalog fields and tools within a dedicated commerce model, with revisions and scheduled changes but without Payload's draft preview.
Order operations
Payload does not include the order emails, provider-backed refunds or human-readable order numbers assessed here. KahunaCart includes those features, along with PDF invoices and credit notes. Payload supplies a Stripe adapter; other methods require custom adapters.
Extensions
Third-party Payload extensions cover several of these gaps. Include them or custom implementation work in the project estimate. KahunaCart also has limits: configured shipping does not include live carrier quotes, and its single stock count per variant does not provide multi-warehouse inventory allocation. Date-based appointments and stays use the separate Bookings and Rentals add-ons.
Bookings and rentals
KahunaCart's paid Bookings add-on supplies appointment and class booking through the existing checkout, with staff schedules and shared resources. Rentals requires Bookings and adds nightly stays, seasonal rates and iCal availability feeds. For a Payload project, assess the booking implementation and its integration with the ecommerce plugin separately from CMS content modeling.
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
Promotions & discounts 13 features
| Feature | KahunaCart | Payload |
|---|---|---|
Coupon codes |
KahunaCart: In the box | Payload Ecommerce: Not available |
| Coupons can give a percentage off, a fixed amount off, or free shipping, and can be scheduled, limited in how often they are used, and restricted to specific products, categories or tags. Every use of a coupon is recorded against the order it applied to, so you can always see exactly what a coupon has cost you. | ||
Automatic no-code sales / catalog promotions |
KahunaCart: In the box | Payload Ecommerce: Not available |
| A sale works like a coupon that applies automatically, with no code needed. It shows the discounted price right in the catalog listing, not just as a surprise at checkout. | ||
Usage limits, by total, per user and per email |
KahunaCart: In the box | Payload Ecommerce: Not available |
| You can cap how many times a coupon is used overall and per customer, and the store makes sure two shoppers checking out at the same instant cannot both claim the very last use. Refunding an order in full frees up that coupon use again, while a partial refund does not. | ||
Bulk coupon-code generation |
KahunaCart: In the box | Payload Ecommerce: Not available |
| You can generate a large batch of unique coupon codes at once for a campaign, using a pattern with a prefix, with per-code limits and an overall budget for the batch, and export the list as a spreadsheet for a mail merge. The codes avoid letters that are easy to misread when handwritten. Deleting a campaign frees up its codes rather than deleting them outright, since they may already be sitting in customers' inboxes. | ||
Buy-X-get-Y / BOGO |
KahunaCart: In the box | Payload Ecommerce: Not available |
| Buy one get one and similar offers work across a whole group of qualifying products at once. For example, six qualifying items under a buy one get one offer discounts the three cheapest of them, and you can cap how many times one order can earn the offer. One limitation: the free or discounted item must come from the same group of products, so you cannot set up 'buy this product, get a different one free'. | ||
Quantity-break / tiered discount |
KahunaCart: In the box | Payload Ecommerce: Not available |
| A sale's discount can get bigger the more a shopper buys, using a ladder of quantity thresholds you define, each with its own percentage or fixed discount. This is different from setting a lower list price at higher quantities: it is a bigger discount applied on top instead. The ladder is shown on the product page, and the cart nudges shoppers toward the next threshold. | ||
Free-shipping discount |
KahunaCart: In the box | Payload Ecommerce: Not available |
| Any coupon can include free shipping as part of its discount, crediting back exactly what shipping was quoted at, before tax is calculated, so a store that taxes postage never taxes shipping the customer did not actually pay. A separate free shipping threshold, if you have one, is measured against the product subtotal only, so a coupon cannot be used to reach it. | ||
Discount scoping to categories with exclusions |
KahunaCart: In the box | Payload Ecommerce: Not available |
| Sales and coupons can be scoped to specific products, variants, whole categories, or tags, and each of those can be included or excluded, with exclusions always taking priority. Coupons can also be set to skip items already on sale, or to a limit on how many items they apply to, applied to the cheapest ones first. | ||
Multiple coupons / discount stacking |
KahunaCart: In the box | Payload Ecommerce: Not available |
| A cart can hold several coupons at once, applied in the order they were added, with each one discounting what is left after the ones before it, so two fifty percent off coupons take half, then half of what remains, rather than the whole amount. A coupon marked as not combinable stays in place rather than being replaced, and free shipping is only charged once even with multiple free shipping coupons applied. Sales do not stack with each other, though a coupon can still apply on top of a sale. | ||
Gift cards or store credit |
KahunaCart: In the box | Payload Ecommerce: Not available |
| Store credit and gift cards are built in, with every change to a customer's balance recorded so you can always see what caused it. Credit can be spent at checkout as a payment method. One limitation: it must be used in full or not at all, so a balance smaller than the order total cannot be used as a partial payment. | ||
The order records **why** each price is what it is |
KahunaCart: In the box | Payload Ecommerce: Not available |
| Every discount applied to an order is recorded in detail: which product it touched, which sale or rule caused it, and exactly how the amount was worked out. This is what turns a customer asking 'why is my total wrong' into a quick, confident answer instead of a lengthy investigation. | ||
Add-ons can register new discount types with their own admin fields |
KahunaCart: In the box | Payload Ecommerce: Not available |
| Add-ons can define entirely new kinds of discount, with the admin screen automatically building a settings form for them. One honest gap: for some settings the admin only offers a plain text box rather than a proper picker, for example asking you to type a product's identifier rather than choosing it from a list. These custom discount types work with sales only, not with coupons. | ||
Conditional / rule-based discounts with a condition builder |
KahunaCart: Partial | Payload Ecommerce: Not available |
| You can build conditional discount rules using an 'all of', 'any of' or 'none of' logic builder, checking things like what is in the cart, who the customer is, or details of the order. This currently works for sales and for controlling which payment methods are offered, but not yet for coupons, shipping or tax, which each still use their own simpler set of conditions. A sale built this way is only priced at checkout, so it will not show a sale badge in the catalog. | ||
Tax 8 features
| Feature | KahunaCart | Payload |
|---|---|---|
Tax zones by country / region / postcode |
KahunaCart: In the box | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: Not available |
| 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
| Feature | KahunaCart | Payload |
|---|---|---|
Shipping zones |
KahunaCart: In the box | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: Third-party |
| 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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. | ||
Bookings & rentals 6 features
| Feature | KahunaCart | Payload |
|---|---|---|
Appointment booking with available time slots |
KahunaCart: Official add-on | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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. | ||
Developer extensibility 7 features
| Feature | KahunaCart | Payload |
|---|---|---|
Documented event/hook API |
KahunaCart: In the box | Payload Ecommerce: Partial |
| Developers get a documented set of events they can hook into to extend or customise how the shop behaves, along with clear rules for registering new features safely. If one add-on's extension has a problem, it fails on its own without breaking the rest of the page. | ||
Insertable calculation pipeline |
KahunaCart: In the box | Payload Ecommerce: Not available |
| Order totals are built through a clear, ordered series of steps covering pricing, sales, coupons, shipping and tax. Developers can insert an extra step into that sequence to add custom pricing logic, rather than having to rewrite the whole calculation. | ||
Add-ons decide when two cart lines merge |
KahunaCart: In the box | Payload Ecommerce: In the box |
| Developers can control when two similar items in a cart are kept as separate lines or combined into one, for example when a gift message or custom engraving should keep two otherwise identical items apart. This is a rule most shop platforms hide from you entirely. | ||
Add-ons can register whole admin screens |
KahunaCart: In the box | Payload Ecommerce: Partial |
| Add-ons and payment providers can add entire new screens and panels into the admin, the customer receipt, order emails and customer account pages, not just tweak an existing template. This lets an add-on offer a full feature rather than asking you to edit template files. | ||
Job queue with retries and backoff |
KahunaCart: In the box | Payload Ecommerce: Partial |
| Background tasks run through a job queue that safely handles multiple workers at once without duplicating work, retries failed jobs with increasing delays, and lets a task postpone itself to try again later rather than failing outright. There is currently no admin screen for viewing the queue, so it has to be checked from the command line. | ||
CLI commands |
KahunaCart: In the box | Payload Ecommerce: Not available |
| Eighteen command line commands cover setup, background processing, provider syncing, import and export, sample data, webhooks, search indexing, reporting and diagnostics, so a deployment script or developer can do almost anything the admin screens can do. | ||
Storefront works with JavaScript disabled |
KahunaCart: In the box | Payload Ecommerce: Not available |
| The storefront works fully with JavaScript turned off. There is no framework and no build step involved, and the small amount of script used only loads on shop pages. Even a saved address picker works without needing an extra page request. | ||
i18n, currency & multi-store 6 features
| Feature | KahunaCart | Payload |
|---|---|---|
Translated product content |
KahunaCart: In the box | Payload Ecommerce: Not available |
| 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: In the box |
| 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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
| Feature | KahunaCart | Payload |
|---|---|---|
Transactional emails shipped and editable |
KahunaCart: In the box | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: 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 | Payload Ecommerce: Partial |
| 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 | Payload Ecommerce: 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 Payload offers more
Payload gives products the CMS's autosave, draft preview and recoverable soft-delete workflow. KahunaCart uses a separate catalog, with its own revisions and scheduled changes but without those same editorial tools.
KahunaCart revisions preserve product configuration and identifiers. Restoring a revision does not restore stock or product files. Order changes have a separate version history.
Payload's cart design uses a private key without requiring a server-side session. It also provides replaceable cart-line merge logic and calculated activity status, which can suit custom or static storefronts.
Payload offers more consistent feature configuration, flexible data queries and an admin translated into many languages. These developer and editorial requirements may matter more than the included store operations in KahunaCart.
What it costs
License and ongoing costs
Payload's plugin is free and requires project configuration. KahunaCart is paid and includes more of the assessed store workflow. KahunaCart Bookings and Rentals are optional paid add-ons; the base license totals exclude them.
| KahunaCart | Payload Ecommerce | |
|---|---|---|
| CMS | Grav, free | Payload, free MIT |
| Commerce | $249 one-time | $0, MIT |
| Year 2 | $99, optional | $0 |
| Tax | Zones, classes, stacking rates, EU preset | Not built |
| Shipping | Zones, weight bands, classes, pickup | Not built |
| Discounts and coupons | Sales and coupons in core | Not built. Zero occurrences in the source |
| Transactional emails | 16, included and translated | Not built. Zero sendEmail calls |
| Refunds | Provider API, partial, asynchronous, with a credit note PDF | An enum value |
| Gift cards and store credit | One append-only ledger, credit spendable at checkout | Not built, on the maintainers' own RFC |
| Product reviews | Included, badge computed from paid orders | A payload.market add-on |
| Order numbers | Atomic sequence, plus a separate public hash | The document ID |
| Hosting | Any PHP host, SQLite by default | Node; Payload Cloud from around $35/mo |
Prices recorded in August 2026. Hosting and development exclusions are noted in the table. The comparison uses KahunaCart's list price. References: documentation, payloadcms.com, KahunaCart store.
Migrating
Planning a move from Payload
Identify the product fields used by your Payload project before exporting. Titles, descriptions, categories and other content are defined by the project, so there is no universal product mapping.
Variant types, option values and variants map closely to KahunaCart's structure, up to three option types per product. If the source stores multiple prices, list each currency in the store's settings and import the extra ones in price_EUR-style columns, or choose the one currency to retain.
Export customers, addresses and current orders to CSV and map their fields in the importer. Review custom payment and checkout fields separately.
Any tax, shipping or discount behavior built outside the assessed Payload plugin must be recreated explicitly. An absence in the core comparison does not mean a particular store has no custom data to migrate.
Questions
Common questions
Is the Payload ecommerce template production-ready?
Payload describes its official template that way. The plugin still has the feature limits recorded in its roadmap and this comparison. Evaluate whether its included workflow covers your store or needs extensions and custom development.
Does the plugin include tax and shipping?
Not in the assessed version. Its payment calculation totals the item prices, so additional charges require custom integration. KahunaCart includes configured tax and shipping calculations.
Does it include discount codes?
Not in the assessed plugin. Discount handling and its effect on the payment total require an extension or custom implementation.
Which includes gift cards and store credit?
KahunaCart includes both. Payload lists them as gaps in the assessed plugin. KahunaCart credit must cover the full order; it cannot be combined with a card for the remainder.
Why compare PHP and Node products?
Both add commerce to a CMS, but they suit different teams and workflows. Payload emphasizes CMS collections and custom development; KahunaCart supplies more store operations within Grav. Hosting and existing expertise are part of the choice.
Keep comparing
Related comparisons
Explore KahunaCart before you decide.
Review the pricing and documentation against your store's requirements.
Buy in the store