{
  "vendor": {
    "name": "Plogins",
    "url": "https://plogins.com",
    "licence": "GPL-2.0-or-later"
  },
  "count": 45,
  "releases": [
    {
      "plugin": "plogins-customs",
      "name": "Customs",
      "edition": "free",
      "version": "1.0.21",
      "released": "2026-10-27",
      "url": "https://plogins.com/plogins-customs/",
      "changelog": "https://plogins.com/plogins-customs/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-customs/",
      "features": [
        {
          "kind": "changed",
          "text": "the description and settings now follow the primary texts. Since 1 July 2026 the 3 EUR duty covers every distance sale to an EU customer in a consignment up to 150 EUR, with or without IOSS, except non-IOSS goods that claim a preferential tariff (Delegated Regulation (EU) 2026/1022). A courier parcel is no longer described as outside the rule. The legal definition of an item is quoted, with what the tariff-line count matches and what it misses, and the readme notes the 2 EUR Union handling fee from 1 November 2026, which the plugin does not add."
        }
      ]
    },
    {
      "plugin": "plogins-estimate-pro",
      "name": "Quotlet Pro",
      "edition": "pro",
      "version": "1.1.0",
      "released": "2026-10-27",
      "url": "https://plogins.com/plogins-estimate-pro/",
      "changelog": "https://plogins.com/plogins-estimate-pro/changelog/",
      "wpOrg": null,
      "features": [
        {
          "kind": "new",
          "text": "Ask about this product. A button on single product pages (classic and block themes) opens a dialog for a question about that product, with an optional file. Stored as a quote request and emailed to the quote recipient. Limited to 5 enquiries per hour per IP address."
        },
        {
          "kind": "new",
          "text": "file attachments on enquiries (PDF, images, Word, Excel, ZIP, up to 10 MB), checked by WordPress on upload, stored under a random folder and downloaded by shop managers from the quote screen. Deleted with the quote and by the personal data eraser."
        },
        {
          "kind": "new",
          "text": "counter-offers. Enter a negotiated price, an expiry date and a note on the quote screen and send the offer; the customer confirms on a separate page and pays the pending order at the offered price."
        },
        {
          "kind": "new",
          "text": "quote mode by customer role (including guests), by product category and for out-of-stock products."
        }
      ]
    },
    {
      "plugin": "polski",
      "name": "Polski",
      "edition": "free",
      "version": "1.43.3",
      "released": "2026-10-27",
      "url": "https://plogins.com/polski/",
      "changelog": "https://plogins.com/polski/changelog/",
      "wpOrg": "https://wordpress.org/plugins/polski/",
      "features": [
        {
          "kind": "changed",
          "text": "the Polski PRO card on the settings screen no longer lists VAT invoices as a PRO feature, because the free plugin issues them; it now offers the invoice as a PDF file. The readme FAQ says the free plugin issues invoices."
        }
      ]
    },
    {
      "plugin": "polski-pro",
      "name": "Polski PRO",
      "edition": "pro",
      "version": "1.29.1",
      "released": "2026-10-27",
      "url": "https://plogins.com/polski-pro/",
      "changelog": "https://plogins.com/polski-pro/changelog/",
      "wpOrg": "https://wordpress.org/plugins/polski/",
      "features": [
        {
          "kind": "changed",
          "text": "the KSeF settings now point to Aplikacja Podatnika KSeF 2.0 for the certificate; MCU stopped issuing certificates at the end of January 2026."
        }
      ]
    },
    {
      "plugin": "polski-pro",
      "name": "Polski PRO",
      "edition": "pro",
      "version": "1.29.0",
      "released": "2026-10-27",
      "url": "https://plogins.com/polski-pro/",
      "changelog": "https://plogins.com/polski-pro/changelog/",
      "wpOrg": "https://wordpress.org/plugins/polski/",
      "features": [
        {
          "kind": "new",
          "text": "KSeF 2.0 sending. A Faktura VAT is built as an FA(3) document, checked against the Ministry's schema before it leaves the shop, and sent in an online session authenticated with the shop's KSeF certificate (XAdES signature). It goes from the KSeF box on the order screen, or automatically when the invoice is created if automatic sending is on."
        },
        {
          "kind": "new",
          "text": "the KSeF status is checked in the background until KSeF accepts or rejects the invoice; the KSeF number, or the reason for a rejection, is shown on the order. The orders list has a KSeF column with the status of each order's invoice, marked TEST for invoices sent to the test environment."
        },
        {
          "kind": "new",
          "text": "the UPO, KSeF's official confirmation of receipt, is fetched and stored with the invoice and can be downloaded from the order screen."
        },
        {
          "kind": "new",
          "text": "correction invoices. A correction is created from a WooCommerce refund on the order screen and sent to KSeF like any other invoice."
        },
        {
          "kind": "new",
          "text": "the PDF of an invoice accepted by KSeF carries the KOD I verification QR code, captioned with the KSeF number."
        },
        {
          "kind": "changed",
          "text": "KSeF now needs a KSeF certificate with its private key, generated in the Ministry's certificate application (MCU) and pasted on WooCommerce > KSeF. The KSeF 1.0 API token is not used by KSeF 2.0 and is removed on upgrade."
        },
        {
          "kind": "changed",
          "text": "on upgrade, a shop set to the production environment with automatic sending on and no certificate yet has automatic sending switched off, so pasting a certificate does not start filing every new invoice to production. An admin notice explains the change until a certificate is stored; turn automatic sending back on once an invoice has gone through."
        }
      ]
    },
    {
      "plugin": "plogins-withdraw",
      "name": "Withdraw",
      "edition": "free",
      "version": "1.7.1",
      "released": "2026-10-26",
      "url": "https://plogins.com/plogins-withdraw/",
      "changelog": "https://plogins.com/plogins-withdraw/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-withdraw/",
      "features": [
        {
          "kind": "changed",
          "text": "the plugin is now called Plogins Withdraw - Right of Withdrawal Button for WooCommerce, so shops searching for a withdrawal button find it. Nothing else changes: same slug, settings and data."
        }
      ]
    },
    {
      "plugin": "plogins-customs",
      "name": "Customs",
      "edition": "free",
      "version": "1.0.20",
      "released": "2026-10-24",
      "url": "https://plogins.com/plogins-customs/",
      "changelog": "https://plogins.com/plogins-customs/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-customs/",
      "features": [
        {
          "kind": "changed",
          "text": "the description and settings now say what Regulation (EU) 2026/382 actually covers: 3 EUR per item until 1 July 2028, only for IOSS or postal consignments. Counting one item per tariff line is labelled as the plugin's reading of Commission guidance, since the regulation does not define an item."
        }
      ]
    },
    {
      "plugin": "plogins-customs",
      "name": "Customs",
      "edition": "free",
      "version": "1.0.19",
      "released": "2026-10-24",
      "url": "https://plogins.com/plogins-customs/",
      "changelog": "https://plogins.com/plogins-customs/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-customs/",
      "features": [
        {
          "kind": "new",
          "text": "`customs/intrinsic_goods_value` filter to adjust the goods value before the threshold check."
        }
      ]
    },
    {
      "plugin": "polski",
      "name": "Polski",
      "edition": "free",
      "version": "1.43.0",
      "released": "2026-10-24",
      "url": "https://plogins.com/polski/",
      "changelog": "https://plogins.com/polski/changelog/",
      "wpOrg": "https://wordpress.org/plugins/polski/",
      "features": [
        {
          "kind": "changed",
          "text": "The Privacy Policy checkbox is described as optional (order data rests on GDPR art. 6(1)(b)) and no longer counts towards the checkbox setup score; the Terms and Withdrawal checkboxes are \"recommended\" rather than \"required\". Checkbox behaviour and defaults are unchanged."
        },
        {
          "kind": "changed",
          "text": "Omnibus settings warn when the lowest-price period is below 30 days, and the \"Today\" and \"Show current price\" options are labelled as not compliant with art. 6a(2) Directive 98/6/EC. Defaults are unchanged."
        },
        {
          "kind": "changed",
          "text": "Legal wording corrected in the site audit, module descriptions and order e-mails: the withdrawal reminder cites art. 9 of Directive 2011/83/EU; the forced-account check no longer cites Directive 2023/2673; security.txt, the incident log and the SBOM are not described as CRA duties for shops; the 2024/825 consumer information is not the harmonised notice or label of Implementing Regulation (EU) 2025/1960; the environmental claim fields and the DSA check say when they apply."
        }
      ]
    },
    {
      "plugin": "polski-pro",
      "name": "Polski PRO",
      "edition": "pro",
      "version": "1.28.4",
      "released": "2026-10-24",
      "url": "https://plogins.com/polski-pro/",
      "changelog": "https://plogins.com/polski-pro/changelog/",
      "wpOrg": "https://wordpress.org/plugins/polski/",
      "features": [
        {
          "kind": "changed",
          "text": "the legal text generator is described as producing draft texts to review, not legally compliant text."
        }
      ]
    },
    {
      "plugin": "plogins-addons",
      "name": "Aldono",
      "edition": "free",
      "version": "1.4.0",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-addons/",
      "changelog": "https://plogins.com/plogins-addons/changelog/",
      "wpOrg": "https://wordpress.org/plugins/aldono/",
      "features": [
        {
          "kind": "changed",
          "text": "the live subtotal now also shows when taxes change displayed prices, in all four combinations of prices entered with or without tax and shown with or without tax. With one tax rate per product it matches the cart line to the cent. It stays hidden when the shop and the cart are set to display taxes differently."
        },
        {
          "kind": "new",
          "text": "an optional description under each option's label and an optional placeholder for text, textarea and number options, set per option in the product editor."
        }
      ]
    },
    {
      "plugin": "plogins-addons",
      "name": "Aldono",
      "edition": "free",
      "version": "1.3.0",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-addons/",
      "changelog": "https://plogins.com/plogins-addons/changelog/",
      "wpOrg": "https://wordpress.org/plugins/aldono/",
      "features": [
        {
          "kind": "new",
          "text": "a live subtotal under the product options. It adds the price of each chosen option to the product price, multiplies by the quantity, updates as options and quantity change and when a variation is chosen, and uses the store currency format. It is shown on simple and variable products when add-on prices are visible and taxes leave displayed prices unchanged; otherwise it stays hidden rather than show a figure the cart would not charge."
        }
      ]
    },
    {
      "plugin": "plogins-anchor",
      "name": "Cartdock",
      "edition": "free",
      "version": "1.1.6",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-anchor/",
      "changelog": "https://plogins.com/plogins-anchor/changelog/",
      "wpOrg": "https://wordpress.org/plugins/cartdock/",
      "features": [
        {
          "kind": "new",
          "text": "the bar's Add to cart sends the quantity chosen in the product form, kept within that field's minimum, maximum and step. It always added one before."
        },
        {
          "kind": "new",
          "text": "a small product thumbnail sits before the title in the bar. It is hidden on very narrow screens."
        }
      ]
    },
    {
      "plugin": "plogins-lookbook",
      "name": "Lookwick",
      "edition": "free",
      "version": "1.3.0",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-lookbook/",
      "changelog": "https://plogins.com/plogins-lookbook/changelog/",
      "wpOrg": "https://wordpress.org/plugins/lookwick/",
      "features": [
        {
          "kind": "new",
          "text": "visual hotspot editor. The lookbook image is shown in the Shoppable hotspots box; click it to add a hotspot at that point and drag the dots to move them. The X/Y fields stay and follow every move."
        },
        {
          "kind": "new",
          "text": "pick the hotspot product with the WooCommerce product search instead of typing its ID. Existing lookbooks keep working; the saved data is unchanged."
        },
        {
          "kind": "new",
          "text": "the Add to cart button in a hotspot card adds simple products to the cart in place, using WooCommerce's AJAX add to cart when it is enabled under WooCommerce > Settings > Products. Without JavaScript the button still works as a normal link; variable products still open the product page."
        },
        {
          "kind": "new",
          "text": "a Shortcode column on the Lookbooks list shows each lookbook's shortcode, ready to copy."
        }
      ]
    },
    {
      "plugin": "plogins-marks",
      "name": "Marks",
      "edition": "free",
      "version": "1.1.0",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-marks/",
      "changelog": "https://plogins.com/plogins-marks/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-sale-stock-badges/",
      "features": [
        {
          "kind": "new",
          "text": "badge corner setting, top left or top right of the product image. In right-to-left languages the corners mirror."
        },
        {
          "kind": "new",
          "text": "brand colour setting for Accent badges (Bestseller and a manual badge set to Accent). The label text turns dark on a light colour so it stays readable."
        }
      ]
    },
    {
      "plugin": "plogins-marks",
      "name": "Marks",
      "edition": "free",
      "version": "1.0.32",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-marks/",
      "changelog": "https://plogins.com/plogins-marks/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-sale-stock-badges/",
      "features": [
        {
          "kind": "new",
          "text": "badge labels accept the {stock} and {discount_percent} tokens, e.g. \"Only {stock} left\" or \"Save {discount_percent}%\". A badge whose token has no value is hidden. For variable products {discount_percent} is the biggest saving among the variations."
        }
      ]
    },
    {
      "plugin": "plogins-migrator",
      "name": "Migrator",
      "edition": "free",
      "version": "1.6.0",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-migrator/",
      "changelog": "https://plogins.com/plogins-migrator/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-migrator/",
      "features": [
        {
          "kind": "changed",
          "text": "a backup from wp-admin now exports the database in steps, a slice of rows per request, so a large database no longer runs into a 504 Gateway Timeout on shared hosting. An interrupted step resumes where the last one stopped, and the progress bar moves while the database is exported."
        },
        {
          "kind": "added",
          "text": "the `migrator_step_seconds` filter sets how long one export step may work, for hosts whose proxy cuts requests short."
        }
      ]
    },
    {
      "plugin": "plogins-nudge",
      "name": "Shiplume",
      "edition": "free",
      "version": "1.2.0",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-nudge/",
      "changelog": "https://plogins.com/plogins-nudge/changelog/",
      "wpOrg": "https://wordpress.org/plugins/shiplume/",
      "features": [
        {
          "kind": "new",
          "text": "the bar shows on the Cart and Checkout blocks, above the block, and updates after a quantity change, coupon or removal without a reload. It used to draw nothing on a block cart or checkout."
        },
        {
          "kind": "new",
          "text": "\"Mini-cart widget\" setting shows the bar in the classic mini-cart widget, above its buttons. Off by default."
        },
        {
          "kind": "new",
          "text": "the `[shiplume]` shortcode prints the bar anywhere a shortcode works and updates after an add to cart."
        }
      ]
    },
    {
      "plugin": "plogins-pair",
      "name": "Pair",
      "edition": "free",
      "version": "1.2.0",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-pair/",
      "changelog": "https://plogins.com/plogins-pair/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-pair/",
      "features": [
        {
          "kind": "added",
          "text": "\"Replace WooCommerce related products\". With Pair's product-page block on, WooCommerce's own related products no longer render underneath it, so the page shows one recommendation grid instead of two. On by default for new installs; stores updating from an earlier version keep their current page until they tick the box."
        },
        {
          "kind": "added",
          "text": "cart cross-sells and the cart recently viewed block now appear on a cart page built with the WooCommerce Cart block, not only on the classic cart. A placement already added to the page by shortcode is not repeated."
        }
      ]
    },
    {
      "plugin": "plogins-peek",
      "name": "Peek",
      "edition": "free",
      "version": "1.1.0",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-peek/",
      "changelog": "https://plogins.com/plogins-peek/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-peek/",
      "features": [
        {
          "kind": "new",
          "text": "add to cart inside the quick view stays on the page. The modal confirms the add with a View cart link, mini-carts (classic header cart and the Mini-Cart block) refresh, and a WooCommerce error such as an out-of-stock product is shown in the modal. Before, the form posted to the product page and the shopper left the listing."
        },
        {
          "kind": "new",
          "text": "the quick view button appears in block Product Collection grids on any page, such as a block theme homepage, with the modal and its assets loaded there. Before, it showed only in shop and archive loops."
        },
        {
          "kind": "changed",
          "text": "WooCommerce's variation script (which uses jQuery) now loads only on pages that list a variable product, instead of on every shop page."
        }
      ]
    },
    {
      "plugin": "plogins-reel",
      "name": "Reel",
      "edition": "free",
      "version": "1.1.0",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-reel/",
      "changelog": "https://plogins.com/plogins-reel/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-reel/",
      "features": [
        {
          "kind": "new",
          "text": "video position \"In the gallery\". The video becomes the last gallery slide with a play glyph on its thumbnail; picking it shows the click-to-play poster, and the player loads only on click. Autoplay does not apply in this position."
        },
        {
          "kind": "new",
          "text": "the lightbox steps through all gallery images with arrow buttons, the Left and Right keys or a swipe, and announces \"Image N of M\"."
        }
      ]
    },
    {
      "plugin": "plogins-reel",
      "name": "Reel",
      "edition": "free",
      "version": "1.0.27",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-reel/",
      "changelog": "https://plogins.com/plogins-reel/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-reel/",
      "features": [
        {
          "kind": "new",
          "text": "two-finger pinch zoom on the gallery image on touch screens. One finger still scrolls the page and swipes the slider; a double tap or a slide change resets the zoom. On with hover zoom."
        },
        {
          "kind": "new",
          "text": "YouTube and Vimeo featured videos show a poster and a play button, and the player loads only when the shopper presses it. Nothing from the player is loaded for visitors who never play, YouTube plays from youtube-nocookie.com, and the poster fills the reserved 16:9 frame so nothing moves. With autoplay on, the player embeds directly as before."
        }
      ]
    },
    {
      "plugin": "plogins-shortlist",
      "name": "Shortlist",
      "edition": "free",
      "version": "1.1.0",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-shortlist/",
      "changelog": "https://plogins.com/plogins-shortlist/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-shortlist/",
      "features": [
        {
          "kind": "new",
          "text": "`[shortlist_count]` shortcode for the header, a heart link to the wishlist with a count badge and a spoken label such as \"Wishlist, 3 items\". The count is loaded in the browser and updates after every add or remove, so a cached page never shows another shopper's number."
        },
        {
          "kind": "new",
          "text": "the add-to-wishlist button on block-theme Product Collection grids, next to each card's add-to-cart button. On a block theme's shop page, where WooCommerce also runs the classic loop hook, each product still gets one button."
        },
        {
          "kind": "new",
          "text": "\"Remove when added to cart\" setting, off by default. A saved product leaves the wishlist when it is added to the cart, including when its quantity in the cart is raised; for a variable product the saved variation is removed."
        }
      ]
    },
    {
      "plugin": "plogins-swatch",
      "name": "Swatch",
      "edition": "free",
      "version": "1.0.19",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-swatch/",
      "changelog": "https://plogins.com/plogins-swatch/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-swatch/",
      "features": [
        {
          "kind": "new",
          "text": "the chosen value shows beside the attribute label, as in \"Colour: Red\", so a colour or image swatch also says its name in words. It clears with \"Clear\" and follows WooCommerce when it restores a default choice, and screen readers announce the change."
        }
      ]
    },
    {
      "plugin": "plogins-swift",
      "name": "Swift",
      "edition": "free",
      "version": "1.1.0",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-swift/",
      "changelog": "https://plogins.com/plogins-swift/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-swift/",
      "features": [
        {
          "kind": "new",
          "text": "a third redirect target, a custom page on your own site. Addresses on other sites are refused when saving, and anything that fails the same check at checkout time sends the shopper to the checkout."
        },
        {
          "kind": "changed",
          "text": "\"Respect quantity\" is on by default for new installs. Existing shops keep the value they had."
        }
      ]
    },
    {
      "plugin": "plogins-tiers",
      "name": "Tiers",
      "edition": "free",
      "version": "1.1.0",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-tiers/",
      "changelog": "https://plogins.com/plogins-tiers/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-tiers/",
      "features": [
        {
          "kind": "new",
          "text": "shop and category grids show \"From X in bulk\" under the price, X being the deepest tier price as the shop displays prices (incl. or excl. tax). Product pages, the cart and the mini-cart are unchanged. It can be turned off under Shop price hint."
        },
        {
          "kind": "new",
          "text": "the pricing table highlights the row the quantity box reaches and shows the line total under it. The table still works without JavaScript."
        },
        {
          "kind": "new",
          "text": "variations of one product now count together toward a tier, so 3 red and 3 blue reach a 5+ tier. The cart \"You save\" note uses the same count."
        }
      ]
    },
    {
      "plugin": "plogins-trust",
      "name": "Badgevo",
      "edition": "free",
      "version": "1.2.0",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-trust/",
      "changelog": "https://plogins.com/plogins-trust/changelog/",
      "wpOrg": "https://wordpress.org/plugins/badgevo/",
      "features": [
        {
          "kind": "new",
          "text": "\"Show on checkout\" setting. The badge row appears under the Place order button on the classic checkout, and under the checkout form with the Checkout block. Off by default."
        },
        {
          "kind": "new",
          "text": "a short caption under each badge, such as \"Secure checkout\", in the site language. It is also what screen readers hear, so the icon is no longer announced separately. On for new installs; stores updating from an earlier version keep their icon-only row until they tick \"Show captions\"."
        }
      ]
    },
    {
      "plugin": "plogins-waitlist",
      "name": "Waitlist",
      "edition": "free",
      "version": "1.1.0",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-waitlist/",
      "changelog": "https://plogins.com/plogins-waitlist/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-waitlist/",
      "features": [
        {
          "kind": "new",
          "text": "the restock email is a WooCommerce email (store header and footer, product name, image and link) with an HTML and a plain-text version, editable or switchable off under WooCommerce > Settings > Emails > Back in stock (Waitlist). A subject saved on the plugin's own settings screen stays the default until one is saved there."
        },
        {
          "kind": "new",
          "text": "every restock email has a \"Leave this waitlist\" link that works without a login, plus `List-Unsubscribe` and one-click `List-Unsubscribe-Post` headers. Opening the link asks for confirmation, so mail scanners that open links cannot remove anyone. The link is signed per signup and rate limited, and an invalid or used link never says whether an address is subscribed."
        },
        {
          "kind": "new",
          "text": "the consent label links to the site's privacy policy when one is set."
        }
      ]
    },
    {
      "plugin": "plogins-withdraw",
      "name": "Withdraw",
      "edition": "free",
      "version": "1.7.0",
      "released": "2026-10-23",
      "url": "https://plogins.com/plogins-withdraw/",
      "changelog": "https://plogins.com/plogins-withdraw/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-withdraw/",
      "features": [
        {
          "kind": "new",
          "text": "a fresh install creates a draft \"Withdrawal\" page holding the form, selects it as the form page and turns the footer link on. The page is not published; an admin notice links to it until it is. Existing installs are not touched."
        },
        {
          "kind": "new",
          "text": "the withdrawal action on the My Account orders list, shown only while the order is within the withdrawal period."
        },
        {
          "kind": "new",
          "text": "the withdrawal link in the customer processing and completed order emails, HTML and plain text, while the order is within the withdrawal period and a form page is published."
        },
        {
          "kind": "changed",
          "text": "the order-view button now also disappears once the withdrawal period has ended, and no longer shows on the order-received page."
        },
        {
          "kind": "changed",
          "text": "no withdrawal link is printed while the form page is not published, because its address leads customers nowhere."
        }
      ]
    },
    {
      "plugin": "sieve",
      "name": "Sieve",
      "edition": "free",
      "version": "1.2.0",
      "released": "2026-10-23",
      "url": "https://plogins.com/sieve/",
      "changelog": "https://plogins.com/sieve/changelog/",
      "wpOrg": "https://wordpress.org/plugins/sieve/",
      "features": [
        {
          "kind": "new",
          "text": "the price filter has a dual-handle range slider, kept in sync with the minimum and maximum fields. Both handles work with the keyboard (arrow keys, Page Up, Page Down, Home, End)."
        },
        {
          "kind": "new",
          "text": "setting \"Options with no matches\" under Layout & Display. Hide (the default) removes options that would return no products; Show dimmed keeps them in place, greyed out and disabled with a count of 0."
        }
      ]
    },
    {
      "plugin": "plogins-customs",
      "name": "Customs",
      "edition": "free",
      "version": "1.0.17",
      "released": "2026-09-29",
      "url": "https://plogins.com/plogins-customs/",
      "changelog": "https://plogins.com/plogins-customs/changelog/",
      "wpOrg": "https://wordpress.org/plugins/plogins-customs/",
      "features": [
        {
          "kind": "added",
          "text": "a `customs/eur_rate` filter on the store-currency rate per 1 EUR, and a `customs/settings_after_form` action below the settings form, so an add-on can supply a live exchange rate and show it on the same screen. Nothing changes for a shop without one."
        }
      ]
    },
    {
      "plugin": "plogins-bundle-pro",
      "name": "Bundaro Pro",
      "edition": "pro",
      "version": "1.0.11",
      "released": "2026-09-13",
      "url": "https://plogins.com/plogins-bundle-pro/",
      "changelog": "https://plogins.com/plogins-bundle-pro/changelog/",
      "wpOrg": null,
      "features": [
        {
          "kind": "changed",
          "text": "the minimum free version this plugin checks moves from 0.1.0 to 0.2.1, the earliest free release that carries everything this add-on actually reads: the `bundle/booted` action, the shared container, and the bundle meta, request, nonce, cart-flag and shortcode constants. It also carries the bundle engine in its own `lib/`, which this plugin now relies on the free plugin to provide. 0.1.0 was never enough; the check simply never said so. The readme requirement matched the old number in three places and has moved with it."
        }
      ]
    },
    {
      "plugin": "plogins-lookbook-pro",
      "name": "Lookwick Pro",
      "edition": "pro",
      "version": "1.0.9",
      "released": "2026-09-13",
      "url": "https://plogins.com/plogins-lookbook-pro/",
      "changelog": "https://plogins.com/plogins-lookbook-pro/changelog/",
      "wpOrg": null,
      "features": [
        {
          "kind": "changed",
          "text": "the note on translations said the package carries no compiled translation files and that WordPress.org language packs deliver them. Neither is true of a plugin that is not in the WordPress.org directory: the Polish, German and Spanish translations ship inside the package, under `languages/`, and nothing else could deliver them. The files stay, the sentence was wrong."
        }
      ]
    },
    {
      "plugin": "plogins-notice-pro",
      "name": "Anonco Pro",
      "edition": "pro",
      "version": "1.0.10",
      "released": "2026-09-13",
      "url": "https://plogins.com/plogins-notice-pro/",
      "changelog": "https://plogins.com/plogins-notice-pro/changelog/",
      "wpOrg": null,
      "features": [
        {
          "kind": "changed",
          "text": "the note on translations said the package carries no compiled translation files and that WordPress.org language packs deliver them. Neither is true of a plugin that is not in the WordPress.org directory: the Polish, German and Spanish translations ship inside the package, under `languages/`, and nothing else could deliver them. The files stay, the sentence was wrong."
        }
      ]
    },
    {
      "plugin": "plogins-notice-pro",
      "name": "Anonco Pro",
      "edition": "pro",
      "version": "1.0.9",
      "released": "2026-09-13",
      "url": "https://plogins.com/plogins-notice-pro/",
      "changelog": "https://plogins.com/plogins-notice-pro/changelog/",
      "wpOrg": null,
      "features": [
        {
          "kind": "changed",
          "text": "an event is recorded only for a bar the shop has configured, which is the free plugin's own bar, every bar added under Announcement Bars, and the A and B variants of each. Any string in the payload was accepted before, so a forged request could open a row for it. Filter `notice_pro_analytics_bar_ids` to add one."
        },
        {
          "kind": "changed",
          "text": "the analytics screen states how long daily counts are kept. The retention period is unchanged at 90 days."
        }
      ]
    },
    {
      "plugin": "plogins-returns-pro",
      "name": "Redono Pro",
      "edition": "pro",
      "version": "1.0.10",
      "released": "2026-09-13",
      "url": "https://plogins.com/plogins-returns-pro/",
      "changelog": "https://plogins.com/plogins-returns-pro/changelog/",
      "wpOrg": null,
      "features": [
        {
          "kind": "changed",
          "text": "the report drops each batch of requests from the object cache in one call for the whole batch instead of one call per row. A 40,000 request export issued 80,000 separate deletes, and a shared Redis or Memcached answers those one round trip at a time; a drop-in that implements delete_multiple now takes a batch of 100 in one."
        },
        {
          "kind": "added",
          "text": "a runnable check for the report walk in the repository, covering the figures the single pass produces, the batch size it keeps to, and the streaming export. It is not part of the distributed package."
        }
      ]
    },
    {
      "plugin": "plogins-ticker-pro",
      "name": "Klepsidro Pro",
      "edition": "pro",
      "version": "1.0.9",
      "released": "2026-09-13",
      "url": "https://plogins.com/plogins-ticker-pro/",
      "changelog": "https://plogins.com/plogins-ticker-pro/changelog/",
      "wpOrg": null,
      "features": [
        {
          "kind": "changed",
          "text": "the note on translations said the package carries no compiled translation files and that WordPress.org language packs deliver them. Neither is true of a plugin that is not in the WordPress.org directory: the Polish, German and Spanish translations ship inside the package, under `languages/`, and nothing else could deliver them. The files stay, the sentence was wrong."
        }
      ]
    },
    {
      "plugin": "plogins-tipping-pro",
      "name": "Dankon Pro",
      "edition": "pro",
      "version": "1.0.10",
      "released": "2026-09-13",
      "url": "https://plogins.com/plogins-tipping-pro/",
      "changelog": "https://plogins.com/plogins-tipping-pro/changelog/",
      "wpOrg": null,
      "features": [
        {
          "kind": "changed",
          "text": "the report opens on the last 30 days instead of on all time. The date fields show the range in use, so it is one edit to widen it, and the CSV export covers the range shown on screen."
        }
      ]
    },
    {
      "plugin": "plogins-enquire-pro",
      "name": "Demando Pro",
      "edition": "pro",
      "version": "1.0.9",
      "released": "2026-09-12",
      "url": "https://plogins.com/plogins-enquire-pro/",
      "changelog": "https://plogins.com/plogins-enquire-pro/changelog/",
      "wpOrg": null,
      "features": [
        {
          "kind": "changed",
          "text": "enquiries that could not be deleted, because another plugin blocked the deletion, are now counted as retained and reported with a message on the erasure screen. They were previously counted as neither removed nor retained, which read as success."
        }
      ]
    },
    {
      "plugin": "plogins-locator-pro",
      "name": "Lokilo Pro",
      "edition": "pro",
      "version": "1.0.9",
      "released": "2026-09-12",
      "url": "https://plogins.com/plogins-locator-pro/",
      "changelog": "https://plogins.com/plogins-locator-pro/changelog/",
      "wpOrg": null,
      "features": [
        {
          "kind": "added",
          "text": "\"Start at line\" on the import screen. When a pass stops early the notice names the line it stopped at and the field is pre-filled with it, so uploading the same file again imports the rest. A row with a blank store_id creates a store every time it runs, so the notice also says not to start earlier than the line shown. The two bounds are filterable: locator/import_max_rows and locator/import_time_budget."
        }
      ]
    },
    {
      "plugin": "plogins-minimum-pro",
      "name": "Sojlo Pro",
      "edition": "pro",
      "version": "1.0.8",
      "released": "2026-09-12",
      "url": "https://plogins.com/plogins-minimum-pro/",
      "changelog": "https://plogins.com/plogins-minimum-pro/changelog/",
      "wpOrg": null,
      "features": [
        {
          "kind": "added",
          "text": "\"Start at line\" on the import screen. When a pass stops early the notice names the line it stopped at and the field is pre-filled with it, so uploading the same file again applies the rest. Writing product meta is idempotent, so a pass that starts too early repeats work rather than corrupting anything. The two bounds are filterable: minimum/import_max_rows and minimum/import_time_budget."
        }
      ]
    },
    {
      "plugin": "plogins-pickup-pro",
      "name": "Prenejo Pro",
      "edition": "pro",
      "version": "1.0.8",
      "released": "2026-09-12",
      "url": "https://plogins.com/plogins-pickup-pro/",
      "changelog": "https://plogins.com/plogins-pickup-pro/changelog/",
      "wpOrg": null,
      "features": [
        {
          "kind": "changed",
          "text": "the calendar export no longer builds whole WooCommerce order objects up front. The bookings column on the export screen built one for every order booked into a location in the range, for each location it lists, only to count them; the .ics download built them again in its own request and held the whole set while the file was assembled. Both now read order ids, and the download loads each order as it writes that order's calendar entry. That lowers the peak, it does not bound it: the id list and the assembled .ics text grow with the number of bookings in the range, and so does what WordPress and WooCommerce keep in the object cache for each order the loop reads. A wide enough range on a busy shop can still run out of memory. Narrow the dates if it does."
        }
      ]
    },
    {
      "plugin": "plogins-ticker-pro",
      "name": "Klepsidro Pro",
      "edition": "pro",
      "version": "1.0.8",
      "released": "2026-09-12",
      "url": "https://plogins.com/plogins-ticker-pro/",
      "changelog": "https://plogins.com/plogins-ticker-pro/changelog/",
      "wpOrg": null,
      "features": [
        {
          "kind": "changed",
          "text": "an event is recorded only for an id that is really a product, and only while the countdown is enabled. Both were accepted before, so a forged request could open a row for any number. Correction: this release read the enabled flag straight from the stored option rather than from the merged settings the countdown renders on, so on a shop that had never saved the settings screen it counted the countdown as disabled and recorded nothing. Fixed in 1.0.10."
        },
        {
          "kind": "changed",
          "text": "the analytics screen lists the 100 most viewed products and states how long daily counts are kept. The retention period is unchanged at 90 days. Stores with more than 100 products in the report saw the full list before."
        }
      ]
    },
    {
      "plugin": "plogins-peek-pro",
      "name": "Peek Pro",
      "edition": "pro",
      "version": "1.0.9",
      "released": "2026-09-10",
      "url": "https://plogins.com/plogins-peek-pro/",
      "changelog": "https://plogins.com/plogins-peek-pro/changelog/",
      "wpOrg": null,
      "features": [
        {
          "kind": "changed",
          "text": "**Show the heading** now has the same \"?\" help as every other control on the Recently Viewed screen, and the **Heading** field below reads as inactive while the switch is off, with a line saying the text you typed is kept. Before, clearing the switch left a field that looked live and quietly changed nothing."
        }
      ]
    },
    {
      "plugin": "plogins-peek-pro",
      "name": "Peek Pro",
      "edition": "pro",
      "version": "1.0.8",
      "released": "2026-09-08",
      "url": "https://plogins.com/plogins-peek-pro/",
      "changelog": "https://plogins.com/plogins-peek-pro/changelog/",
      "wpOrg": null,
      "features": [
        {
          "kind": "changed",
          "text": "an empty heading on the settings screen now means \"use the default\" rather than \"no heading\", which is what the field's placeholder already suggested and what the rest of the family does."
        },
        {
          "kind": "new",
          "text": "a \"Show the heading\" switch, so hiding the heading is still one click. It has to be its own setting now that an empty field means \"use the default\"; one field cannot carry both answers. On update, a shop that had hidden its heading by clearing the field gets the switch turned off, so nothing changes on its storefront. The `[peek_recently_viewed]` shortcode still accepts an empty title attribute."
        }
      ]
    }
  ]
}
