Compare
KahunaCart vs October CMS commerce: Mall and Shopaholic
OFFLINE.Mall includes a broad set of commerce features in a free package. Shopaholic combines a free core with separate add-ons. Compare their order tools, extensions and costs with KahunaCart. This assessment uses 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 Mall or Shopaholic when
- You already use October CMS and have the skills to maintain the store there.
- You want Mall's catalog, tax, shipping, digital downloads, invoices and multiple currencies in a free package.
- You need Shopaholic's scheduled supplier imports or its range of predefined promotions.
- You prefer an open-source commerce core and can account for any add-ons the store needs.
Choose KahunaCart when
- You need to create manual orders and process refunds through the payment provider.
- You want numbered PDF credit notes and a version history for confirmed order changes.
- You need a documented administration API for store automation.
- You prefer Grav's file-based content and integrated store admin.
Headline differences
Order tools, extensions and integration
Manual orders and refunds
Mall does not include manual order creation. Its refunded status records a state rather than submitting a refund to the provider. KahunaCart creates manual orders using the normal pricing and stock workflow, processes provider refunds and generates numbered PDF credit notes. Confirmed order edits retain earlier versions. See the order guide.
Shopaholic extensions
Shopaholic's core is free, while filtering, search, tags, wishlists and reviews are separate add-ons. Include the specific packages your store needs in the budget and maintenance plan. KahunaCart includes these storefront features.
Maintenance
The comparison records differences in recent development activity and maintainer concentration. Check support for the particular versions and add-ons you depend on, especially for a store that will be maintained for several years.
Other October options
Meloncart provides another commerce option for October. It is described separately below and is not included in the scored matrix.
Administration API
Mall does not provide a comparable first-party admin API in this assessment; Shopaholic uses a community extension for external access. KahunaCart includes documented operations for products, orders and customers, with permissions for automation tools.
Bookings and rentals
KahunaCart has paid Bookings and Rentals add-ons for appointments, classes and nightly stays. They use the store's checkout and orders, and Rentals requires Bookings. When evaluating an October booking plugin, check how it connects to Mall or Shopaholic. Availability in the CMS marketplace alone does not establish a shared checkout or order workflow.
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. The two point-of-sale rows were checked on 14 October 2026, and Point of Sale is a paid add-on too. 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 | Mall | Shopaholic |
|---|---|---|---|
Coupon codes |
KahunaCart: In the box | OFFLINE.Mall: In the box | Shopaholic: Official add-on |
| 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 | OFFLINE.Mall: Partial | Shopaholic: Official add-on |
| 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 | OFFLINE.Mall: In the box | Shopaholic: Official add-on |
| 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 | OFFLINE.Mall: Not available | Shopaholic: Official add-on |
| 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 | OFFLINE.Mall: Not available | Shopaholic: Official add-on |
| 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 | OFFLINE.Mall: Not available | Shopaholic: Official add-on |
| 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 | OFFLINE.Mall: In the box | Shopaholic: Official add-on |
| 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 | OFFLINE.Mall: Partial | Shopaholic: Official add-on |
| 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 | OFFLINE.Mall: Unverified | Shopaholic: Official add-on |
| 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 | OFFLINE.Mall: Not available | Shopaholic: 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 | OFFLINE.Mall: Partial | Shopaholic: In the box |
| 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 | OFFLINE.Mall: Not available | Shopaholic: In the box |
| 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 | OFFLINE.Mall: Partial | Shopaholic: Partial |
| 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. | |||
Orders 14 features
| Feature | KahunaCart | Mall | Shopaholic |
|---|---|---|---|
Sequential order numbers from an atomic sequence |
KahunaCart: In the box | OFFLINE.Mall: In the box | Shopaholic: In the box |
| Order numbers are assigned in sequence and never change once given out. Deleting an order leaves a gap in the sequence rather than renumbering the orders around it, so a number a customer already has on their receipt can never change. Every order also carries a short payment reference for bank transfers, printed on the receipt, the invoice and the pay page and available to drop into your payment instructions. It leaves out every character pair people confuse when copying by hand, so no zero and letter O, no one and letter I, and it does not tell anyone who pays you how many orders you have taken. | |||
Invoice number from its own sequence |
KahunaCart: In the box | OFFLINE.Mall: Partial | Shopaholic: Not available |
| Invoices get their own separate, gapless numbering sequence apart from the order number, which several EU countries require. You can set the starting number and format, and optionally have it reset each year. | |||
Merchant-defined order statuses |
KahunaCart: In the box | OFFLINE.Mall: In the box | Shopaholic: In the box |
| You can create your own order statuses, with your own names, colours and order, and switch any of them off. Each status can be marked as counting toward payment, affecting stock, or being a final state, and the store's logic works off those settings rather than the status name, so renaming a status never breaks anything relying on it. A status cannot be deleted while orders are still using it. Each status can also carry a customer-facing name, so Picking, Packed and At the framer can all read as "Preparing your order" to the customer while you keep three separate states, three counts and three filters in the admin. Leave it blank and the customer sees the status name itself, which is what every store gets until it chooses otherwise. | |||
Order state machine with legal transitions |
KahunaCart: Partial | OFFLINE.Mall: In the box | Shopaholic: Not available |
| There is no formal list of which order status can legally follow which. What does exist is a single, consistent path for changing status that always records the change in the order's history, plus rules tied to specific flags, such as allowing refunds only on statuses flagged complete, and requiring a final order to be explicitly unlocked before it can be edited again. It is closer to consistent guardrails than a fully declared state machine. | |||
Order timeline / history |
KahunaCart: In the box | OFFLINE.Mall: Not available | Shopaholic: Partial |
| Every order keeps a permanent history: status changes, shipments, cancellations, refunds, and emails sent are all recorded automatically. Add-ons can add their own entries to this history too, and customers see a simplified version of it on their receipt. Alongside it, orders carry notices, which are the things somebody has to be told rather than a log of what happened. A customer is told when a coupon lapsed or a line went away, on the receipt, at checkout and in the confirmation email, and never from the internal record: a notice is built from a fixed list of what a customer may be shown, so an internal status name, a private note or a stored snapshot cannot reach a buyer. You get the other half as a work queue of the orders that need a person, covering negative stock, a coupon redeemed past its limit, a failed webhook or an address that did not validate, and an item leaves the queue when somebody has dealt with it. | |||
Order notes, private and customer-facing |
KahunaCart: In the box | OFFLINE.Mall: In the box | Shopaholic: In the box |
| You can leave notes on an order, either private notes only staff see, or notes that get emailed to the customer. A private note can be deleted, but a note already sent to a customer cannot be, since it has already gone out. | |||
Manual / phone order creation in the admin |
KahunaCart: In the box | OFFLINE.Mall: Not available | Shopaholic: In the box |
| Staff can create an order manually in the admin, for a phone or in-person sale, and it goes through exactly the same process as a website order: numbering, stock deduction, and a confirmation email. The order takes the customer's billing and shipping address, filled in from their address book, so tax and shipping are worked out from it exactly as at checkout, and a customer in a group with its own price list gets those prices. Staff can also record a VAT ID and sell without VAT under the reverse charge. Prices always come from the catalog, there is no way to type in an arbitrary price, and there is no way to add a one-off line item like a custom fee or surcharge. For a shop counter, the Point of Sale add-on gives staff a till, described in the next row. | |||
Point of sale at the counter, on the same stock and orders as the online store |
KahunaCart: Official add-on | OFFLINE.Mall: Not available | Shopaholic: Not available |
| The Point of Sale add-on turns a tablet, a laptop or a phone into a till on your own site. Staff pick their name, type a PIN and scan or tap products, and the customer pays with cash, a card on a Stripe, Square or SumUp reader, store credit, a gift card or a pay link, or a mix of them. Every counter sale is an ordinary order, using the same products, prices, stock, coupons and customers as the website, and it is taxed at the address of the shop where it was sold. Customers can bring things back to the counter, and someone who owes the rest of a booking or an online order can pay it there. Reports count counter and online sales together and can split them by channel. The till needs a connection to your shop to sell, because there is no offline mode. | |||
Till shifts with a starting float and a cash count at closing |
KahunaCart: Official add-on | OFFLINE.Mall: Not available | Shopaholic: Not available |
| Each shift starts by counting the float into the drawer, and cash put in or taken out during the day is recorded with a reason and the name of whoever did it. At closing, staff count the drawer by notes and coins or as one total before the till shows what it should hold, so nobody counts towards a number. The till then says whether the drawer balances, is short or is over, and freezes a Z report with the sales, payments and refunds by type, discounts, tax by rate, totals for each member of staff and the cash drawer line by line. An X report shows the shift so far at any time, and a difference bigger than the limit you set sends you a message. | |||
Editing an order after it is placed |
KahunaCart: In the box | OFFLINE.Mall: Partial | Shopaholic: In the box |
| Orders can be edited after they are placed, such as adding or removing items, changing quantities or prices, and adjusting shipping, address or tax, with every version of the order kept and readable afterward. Lines are never deleted outright, only written off, and an order in a final status must be explicitly unlocked before it can be edited again, with that unlock recorded too. This is an optional setting you turn on, and turning it on is blocked if you have an installed add-on that has not been updated to support it. | |||
Payment link for an unpaid order |
KahunaCart: In the box | OFFLINE.Mall: Partial | Shopaholic: Not available |
| You can send a customer a payment link for an unpaid order, offering the same payment methods checkout would normally offer. The link expires after a while rather than staying valid indefinitely. | |||
Customer-facing PDF invoice |
KahunaCart: In the box | OFFLINE.Mall: In the box | Shopaholic: Not available |
| A printable, downloadable PDF invoice is generated automatically for every order, with no extra software to install. A confirmed refund automatically issues a credit note as well. | |||
Ledger of every provider interaction |
KahunaCart: In the box | OFFLINE.Mall: Partial | Shopaholic: Unverified |
| Every interaction with your payment provider, charges, refunds and everything in between, is logged, with refunds linked back to the original payment they refunded. Incoming notifications from the provider are logged too, with the message content kept only for ones verified as genuine, since that inbound address is public and anyone could attempt to post to it. | |||
Order source attribution (referrer, campaign tags, device) |
KahunaCart: In the box | OFFLINE.Mall: Not available | Shopaholic: Not available |
| Every order records where it came from: the site that referred the visit, the campaign tags on the link they followed, and whether they were on a phone, a tablet or a desktop. The first visit wins rather than the last. Nothing at all is stored about a visitor who does not order, no third-party service is contacted, and the browser's user agent is read once to work out the device and then dropped rather than kept. Reports break revenue down by any of it, so 'where did this order come from' is a question your store answers on its own rather than one you go and ask an analytics product. | |||
Refunds & returns 7 features
| Feature | KahunaCart | Mall | Shopaholic |
|---|---|---|---|
Refunds issued through the provider API |
KahunaCart: In the box | OFFLINE.Mall: Not available | Shopaholic: Partial |
| 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 | OFFLINE.Mall: Not available | Shopaholic: 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 | OFFLINE.Mall: Not available | Shopaholic: Unverified |
| 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 | OFFLINE.Mall: Not available | Shopaholic: 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 | OFFLINE.Mall: Not available | Shopaholic: 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 | OFFLINE.Mall: Not available | Shopaholic: 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 | OFFLINE.Mall: Not available | Shopaholic: 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. | |||
Bookings & rentals 6 features
| Feature | KahunaCart | Mall | Shopaholic |
|---|---|---|---|
Appointment booking with available time slots |
KahunaCart: Official add-on | OFFLINE.Mall: Unverified | Shopaholic: 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 | OFFLINE.Mall: Unverified | Shopaholic: 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 | OFFLINE.Mall: Unverified | Shopaholic: 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 | OFFLINE.Mall: Unverified | Shopaholic: 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 | OFFLINE.Mall: Unverified | Shopaholic: 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 | OFFLINE.Mall: Unverified | Shopaholic: 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. | |||
Admin & reporting 11 features
| Feature | KahunaCart | Mall | Shopaholic |
|---|---|---|---|
Dashboard revenue widget |
KahunaCart: In the box | OFFLINE.Mall: Not available | Shopaholic: Partial |
| A revenue summary appears right on the main Grav dashboard, using the same data as the full reports. It only appears for admins with permission to see reports, and it automatically matches the colours of whichever admin theme you are using. | |||
Reports with date ranges |
KahunaCart: In the box | OFFLINE.Mall: Partial | Shopaholic: Not available |
| Six report types cover sales summary, products, customers, taxes, refunds and low stock, and you can run any of them over any date range with no limit on how far back you go. A fully refunded order is left out of revenue entirely, while a partially refunded order still shows its full total with the refunded amount shown separately, so you can see exactly what happened rather than a net figure that hides it. Very long ranges are grouped by month automatically so they stay easy to read, and reports stay fast even on a large order history. Each customer record also shows what that customer is worth: orders, lifetime total, average order value, first and last order, and where the last thing they bought was sent. Every one of those figures is worked out over exactly the same set of orders the lifetime total counts, so two numbers on the same screen can never disagree. The dashboard carries a cart-recovery rate over the same date range as everything else on it: carts mailed, carts recovered, the percentage, and what the recovered ones were worth. | |||
CSV export of orders |
KahunaCart: In the box | OFFLINE.Mall: In the box | Shopaholic: In the box |
| Orders can be exported to CSV in two ways: one row per order, or one row per line item, so you get the level of detail you actually need. You choose and save which columns to include and in what order. There is a maximum number of rows per export, and if you go over it you are told clearly rather than getting a silently cut off file. | |||
Bulk actions on products or orders |
KahunaCart: In the box | OFFLINE.Mall: Partial | Shopaholic: In the box |
| You can select several products at once and change one field on all of them together, and before anything is saved you can see exactly what will change. Orders can also be bulk updated, for example changing status on many at once, with each order processed and recorded individually so one failure will not affect the rest. There is a maximum number of items per action, and a selection of orders can also be invoiced together as a batch. | |||
Granular permissions |
KahunaCart: In the box | OFFLINE.Mall: In the box | Shopaholic: Partial |
| Admin permissions are split into nine separate areas rather than one all or nothing role. Running sales promotions and holding payment settings are kept as separate permissions, for example, and processing a refund is separate from managing orders generally, since these are often different people's jobs. | |||
Demo / read-only mode |
KahunaCart: In the box | OFFLINE.Mall: Not available | Shopaholic: Not available |
| A read only mode blocks every change to the shop through the admin, including for the site's own super admins, which makes it safe to run a public demo store. It only affects the admin area. The storefront, checkout, and background processes carry on working normally. | |||
Reset test data while keeping configuration |
KahunaCart: In the box | OFFLINE.Mall: In the box | Shopaholic: Not available |
| One command wipes the test orders and customers while keeping the catalogue, tax, shipping, coupons and every setting, which is exactly what most shops want right after launch. It prints every table it is about to empty with a row count and asks first, and it refuses on a store running as a public demo. | |||
Installation doctor / status command |
KahunaCart: In the box | OFFLINE.Mall: In the box | Shopaholic: In the box |
| A single command reports on the health of your installation, including the database setup, pending updates, background job counts, and what every connected payment provider actually supports. It is a quick way to answer questions like why a refund button is missing, without digging through settings. | |||
Template-override drift reporting |
KahunaCart: In the box | OFFLINE.Mall: Not available | Shopaholic: Not available |
| Every shipped template carries a version stamp, and the admin's Health screen and a CLI command list which of your theme's customised templates have fallen behind the version KahunaCart ships, and by how much. Overriding a template can otherwise silently lose features such as add-on panels; now there is a warning when it happens. | |||
Comparison-period reporting with published metric definitions |
KahunaCart: In the box | OFFLINE.Mall: Not available | Shopaholic: Not available |
| Any report can be set against the period before it or against the same period a year earlier, worked out in your store's own timezone so a day is the day your shop had rather than the day UTC had. Every figure on the screen carries a written definition you can read and argue with, so revenue means one stated thing rather than whatever the code happened to add up. Filters match all of your conditions or any of them, results break down by whichever dimension you pick, and the whole state of a report lives in the address bar, so a view you have set up is a link you can send to somebody. | |||
Cost of goods and gross margin |
KahunaCart: In the box | OFFLINE.Mall: Not available | Shopaholic: Not available |
| A product can carry what it cost you, and the cost of each line is frozen onto the order the same way its price is, so last year's margin is still last year's margin after you renegotiate with a supplier. Cost of goods, gross margin and margin rate then read as ordinary report figures beside revenue. The written definition is honest about the catch: if only some of your catalogue carries a cost, the margin reads higher than it really is, and the definition on the screen tells you so rather than leaving you to find out later. | |||
Import, export & migration 3 features
| Feature | KahunaCart | Mall | Shopaholic |
|---|---|---|---|
Product import |
KahunaCart: In the box | OFFLINE.Mall: Not available | Shopaholic: In the box |
| An admin tool imports products, variants and categories from a CSV file. It recognises common export formats from other shop platforms, lets you save your column mapping for reuse, can run as a test without saving anything, can resume an import that was interrupted, and gives you a clear error file matching your own file's line numbers if something goes wrong. | |||
Order or customer import |
KahunaCart: In the box | OFFLINE.Mall: Not available | Shopaholic: Not available |
| The same import tool also handles customers and orders. Two things to know: an imported order is marked as completed unless the file says otherwise, and an imported order keeps the total given in the file as correct, even though taxes, shipping and discounts are not individually recreated from the file's line items. | |||
Whole-store configuration export/import |
KahunaCart: In the box | OFFLINE.Mall: Not available | Shopaholic: Not available |
| One command writes your whole store configuration out as a file and another reads it back, with a dry run first that tells you exactly what would change and writes nothing. Six sections are covered, so tax rules, shipping rules, payment methods and email settings all travel together with the rest. Secrets such as API keys leave as a named reference to an environment variable rather than as the value itself, so the file is safe to keep alongside your site in version control. Setting up a second copy of a configured shop is an export and an import rather than an afternoon of retyping. | |||
The third option
Another October option: Meloncart
A newer product outside this page's scored comparison.
Meloncart is a closed-source commerce plugin for October CMS, launched in 2026 by one of the CMS's co-founders. It requires a recent October version.
It is mentioned here as another option for October projects, but has not received the full feature assessment used for the matrix. Its release does not change the scores for Mall or Shopaholic.
The other direction
Where Mall and Shopaholic offer more
Mall supports multiple currencies and configurable payment-status transitions, including rejection of invalid changes with a message. KahunaCart has configurable status labels and behavior but no equivalent transition-rule system.
Mall can export wishlists as PDFs. Its commerce package is free and open source, while KahunaCart requires a site license.
Shopaholic offers scheduled supplier catalog imports, multiple shops in one installation and a broader library of predefined promotions. KahunaCart provides CSV import previews, saved mappings and resumable imports, but the supplier workflow still needs separate automation.
KahunaCart supports customer-group prices and quantity tiers, so group pricing is not a reason on its own to prefer the October options. Compare the remaining requirements against the complete extension cost.
What it costs
License and ongoing costs
Mall is free, while Shopaholic combines a free core with paid add-ons. Unconfirmed prices are marked in the table. KahunaCart Bookings and Rentals are optional paid add-ons; the base license totals exclude them.
| KahunaCart | OFFLINE.Mall | Shopaholic | |
|---|---|---|---|
| CMS licence | $0 (Grav) | October CMS, not priced in our sources | October CMS, not priced in our sources |
| Commerce, year 1 | $249 | $0, MIT | $0 core, GPL |
| A store with filtering, properties, coupons, reviews and a wishlist | Included | Included | About $240 across 17 paid plugin installs |
| Product reviews | Included, badge computed from paid orders | Included | $9.99 add-on |
| Year 2 | $99, optional | $0 | $0, perpetual licences |
| Manual orders | Included | Not available | Included |
| Real refunds | Provider API, partial, asynchronous, with a credit note PDF | Not available. Refunded is a status you set | Partial, through Omnipay |
| Admin API | REST plus 377 MCP tools | None | Community plugin only |
| Catalog index | De-normalised index behind every listing and facet count | Fast indexed catalog, published benchmarks | None |
| Project model | Commercial product with optional renewals | Free plugin by OFFLINE | Free core by LOVATA; paid add-ons |
Prices recorded in August 2026. Hosting and development exclusions are noted in the table. October CMS licensing was not confirmed in this assessment. The comparison uses KahunaCart's list price. References: octobercms.com/plugin/offline-mall, marketplace listing, KahunaCart store.
Migrating
Planning a move from October CMS
From Mall
Map products, variants, categories and properties to KahunaCart. Resolve inherited variant values explicitly and check properties that do not fit its attribute types. Repeated category names may require renaming.
Choose the base currency before importing prices. Prices in other currencies can be imported in price_EUR-style columns once the store lists those currencies, but data from another platform needs mapping first. Export orders to CSV and map them for the importer, retaining source records for history that does not transfer.
From Shopaholic
Map catalog entries and sellable items to products and variants. Review the separate price fields and tax settings to determine the price to import.
Map supported properties to attributes and business prices to customer groups and price lists. As with Mall, multiple currencies require a decision about which currencies the KahunaCart store sells in.
Questions
Common questions
Is OFFLINE.Mall maintained?
The assessment records active maintenance and responsive issue handling, with much of the work concentrated in one lead developer. Consider both the release history and support arrangements for your store.
What should I check about Shopaholic maintenance?
Check the release and support status of the core and each add-on your store needs. The comparison records limited recent core development, while the marketplace has published releases. A modular store depends on the complete set of packages.
Is a Shopaholic store free?
The core is free. Filtering, search, tags, wishlists and other features can require paid add-ons. Use the complete package list to estimate cost.
What is Meloncart?
A closed-source October commerce plugin launched in 2026 by one of the CMS's co-founders. It is mentioned on this page but is not part of the scored comparison.
Can I define KahunaCart order statuses?
Yes. Add, rename, reorder and disable statuses, and configure their payment, stock and final-state behavior. Built-in or in-use statuses cannot be deleted. Mall also provides payment-transition rules that KahunaCart does not yet match.
Can I migrate from Mall?
Export the catalog and orders to CSV and create a saved mapping in the importer. Review inherited variant fields, category names and currency selection. Multi-currency records need mapping, and the importer reads `price_EUR`-style columns for each currency the store sells in.
Keep comparing
Related comparisons
Explore KahunaCart before you decide.
Review the pricing and documentation against your store's requirements.
Buy in the store