Blog
/
Product

All the quality of life changes you might have missed in 2024

Published
December 20, 2024
Last updated
December 24, 2024
Take a look at all the minor changes that have brought major improvements to Gadget over the past year.

Although 2024 included exciting features and updates like autocomponents and unlimited environments, the Gadget development team was also shipping plenty of less flashy features and bug fixes throughout the year.

Here are some of our favorite updates from the last 12 months!

  • The new upsert API
    You can now create or update records in your database automatically, depending on whether or not a record exists! Usually, when you receive data from an external service, you may not know whether a resource is already stored in your database. With the upsert API, Gadget automatically checks your data model for a record, then runs the create or update action based on the existence of that record. More details available in the docs.
  • JavaScript API playground
    Testing your APIs is easier than ever! With the new JavaScript playground, you can now run your environment’s actions in a JS console that has been pre-loaded with your Gadget app’s API client. Read the blog post for more info.
  • Authentication support for new customer accounts
    With Shopify’s recent launch of new customer accounts, you’ll need to make authenticated requests from within customer account UI extensions — and with this change, you can do that in Gadget.
    A new access control role, <inline-code>shopify-storefront-customers<inline-code> can be added to apps during Shopify connection setup, allowing for fine-grain control over which actions users can call within extensions. You can learn more about working with customer account UI extensions in the docs!
  • New <inline-code>@gadgetinc/shopify-extensions<inline-code> package
    This package makes it easier to register a session token with your Gadget app's API client. You can use it for both React and JS/TS extensions, and it works with a variety of Shopify extension types, including customer account UI or checkout UI extensions. Check out the reference docs for more information.
  • Shopify webhooks as triggers for global actions
    Want to save on data storage costs? Of course you do. Back in April, we made Shopify webhooks available as triggers for global actions, meaning you can build stateless applications that run custom code on incoming Shopify webhooks — without storing the webhook payload in the database. Details on how to use them are in the docs.
  • Run background actions in bulk
    In 2024, not only did we launch the ability to run background actions, but we also included the ability to run them in bulk. Pass a bulk action to api.enqueue like you might any other action, and it will be enqueued for execution in the background so each element of the bulk action will run as its own background action.
  • Support for React Router v7 library
    If you’re building with the default React app templates, they are now created using the React Router v7 library. It should be functionally equivalent to React Router v6. If you want to upgrade your existing apps to React Router v7, you can follow React Router's upgrade guide.
  • Manage columns in the data editor
    You can (finally!) re-order and hide columns in the data editor! Re-ordering columns is as easy as dragging the column heading into a new location, and the new order will be persisted per environment - so all users on a single environment will see the reordered columns.
    To hide a column, simply right click on the column header and select Hide 'Column name'. If you need to make them visible again, you can right click on a column and select Unhide all columns.
  • Gadget-managed shopify.app.toml files for all new Shopify apps
    New Shopify apps will come with Gadget-managed shopify.app.toml files. In most cases, you shouldn't have to touch these files at all. These root-level TOMLs are required when building Shopify extensions and we're making it easier to work on these apps as a team by handling TOML creation.
  • Made Shopify Storefront API access scopes available
    When you’re setting up your Shopify connection in Gadget, Shopify's Storefront API access scopes are now available as options during the project creation flow. If there are any other scopes you’d like to have in your app that are not available in the existing list, you also have the option to enter a comma-separated list.
  • Gadget framework linter
    Make fewer errors in your code with Gadget the built-in framework linter. The new linter will alert you to Gadget-specific issues in your project. You’ll get details and error names, with a link directly to the docs for more information, and errors will appear in the problems drawer. Keep your code clean and error-free.
  • Support for attachments in emails
    If you want to send an invoice, CSV, or picture of your cat as an email attachment using GadgetMailer, you can! Sending attachments with your emails is now possible, and you can learn how in the docs.
  • Changes to the browser code editor
    The Gadget web editor now uses CodeMirror instead of Monaco to allow for a faster and more reliable auto-complete experience.
  • General improvements to logs
    To make the local development experience as streamlined as possible, we've now included application logs, by default, to output during a sync session! As long as <inline-code>ggt<inline-code> is running, logs will be synced.You can also export log contents to a file by using the More actions button. All logs matching the search query and time range will be compiled into an <inline-code>.ndjson<inline-code> file and a link to the file will be emailed to you.
    We’ve improved log level visibility on Logs viewer by adding a colored border to the left of each log message that corresponds to the severity of the log level, so you can find what you’re looking for at a glance.
  • Improved bulk data reset modal
    The bulk data reset modal has been refreshed to make it easier to use. A bug where namespaced models were not able to be deleted through the modal was also fixed.
  • Better changelog placement
    And last but not least, the Gadget changelog is now shown on the home page of the editor, so you can find the latest bug fixes, features, and updates directly within your Gadget app. You’ll never miss a quality of life update again.

If you have any suggestions for how we can improve the Gadget platform in 2025, you can always make suggestions through our community Discord. We look forward to seeing what you build next year!

Emma Hyde
Author
Riley Draward
Reviewer
Try Gadget
See the difference a full-stack development platform can make.
Create app

