TitanCart Lite

Description

TitanCart is a complete storefront in one plugin: catalog, cart, checkout, orders, customers, shipping, tax and reporting. It runs on its own database tables and its own REST API rather than bending WordPress posts and meta into a shopping cart, which is why it stays fast as a catalog grows.

No license key is required. TitanCart Lite is free and GPL, and it never contacts a remote server.

What you get

  • Products — simple and variable products, categories, product filters, attributes, image galleries, digital downloads.
  • Cart and checkout — a real cart session, guest checkout, order notes.
  • Payments — Stripe, plus cash on delivery, bank transfer and cheque.
  • Shipping — flat rate, free shipping, and table-based rates with zones and conditions.
  • Tax — full tax classes, zones and rate rules. Not a stripped-down version; tax is a legal requirement, not an upsell.
  • Orders — order management, statuses, invoices, fulfilment and shipment tracking.
  • Customers — accounts, address book, order history, customer groups.
  • Reviews — product reviews with moderation.
  • Wishlists, sitemap, SEO output (meta tags, canonical URLs, Open Graph, JSON-LD product schema), GDPR tools and age verification.
  • Import and export — CSV import and export, including a WooCommerce migration tool.
  • Prism — a free companion storefront theme built for TitanCart, available as a free download from the TitanCart marketplace at market.titancart.io.

Built to be portable

TitanCart’s cart, checkout, order and pricing logic have no WordPress function calls inside them. WordPress is a thin hosting layer over a self-contained engine. That is an architectural choice, not marketing: it is what keeps the query count low and the upgrade path open.

Privacy and external services

TitanCart Lite makes no outbound connections of any kind on its own. It contains no license check, no update checker, no analytics, no telemetry, and no remote code installer. Updates arrive through WordPress.org like any other plugin.

A small number of features contact a third party only after you configure them, using credentials you supply. Each is documented in the External services section below. None is enabled by default.

Source code

The admin interface, admin/build/titancart-admin.js, is hand-written JavaScript and is itself the source code: there is no build step, no transpiler, no JSX, no bundler and no minification anywhere in this plugin. The directory name is historical. The same is true of every other JavaScript and CSS file shipped — what you read in the ZIP is exactly what the developer wrote and maintains.

External services

TitanCart Lite connects to the following external services. Every connection is off by default and happens only after the site owner configures the feature with their own credentials or explicitly triggers it with a click.

Stripe (payment processing)

  • What it is: card payment processing by Stripe, Inc.
  • What it is used for: charging customers at checkout when the store owner has created a Stripe payment method with their own API keys.
  • What data is sent, and when: when a Stripe method is enabled, the checkout page loads Stripe’s Stripe.js from js.stripe.com (a Stripe requirement for PCI compliance) and card details entered by the customer go directly from the customer’s browser to Stripe — they never touch the store’s server. The server then exchanges payment intents/confirmations with Stripe’s API (order amount, currency, and the payment reference).
  • Terms and privacy: Stripe Services Agreement, Stripe Privacy Policy.

Google reCAPTCHA (spam and abuse protection)

  • What it is: Google’s reCAPTCHA v2/v3 service.
  • What it is used for: protecting the login, registration, checkout, review and contact surfaces from bots — only if the store owner enables the reCAPTCHA feature and supplies their own site key and secret.
  • What data is sent, and when: on pages with a protected form, Google’s api.js loads from www.google.com in the visitor’s browser (Google’s script collects the signals it uses for its bot score — see its privacy policy); on submit, the server sends the response token, the site secret and the visitor’s IP address to Google’s siteverify endpoint to obtain the verdict.
  • Terms and privacy: Google Terms of Service, Google Privacy Policy.

Google Maps Places (address autocomplete)

  • What it is: the Google Maps JavaScript API with the Places library.
  • What it is used for: suggesting street addresses as a customer types on the checkout and account address forms — only if the store owner turns on Address autocomplete in checkout settings and supplies their own Google Maps API key. Off by default; nothing loads without the key.
  • What data is sent, and when: on the checkout and account pages only, the visitor’s browser loads maps.googleapis.com/maps/api/js (keyed with the owner’s API key) and sends the characters typed into the address field to Google to receive suggestions. The store’s server never contacts Google for this feature.
  • Terms and privacy: Google Maps Platform Terms, Google Privacy Policy.

