Gadget is free to use for small applications which don't receive much traffic. After the free tier limits are reached, Gadget charges fixed fees for units of request CPU time, stored data, network transfer, and number of reads/writes performed on a database.
Gadget runs on serverless systems throughout the whole stack, so you're never charged for a running unit of capacity that you aren't using, or unused database capacity.
We offer documentation, a Discord and chat support (with no SLA) to all of our users. On our paid plans, we also offer pair programming and solutions engineering calls to help unblock developers on their projects.
Why is there no open-source version?
Much of the magic of Gadget comes from the hosted, batteries-included approach we've taken. Gadget runs a lot of infrastructure behind the scenes so you don't have to, like highly available databases, event queues, dataflow processors, operational tooling, and more. We don't want you to have to set that all up yourself -- it's too much work, and we want to do it for you. As a result, we're not able to offer the developer experience we're aiming for in the open-source model.
If Gadget is missing a feature I need, what should I do?
Check out the roadmap for upcoming feature updates or let the Gadget team know by dropping a request within our Discord.
Where do I build my APIs in Gadget
In Gadget, you don't need to manually build your APIs. Gadget automatically generates a powerful GraphQL API for your application based on the Models you create.
Why does Gadget use a GraphQL API?
Gadget uses GraphQL APIs over REST and SOAP for efficiency, allowing developers to request precise data for specific needs without extra requests. GraphQL provides built-in type checking and schema validation which helps to enforce data consistency. The thriving GraphQL ecosystem includes a number of tools, like the API Playground, that offer developers enhanced flexibility and a better developer experience.
However, if you prefer not to work with GraphQL directly, Gadget alternatively offers client packages for JavaScript (JS) and React.
Can I migrate an existing published app onto Gadget?
Yes, it's totally possible! Migrating an existing application to Gadget involves recreating your data models, importing data, and rewriting custom logic within Gadget's environment.
While there isn't a one-click migration solution, Gadget's tools make the process more manageable. Our best suggestion would be to reach out in our Discord server, where members of our support and engineering teams can reach out to gain further understanding of your current application structure and the best efficient solution to do so.
Can I import an existing database schema into Gadget?
Currently, Gadget does not support direct schema import. However, you can recreate your existing schema using Gadget's data modeling tools and then import your data.
Does Gadget provide solutions to handle GDPR compliant apps?
Yes, especially when working with Shopify. Gadget has a built-in Shopify GDPR request model that makes it easy to set up and respond to Shopify's mandatory GDPR webhooks. This ensures that your app meets the security and user data protection requirements of Shopify's App Store policies.
Database reads are counted by counting the number of rows returned out of the Postgres database for your application.
For example, if you have a table with 100 records in it, and only 5 of them have the published field set to true, and you make an API to only fetch records with the published field set to true, you'll get 5 records returned and be charged for 5 database reads.
If I require IP whitelisting is Gadget able to provide me with an IP address?
Gadget's inbound IP address is not stable and cannot be allowlisted for DDOS prevention.
However, Gadget's outbound IPs are stable. Gadget connects to external services from the following IP addresses, with the exception of Shopify:
35.226.236.42
35.193.24.27
34.133.249.87
34.30.198.177
104.197.69.10
You can query an up-to-date list of Gadget's outbound IPs by making an unauthenticated request to the https://app.gadget.dev/auth/api/outbound-ips, which will return this list of IP addresses as a JSON array.
For requests to Shopify, Gadget may use a different IP address in select circumstances:
For any request made within your application's codebase, including those to Shopify, Gadget will use the IPs above.
For requests executed by the Gadget's internal platform to run syncs, webhook reconciliations, or extend webhook payloads before the data arrives at your application, Gadget may use a different, ephemeral pool of IP addresses. These IPs change frequently, so they are not listed here. The use of these IPs is an optimization that lowers your outbound bandwidth costs, and is Shopify-specific.
Why is Shopify emailing me about unusual activity in the IP addresses making requests using my API keys?
TL;DR: This is normal behavior and these emails require no action.
Shopify sometimes sends automated emails to app developers when it detects major changes to the IP addresses making requests to their API. Because Gadget uses a GCP's large pool of ephemeral IP addresses for Shopify requests, Shopify can witness a wide variety of GCP's IP addresses in a given time period. From Gadget's perspective, this behavior is normal and expected, as it allows maximum network scalability, which is important for high-scale events like BFCM. However, Shopify mistakenly labels it as unusual. Gadget can't disable this reporting in Shopify's systems though, so occasionally you may receive these automated detections emails. As best we can tell, Shopify's detection systems eventually grow accustomed to this behavior and stop sending these emails.
Gadget's outbound requests to Shopify always use the shopify-api-node user agent, which Shopify's email should also report as the source of the request.
Can I use my own domain for my Gadget app?
Yes, Gadget supports custom domains for your Gadget app. Read more in the Custom domains guide.