Skip to content

Compare

KahunaCart vs Medusa

Medusa is a headless Node commerce framework with a separate Next.js storefront starter. KahunaCart adds a storefront and store admin to Grav on PHP hosting. Compare their hosting needs, order workflows and development requirements. Documentation verified 2 September 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 Medusa when

  • You need exchanges, claims and extensive order-change workflows.
  • You need multiple warehouses or sales channels.
  • You are building a custom storefront that uses return APIs.
  • You need workflow rollback across multiple steps and connected systems.

Choose KahunaCart when

  • You run one store alongside a Grav content site on PHP hosting.
  • You want storefront pages, order emails and invoices supplied together.
  • You want store staff to configure product attributes and payment methods.
  • Your return requirements fit merchant-managed receipt, damage, restocking and refunds.

Headline differences

Store architecture and order workflows

Storefront deployment

Medusa supplies a Next.js starter with product, cart and checkout flows. Your team customizes and deploys it separately from the commerce server. KahunaCart's supplied storefront runs within Grav and includes a theme, customer accounts and order pages.

Hosting

Medusa requires Node and PostgreSQL. KahunaCart requires compatible PHP and Grav hosting, with SQLite as the default database. Include background jobs, backups and deployment work in either setup.

Custom development

Medusa's framework provides extensive customization for a development team. KahunaCart makes common product attributes and store settings editable without implementing new framework components.

Cost

Medusa's core is free. Hosting, development and maintenance determine the project cost, whether self-hosted or using Medusa Cloud. KahunaCart adds a site license to its hosting and implementation costs. The pricing table separates the published figures.

After the sale

Both products handle order changes and customer returns, from the request to restocking only the undamaged items. Medusa also supports exchanges, claims and multi-warehouse inventory. See the matrix for the assessed support.

Bookings and rentals

KahunaCart offers installed add-ons for scheduled services and nightly stays: Bookings supplies appointments and classes, and Rentals extends it with accommodation rules and seasonal rates. Both are paid, and Rentals requires Bookings.

Medusa publishes a product rentals tutorial for building rental functionality. Budget it as implementation work rather than an included booking extension. Inventory reservations and dated rental availability are separate requirements.

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
Platform, licensing & pricing 6 features
Platform, licensing & pricing: KahunaCart compared with 1 other platforms
Feature KahunaCart Medusa
Open-source core KahunaCart: Not available Medusa: In the box
Perpetual licence, so the shop keeps working when updates lapse
KahunaCart: In the box Medusa: 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 Medusa: 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 Medusa: Not available
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 Medusa: 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 Medusa: 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.
Orders 14 features
Orders: KahunaCart compared with 1 other platforms
Feature KahunaCart Medusa
Sequential order numbers from an atomic sequence
KahunaCart: In the box Medusa: 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 Medusa: Unverified
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 Medusa: Partial
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 Medusa: 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 Medusa: In the box
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 Medusa: 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 Medusa: Official add-on
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 Medusa: Third-party
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 Medusa: 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 Medusa: 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 Medusa: Unverified
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 Medusa: 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 Medusa: In the box
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 Medusa: 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
Refunds & returns: KahunaCart compared with 1 other platforms
Feature KahunaCart Medusa
Refunds issued through the provider API
KahunaCart: In the box Medusa: In the box
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 Medusa: 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 Medusa: In the box
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 Medusa: In the box
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 Medusa: In the box
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 Medusa: In the box
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 Medusa: In the box
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
Bookings & rentals: KahunaCart compared with 1 other platforms
Feature KahunaCart Medusa
Appointment booking with available time slots
KahunaCart: Official add-on Medusa: 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 Medusa: 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 Medusa: 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 Medusa: 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 Medusa: 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 Medusa: 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
Developer extensibility: KahunaCart compared with 1 other platforms
Feature KahunaCart Medusa
Documented event/hook API
KahunaCart: In the box Medusa: In the box
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 Medusa: In the box
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 Medusa: Unverified
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 Medusa: In the box
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 Medusa: In the box
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 Medusa: In the box
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 Medusa: 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.
Storefront & theme 6 features
Storefront & theme: KahunaCart compared with 1 other platforms
Feature KahunaCart Medusa
Storefront runs without a build step
KahunaCart: In the box Medusa: Not available
The storefront runs on hand written CSS and plain JavaScript, with no framework, no build step and no external dependencies to install or maintain. The included theme is intentionally lightweight.
Documented CSS custom-property theming contract
KahunaCart: In the box Medusa: Not available
Theming works through a documented set of style hooks with sensible fallbacks, so a theme can restyle the shop by adjusting colours in one place rather than overriding lots of specific styles.
Merchandised, config-driven shop landing page
KahunaCart: In the box Medusa: Not available
The shop landing page is built from configurable blocks, each showing featured products, a tag, a category, specific products in a chosen order, or whatever is left over, in a hero, grid or compact layout. Up to twenty blocks can be combined, each product appears only once across the page even if it would match more than one block, and empty blocks are simply skipped.
Live search / instant filters that degrade without JS
KahunaCart: In the box Medusa: Not available
Live search and instant filtering update just the relevant part of the page instantly when JavaScript is available, and fall back to a normal page reload when it is not, so the storefront always works either way.
First-party storefront theme
KahunaCart: In the box Medusa: Not available
KahunaCart ships its own free storefront theme, which has no hard dependency on KahunaCart being installed, so it works as a general purpose theme too. It includes no demo content, and is tested to make sure shop links always point to real pages rather than broken placeholders.
SEO structured data emitted by the commerce layer
KahunaCart: In the box Medusa: Not available
The shop automatically outputs structured data that search engines use to understand products, including price, availability, ratings context, breadcrumbs, and images for social sharing previews. Any theme benefits from this automatically without extra setup.