YouTube and Vimeo (product video embeds)

  • What it is: the public video players of YouTube (Google) and Vimeo.
  • What it is used for: showing a product video on the product page when the store owner has pasted a YouTube or Vimeo link into that product’s video field. No video is embedded unless the owner adds one.
  • What data is sent, and when: the product page renders a thumbnail from img.youtube.com and, when the visitor clicks play, an embedded player from www.youtube.com or player.vimeo.com in the visitor’s browser; those providers receive the visitor’s request as with any embedded video. In the admin product editor, a thumbnail preview is fetched from img.youtube.com for the link the owner entered. Videos hosted on the store’s own server are played directly and involve no third party.
  • Terms and privacy: YouTube Terms of Service, Google Privacy Policy, Vimeo Terms of Service, Vimeo Privacy Policy.

Remote images during CSV import

  • What it is: standard HTTP downloads performed by WordPress itself.
  • What it is used for: when the store owner runs a product CSV import whose rows contain image URLs, WordPress downloads those images into the media library.
  • What data is sent, and when: an HTTP GET to each image URL the owner provided in their own file, at import time only.

Demo content for the Prism theme (market.titancart.io)

  • What it is: ready-made demo packages (products, categories, attributes and banner images) published by TitanCart for its free Prism storefront theme, which is a separate download.
  • What it is used for: letting a store owner who has installed Prism fill an empty store with matching sample content from Theme Options Demo content Install demo, and later reinstall, clear or remove it.
  • What data is sent, and when: only when the owner clicks Install, Switch or Reinstall does the server fetch the list of available demos and then the chosen package (a JSON file plus its images) from market.titancart.io over HTTPS — ordinary GET requests carrying no store data. Opening the Theme Options page does not contact the service. Nothing is fetched on sites without Prism.
  • Terms and privacy: TitanCart Privacy Policy.

The product page’s optional share buttons are ordinary links to Facebook, X, Pinterest and LinkedIn share pages; nothing is loaded from those sites and no request is made unless the visitor clicks one.

No other external connections exist in TitanCart Lite. Payment gateways beyond Stripe (PayPal, Square, Authorize.net), live carrier shipping rates (USPS, FedEx), social sign-in (Google, Facebook, Apple) and the TitanCart extensions catalog are features of TitanCart Pro, are not present in this plugin’s code, and are documented in the Pro edition’s own materials.

Installation

  1. In your WordPress admin, go to Plugins Add New and search for “TitanCart”.
  2. Click Install Now, then Activate.
  3. Open TitanCart Settings to set your store details, currency, payment, shipping and tax. There is no setup wizard; the store setup checklist at https://help.titancart.io/docs/store-setup-checklist/ walks through the order.
  4. Optionally install the free Prism storefront theme, available from the TitanCart marketplace at market.titancart.io.

No account, key or sign-up is required.

FAQ

Do I need a license key?

No. TitanCart Lite is free, GPL-licensed, and fully functional without a key. It never asks for one and never phones home.

Will it work alongside WooCommerce?

TitanCart does not use, extend or depend on WooCommerce, and it stores nothing in WooCommerce’s tables. Running both at once is not recommended simply because two storefronts on one site confuses customers, not because they conflict technically. There is a built-in WooCommerce importer to migrate your catalog across.

Does it slow my site down?

TitanCart uses its own indexed tables instead of wp_postmeta, so catalog queries do not scale with your meta table. The admin is a single-page app that loads once and then talks to a REST API.

What is the difference between Lite and Pro?

Lite is a complete, working store: products, cart, checkout, Stripe, shipping, tax, orders, customers, reviews, import/export and SEO. Pro adds promotions, coupon codes and discount rules, loyalty rewards, gift cards, product bundles and options, email campaigns, returns (RMA), advanced reporting, additional payment gateways, live carrier shipping rates, the external REST API, and the first-party extension suite.

Everything in Lite stays in Lite. Pro is additional capability, never a paywall in front of something that used to be free.

Where is my data stored?

