Skip to content
Coming soon. KahunaCart is in final testing. Join the list and be first to know. Join the list

Coming soon

Ecommerce built into Grav CMS.

Sell products and manage your website in one place. KahunaCart adds a catalog, checkout, payments, shipping, digital downloads and customer accounts to Grav, with a complete store admin. Built by the author of Grav, it runs on your own hosting with a one-time license.

15,600+ automated tests · 13 payment providers · 204 ms p95 at 250,000 orders · $249 once

Two ways to build a shop online

Your website and store, managed together

Build the website your business needs, with a shop as part of it. Grav handles the content, and KahunaCart handles commerce. See how they work together.

A hosted ecommerce platform The service hosts your store

The service manages hosting. Its content tools, integrations and subscription plan determine how you build and extend the site.

Grav with KahunaCart You host your site and store

Grav manages your pages, blog and documentation. KahunaCart adds the catalog, checkout and orders, using the same site theme and admin.

One admin Edit a page, publish a blog post or refund an order from Grav's admin.
One theme Style product pages and checkout alongside the rest of your website using Twig templates.
Staff permissions Give editors and store staff the access they need through Grav's permissions system.
Version-controlled files Keep content, templates and configuration in Git and deploy them together.

The whole store

The tools to run your store

Manage products, payments, shipping and orders with KahunaCart. Browse the feature groups below, or visit the features page for more detail and screenshots.

Included with KahunaCart unless marked as an add-on.

Catalog

Organize products and help customers find what they need.

  • Create variants with their own prices, SKUs and stock levels.
  • Use attributes such as material or wattage for specifications and product filters.
  • Organize categories, recommend related products and offer paid product options.
  • Collect moderated reviews and let customers create shareable wishlists.
  • Include products in search, sitemaps and social sharing previews.
  • Import and export products with CSV, including WooCommerce column mappings.

Pricing and promotions

Set prices and promotions for different customers and purchases.

  • Offer percentage or fixed-amount coupons.
  • Schedule sales, buy-one-get-one offers and free-item promotions.
  • Set customer-group prices and quantity discounts.
  • Accept gift cards and store credit at checkout.
  • Calculate prices with currency-aware decimal precision.

Checkout and payments

Offer a choice of payment providers through one checkout.

  • Run multiple payment providers and choose which methods customers see.
  • Authorize payments and capture or void them later with supported providers.
  • Offer saved cards and digital wallets through Stripe.
  • Use a merchant-of-record provider to handle tax collection and remittance for supported sales.
  • Issue refunds and track their status as providers process them.
  • Configure address fields by country and send abandoned-cart reminders.

Tax and shipping

Configure tax and delivery options for the regions you sell to.

  • Start with EU VAT presets for all 27 member states.
  • Set tax zones, product tax classes and tax-inclusive prices.
  • Calculate shipping by item count, weight, order value or a custom cost formula.
  • Apply shipping surcharges and free-shipping thresholds.
  • Offer local pickup and record shipments across multiple parcels.
  • Extend shipping through the carrier integration API; live carrier rates are not included in core.

Digital, licenses and subscriptions

Sell downloads, and add licensing or recurring plans when you need them.

  • Deliver files through protected download links.
  • Publish versioned releases with release notes and files.
  • Sell downloads and physical products together in one order.
  • License Keys add-on: issue keys, limit activations and control update access.
  • Subscriptions add-on: offer recurring plans with automatic payments or renewal invoices. Subscription purchases use a separate checkout.

Customers and languages

Give customers an account and offer your catalog in multiple languages.

  • Offer account sign-in links, two-factor authentication and saved addresses.
  • Assign customers to groups with their own prices.
  • Translate catalog fields with fallbacks for missing translations.
  • Keep receipts and follow-up emails in the language used for the order.
  • Include translated storefront pages in language-specific sitemaps.
  • Customize transactional emails for your store.

Orders and operations

Manage orders, fulfillment and customer service from the admin.

  • Track order, payment and fulfillment status separately, with a change history.
  • Create manual orders using the same pricing rules as checkout.
  • Process refunds and generate PDF invoices.
  • Review sales reports and low-stock alerts.
  • Send Slack, Discord or webhook notifications and check delivery results.
  • Run store health checks in the admin or command line.

Developers and AI

Connect your store to other tools and build custom integrations.

  • Use the admin REST API for orders, products, customers, reports and settings.
  • Connect an AI assistant through the MCP server, with store permissions controlling access.
  • Extend store behavior with events and add-on integrations.
  • Send signed webhooks and review delivery attempts.
  • Add storefront components with Twig functions and automate tasks with CLI commands.
  • Use the documentation to build themes, providers and add-ons.

