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.
The service manages hosting. Its content tools, integrations and subscription plan determine how you build and extend the site.
Grav manages your pages, blog and documentation. KahunaCart adds the catalog, checkout and orders, using the same site theme and admin.
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.
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.
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.
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.
Dashboard
Find a settingFor 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.
# 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}'curl -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"curl -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 checkbin/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.
One-time add-ons, $49–129
Coming soon. Each is built, and released as soon as someone asks for it.
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.
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.
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.
After the first year
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.
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 launchComing 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.