In your own database, in tables prefixed wp_tc_. Nothing is stored off-site. Uninstalling is a clean removal.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“TitanCart Lite” is open source software. The following people have contributed to this plugin.

Contributors

Translate “TitanCart Lite” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

0.2.55

  • Changed: TitanCart Lite no longer shows controls for coupon codes it cannot create – the promo-code box on the cart page, the Promotions tile under the dashboard’s Quick Actions, the Promotions card in General Settings and the Coupons step of the WooCommerce migration are gone from Lite. Coupon codes are part of Promotions, a Pro feature. Pro stores are unchanged.

0.2.54

  • Changed: the product page’s Reviews tab now shows the full review list – review titles, the Verified Purchase badge, helpful / not-helpful votes, a sort control (newest, oldest, highest, lowest, most helpful) and page links – instead of a cut-down list of the newest reviews. It is the [titancart_reviews] shortcode, so a theme can place the same list elsewhere.
  • Fixed: the review list’s sort control did nothing (the page reloaded with the same order); it now sorts, and opening a reviews page or sort link lands on the Reviews tab instead of the Description tab.
  • Fixed: the review summary on the product page and the reviews API’s stats are computed live from the approved reviews, so they always agree with the review count under the product name.
  • Fixed: importing reviews (Tools – Import, type Reviews, and the WooCommerce importer) now recalculates each product’s average rating and review count; before, product cards, the Top Rated sort and the Rating filter kept the pre-import values until a review on that product was moderated.

0.2.53

  • Changed: “Allow guest reviews” (Customer Product Reviews settings) now reaches the product page – with it on, a visitor who is not signed in gets the review form with a required name and an optional e-mail (shown only to the merchant); with it off, or while “Only buyers can review” is on, the form asks them to log in. Before, the page always asked for a login whatever the setting said, so “Check for duplicate IP addresses” (guest reviews only) could never apply.
  • Fixed: reviewer names on the product page’s Reviews tab – every reviewer printed “Anonymous”; the tab now shows the customer’s first name and last initial, or the name a guest gave.
  • Changed: the reviews CSV import keeps the Name and Email columns for a review whose e-mail matches no customer, the WooCommerce importer keeps the comment author for reviews without a matching customer, and the reviews CSV export fills Reviewer Name / Reviewer Email for guest reviews.
  • Fixed: a signed-in account that had no TitanCart customer record yet was treated as a guest when posting a review.
  • Fixed: the reviews CSV import (Tools – Import, type Reviews) looked products up by a column that does not exist, so no row ever imported; it now matches the Product Code column against the product’s own code.

0.2.52

  • Changed: “Enable product reviews” (Customer Product Reviews settings) off now hides the Reviews tab, the review form and the star line on the product page; existing reviews, ratings and the moderation queue are kept. Turning the Customer Product Reviews extension off hides the tab the same way (it used to leave the tab in place with the raw shortcode text where the form should be).
  • Changed: “Reviews per page” is now honoured – the product page shows that many of the newest approved reviews (10 by default; it always showed five), and the reviews API pages by the same number.
  • Changed: the review settings’ “Display” group (review form style, image uploads, customer location) is removed – nothing collected those yet; they return with the review photos build.

0.2.51

  • Fixed: a quantity-based price now follows the quantity in the cart. Adding to a product already in the cart, changing the quantity on the cart page and signing in all re-check the price for the quantity (and customer group) the line ends up with, so a “10+” price is charged for ten units however they got there – and is no longer kept when the quantity drops below ten.
  • Changed: the product editor’s quantity-pricing “Customer group” list now shows the store’s own Customer Groups by name. “Guests” is no longer offered (a signed-out shopper could never match it), and a group the list cannot name is kept as it is instead of being reset to “All customers” on save.
  • Changed: the “File upload” option type is no longer offered when creating a product option, since the store does not collect the file yet; existing options of that type still load and save, and the product page no longer shows a file picker for them.
  • Changed: the product editor’s Availability “User groups” checkboxes are hidden until product visibility by customer group is built; they were never saved.

