maximus Posted June 30 Posted June 30 Hi everyone, I’m happy to share the first public testing release of Mercato, a ProcessWire-native commerce toolkit. Mercato is not just a “shop template” or a simple cart module. The goal is to provide a flexible commerce layer that works the ProcessWire way: pages, templates, fields, permissions, hooks, and site-level customization. The basic idea is: Your website should not have to become “the shop system”. The shop should become part of your ProcessWire site. Mercato can be used as a full storefront, but it is also designed for custom ProcessWire websites that need commerce features without being forced into a rigid shop structure. What Mercato includes Products as ProcessWire pages Cart and checkout Orders stored as ProcessWire pages Stripe, Mollie, PayPal, bank transfer, and demo payment support Discounts and coupons Inventory handling Preorder and backorder support Digital products and downloads Fulfilment: carrier delivery, store pickup, local delivery Customer records Abandoned checkout recovery tools Refunds and payment operation tracking Webhook/event logs Reports and CSV exports Launch-readiness checklist Public order status and receipt pages Headless/read API surfaces A complete installable demo storefront Demo storefront A fresh install creates a real demo storefront called Arlberg Ceramics. It is not just placeholder content. The demo includes: physical products digital products gift cards product collections product images discounts low-stock products sold-out states preorder/backorder examples checkout policy pages order confirmation pages delivery, pickup, and local delivery scenarios The demo is meant to help developers test the full commerce flow immediately after installation. Existing sites Mercato is designed to add commerce functionality to an existing ProcessWire site without taking over the whole website. It creates Mercato-specific fields, templates, pages, permissions, products, collections, and order storage. It does not remove existing site content. Bundled storefront template files are copied into /site/templates/ only when the target files are missing. Existing template files are not replaced unless template overwrite is explicitly enabled in the module settings. That said, this is a commerce module and it changes the site schema, so please test on a staging copy first and make a backup before installing it on an existing/production site. Current status This is the first public release and should be treated as a testing release. I have tested the installer, demo storefront, checkout flow, admin screens, and basic payment workflows, but I would really appreciate feedback from real ProcessWire projects and different hosting setups. Things I’m especially interested in: installation issues gateway setup issues checkout edge cases admin UX feedback missing hooks or extension points template customization feedback real-world commerce scenarios I have not covered yet Repository GitHub: https://github.com/mxmsmnv/Mercato Requirements ProcessWire 3.0.200+ PHP 8.1+ Final note This is a big personal milestone for me. I have wanted ProcessWire to have a serious, modern commerce foundation for a long time. Mercato is my attempt to build that foundation in a way that respects how ProcessWire developers actually build websites. Feedback, testing, issues, and ideas are very welcome. 12 6
Krlos Posted June 30 Posted June 30 Hey @maximus, great work as always, I’m definitely going to give this module a try! Thanks! 1
Peter Knight Posted July 1 Posted July 1 11 hours ago, maximus said: This is a big personal milestone for me. I have wanted ProcessWire to have a serious, modern commerce foundation for a long time. Congrats Maximus. Always a great feeling to solve your own problems. I didn't see a mention of license keys, but is that something you are considering supporting for digital downloads?
maximus Posted July 1 Author Posted July 1 Thanks Peter. Yes, that is a very good point. Mercato currently supports digital downloads, download links, limits, expiry, and order-linked access, but license key management is not included in the first public testing release yet. It is definitely something I am considering for digital products, especially for software/plugins/templates where the download itself is only one part of the purchase. The shape I have in mind is something like: generate or assign license keys after payment store license keys against the order/customer/product show them on the public receipt/order status page expose hooks so developers can provide their own key generator optionally add a small validation API later I would like to keep this flexible rather than build it around one licensing model only. So short answer: not in 1.0.0 yet, but yes, it fits the direction of Mercato and I would like to support it. 3
PWaddict Posted July 1 Posted July 1 Stunning work @maximus How the preorder works in digital products? Is the buyer receives automatically an email with a download link during the release date of the product? Also, can we create and integrate more payment methods?
Jonathan Lahijani Posted July 3 Posted July 3 I just gave this a quick spin. For context, I've developed a couple complex ecommerce sites with ProcessWire, going back to 2014. I've also experimented with Padloper. I suppose what I find interesting is how data is stored (ie what fields are used). My approach has been to use repeaters for things like the line items, even addresses. With Padloper, I believe Kongondo used entirely custom fieldtypes/inputfields. I see that with Mercato it's using textarea with JSON in it for things like the billing address and cart items. Were there specific reasons for that approach? 2
Saugatdai Posted July 8 Posted July 8 (edited) I was in need of an e-commerce solution. I heard about the ProcessWireCommerce Module (Padloper), RockCommerce. When I was searching for ProcessWire e-commerce, this module accidentally came into my search; however, I didn't pay much attention, as I knew Padloper has been in the community for a long time. I tried to install ProcessWireComemrce; the installation failed repeatedly (not sure why, but I tried several times). Similarly, I went to RockCommerce; there is a sudden disappearance of all the docs and videos from its resource. And all of a sudden, I remembered something unheard appeared in my search and I went back to this module, downloaded it, successfully installed and I am viewing it. I am finding it very comfortable to understand the codes, setups and other things, and I am trying my best to understand it as a new developer. And I realised the amount of effort it took to make it available for us as an open-source solution. I personally thank you for it, and I will be trying to implement this module in this project (as a new developer and first e-commerce project, second ProcessWire project). Thank you Maximus!! Edited July 8 by Saugatdai Minor Correction 2
maximus Posted July 8 Author Posted July 8 On 7/3/2026 at 6:31 PM, Jonathan Lahijani said: Were there specific reasons for that approach? Yeah, that was a deliberate call, not just "didn't think about it." Basically once an order's placed, the cart items and address are frozen — a snapshot of what was bought and where it's going, shouldn't change even if the product's price or the customer's saved address changes later. JSON fits that pretty naturally, write it once, read it back whole. Repeaters (or a custom fieldtype like Kongondo did for Padloper) mean real pages/rows per line item, which is fine when you actually need to query or edit that data individually, but for something that gets written once at checkout and never touched again, it felt like paying for relational overhead I didn't need. JSON also meant I could keep adding fields to a line item (sku, discount, variant options, whatever) without touching the DB schema every time, which mattered a lot while I was still iterating on the checkout flow. Honestly the bigger reason is just that I'd already used this exact pattern (JSON in a plain textarea for cart items, delivery info, tax stuff) on a real production shop I built and run, with actual order volume — so it wasn't theoretical, just carried over something that already worked. Products themselves are regular pages with regular fields though, that part's not JSON — it's really just the order-snapshot stuff (items, addresses) where I went this route. On 7/1/2026 at 10:20 AM, PWaddict said: Stunning work @maximus How the preorder works in digital products? Is the buyer receives automatically an email with a download link during the release date of the product? Also, can we create and integrate more payment methods? Thanks! Preorder right now is really just a stock policy — it lets you sell before you have stock, that's it. For digital products the download just unlocks the moment payment goes through, there's no "wait until release date then email" logic built in yet. Honestly hadn't thought about that angle, it's a solid idea, might add it later. And yeah, payment methods are pluggable — you write a gateway class implementing one interface (basically just initializePayment + completePayment), everything else has defaults. So adding something beyond Stripe/Mollie/PayPal/bank transfer is pretty straightforward. 34 minutes ago, Saugatdai said: I was in need of an e-commerce solution. I heard about the ProcessWireCommerce Module (Padloper), RockCommerce. When I was searching for ProcessWire e-commerce, this module accidentally came into my search; however, I didn't pay much attention, as I knew Padloper has been in the community for a long time. I tried to install ProcessWireComemrce; the installation failed repeatedly (not sure why, but I tried several times). Similarly, I went to RockCommerce; there is a sudden disappearance of all the docs and videos from its resource. And all of a sudden, I remembered something unheard appeared in my search and I went back to this module, downloaded it, successfully installed and I am viewing it. I am finding it very comfortable to understand the codes, setups and other things, and I am trying my best to understand it as a new developer. And I realised the amount of effort it took to make it available for us as an open-source solution. I personally thank you for it, and I will be trying to implement this module in this project (as a new developer and first e-commerce project, second ProcessWire project). Thank you Maximus!! Ha, thanks for the detailed story 🙂 Sorry the other two gave you trouble, that's rough when you're just trying to get started. Really glad the code made sense to you — that was kind of the whole point, wanted it to be something people can actually open up and understand instead of a black box. Good luck with the project, and if you get stuck on anything just post here, happy to help. 3 1
HMCB Posted July 9 Posted July 9 (edited) This is crazy. I was just looking for a cart and pretty much figured nothing was available in PW world except for the Snipcart-integration module. This is a real blessing. I have an upcoming project that should land in about 10 days. I’d love to use this because the client has mostly all digital products (PDF downloads) and the few tangible books she does sell are sold through Barnes & Noble or Bookbaby, so outside of PW. Do you think this module will be rock steady in about a month when the real work would begin with my project? Also, the community needs a shopping/cart module. Put up some sort of donation for your efforts if you get to the point you need funds to get it to 1.0. Edited July 11 by HMCB 2
HMCB Posted July 14 Posted July 14 @maximus Is the shipping module for this in place? If so, what methods do you provide (flat rate, based on weight/volume, etc?) Just had an agency reach out to me about a small shopping/cart needs and this might be perfect.
maximus Posted July 16 Author Posted July 16 Thanks! Mercato does have a built-in shipping and fulfilment layer, although it does not currently integrate directly with shipping carriers. For carrier delivery, shipping is currently configured as a flat amount per product line. It also supports a free-shipping threshold and free-shipping discounts. Local delivery can have its own flat fee, minimum order amount and postal-code restrictions. Store pickup, multiple pickup locations, delivery-country restrictions, regions and delivery windows are also supported. What Mercato does not currently provide is automatic weight- or volume-based calculation, live carrier rates, label purchasing or direct integrations with services such as UPS, FedEx or DHL. Orders can be managed through the fulfilment queue with shipment statuses, tracking numbers, tracking URLs and customer notifications. Orders, line items and the fulfilment queue can also be exported as CSV for use with an external shipping system. The shipping calculation is hookable, so a project-specific carrier or rate integration can be added without modifying the core module. I experimented with providing a universal carrier integration, but provider verification requirements and major differences between countries make that difficult to ship and support globally. Provider-specific integrations may make more sense as separate modules later. And regarding support — thank you! GitHub Sponsors is already available here: https://github.com/sponsors/mxmsmnv 1
HMCB Posted July 17 Posted July 17 11 minutes ago, maximus said: Thanks! Mercato does have a built-in shipping and fulfilment layer, although it does not currently integrate directly with shipping carriers. For carrier delivery, shipping is currently configured as a flat amount per product line. It also supports a free-shipping threshold and free-shipping discounts. Local delivery can have its own flat fee, minimum order amount and postal-code restrictions. Store pickup, multiple pickup locations, delivery-country restrictions, regions and delivery windows are also supported. What Mercato does not currently provide is automatic weight- or volume-based calculation, live carrier rates, label purchasing or direct integrations with services such as UPS, FedEx or DHL. Orders can be managed through the fulfilment queue with shipment statuses, tracking numbers, tracking URLs and customer notifications. Orders, line items and the fulfilment queue can also be exported as CSV for use with an external shipping system. The shipping calculation is hookable, so a project-specific carrier or rate integration can be added without modifying the core module. I experimented with providing a universal carrier integration, but provider verification requirements and major differences between countries make that difficult to ship and support globally. Provider-specific integrations may make more sense as separate modules later. And regarding support — thank you! GitHub Sponsors is already available here: https://github.com/sponsors/mxmsmnv Understood. Thanks for the in-depth reply. I guess this would be my first short-term wish: automatic weight- or volume-based calculation.
maximus Posted July 17 Author Posted July 17 21 minutes ago, HMCB said: automatic weight- or volume-based calculation. Actually, I already have a separate module specifically for this: https://processwire.com/modules/fieldtype-dimensions/ It stores product length, width, height and weight with normalized units and volume calculation. I hadn’t originally connected it to Mercato’s shipping calculation, but it could provide a clean foundation for weight- and volume-based rates without tying Mercato to a particular carrier API. I’ll look into making it an optional Mercato integration. 1 1
HMCB Posted July 17 Posted July 17 47 minutes ago, maximus said: Actually, I already have a separate module specifically for this: https://processwire.com/modules/fieldtype-dimensions/ It stores product length, width, height and weight with normalized units and volume calculation. I hadn’t originally connected it to Mercato’s shipping calculation, but it could provide a clean foundation for weight- and volume-based rates without tying Mercato to a particular carrier API. I’ll look into making it an optional Mercato integration. Whoa! That would be awesome.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now