Performance

Catalog requests at 204 ms in our benchmark

We tested a store with 5,000 products, 25,000 customers and 250,000 orders. On SQLite, 95% of catalog requests completed within 204 ms. The chart compares the same workload across three databases.

Cached content pagesGrav stores pages and posts as files and serves them through its page cache.
Database-backed commerceProducts, orders and customers use SQLite, MySQL, MariaDB or PostgreSQL.
Published test resultsThe benchmarks include the hardware, workload, scripts and earlier results so you can assess the figures and run your own tests.
Catalog page, 95th percentile latency After the storefront performance pass
SQLite 204 ms
MariaDB 332 ms
PostgreSQL 512 ms
0200400600
The build before, same store, same server
SQLite 7,394 msnow 204
MariaDB 20,904 msnow 332
PostgreSQL 2,093 msnow 512
07,00014,00021,000

One 2 vCPU server, 3.8 GB of memory, load generated from a different machine. Grav page cache on, as a real store runs. Cart, checkout, receipt and account pages are never cached, so those figures are always the full path.

The foundation

Built by the author of the CMS it runs on

KahunaCart is built by Andy Miller, the author of Grav, and the team at Trilby Media. It uses Grav's admin, theme system and plugin APIs to bring your shop, blog, documentation and landing pages into one site. Learn more about the platform.

Content and commerceGrav serves file-based content through its page cache. KahunaCart uses a database for products, orders and customers.
Extend your siteUse Grav plugins and themes, or add custom functionality through the same plugin API KahunaCart uses.
Customize the storefrontOverride Twig templates or add product grids and buy buttons to pages in your existing theme.

How the site fits together

Content and commerce share a theme and admin. Grav stores content in files; KahunaCart stores commerce records in a database.

10+
years in production
10,000s
of sites powered
100s
free plugins & themes
MIT
open source core
Learn more at getgrav.org →

Run the shop

Manage day-to-day store operations

Products, orders, customers, promotions and reports are all available in Grav's Admin Next. Review a payment, record a shipment or help a customer from the same admin you use for your website.

  • Track order, payment and fulfillment status with a full history of changes.
  • Create manual orders using your store's pricing rules.
  • Review reports, low-stock alerts, health checks and webhook deliveries.
  • Find configuration options with the settings search.
  • Preview CSV imports before applying them, and export store data.
  • Manage License Keys, Subscriptions and Newsletters in the same navigation when installed.

For developers

Build integrations and custom storefronts

Use the storefront API for cart and checkout interactions, and the authenticated admin API to manage store data. Events, webhooks and MCP tools let you connect other applications and automate store tasks.

  • Storefront JSON API: manage carts, coupons, shipping quotes and checkout from JavaScript.
  • Admin REST API: access orders, products, customers, reports and settings with token authentication and permissions.
  • MCP tools: let an AI assistant work with store data using the admin API.
  • Events and webhooks: respond to store activity and track webhook delivery attempts.
  • Twig functions: add product grids, buy buttons and cart components to your theme.
  • CLI commands: automate imports, exports, background jobs and health checks.
  • Extension APIs: build payment providers and add-ons using documented interfaces.
shop.example.com
# Storefront API: public, the shopper's own session, no tokencurl -s -X POST https://example.com/shop/api/cart/items \
    -H "Content-Type: application/json" -d '{"variant_id": 7, "qty": 2}'{ "id": 412, "currency": "USD", "item_count": 2,  "items": [ { "id": 981, "variant_id": 7, "sku": "KS-TOWEL-BLU", "qty": 2,      "unit_price_minor": 2900, "total_minor": 5800,      "total_formatted": "$58.00" } ],  "totals": { "total_minor": 5800, "total_formatted": "$58.00" } }# Admin API: every back-office screen, behind a token and permissionscurl -s -H "X-API-Token: $KC_TOKEN" \
    "https://example.com/api/v1/kahunacart/orders?status=paid&per_page=2"{ "data": { "orders": [    { "number": "1042", "total_minor": 18600, "payment_status": "paid" },    { "number": "1041", "total_minor": 6490, "payment_status": "paid" }  ], "total": 41283, "page": 1, "per_page": 2 } }bin/plugin kahunacart checkOK  database       SQLite 3.45, strict mode on, 0 pending migrationsOK  providers      Stripe live, Polar live, credentials validOK  webhooks       endpoint reachable, 0 failed deliveries in 24 h10 checks: 10 passed, 0 warnings, 0 failed
            

Payments

Choose the payment providers that suit your store

Offer several providers at checkout or change providers as your needs change. Each connects through a plugin and works with your existing catalog.

Bundled with every license

Ready the day you install.