0.2.50

  • Changed: the Products list now colours its “Low Stock” badge and its In Stock / Low Stock cards at the Catalog “Low stock notification threshold” (5 while that setting is 0, as before), and the Revenue Reports Products tab uses the same number – so the list, the dashboard and the reports agree on what “low” means.
  • Fixed: products with Track Inventory switched off now show “Unlimited” in the Products list instead of “Out of Stock” when their quantity is 0.

0.2.49

  • New: the “Product low stock alert” under Settings > Notifications is now really sent. When a sale or an order edit takes a tracked product down to the Catalog “Low stock notification threshold”, the store administrator receives the “Product Low Stock Notification” e-mail (editable under Settings > Notifications > Templates) – once per product each time it drops into the band. Stores that set a threshold will start receiving it; switch the event off under Settings > Notifications if you only want the dashboard card and the log.
  • Changed: the Waitlist tab’s Notify button now sends the “Back in Stock Notification” template (HTML, greeting by name, a button to the product page, in the store’s default language) instead of a fixed plain-text message, and respects the “Product is back in stock” switch and the template’s Active/Disabled status. When nothing can be sent the tab says why.
  • Under the hood: these two events are the first to read the Settings > Notifications toggles and templates; every other notification still uses its built-in layout for now.

0.2.48

  • Changed (Pro): the RMA return period now counts from the latest ship date you recorded on the order’s shipments in Fulfillment, and from the order date only when no ship date was recorded – so a customer gets the full period from the day the parcel actually left. The setting’s hint, which used to speak of “delivery”, now says exactly that.
  • Fixed: the Catalog “Download link TTL (hours)” hint described a per-product control that does not exist. It now points to the real one (the product’s own Download link TTL on its Downloads tab) and says that 0 means links never expire.

0.2.47

  • Fixed: the “Payment instructions” box on a payment method’s General tab is now shown where it always said it would be – in the Payment Instructions card on the thank-you page and on the order in the customer’s account, above any bank details or cheque address the method itself prints. The default Cash on Delivery method ships with “Please have the exact amount ready.” in that box, so stores that kept it will see that sentence appear; clear the box if you do not want it.
  • New: the order confirmation e-mail carries the same Payment Instructions block, so Bank Transfer and Check customers receive the account details or mailing address in the e-mail they keep.
  • Fixed: bank-transfer and cheque details keep their list layout on the thank-you page (the label / value pairs were being flattened to plain text).

0.2.46

  • New (Pro): an Authorize.net webhook. The Signature Key field on the gateway’s Configure tab now does what its hint always promised: with it saved and the Webhook URL shown in the editor registered in the Merchant Interface, a held-for-review payment you approve or decline, and a payment you capture or void there, update the order in seconds instead of on the hourly check – and a refund made in the Merchant Interface is now recorded on the order (full refunds move it to Refunded), which was never reported back before. Optional: without it the hourly check behaves exactly as in 0.2.45.

0.2.45

  • Fixed: an order paid with a card that was only authorised – Square “Delayed capture”, Authorize.net “Authorize Only”, or a payment the gateway is holding for its own fraud review – no longer completes as if it were paid. The order now waits in On Hold with its stock reserved and its cart cleared; coupons, gift cards, points, integrations and the order confirmation all wait for the capture.
  • New: a Payment panel on the order page lists the order’s gateway transactions and, while a payment is authorised but not captured, offers Capture (charges the card, moves the order to Processing, sends the confirmation) and Void (releases the hold, cancels the order, returns the stock).
  • New: the hourly payment check also follows authorised payments. A payment captured or approved in the gateway’s own dashboard completes the order; one declined, voided or expired there cancels it, e-mails the customer and returns the stock. Settings > General Settings > Order Automation gains “Keep checking authorised payments for (days)”.
  • New: customers whose card was authorised or held for review receive an “Order Received” e-mail saying so; the “Order Confirmed” e-mail follows at capture.
  • Changed: an order with an uncaptured authorisation cannot be moved to Processing or Completed by hand – capture or void it first. Cancelling such an order voids the authorisation.