The other direction

Where Medusa offers more

Medusa supports exchanges, claims and a broader set of order-change workflows. Its return APIs can serve a custom storefront; the project supplies the customer interface and label integration. KahunaCart covers merchant-side receipt, damage, restocking and refunds.

Medusa also supports multiple warehouses, currencies and sales channels. KahunaCart sells in more than one currency too, with prices you type or prices worked out from the base price at the day's exchange rate, but it has one stock count per variant and no sales channels. Both apply quantity tiers, but Medusa supports more pricing contexts.

Medusa's workflow system provides rollback across multi-step processes and integrations. KahunaCart provides compensating actions at selected lifecycle points rather than across every workflow.

Promotion spending limits and per-customer controls are additional differences in this comparison. KahunaCart's gift cards and store credit are included, but credit must cover the full order rather than being combined with a card payment.

What it costs

License and ongoing costs

Compare license and hosting costs alongside the development work each approach requires. Unpriced items remain unspecified. KahunaCart Bookings and Rentals are optional paid add-ons; the base license totals exclude them.

KahunaCart Medusa
Commerce licence, year 1 $249 $0, MIT
Year 2 $99, optional $0
Runtime Any PHP host, SQLite by default Node and Postgres
Managed hosting Not offered. Use any host Medusa Cloud, around $29 to $299/mo plus usage
Self-hosted operations Ordinary PHP hosting Node runtime, Postgres, background processes
Storefront Included, 19 templates and an MIT theme Build it and deploy it separately
Transactional emails 16, included and translated Bring your own email service
PDF invoices Included Not included by default
Payment providers 14: Stripe, PayPal, Polar and offline included; Moneris, Mollie, Square, Paddle, Lemon Squeezy and SumUp are one-time add-ons; four more coming soon Stripe built in, others via extra integrations
Post-purchase workflow Order changes, customer returns, refunds and credit notes Order changes, returns, exchanges, claims

Prices recorded in August 2026. KahunaCart hosting and storefront development are excluded; Medusa hosting is shown separately. The comparison uses KahunaCart's list price. References: medusajs.com/pricing, KahunaCart store.

Migrating

Planning a move from Medusa

Products, variants and options map closely to KahunaCart. Quantity prices can become price tiers. Prices tied to currencies, regions or sales channels require an explicit choice because KahunaCart does not support all those contexts.

Map categories and tags directly. Decide how to represent collections and product types, such as by using tags. Consolidate warehouse inventory into the stock count required for each variant.

Export orders to CSV and create a custom column mapping. Current order items can transfer, but Medusa's full change history does not map to KahunaCart's history model. Retain the source records for that detail.

Questions

Common questions

When is headless commerce useful?

It can suit several storefronts, a custom customer experience or a team that wants to develop the frontend independently. Include the work of maintaining the storefront and commerce server separately in the decision.

Can Medusa run on PHP shared hosting?

Medusa needs Node and PostgreSQL, so PHP-only hosting is not sufficient. KahunaCart requires compatible PHP and Grav hosting, plus its scheduler and plugin setup.

Is Medusa free?

The core is free and open source. Hosting, development and maintenance still have costs, whether you self-host or use Medusa Cloud. Compare those with KahunaCart's license, hosting and implementation costs.

What does KahunaCart include?

A Grav storefront, order emails, invoices, configurable payment methods and merchant-side order and return tools. Medusa provides a separate storefront starter and broader support for exchanges, claims, multiple warehouses and custom return APIs.

Explore KahunaCart before you decide.

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

Buy in the store