Stripe Polar MoR PayPal Offline / bank transfer Test provider free

One-time add-ons, $49–129

Coming soon. Each is built, and released as soon as someone asks for it.

Mollie Paddle MoR Lemon Squeezy MoR Square SumUp Checkout.com Shopify Chargebee Invoice Ninja

MoR means merchant of record: the provider handles tax collection and remittance for supported sales. Refund status is tracked even when a provider confirms it later. Stripe and Polar also support catalog syncing. Payment details are collected by the provider, so card numbers do not pass through your server.

Try it right now

Explore the demo store

Visit Kahuna Supply Co. to try the storefront, customer accounts and admin. The demo includes shared sign-in details, so you can explore without creating an account.

Place a test order Complete checkout using the test payment provider. You can review the receipt without making a real payment.
View a customer account Use the shared sign-in details to browse order history, saved addresses and downloads.
Explore the admin The read-only admin lets you inspect products, orders, customers and reports. Sign-in details are on the login page.
Open the demo store

The demo resets every hour.

Who it's for

For shop owners, developers and independent sellers

Shop owners

Manage products, orders and customer service from one admin. Choose your hosting and payment provider, with no transaction fee charged by KahunaCart.

Developers & agencies

Build client stores with Twig, YAML and documented APIs. Customize the theme and integrations, with a separate license for each site.

Makers & side projects

Sell downloads or merchandise alongside your blog and other content. Add ecommerce to your Grav site without managing a separate website.

Pricing

One purchase per site. Optional annual updates.

Buy KahunaCart once for your site, including the first year of updates and support. Renew after that if you want to keep receiving updates and support.

$249 one time, per site
includes a year of updates & support
  • Catalog, checkout, tax, shipping, digital delivery, customer accounts and admin.
  • Stripe, Polar, PayPal, offline payments and the test provider included.
  • Additional payment providers, License Keys, Subscriptions and Newsletters sold separately.
  • SQLite, MySQL, MariaDB or PostgreSQL.
  • No license limits on products, orders or customers.
  • No KahunaCart transaction fees.
Notify me at launch

After the first year

$99/year, optional

Renew for new versions, security fixes and compatibility updates. If you skip renewal, your installed version keeps working. You can renew later to update.

Updates include changes needed to support new payment-provider APIs.

Founders renew at half price for the life of the license.

Renewal is optional. Your installed version does not expire.

One site renewal covers all your add-ons. Purchase each add-on once. Your site's renewal includes updates for KahunaCart and every add-on you own.

Questions

Common questions

What happens if I do not renew?

Your installed version keeps working. Renewal provides access to new versions, including security fixes and compatibility updates. You can renew later, but an older version may need updating before you upgrade PHP or Grav.

Where is my store hosted?

KahunaCart runs on your hosting. Products, orders and customer records are stored in your database. You manage the server, backups and connected services.

Where do customers enter payment details?

Your payment provider collects card details through its checkout. KahunaCart manages the cart and order record without receiving card numbers.

What do I need to run it?

You need Grav 2.0 or later, PHP 8.3 or later with PDO, and the required API and Email plugins. SQLite is the default database; MySQL, MariaDB and PostgreSQL are also supported. The scheduler processes emails and other background jobs. See the setup guide.

What does early access include?

A discount code worth 50% off your site license, and a founders renewal rate of half price for the life of the license. We use feedback from early stores to improve the product. Join the launch list and we will send you the code when it opens.

Can I sell subscriptions or software licenses?

Yes, with the Subscriptions and License Keys add-ons. Subscriptions supports automatic payments or emailed renewal invoices. License Keys issues keys and manages activations, expiry and update access. Both are one-time purchases with updates covered by your site renewal.

How was performance measured?

We tested 5,000 products, 25,000 customers and 250,000 orders on a 2 vCPU server. Catalog requests had a 95th-percentile latency of 204 ms on SQLite, 332 ms on MariaDB and 512 ms on PostgreSQL. Grav's page cache was enabled; checkout was uncached. See the benchmarks for the workload, hardware and scripts.

Why use KahunaCart with Grav?

It lets you manage your content and store on the same site, with a shared theme and admin. You choose your hosting, control the files and database, and can extend the store through templates and APIs.

Can I use my existing Grav theme?

Yes. Override the supplied storefront templates or use Twig functions to add product grids and buy buttons to your pages. The free Kahuna theme provides a ready-made storefront design.

Be ready for launch.

Join the launch list and save 50% on your purchase and on your yearly renewal rate.

Notify me at launch

Coming soon

Get the launch announcement

KahunaCart is in final testing. Sign up for the early access announcement and occasional release updates.

We do not share your address. Unsubscribe at any time.