Compare
KahunaCart vs PrestaShop
PrestaShop is an open-source store application with built-in multistore and a large module marketplace. KahunaCart puts the shop inside Grav. Compare what comes with each, what needs extra modules and what a move involves. Checked against PrestaShop 9.1 in October 2026.
The short answer
Choosing a store platform
Start with the requirements your store cannot do without.
Choose PrestaShop when
- You need several stores managed from one installation.
- You need B2B credit limits and payment terms built in.
- You need its module marketplace, European carrier and payment partners, or agencies that already know it.
- You want a store application with a long production history.
Choose KahunaCart when
- You want the shop and the content site to share one admin and one theme.
- You want cart recovery, deposits, gift cards and chat notifications included.
- You want to start on ordinary PHP hosting without a database server.
- You want Stripe, PayPal and Polar in the box and one license renewal, rather than managing modules from several vendors.
Headline differences
What comes with each
Shop and content
PrestaShop has its own storefront, back office and database. Static pages are separate from products. KahunaCart runs inside Grav, so shop pages share the site's theme, navigation and editing workflow.
KahunaCart also keeps products out of Grav's page tree so listings can use purpose-built indexes. A store built mainly around editorial content may prefer products stored as CMS content.
Included features
PrestaShop 9.1 bundles faceted search, reviews, wishlists, cross-selling, stock and order alerts, GDPR tools, dashboards and statistics. It also includes an Admin API module, three offline payment methods and the Hummingbird theme.
Abandoned-cart email, deposits, gift cards, category quantity rules, passwordless login, chat notifications and outbound webhooks come from other vendors' modules. KahunaCart includes those features in core. Neither product includes VAT-number validation or ships live carrier quotes in the box.
Payments and refunds
Cards, PayPal, Apple Pay and Google Pay come through PrestaShop Checkout. It is a free first-party module, installed separately, with transaction fees.
PrestaShop records a refund as a credit slip or voucher; sending the money back through the processor depends on the payment module. PrestaShop Checkout does it from the order page. It also supports saved payment methods and captures a payment when the order reaches a chosen status.
KahunaCart includes Stripe, PayPal and Polar, sells Moneris, Mollie, Square, Paddle, Lemon Squeezy and SumUp as one-time add-ons, and shows only the actions each provider can carry out. Refunds through the provider and authorise-then-capture are in core. Stripe is currently its only provider with wallet buttons and saved cards.
Hosting
PrestaShop needs MySQL 5.7 or MariaDB 10.2 or newer and a PHP memory limit of at least 512M. Changing the theme's styles or scripts also needs Node 20. Its documentation says nearly every web host can run it.
KahunaCart starts with SQLite, so a first store needs no database server. It can move to a full database server later.
Features behind flags
PrestaShop 9.1 introduced a redesigned discount system and multi-carrier shipping behind experimental flags. The shipping feature splits and merges shipments within an order; the developer docs mark both features as work in progress. KahunaCart records shipments per parcel in core.
PrestaShop's back office uses both Symfony and legacy code. Individual pages are being migrated behind feature flags.
Bookings and rentals
KahunaCart Bookings is a paid first-party add-on for appointments, classes and shared resources. Rentals adds nightly stays, seasonal rates and iCal availability feeds.
PrestaShop uses third-party booking modules, such as Webkul's Reservation and Booking System on Addons. Check staff and resource rules, seasonal pricing and calendar sync before choosing a module.
PrestaShop 9.2
PrestaShop 9.2.0 was released on 30 September 2026. It adds One Page Checkout, Extra Properties for modules and Ask AI, plus groundwork for an improved B2B mode behind a beta flag. This comparison covers 9.1; the matrix will be checked against 9.2 at the next review. Hosted is based on PrestaShop 8.
Side by side
Feature comparison
These are selected categories from the full comparison. Matching rows are omitted unless they have a note. PrestaShop cells cover open-source Classic 9.1, checked on 10 October 2026. First-party means published by PrestaShop itself. KahunaCart booking and rental rows were checked on 21 September 2026; both add-ons are paid. Unverified means we have not established support.
- ✓ In the box
- + Official add-on
- 3rd Third-party
- ~ Partial
- ✗ Not available
- ? Unverified
Platform, licensing & pricing 6 features
| Feature | KahunaCart | PrestaShop |
|---|---|---|
| Open-source core | KahunaCart: Not available | PrestaShop: In the box |
Perpetual licence, so the shop keeps working when updates lapse |
KahunaCart: In the box | PrestaShop: In the box |
| Not a rental: a licence includes a year of updates, and renewing afterward is optional. If you let it lapse, the shop keeps running exactly as it is. You simply lose the ability to install new versions until you renew. | ||
Host platform is free, with no separate licence on top of the commerce one |
KahunaCart: In the box | PrestaShop: In the box |
| Grav is free, so there is no CMS licence to buy alongside KahunaCart. Optional features such as Bookings and Rentals are separate paid add-ons; they do not require a paid edition of Grav. | ||
Runs on ordinary shared PHP hosting |
KahunaCart: In the box | PrestaShop: In the box |
| KahunaCart needs nothing exotic: no queue server, no separate search server, and no extra runtime beyond ordinary PHP. It runs on the same shared hosting an ordinary Grav site runs on, with background tasks handled on a simple schedule rather than a constantly running process. | ||
Zero-config datastore (SQLite or flat file) for a first store |
KahunaCart: In the box | PrestaShop: Not available |
| A first store needs no database setup at all, since it works out of the box with no server database required. Larger stores can move to a full database server later, and the underlying structure stays the same either way, so switching does not mean starting over. | ||
Released in the last six months (as of August 2026) |
KahunaCart: In the box | PrestaShop: In the box |
| KahunaCart is a first release. That is the honest caveat on everything else here: the feature set is wide, but there is not yet a long production track record behind it. | ||
Cart & checkout 14 features
| Feature | KahunaCart | PrestaShop |
|---|---|---|
Cart and order are the same record in different states |
KahunaCart: In the box | PrestaShop: Not available |
| A cart and the order it becomes are the same record, just at an earlier stage, so nothing gets copied or can disagree between the two. This also means an abandoned cart, a retried payment, and a payment link a merchant sends by hand are all handled the same simple way rather than needing separate systems. | ||
Guest order converts to an account afterwards |
KahunaCart: In the box | PrestaShop: In the box |
| A guest shopper is offered the chance to create an account on the receipt and in their order emails. That account is only created once the order actually completes, so a declined payment never leaves a half-created account behind. | ||
Cart merge or adoption on login |
KahunaCart: Partial | PrestaShop: Partial |
| KahunaCart deliberately does not merge carts. If a customer logs in with no items already in their session and exactly one unfinished cart on file, that cart is restored. It never combines two carts together and never touches a cart already in progress, since a silent merge could change a shopper's total without warning. | ||
Multi-step checkout shipped and working |
KahunaCart: In the box | PrestaShop: In the box |
| A complete, working checkout is included. For physical products, it becomes a two step checkout once you have set up shipping zones, since a shipping cost cannot be calculated before an address is known, and the button always accurately describes what it will do next. | ||
Declarative custom checkout fields with conditional logic |
KahunaCart: In the box | PrestaShop: Partial |
| The checkout form is a list of fields you edit rather than a template you fork. Every field the checkout draws can be reordered, relabelled, required, hidden or switched off from the admin, and you can add your own: a VAT number, a delivery date, a purchase-order reference. Whether a field is required, whether it is hidden, and what counts as a valid answer are each written with the same rule builder you already use for sales and coupons, so "required when the billing country is in the EU and the customer is a company" is two conditions rather than code. An add-on can add a field the same way, and your edits to that field survive the add-on being switched off and back on. A value posted for a field the checkout is not currently showing is refused rather than quietly stored, so hiding a field really does hide it. Company name and a billing phone number ship as fields you switch on. | ||
Shipping/tax estimate on the cart page before checkout |
KahunaCart: In the box | PrestaShop: Partial |
| The shipping and tax estimate shown on the cart page is calculated the same way checkout will actually charge, so the number a shopper sees is not a rough guess. It only asks for a state or postcode when your shipping or tax setup actually needs that detail. One known limitation: if you use a payment provider that handles tax on your behalf, the cart page still shows your store's own local estimate rather than that provider's number. | ||
Express pay (Apple Pay / Google Pay / one-click) |
KahunaCart: In the box | PrestaShop: Official add-on |
| The express-pay region is built into both the cart and the checkout page, and every button that goes in it is drawn to one published style contract, so two wallet buttons from two different providers can never sit at different heights or corner radii. The button itself comes from your payment provider. Stripe ships one, so a Stripe store gets Apple Pay and Google Pay in the region today; on the other gateways the region stays empty until that provider adds a button. Card details still never pass through KahunaCart, which is exactly why the button belongs to the provider rather than to the store. | ||
Abandoned-cart capture |
KahunaCart: In the box | PrestaShop: In the box |
| A cart is recorded as abandoned once a shopper has reached checkout and provided an email address, rather than counting every visitor who merely added something to a cart and left. | ||
Abandoned-cart recovery email |
KahunaCart: In the box | PrestaShop: Third-party |
| One recovery email per abandoned cart, and optionally one reminder after a delay you choose. That is the whole feature: there is no third message, no campaign builder and no scheduling screen, because longer sequences belong in a marketing tool rather than in a shop. Both messages are switched off by default and stay off through an update, so upgrading KahunaCart never suddenly emails a backlog of old abandoned carts without you choosing to turn it on. | ||
Recovery link that puts the abandoned cart back |
KahunaCart: In the box | PrestaShop: Unverified |
| The recovery email carries a link that puts the whole cart back in one press, so a customer does not have to find nine items again. The link opens a page listing what would come back and what it costs today, and nothing is restored until the customer presses the button, because mail scanners and link previewers follow links in an inbox and would otherwise restore carts nobody asked for. Prices are today's prices: a cart abandoned in March and restored in June is priced as June prices it, and any line whose price has moved is called out by name. A line whose product has been deleted, unpublished or sold out is dropped with a note saying so and the rest of the cart still comes back. A cart counts as recovered once, however many times its link is opened, and you can revoke a single link without affecting any other link the store has sent. The same machinery gives you a share link for a cart you built with a customer over the phone: single-use, short-lived, and it can ask for the email address on the cart before it opens. | ||
Deposits and part payment |
KahunaCart: In the box | PrestaShop: Third-party |
| A customer can pay part of an order now and the rest later. Each order gets one payment collection holding a row per attempt, marked as the deposit, the balance or a refund. The order is not treated as paid until the balance clears, and it carries a part-paid status of its own that reports and add-ons read rather than working it out from the amounts. The balance is collected through the same pay link the order already has, so there is nothing new for a customer to learn, and a Collect balance action chases it with a message that says what the order comes to, what has been paid and what is left, recorded on the order so anyone can see it was sent. Refunding just the deposit is an ordinary refund against that collection, and a payment notification that arrives twice cannot take the money twice. | ||
Minimum, maximum and pack-size quantities per product |
KahunaCart: In the box | PrestaShop: Partial |
| A product can set the smallest quantity one order may hold, the largest, and a pack size the quantity has to be a multiple of, so beer sells by the six and tiles by the box of ten. A variant can override any of the three, and a blank box means inherit rather than no limit. One per order is a single tick that wins over all of it. The minimum rounds up to the next multiple and the maximum down, so every number the shop prints is a quantity the store will actually sell, and the maximum comes down to the stock on hand for a variant that will not sell below zero. The quantity box on the product page and in the cart carries the numbers with a sentence saying the rule in words, and the same rule is checked again at add-to-cart, at the quantity box and at checkout, so a basket built before the rule existed is refused before money moves rather than after. | ||
Quantity rules set on a category and inherited |
KahunaCart: In the box | PrestaShop: Third-party |
| The same three numbers sit on a category, and everything filed in it and in every category under it inherits them, so a wholesale department sold in sixes is three numbers typed once rather than three numbers typed on six hundred products. A product's own value overrides the category field by field, so a product with its own minimum in a category with a minimum and a maximum keeps its minimum and takes the category's maximum. Where a product is in two categories that disagree the stricter rule wins each field: the highest minimum, the lowest maximum, the largest pack size. One tick on a product takes it out of its categories' rules altogether, for the single-bottle sampler filed under a department sold in sixes. | ||
Store-wide minimum and maximum order |
KahunaCart: In the box | PrestaShop: Partial |
| Four settings say what the whole basket has to be: the fewest and the most items across every line, and the smallest and largest the order may come to in money. All four are off until you set them. The two money rules read the merchandise subtotal after discounts and before shipping and tax, so nobody reaches a minimum by paying for postage and nobody misses one because tax is added at the last step. A basket outside the rules is told so at the top of the cart page with the checkout button left where it was, and a shopper who walks past the sentence is refused at checkout with the same words. One tick takes a product out of all four, so a store with a fifty-pound minimum can still sell a twenty-five-pound gift card on its own. | ||
Tax 8 features
| Feature | KahunaCart | PrestaShop |
|---|---|---|
Tax zones by country / region / postcode |
KahunaCart: In the box | PrestaShop: In the box |
| 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 | PrestaShop: In the box |
| 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 | PrestaShop: In the box |
| 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 | PrestaShop: In the box |
| 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 | PrestaShop: In the box |
| 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 | PrestaShop: Third-party |
| 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 | PrestaShop: Third-party |
| 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 | PrestaShop: Unverified |
| 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 | PrestaShop |
|---|---|---|
Shipping zones |
KahunaCart: In the box | PrestaShop: In the box |
| 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 | PrestaShop: In the box |
| 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 | PrestaShop: In the box |
| 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 | PrestaShop: In the box |
| 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 | PrestaShop: 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 | PrestaShop: In the box |
| 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 | PrestaShop: Partial |
| 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 | PrestaShop: In the box |
| 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 | PrestaShop: In the box |
| 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 | PrestaShop: Third-party |
| 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 | PrestaShop: Third-party |
| 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. | ||
Customers & accounts 7 features
| Feature | KahunaCart | PrestaShop |
|---|---|---|
Customer account area shipped (orders, downloads, addresses) |
KahunaCart: In the box | PrestaShop: In the box |
| 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 | PrestaShop: In the box |
| 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 | PrestaShop: 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 | PrestaShop: Partial |
| 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 | PrestaShop: Third-party |
| 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 | PrestaShop: 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 | PrestaShop: In the box |
| 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. | ||
Payments & providers 8 features
| Feature | KahunaCart | PrestaShop |
|---|---|---|
Five or more first-party payment providers |
KahunaCart: In the box | PrestaShop: Partial |
| Every KahunaCart license comes with Stripe, PayPal, Polar, offline payments and a test provider for trying things out. Moneris, Mollie, Square, Paddle, Lemon Squeezy and SumUp are one-time add-ons, and four more (Checkout.com, Shopify, Invoice Ninja and Chargebee) are built and coming soon the same way. | ||
Provider capability flags that drive the admin and storefront UI |
KahunaCart: In the box | PrestaShop: Not available |
| KahunaCart knows what each payment provider can and cannot do, such as issuing refunds, handling subscriptions, or storing card details for later. The admin only shows actions a provider can actually carry out, so you never see a refund button that would simply fail. | ||
Webhook handling that verifies first, then logs |
KahunaCart: In the box | PrestaShop: Official add-on |
| Every message a payment provider sends back is checked for authenticity before it is used, so a forged message cannot be acted on. Repeated messages are recognised and not processed twice, and failures are logged for you to see. KahunaCart never switches a provider off automatically, so a temporary glitch cannot silently stop you taking payments. | ||
Per-cart provider gating |
KahunaCart: In the box | PrestaShop: In the box |
| Some payment providers only support digital goods. If a cart contains a physical item, those providers are removed from checkout automatically, and the order is blocked rather than accepted with no way to pay. If every enabled provider is digital only and the shop also sells physical products, the admin warns you and checkout explains the problem to the customer. | ||
Saved cards / tokenisation in practice |
KahunaCart: In the box | PrestaShop: Official add-on |
| Customers get a Payment methods tab in their account listing the cards their payment provider has kept on file, with the brand, the last four digits and the expiry, a default they can change and a Remove button. Removing asks the provider to forget the card first and tells the customer if it refused, so a card that disappears from the page is a card the provider no longer holds. KahunaCart stores the provider's reference and those display details and never a card number. Your payment provider has to support saved cards for the tab to fill up. Stripe does today; the other providers do not yet. | ||
Authorise-then-capture |
KahunaCart: In the box | PrestaShop: Official add-on |
| A payment provider can hold the money at checkout and let you take it later, so an order that falls through releases the hold instead of needing a refund. The order reads as authorised and does not count as paid until you press Capture, and Capture and Void appear on it only for providers that can actually honour them. A capture for more than was held, a second capture and a void of money already taken are all refused before the provider is even asked. Each provider declares for itself whether it holds or takes, and no store setting overrides that, because some payment methods cannot be held at all and would quietly vanish from your checkout if one did. Stripe, PayPal and Mollie hold then capture, and Checkout.com and Shopify will once they are released. The others take the money at once, because their platforms cannot hold a payment, and each says so in its own settings. | ||
Two-way catalogue/order sync with a provider |
KahunaCart: In the box | PrestaShop: Not available |
| KahunaCart can push products to a connected payment or commerce service and pull them back, keeping your catalogue in sync in both directions. Polar supports full two way sync of products and orders. The Shopify add-on, coming soon, syncs one way. One limit to know: if a product has multiple variants, only the main variant stays in sync, though the extra variant data is kept rather than lost. | ||
Merchandised payment methods over one gateway |
KahunaCart: In the box | PrestaShop: Partial |
| You can offer shoppers named payment choices, such as 'Visa', 'Klarna', 'Cash' or 'Bank transfer', built on top of your existing payment providers, each with its own label, logo, description, fee and rules about when it appears (for example, only above a certain order value or only for business customers). Any fee you add is worked out fairly and automatically taxed and refunded in proportion if the order is refunded. Your existing payment providers are unaffected. | ||
Bookings & rentals 6 features
| Feature | KahunaCart | PrestaShop |
|---|---|---|
Appointment booking with available time slots |
KahunaCart: Official add-on | PrestaShop: Third-party |
| 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 | PrestaShop: 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 | PrestaShop: Third-party |
| 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 | PrestaShop: Third-party |
| 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 | PrestaShop: 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 | PrestaShop: 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
| Feature | KahunaCart | PrestaShop |
|---|---|---|
Translated product content |
KahunaCart: In the box | PrestaShop: In the box |
| 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 | PrestaShop: In the box |
| 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 | PrestaShop: In the box |
| 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 | PrestaShop: 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 | PrestaShop: In the box |
| 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 | PrestaShop: In the box |
| 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. | ||
The other direction
Where PrestaShop offers more
Multistore
PrestaShop manages shops and groups of shops from one back office, with options to share customers, stock and orders. KahunaCart runs one store per installation. If you need one admin for several brands or countries, PrestaShop is the better fit.
Currencies and languages
Both fetch exchange rates. PrestaShop does it on request or on a schedule, and custom currencies stay manual. KahunaCart fetches daily from the European Central Bank, with Frankfurter covering the currencies the ECB doesn't list, and each currency can use prices you type or prices worked out from the base price.
PrestaShop advertises more than 75 languages and supports per-language product URLs. KahunaCart translates catalog fields, but its admin is English only and product URLs are the same in every language.
B2B credit terms
PrestaShop's B2B mode adds company and tax-ID fields, per-customer prices and an Outstanding page for credit limits, payment days and risk ratings. KahunaCart has customer-group price lists and formal quotes that a customer accepts or declines from a link, but no company accounts, purchase orders or credit terms. PrestaShop's B2B mode has no quotes or purchase orders.
Ecosystem and history
PrestaShop's marketplace is large, its site claims more than 3,200 themes and modules, and many of its carrier and payment partners are European. It also has more than fifteen years of production history by its own account, and agencies and developers who already know it. KahunaCart launched in 2026 and has a much shorter track record.
PrestaShop's developer documentation lists 714 hooks. Its OAuth2 Admin API has no orders resource yet; order data still goes through the older Webservice.
What it costs
Licenses, hosting and modules
PrestaShop Classic is free to download. Budget for hosting, a theme and the modules you need, or consider its Hosted subscription. KahunaCart's base license totals exclude the optional Bookings and Rentals add-ons.
| KahunaCart | PrestaShop | |
|---|---|---|
| CMS | Grav, free | PrestaShop is the application, free under OSL 3.0 |
| Commerce, year 1 | $249 | €0 for the Classic download |
| Realistic year 1 | $249 plus hosting | about €300 to €1,000 for a do-it-yourself store, including hosting, one premium theme and a few modules, according to La Fabrique du Net; agency work is extra |
| Year 2 | $99, optional | Core stays free; module terms vary by vendor |
| Hosting | Your own PHP host | Your own host, or PrestaShop Hosted at €24 a month billed annually or €29 a month with no commitment, excluding VAT. Hosted is based on PrestaShop 8 |
| Modules and themes | Add-ons are one-time purchases on your license key; one renewal covers them | Modules commonly €70 to €350 each and premium themes €84 to €140 |
| Card and PayPal payments | Stripe, PayPal and Polar included; Moneris, Mollie, Square, Paddle, Lemon Squeezy and SumUp are one-time add-ons | PrestaShop Checkout, free to install, with transaction rates; other gateways come as modules |
| Appointment and class booking | $149 one-time, Bookings; core license also required | Third-party modules on Addons; prices vary |
| Nightly accommodation | $249 one-time, Bookings + Rentals; core license also required | Third-party modules on Addons; prices vary |
| Subscriptions | $129, one-time add-on | Third-party modules on Addons; prices vary |
| Abandoned cart recovery | Included | Third-party modules on Addons |
| Table-rate shipping | Included: weight bands, per item, per kilogram, percentage, limits and cost formulas | Included: price or weight ranges per zone |
| Product bundles | Included: a set at its own price, stock off each part | Included: packs with their own price |
| Gift cards and store credit | Included, one ledger | Vouchers from refunds included; gift cards are third-party modules |
| Minimum, maximum and pack-size quantities | Included, on a product, a variant or a category, plus store-wide order minimums and maximums | Minimum quantity and minimum order total included; the rest are third-party modules |
| Wishlists | Included, multiple named lists | Included |
| PDF invoices | Included, with a credit note on refund | Included, with credit slips |
| Multilanguage | Included, per-field | Included, more than 75 languages advertised |
| Multiple stores | Not available: one store per install | Included |
PrestaShop prices recorded in October 2026 from the PrestaShop offers page and the Hosted page. The year-one estimate and the module and theme ranges are from La Fabrique du Net (July 2026), not from PrestaShop, and are ranges rather than quotes. Module prices are set by their vendors on Addons. KahunaCart booking prices checked 21 September 2026; its other prices recorded in August 2026. KahunaCart add-on updates use the site’s single optional renewal. KahunaCart figures exclude hosting, and development is extra for both. See the KahunaCart store for current offers.
Migrating
Moving from PrestaShop
KahunaCart has no PrestaShop importer and does not recognize its column headings automatically. You need to build a column mapping in the CSV importer. Preview the mapping, run a dry run that writes nothing, and check the row-level errors. Save the mapping for reuse.
PrestaShop's documentation lists CSV exports for categories, orders and stock, and the SQL Manager under Advanced Parameters can export the result of a query as CSV. Its importer uses separate files for products and combinations. Assemble those into KahunaCart's product file, then run a dry run.
Products and variants
Combinations become variants, with up to three option types per product. PrestaShop features apply to every combination; map them to KahunaCart's supported attribute types. Rebuild each pack by hand as a grouped product sold as a set at the pack's price. Set up virtual products and download limits again as digital products. Customization fields have no direct mapping and need manual review.
Categories and rules
Check category names for duplicates under different parents. Map PrestaShop's country, state and postcode tax rules to KahunaCart's tax zones and classes, and carrier ranges to shipping zones and weight bands. Recreate cart rules, catalog price rules and customer-group discounts as coupons, sales and group price lists; there is no importer for those rules.
Customers and orders
The same importer handles customers and orders. An order file needs one row per line item; rows with the same order number become one order. Coupons and reviews need separate migration work.
Stores and payments
Plan separate KahunaCart sites for a multistore installation before exporting. KahunaCart runs one store per install.
Payment-provider settings do not transfer. Reconnect each provider in KahunaCart and test a payment before cutting over.
Questions
Common questions
Can I import my PrestaShop products?
Yes, through a CSV column mapping you build. PrestaShop headings are not recognized automatically. Preview the mapping and run a dry run before importing. The migration section explains what needs manual work.
Can I bring my customers and order history?
Yes, from CSV files you prepare from your PrestaShop data. Order files need one row per line item, with the same order number on every row belonging to that order.
Can I keep my PrestaShop multistore setup?
No. Each KahunaCart store needs its own installation. Stay with PrestaShop if you need shared customers, stock or orders across stores.
Will my currency prices update automatically?
Yes, if you want them to. KahunaCart fetches exchange rates every day, from the European Central Bank and Frankfurter, and a currency can work its prices out from the base price with a markup and rounding. A price you type in a currency always wins, and a rate that jumps more than 10% in a day waits for you to accept it.
Can I keep my payment processor?
Stripe, PayPal and Polar come with every license, and Moneris, Mollie, Square, Paddle, Lemon Squeezy and SumUp are one-time add-ons; check that your processor is among them. Provider settings do not transfer, so reconnect it and test a payment before cutting over.
Does this cover PrestaShop 9.2 or Hosted?
The features cover open-source Classic 9.1, checked on 10 October 2026. Version 9.2 is due for review. Hosted is based on version 8; only its price is compared here.
Keep comparing
Related comparisons
Check KahunaCart against your requirements
Read the docs and pricing before choosing it for your store.
Buy in the store