0.2.44

  • New: brand pages. Every choice of a Brand attribute now has its own page (/brands/brand-name/) with a logo, description, website link, page title and meta description, set in Attributes > (your Brand attribute) > Choices. A hidden choice takes its page offline.
  • New: an all-brands page (/brands/) listing every brand that has products, with logos and product counts. Both pages are in the sitemap and the Appearance > Menus “TitanCart Pages” box.
  • New: the brand name on product cards and the product page links to the brand’s page.
  • New: Settings > SEO lets you choose the brand URL pattern.
  • Removed: the unused legacy brand tables and the products’ brand_id column (never reachable from the admin; dropped only when empty).

0.2.43

  • Fixed: a fresh install now creates the attribute choices table (tc_product_feature_variants), so attribute choices can be saved and product listings no longer log a database error on new stores.

0.2.42

  • New: the search results page has the shop’s grid / list / compact view toggle. It follows the same Settings > Appearance view options as the shop and remembers the visitor’s choice.
  • Fixed: the search box’s suggestions now follow the same product scope as the shop and the search results page, so a theme or extension that limits which products a store shows limits the suggestions too.
  • Fixed: the product page’s grouped Attributes tab no longer overflows on narrow phones.
  • Fixed: the shop script no longer errors on a page that draws its own toolbar.

0.2.41

  • Changed: the product page’s Attributes tab has a lighter look. Each attribute is its name, a dotted line and its value, without the grey name box, row lines or hover highlight.

0.2.40

  • New: attribute groups. Products > Attributes > Attribute Groups lets you create a group such as Specifications or Dimensions, and each attribute has a Group field. On the product page the Attributes tab lists ungrouped attributes first, then each group under its own heading; product comparison shows the same headings. A group can set the categories for all of its attributes and can show them all on the product page with one tick. Deleting a group keeps its attributes. Stores without groups look exactly as before.

0.2.39

  • Changed: Products > Attributes. “List Display” is now a single “Show on product cards” switch. You choose which attributes appear on product cards; your theme decides how they look. Existing attributes keep what they showed before.
  • Changed: the “Size Pills” display type is now called “Text labels” in Attributes and in Product Filters. Nothing changes on the storefront.
  • Changed: Products > Product Filters only offers the display types that suit the attribute: Checkbox and Multiple checkbox attributes filter as checkboxes; other attributes as checkboxes or colour swatches; Text labels attributes can also filter as labels. A filter you already saved keeps its display type.

0.2.38

  • New: product search also finds products by an attribute value typed on the product, such as a UPC or a Manufacturer Part #. Works in the storefront search and in Products in the admin. Text attributes match on any part of the value; Number attributes match the exact number.
  • New: storefront checkbox filters with more than 10 values show the first 10 with a “Show all” link and a search box, so long lists stay short. Ticked values always stay visible.

0.2.37

  • Fixed: Products > Categories now shows a category’s saved image when you reopen it. Before, the image box came back empty, and saving the category again removed the stored image. If you re-saved a category after giving it an image, set the image once more.

0.2.36

  • New: Settings > General > Page Header. Choose the storefront page header style: Automatic (what your theme did before), Hero (a full-width banner with an image, on any theme) or Compact (a slim breadcrumb strip). Set a default banner image, a dark-mode image, height, focal point, overlay and title alignment.
  • New: each storefront page (shop, product, cart, checkout, account, search, gift cards, order received) can use the default header, its own image and title, or no header at all.
  • New: each top-level category can have its own banner image; subcategories inherit it.
  • New: Thumbnails > “Convert new uploads to WebP” saves new JPEG and PNG uploads as WebP at your JPEG quality setting, dimensions unchanged.
  • Fixed: the dark-mode banner image is now swapped in when the storefront is in dark mode; the stylesheet rule that did this was missing.
  • Fixed: the page header on the cart and order-received pages now follows the same settings as every other page.

