Published

Updated

Launch Log: Two-way form migrations, a modernized chart block, and tighter board permissions

GravityMigrate 2.0.0 moves forms between Gravity Forms and seven other form plugins, GravityCharts modernizes its block in the WordPress editor, and GravityBoard tightens how board permissions are enforced.

Five products shipped on September 10, 2026. The headline is GravityMigrate 2.0.0, which now moves forms between Gravity Forms and seven other form plugins in both directions. GravityBoard gets a security update and fixes that every site should install, and GravityCharts sees a rebuilt block preview plus a long run of fixes.

GravityBoard v1.4.5

This update to GravityBoard tightens how permissions are enforced and clears up a set of bugs around card editing, due dates, and notifications.

The security work addresses how permissions are checked when a card is viewed or changed, and when entry notes and attachments are turned off. We recommend updating as soon as possible.

Checkbox and multiselect fields on a card are now edited with multi-value controls, where they previously rendered as a single-choice control. A required checkbox or multiselect field left empty is also caught by validation now, instead of passing.

Due dates better behave the way their labels describe. A card due today no longer shows as “Overdue” before it is. In the board filters, “Due in the next day” now includes tomorrow rather than matching only today, and “Due in the next week” and “Due in the next month” cover the full periods.

Assignee notifications work again. Notifications set to “Assignee(s) Added”, “Assignee(s) Removed” and “Assignee(s) Updated” never sent when a card’s assignees changed, and the {gravityboard_assignee_email} and {gravityboard_assignee:display_name} merge tags arrived as literal text. Turning off a board’s “Trigger Form Notifications” setting also stops notifications now, where they previously kept sending.

We also fixed several bugs that caused data loss when editing and creating cards. Other fixes in this release:

  • Checklist editing not working for users who had the capability, based on board configuration
  • Errors uploading files while creating a new card now keep the form open, so you can try again
  • Pressing Escape while editing a field closed the whole card instead of the field, and in Safari the unsaved-changes prompt could flash and disappear without being answered. Escape now leaves the field and puts the cursor back on it
  • Embedding more than one board on a page showed nothing for the second board. Administrators now see a message explaining that one board renders per page
  • A board whose form has been deleted now shows a notice

GravityCharts v1.21.0

This update to GravityCharts modernizes the chart block in the WordPress editor and fixes a range of issues affecting static image charts and chart descriptions.

The chart block preview now renders inside the editor canvas, following the block’s move to WordPress block API version 3. Pages saved by earlier versions are unaffected. Pages holding a static image chart also load faster, because the chart’s entries are fetched once instead of twice.

Conditional logic picks up three changes:

  • Date filters have a clear button, so a date can be emptied without selecting and deleting the value
  • The date picker’s calendar and clear buttons sit inside the field and level with the value, so a date field is easier to pick out
  • Dynamic Lookup filters take their choices directly from Gravity Forms Lookup Field 1.8 or newer, falling back to the previous method on older versions

Most of this release is fixes:

  • A static image chart lost its Wide and Full width alignment on the front end
  • A chart placed after a static image chart was left blank on the front end
  • A static image chart added through the chart block or the GravityView widget had {aria_label} as its alternative text instead of a description of the chart
  • Chart descriptions showed HTML character codes instead of punctuation when a field label or value contained an ampersand or a quote
  • Duplicating a chart dropped the original name, so the copy was named “- Copy 1” instead of “Original Name – Copy 1”
  • A chart grouped by a field populated by GP Populate Anything (Gravity Wiz) showed the choices saved on the field instead of the populated ones, and left out every entry holding a populated value, when GP Easy Passthrough had an entry to pass through on the same form
  • Opening a page holding a chart block marked the page as having unsaved changes
  • The chart block’s preview in the editor labeled its data points “[object Object]” instead of the value, so the preview did not match the published page

Developer updates

  • GravityChart() takes the chart’s ID as its first argument instead of the chart’s position on the page. Pages saved before this release still pass the position.
  • Every chart that renders carries its ID in a data-gk-gravitycharts-chart attribute, except a chart block that renders a static image.
  • GravityKitGravityChartsAPI::get_chart_js() and GravityKitGravityChartsAPI::get_quick_chart() accept an already-fetched chart as their last argument, so a caller that has one does not build it again.
  • The chart block logged a JavaScript error when no form was selected on sites with SCRIPT_DEBUG enabled.
  • GravityCharts now uses the current GravityView hooks instead of ones deprecated in GravityView 1.32.0.

GravityExport v1.15.1

This update to GravityExport fixes two issues that could send a scheduled export to the wrong storage destination, or to none at all.

Scheduled exports of forms with more than 500 entries could not reach an FTP or SFTP destination, failing with “Unable to connect to host at port 21” regardless of the feed’s settings. Separately, an export could be delivered to another feed’s storage destination when two feeds ran during the same request.

