{"id":350541,"date":"2026-08-27T14:20:17","date_gmt":"2026-08-27T14:20:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/scriba\/"},"modified":"2026-09-08T13:44:46","modified_gmt":"2026-09-08T13:44:46","slug":"wiwi-forms","status":"publish","type":"plugin","link":"https:\/\/ky.wordpress.org\/plugins\/wiwi-forms\/","author":18529643,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1","requires":"7.0","requires_php":"8.4","requires_plugins":null,"header_name":"Wiwi Forms - Form Builder","header_author":"Naiche","header_description":"A clean, non-bloated form builder with encrypted entry storage, email delivery tracking, and full GDPR\/AVG compliance. No upsells, no jQuery, no external dependencies.","assets_banners_color":"","last_updated":"2026-09-08 13:44:46","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/wiwi-forms\/","header_author_uri":"https:\/\/profiles.wordpress.org\/naiches\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":88,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"naiches","date":"2026-08-27 14:20:00","revision":3669039},"1.0.1":{"tag":"1.0.1","author":"naiches","date":"2026-09-08 13:44:46","revision":3686751}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[728,358,35294,2253,131785],"plugin_category":[],"plugin_contributors":[195720],"plugin_business_model":[],"class_list":["post-350541","plugin","type-plugin","status-publish","hentry","plugin_tags-bootstrap","plugin_tags-contact-form","plugin_tags-encrypted","plugin_tags-form-builder","plugin_tags-gdpr","plugin_contributors-naiches","plugin_committers-naiches"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/wiwi-forms.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Wiwi Forms is a lightweight WordPress form builder designed for developers and site owners who want a clean, fast, and privacy-focused form solution without the bloat.<\/p>\n\n<p><strong>About the name:<\/strong> Wiwi Forms is built and maintained by Wiwi Websolutions, alongside Wiwi Cookie Consent.<\/p>\n\n<p><strong>Key Features:<\/strong><\/p>\n\n<ul>\n<li>Drag-and-drop form builder with 17 field types and multi-step forms<\/li>\n<li>Encrypted entry storage (libsodium) with a dedicated site key<\/li>\n<li>Encrypted file uploads on disk<\/li>\n<li>AJAX form submission (no page reload)<\/li>\n<li>Bootstrap 5 form classes \u2014 works natively with Bootstrap themes<\/li>\n<li>Email notifications with delivery tracking (sent\/failed status per entry)<\/li>\n<li>GDPR\/AVG\/ePrivacy compliance: encrypted storage, auto-delete retention, consent field<\/li>\n<li>Anti-spam: honeypot, time token, rate limiting, math captcha<\/li>\n<li>No tracking cookies or sessions; one short-lived functional cookie for non-JavaScript submissions; fully cache-compatible (LiteSpeed, WP Rocket, Cloudflare)<\/li>\n<li>jQuery-free front end; the admin settings screen uses WordPress's bundled colour picker<\/li>\n<li>English + Dutch translations included<\/li>\n<\/ul>\n\n<p><strong>Field Types:<\/strong><\/p>\n\n<p>Text, Textarea, Select, Radio, Checkbox, Number, Email, Phone (with country prefix), Date\/Time, File Upload, Hidden, Math Captcha, HTML, Heading, Separator, GDPR Consent, Page Break.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>wiwi-forms<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the 'Plugins' menu<\/li>\n<li>Go to Wiwi Forms \u2192 Add New to create your first form<\/li>\n<li>Use the shortcode <code>[wiwi-forms id=\"X\"]<\/code> to embed forms<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20wiwi%20forms%20gdpr%20compliant%3F\"><h3>Is Wiwi Forms GDPR compliant?<\/h3><\/dt>\n<dd><p>Yes. All form entries are encrypted with libsodium before storage. File uploads are encrypted on disk. An auto-delete retention policy lets you purge data after a configurable number of days. The GDPR Consent field auto-links to your Privacy Policy, Terms, and Cookie Policy pages.<\/p><\/dd>\n<dt id=\"does%20wiwi%20forms%20use%20cookies%3F\"><h3>Does Wiwi Forms use cookies?<\/h3><\/dt>\n<dd><p>Wiwi Forms uses no tracking cookies, sessions, or localStorage. On non-JavaScript submissions, it sets one functional cookie containing a random token for up to five minutes so the form can be re-populated after the redirect. The cookie is HTTP-only, SameSite=Lax, and Secure on HTTPS. Forms remain compatible with page caching solutions.<\/p><\/dd>\n<dt id=\"does%20wiwi%20forms%20require%20jquery%3F\"><h3>Does Wiwi Forms require jQuery?<\/h3><\/dt>\n<dd><p>The front end loads no jQuery. The admin settings screen uses WordPress's bundled colour picker, which depends on jQuery.<\/p><\/dd>\n<dt id=\"does%20wiwi%20forms%20support%20wordpress%20multisite%3F\"><h3>Does Wiwi Forms support WordPress multisite?<\/h3><\/dt>\n<dd><p>Install and activate Wiwi Forms separately on each site. Network activation is not supported.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Added: every submission is now scored for spam and the score is recorded with the entry, visible as a column in the entries list and as a breakdown of the signals that fired. Nothing is blocked, held back or filtered on that score in this release \u2014 it is recorded so the thresholds can be set from real data before anything acts on them. Existing behaviour is unchanged.<\/li>\n<li>Security: files attached to a conditionally hidden upload field were stored without any of the field's checks \u2014 allowed types, blocked types, size and count were all skipped.<\/li>\n<li>Security: a solved captcha could be reused indefinitely. Each challenge is now single-use and expires, while still working behind full-page caching.<\/li>\n<li>Security: decrypted copies of uploaded files could be left behind in the server's temporary directory after an interrupted download or a mail failure.<\/li>\n<li>Fixed: the encryption key is no longer derived from the WordPress salts, so rotating them no longer makes existing entries and uploads unreadable. Data saved before this update is still readable.<\/li>\n<li>Fixed: auto-delete retention deleted the entry but kept its uploaded files on disk permanently.<\/li>\n<li>Fixed: draft, private and trashed forms still rendered and accepted public submissions.<\/li>\n<li>Fixed: a submission could report success after an uploaded file failed to save.<\/li>\n<li>Fixed: exporting entries from more than one form labelled every row with the first form's fields.<\/li>\n<li>Fixed: the Apply button below the entries list did nothing.<\/li>\n<li>Fixed: on multi-step forms, headings, separators and HTML blocks appeared on every step at once.<\/li>\n<li>Fixed: the fallback used when JavaScript is unavailable submitted nothing.<\/li>\n<li>Fixed: large uploads are encrypted in chunks instead of being held in memory whole.<\/li>\n<li>Fixed: database changes are now applied when the plugin updates, not only when it is activated.<\/li>\n<li>Changed: building forms now requires an administrator, matching the permission already needed to read submissions.<\/li>\n<li>Removed: the entries search box, which could never match anything because entries are encrypted at rest.<\/li>\n<li>Fixed: double-submit protection did nothing. The script disabled a hidden field that shares the submit button's name instead of the button itself, so the button stayed live and a second click sent the form again \u2014 creating duplicate entries.<\/li>\n<li>Fixed: behind a full-page cache, forms eventually stopped accepting submissions with \"This form has expired\". The submit nonce is no longer written into cacheable HTML at all; JavaScript obtains it from the uncacheable token endpoint before submission, while the signed time token preserves the non-JavaScript path for public forms.<\/li>\n<li>Fixed: the token refresh could be refused for a second visitor on the same network within five seconds, because the rate limit counted everyone behind one connection as one visitor. The limit now applies only to issuing new captchas, which is what it was there to protect.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"A clean, non-bloated form builder with encrypted entry storage, email delivery tracking, and full GDPR\/AVG compliance.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/350541","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=350541"}],"author":[{"embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/naiches"}],"wp:attachment":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=350541"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=350541"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=350541"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=350541"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=350541"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=350541"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}