0.2.35

  • Attributes: “Show in product comparison” now controls the compare table. Every attribute already in your store stays ticked by this update, so nothing disappears; untick an attribute to keep it out of the comparison.
  • Product Filters: a filter whose attribute has been disabled no longer appears in the storefront sidebar.
  • Product Filters: “Round To” now sets the step of the price slider and the min-max boxes, as its hint always said.
  • Product Filters: Slider and Range are offered for the Price source only; Color swatches and Size pills for attribute sources only. A slider on an attribute drew a broken second price control.
  • Attributes: “Show in storefront filters” is now “Available as a Product Filter” and links to Products > Product Filters, where the storefront filter is created. List Display offers Text chip, Color swatches and Hidden; “Number slider” and “Size pills” never changed a product card and are gone (existing attributes keep working).
  • Attributes: the “All Groups” and “Group” dropdowns are removed; nothing could create a group.
  • Fixed: a color value with no hex code now gets a distinct swatch on the product page instead of grey, and a variation with no image shows its initials and name in the image tile instead of the first two letters.
  • Fixed: the unpaid-order cleanup task re-arms itself on stores that lost it, and deactivating the plugin now removes every scheduled task it created.
  • Fixed: an expired admin session in a long-open Settings tab now says so instead of “Section not found”.
  • Fixed: the cleanup note reads “1 hour”, not “1 hours”.

0.2.34

  • Fixed: Check and Bank Transfer orders are now placed On Hold; previously they stayed Pending Payment and were cancelled automatically as unpaid after a day. Orders still waiting are moved to On Hold by this update, and any that were already cancelled are listed in System Logs.
  • Fixed: Cash on Delivery, Check and Bank Transfer no longer send a separate On Hold status e-mail alongside the order confirmation.
  • Settings: new Order Automation card controls the unpaid-order cleanup and payment reconciliation, including how long to wait before an unpaid order is cancelled. These settings were previously reachable only in the database.
  • Fixed: with two payment methods on the same card gateway, checkout could show no card form and Stripe webhooks could be checked against the wrong signing secret. Checkout now lists only fully configured methods, and webhooks are verified against every active method’s secret.
  • PayPal and Venmo: the “send shipping address” preference is honoured, and orders with nothing to ship no longer ask PayPal for a shipping address.
  • Product Code replaces “SKU” on the customer invoice, the My Account order detail, the admin new-order e-mail and the low-stock notification template.
  • Fixed: the product page price now includes the cost of the Options you choose, so the price shown matches the price charged.
  • Fixed: a Select, Radio or Checkbox option can no longer be saved without a value; an option left empty no longer shows a bare label or stops the product from being added to the cart.
  • Fixed: saving a product without its Product Code no longer replaces the code when Product Code auto-generation is on.
  • Fixed: a variation group shown as a single product no longer disappears from the shop when one of its members is deleted or disabled.
  • Fixed: activating the plugin from WP-CLI, a WordPress Playground blueprint or a host’s one-click installer now creates tables, defaults and scheduled tasks exactly as activating from the Plugins screen does.
  • A payment gateway that cannot change an order’s status now writes a warning to System Logs.
  • Subscriptions: a subscription that could not store a renewal token is flagged in the admin instead of failing silently at its first renewal.
  • Demo stores: the demo import no longer copies a one-per-order quantity limit onto products.
  • Developers: the product page’s variation-group selector, attribute indicators, Options and quantity blocks are shared template partials; new filter titancart_cart_add_refusal, new action titancart_demo_installed, new helper titancart_effective_shelf_price().

0.2.33

  • Fixed: a card payment confirmed after the checkout tab had gone (3-D Secure, a dropped connection) left the order at Processing with stock untaken, the cart still full, gift cards unissued and the coupon unused. The Stripe webhook now completes the order itself, and an hourly reconciliation completes any order the gateway confirms as paid, even on a store with no webhook configured.
  • Fixed: a PayPal order took stock, used the coupon and issued gift cards the moment the buyer was sent to PayPal, before anything was paid. The order now completes only after the payment is captured.
  • Fixed: Venmo orders never sent the order confirmation email, and PayPal orders sent it before the buyer had approved the payment.
  • Fixed: searching Customers in the admin returned nothing for any term.
  • Payment Gateways: an enabled gateway that is missing a required credential now shows a “Needs setup” badge in the list.
  • Admin: the affiliate Conversions tab has its own Export CSV button, and the affiliate tier field is labelled “Min earned $” to match what it compares on.