GravityMigrate v2.0.0

GravityMigrate 2.0.0 is the biggest release the product has had. Forms now move between Gravity Forms and seven other form plugins in both directions, the interface has been redesigned, migrations can run in the background, and exports can carry uploaded files inside them. It also includes security work, so we recommend updating.

Migrating from another form plugin covers Contact Form 7, Fluent Forms, Formidable Forms, Forminator, Ninja Forms, WPForms, and WS Form. Field types, labels, required fields, choices and their stored values, placeholders, default values, conditional logic, notifications, and confirmations all come across where the destination supports them. Anything the destination cannot represent is reported on screen during the migration rather than dropped silently. Contact Form 7 has no conditional logic, time field, or password field, for example, so those are named as they are converted.

Imports and exports run in the background now, so you no longer need to keep the tab open. An export can also bundle the uploaded files inside the migration file, which means you can generate a migration file from a site that is no longer reachable. Files from the Gravity Forms Signature Add-On migrate with their entries.

The redesigned interface improves keyboard focus behavior and adds aria live announcements for screen readers. The browser’s Back and Forward buttons move through the wizard, and a step can be linked to or reloaded without losing your place. Settings are no longer carried across by default, and overwriting the destination’s settings asks for confirmation first. Gravity Flow activity history imports on destinations that do not have Gravity Flow installed yet.

On the security side, access control on the migration endpoints is hardened. A migration file’s contents are handled more carefully when they are written into the destination site, so a file from an untrusted source cannot modify the site. A file whose name hides a disallowed extension behind an allowed one, such as photo.php.png, is refused wherever a migration file names the files it carries.

Interrupted migrations are handled better throughout. Leaving the page during a migration your browser is running frees the site immediately, instead of refusing the next import for two minutes with “an import is already in progress”. If a run was interrupted some other way, the Confirm step says so and counts down, rather than letting you press Import and be turned away. Your uploaded file is kept either way. Reloading or closing the tab during a browser-run migration now asks you to confirm first.

Other fixes in this release:

  • Canceling an import that was running in the browser could leave “an import is already in progress” showing for two minutes if the server stopped the request while it was still deleting the uploaded file. The site is free for a new import before the file is removed
  • A form submitted by a visitor during an import could conflict with the migration entry IDs
  • An export that was abandoned part way left its record of processed posts behind, so every later export silently left those pages and posts out while still reporting success
  • A Gravity Wiz Nested Forms field pointing at a form that was not in the migration file could halt the import
  • An export carried some settings that were not selected
  • An export could stop partway when a single uploaded file could not be read. That file is now left out of the migration file and named as left out after the export finishes

Developer updates

New filters, documented in the GravityMigrate filter reference:

  • gk/gravitymigrate/background/enabled turns background migrations off, or forces the browser-driven path.
  • gk/gravitymigrate/export/batch-size adjusts how much an export processes per step.
  • gk/gravitymigrate/cron/clear-import-interval and gk/gravitymigrate/cron/clear-export-interval change how long staged import files and finished exports are kept.
  • gk/gravitymigrate/import/signature/source-url modifies the URL a Signature Add-On image is fetched from during import.
  • gk/gravitymigrate/export/file-size-limit sets how many bytes of uploaded files an export packages inside the migration file. Files past the limit stay on the source site and are downloaded during the import.
  • gk/gravitymigrate/export/max-candidate-files caps how many uploaded files an export considers packaging (default: 20,000).
  • gk/gravitymigrate/import/packaged-file-types widens the file types an import will accept out of a migration file. It cannot widen what counts as safe: the disallowed extensions are not filterable.

The WP-CLI command wp gk migrate export also adds --include-files to package the uploaded files inside the migration file.

GravityView v3.3.5

This update to GravityView restores Address field Country searching and fixes the merge tag pickers in the View editor, both broken by changes in recent Gravity Forms releases.

Three Country problems are fixed. Searching by country returned no entries submitted since Gravity Forms 3.0.3, which stores the country as its two-letter code. A Country input added to a View on its own showed the code (for example, “PR”) instead of the country name. Searching Country also matched every country whose name contains what was searched, so “US” returned entries from Australia and Austria too.

In the View editor, every merge tag picker showed open and unstyled on Gravity Forms 3.1.1 and newer. We also fixed a View setting supplied by an add-on that could place unfiltered markup in the View editor.

In summary

GravityBoard tightens permission enforcement and fixes assignee notifications and due date handling, GravityCharts moves its block to the current WordPress block API and clears a long list of chart rendering issues, GravityExport sees fixes for scheduled exports reaching the wrong storage destination, GravityMigrate gains two-way migration with seven other form plugins along with background migrations and a redesigned interface, and GravityView restores Address field Country searching.

As always, we recommend updating to the latest versions to benefit from these improvements and to ensure compatibility across the GravityKit suite!