All the quality of life changes you might have missed in 2024

Take a look at all the minor changes that have brought major improvements to Gadget over the past year.
Problem
Solution
Result

Although 2024 included exciting features and updates like autocomponents and unlimited environments, the Gadget development team was also shipping plenty of less flashy features and bug fixes throughout the year.

Here are some of our favorite updates from the last 12 months!

  • The new upsert API
    You can now create or update records in your database automatically, depending on whether or not a record exists! Usually, when you receive data from an external service, you may not know whether a resource is already stored in your database. With the upsert API, Gadget automatically checks your data model for a record, then runs the create or update action based on the existence of that record. More details available in the docs.
  • JavaScript API playground
    Testing your APIs is easier than ever! With the new JavaScript playground, you can now run your environment’s actions in a JS console that has been pre-loaded with your Gadget app’s API client. Read the blog post for more info.
  • Authentication support for new customer accounts
    With Shopify’s recent launch of new customer accounts, you’ll need to make authenticated requests from within customer account UI extensions — and with this change, you can do that in Gadget.
    A new access control role, <inline-code>shopify-storefront-customers<inline-code> can be added to apps during Shopify connection setup, allowing for fine-grain control over which actions users can call within extensions. You can learn more about working with customer account UI extensions in the docs!
  • New <inline-code>@gadgetinc/shopify-extensions<inline-code> package
    This package makes it easier to register a session token with your Gadget app's API client. You can use it for both React and JS/TS extensions, and it works with a variety of Shopify extension types, including customer account UI or checkout UI extensions. Check out the reference docs for more information.
  • Shopify webhooks as triggers for global actions
    Want to save on data storage costs? Of course you do. Back in April, we made Shopify webhooks available as triggers for global actions, meaning you can build stateless applications that run custom code on incoming Shopify webhooks — without storing the webhook payload in the database. Details on how to use them are in the docs.
  • Run background actions in bulk
    In 2024, not only did we launch the ability to run background actions, but we also included the ability to run them in bulk. Pass a bulk action to api.enqueue like you might any other action, and it will be enqueued for execution in the background so each element of the bulk action will run as its own background action.
  • Support for React Router v7 library
    If you’re building with the default React app templates, they are now created using the React Router v7 library. It should be functionally equivalent to React Router v6. If you want to upgrade your existing apps to React Router v7, you can follow React Router's upgrade guide.
  • Manage columns in the data editor
    You can (finally!) re-order and hide columns in the data editor! Re-ordering columns is as easy as dragging the column heading into a new location, and the new order will be persisted per environment - so all users on a single environment will see the reordered columns.
    To hide a column, simply right click on the column header and select Hide 'Column name'. If you need to make them visible again, you can right click on a column and select Unhide all columns.
  • Gadget-managed shopify.app.toml files for all new Shopify apps
    New Shopify apps will come with Gadget-managed shopify.app.toml files. In most cases, you shouldn't have to touch these files at all. These root-level TOMLs are required when building Shopify extensions and we're making it easier to work on these apps as a team by handling TOML creation.
  • Made Shopify Storefront API access scopes available
    When you’re setting up your Shopify connection in Gadget, Shopify's Storefront API access scopes are now available as options during the project creation flow. If there are any other scopes you’d like to have in your app that are not available in the existing list, you also have the option to enter a comma-separated list.
  • Gadget framework linter
    Make fewer errors in your code with Gadget the built-in framework linter. The new linter will alert you to Gadget-specific issues in your project. You’ll get details and error names, with a link directly to the docs for more information, and errors will appear in the problems drawer. Keep your code clean and error-free.
  • Support for attachments in emails
    If you want to send an invoice, CSV, or picture of your cat as an email attachment using GadgetMailer, you can! Sending attachments with your emails is now possible, and you can learn how in the docs.
  • Changes to the browser code editor
    The Gadget web editor now uses CodeMirror instead of Monaco to allow for a faster and more reliable auto-complete experience.
  • General improvements to logs
    To make the local development experience as streamlined as possible, we've now included application logs, by default, to output during a sync session! As long as <inline-code>ggt<inline-code> is running, logs will be synced.You can also export log contents to a file by using the More actions button. All logs matching the search query and time range will be compiled into an <inline-code>.ndjson<inline-code> file and a link to the file will be emailed to you.
    We’ve improved log level visibility on Logs viewer by adding a colored border to the left of each log message that corresponds to the severity of the log level, so you can find what you’re looking for at a glance.
  • Improved bulk data reset modal
    The bulk data reset modal has been refreshed to make it easier to use. A bug where namespaced models were not able to be deleted through the modal was also fixed.
  • Better changelog placement
    And last but not least, the Gadget changelog is now shown on the home page of the editor, so you can find the latest bug fixes, features, and updates directly within your Gadget app. You’ll never miss a quality of life update again.

If you have any suggestions for how we can improve the Gadget platform in 2025, you can always make suggestions through our community Discord. We look forward to seeing what you build next year!

Interested in learning more about Gadget?

Join leading agencies making the switch to Gadget and experience the difference a full-stack platform can make.