0.2.32

  • Fixed: on orders shipped to a different address, the shipping address carried the billing last name instead of the recipient’s own.
  • Fixed: a PayPal capture attempted before the buyer had approved the payment marked the order as failed, so the buyer’s real approval a moment later could not complete it. The order now simply waits.
  • Checkout: when the cart contains a subscription, payment methods that cannot be charged automatically on renewal (cash on delivery, check, Venmo) are explained rather than silently hidden.
  • Gift cards: the Settings page and the storefront now agree on the default minimum and maximum amounts, and the limits are enforced on the server.

0.2.31

  • Admin: image previews (product Images tab, product list, order items, group members, compact grids) now show the whole image at its own proportions instead of a cropped square; the Thumbnails shape only affects the storefront.
  • Admin: the attribute image picker shows a thumbnail strip of the product’s photos instead of “Image 1 / Image 2”.
  • Checkout: tips and donations can be a percentage of the order total (needs the Tip / Donation extension 1.1.0).

0.2.27

  • Theme Options: new “image set” control lets a theme take a separate photo and crop anchor for desktop, tablet and phone on one setting (used by TitanCart Prism 0.2.7 for the homepage hero). A photo already saved on a plain image setting keeps working as the desktop photo.

0.2.26

  • Fixed: after upgrading to 0.2.25, every admin and storefront request could take a couple of seconds longer. The 0.2.25 upgrade step that creates the FAQ page ran before WordPress was ready, failed quietly, and left the upgrade unfinished, so its table check re-ran on every request. The step now waits for WordPress, finishes even if page creation is skipped, and runs once.
  • Attributes: the Choices tab no longer shows a stray “0” column beside Hex Color on attributes without site-wide prices.

0.2.25

  • New: FAQ page. Storefront FAQ in the admin lets you add as many questions and answers as you need, group them by category and order them; put the [titancart_faq] shortcode on any page for an accordion (one answer open at a time, keyboard and screen-reader friendly) with FAQ structured data for search engines. Works with any theme. An “FAQ” page carrying the shortcode is created for you (or adopted if one exists).
  • Fixed: TitanCart Lite no longer creates a “Gift Cards” page — gift cards are a Pro feature, so the page only showed the raw shortcode. The empty auto-created page is removed on upgrade (a page you have edited is kept).
  • Attributes: a shared-variation attribute can now carry site-wide price changes. Turn on “Site-wide price changes” on the attribute, enter the amount per choice on its Choices tab (e.g. Large +5.00), and every product using it charges that — a product can still override any choice on its own Attributes tab, including 0 for “no change on this one”.
  • Product page: a shared-variation attribute shown as a dropdown no longer repeats the chosen value beside the attribute name (the dropdown already shows it).

0.2.24

  • Fixed: a shared-variation attribute set to display type “Dropdown” now renders as a dropdown on the product page (it always showed pills). The dropdown shows any per-choice price change, updates the price as you pick, and the choice is carried into the cart like the pill and swatch styles.
  • Product page: the Add to Cart button no longer gets squeezed when the browser window narrows. It keeps its full size; Wishlist and Compare shrink to icon buttons when the row runs short of room, and become full-width labelled buttons again on phones.
  • Product page: switching a separate-product variation no longer leaves the previous size as a blank white pill while the next page loads (its text was fading out mid-frame).
  • Attributes: choices can now be reordered with up/down arrows on the Choices tab (Manual order mode); the new order applies everywhere the choices appear — product pages, filters, the product editor.

0.2.23

  • Variations (shared product — one product, choose Size/Colour on its page): each ticked choice on the product’s Attributes tab can now carry a price change (e.g. Large +5.00, Small -2.00). The product page shows the amount on the choice and updates the price as the customer picks; the cart, checkout and order use the same figure and show it beside the choice (“Size: Large (+$5.00)”).
  • Variations (separate products): “Add Variations” can copy this product’s description, short description and image gallery onto every new variation — two ticks in the dialog, on by default — so a family of sizes no longer needs the same photos and copy added by hand.
  • Fixed: deleting an attribute (or a choice) that a variation group was built on no longer leaves the group pointing at nothing (“Attr #2 / Variant #6” on the Product Group tab). The group drops that axis, members whose choice is gone leave the group, and a group with no axis left is dissolved — the products themselves are untouched. Existing stores are cleaned up once on upgrade.
  • Also carries every 0.2.22 fix below for stores whose 0.2.22 package was built before they landed (price-change fix, quantity limits on the product page, trimmed-quantity messages, quick-view quantity, cart spinner snap-back).

0.2.22

  • Fixed: changing a product’s price no longer leaves the storefront showing the old price. Products created before this release carried a hidden duplicate of their original price as a quantity-1 “bulk” tier; the editor re-saved it unchanged and the store kept charging it. The duplicate rows are removed on upgrade and are no longer created.
  • Fixed: the product page’s quantity control now stops at what the cart will accept (the units in stock when inventory is tracked without backorders, or the maximum per order) and shows “Only N available” when the stock is the limit. When the cart still has to trim a quantity, the message says so (“Only 1 available — 1 added to your cart”) instead of a plain “Product added”.
  • Fixed: the quick-view popup’s quantity box is now honoured by Add to Cart (it always added 1).
  • Fixed: the cart page’s quantity spinner snaps back to the accepted quantity when the store trims it.
  • Variations: when creating variations you can now enter a price per attribute choice — either an amount added to the product’s price (e.g. Large +5.00) or the variation’s full price — and the preview shows the resulting price of every combination.
  • Variations: the Product Group tab’s price, quantity and product-code cells are now edited in place; they save when you leave the field.

0.2.21

  • Storefront: changing a quantity on the cart page and saving order notes now work on hosts and sandboxes that strip the body of PUT/PATCH requests (including WordPress Playground). The cart script sends these as POST with a method-override header, exactly as the admin app has since 0.2.19. No change on normal hosts.

0.2.20

  • Admin: if a store is set to the TitanCart Prism theme but Prism is not installed, a notice explains that Prism is a separate free download and links to it.
  • Updates: Dashboard > Updates > “Check again” now re-asks the marketplace for extension updates instead of answering from a cached result.

0.2.19

  • Admin: saving any settings page now works on hosts and sandboxes that strip the body of PUT requests (including WordPress Playground). The admin app sends its saves as POST with a method-override header, which WordPress’s REST server maps back to the intended method before routing. No change on normal hosts.
  • Demo content: installing a demo now records the storefront preset switch in System Logs like a manual switch does, and cleans up its “category scope” toggle when the demo is removed or switched.
  • Theme Options: the active theme can now add controls to the “Active Theme” panel (the free Prism theme uses this for its update-channel license key); a titancart_settings_saved action fires after every settings save so the theme can react.

0.2.18

  • Theme Options: the “Active preset” default now comes from the active theme instead of being hard-coded, so a fresh Prism install starts on a finished preset (Apparel) rather than the unfinished Indigo design. Requires Prism 0.2.1.

0.2.17

  • Demo content for the Prism theme. With Prism installed, each preset panel in Theme Options now has a Demo content card: one click installs that preset’s products, categories, attributes and banner images, then generates sample customers, orders and reviews (dated over the last 30 days) so the dashboard and reports have something to show. Sample data can be cleared on its own; the whole demo can be removed. Demos can be switched freely while the store is untouched; the first real product, category or order locks switching so your work is never overwritten. Images are fetched in small batches so the progress bar keeps moving on slow hosts. Requires the free Prism theme; packages are downloaded from market.titancart.io only when you click (see External services).
  • New table tc_demo_import_log records everything a demo installed so reinstalls repair in place and removals are exact.
  • Fixed: two admin notices used the wrong text domain.

0.2.16

  • Admin: fixed an intermittent “Page Error” (insertBefore NotFoundError) in the Payment Gateways editor and other admin screens. Root cause: WordPress’s emoji replacement script rewrites emoji characters inside the admin app’s text into images behind React’s back. The emoji script is no longer loaded on TitanCart admin screens (the same approach WordPress core uses for the block editor). Front-end and other admin pages are unaffected.
  • Invoice and packing-slip print documents now load their styles as static stylesheets through the core styles API (wp_register_style / wp_add_inline_style / wp_print_styles) instead of embedded style blocks.
  • Every intentionally public REST route now declares the literal __return_true permission callback with an …