What Gadget gives You
Gadget is a full featured application development platform with many tools, features, and integrations that help you build things quickly. Here's what Gadget gives you:
A place to store data
Every Gadget application gets a hosted database for storing state. You can read and write records to your database from anywhere on the internet, and Gadget runs and scales the database for you. The shape of the data stored in the database is defined by your application's Models.
Similar to: Postgres, MongoDB, Firebase, etc
A place to run backend JavaScript code
Every Gadget application can run server-side JavaScript code to implement business logic. Things like audit logging, API integrations, image processing, or anything specific to the problem you are trying to solve are all possible in Gadget because you can write backend code. Gadget runs your JavaScript on a hosted, scalable cloud functions platform using node.js. This means you can use packages from NPM so you can leverage all the work the community has already done, and means you don't have to spend time scaling your application or worrying about infrastructure. Server-side code is usually attached to Actions of a specific model, which you can read about in Extending with Code, or in HTTP routes.
Similar to: AWS Lambda, Google Cloud Functions, etc
A shuttle for data in other systems
Gadget has purpose-built, high-quality API integrations with a number of third-party platforms for easily reading and writing data to them called Connections. The Shopify connection for example allows a full, bi-directional data sync between a Shopify store and your Gadget app, handling all the webhook processing and background data syncing necessary to keep your store and your app in sync. Shopify resources appear just like any other Model in your Gadget app, so you can extend them with your own fields, query them via the API, and compute with them using Gelly.
A rich API and API Client
Gadget generates a powerful GraphQL API for your application for accessing your data. You can read and write groups of records or related records at the same time, and keep your frontend performant by only fetching the data you really need. The API is fully permissioned and can be extended with your own problem-specific endpoints. Gadget implements your GraphQL API using an advanced database query compiler, so you don't have to worry about N+1 query issues or join performance.
For more information see our example API for a blogging app.
Gadget also generates a JavaScript client for interacting with your API which makes it much easier to connect and query. If you are using JavaScript, you can install your API client with one npm install
command and spend your time building a frontend instead of worrying about authorization headers. For TypeScript users, the API client is fully typed with the schema of your data so you can be sure you are traversing your data correctly.
Similar to: Hasura
A place to store images and other files
Many apps store files for their users, like profile images for users, product images, PDF invoices or receipts, or uploaded CSVs. Every Gadget app comes with secure, scalable file storage built-in with easy-to-use APIs for uploading and managing files. Files in Gadget are permissioned using the same permissions system as other data, so it's easy to grant different users access to only the files they should be able to see.
Similar to: Amazon S3, NFS
A high performance expression language
Application developers often need the ability to summarize or aggregate stored data to power various parts of their application, and Gadget helps with this using Gelly. Unlike many other platforms, Gadget applications aren't limited to just storing data, and instead can also do computations using it, including across relationships. If you need to count things, sum things, or do any other kind of computation, Gadget can do it declaratively and performantly on the server side.
Similar to: Excel formulas, SQL, etc
An authentication system
Each Gadget app comes with an authentication system built in that supports user-based and API key-based authentication. The authentication system is built using existing pieces Gadget like Models and Actions, so you can fully customize it to suit your needs. Gadget apps can have open signups, or sync the user list from a different system, or have no user-based auth at all, and the data in a Gadget app can be world readable or completely locked away until someone has signed in -- it's up to you. See Access Control for more information.
Similar to: Firebase Auth, Auth0
A secure environment
Gadget takes responsibility for much of your application's security and allows you to customize where you see fit. Each Gadget application is secure by default where only those authorized can access specific parts of data, and you can set up the right Access Control logic for your specific problem. The platform then runs secure servers, operating systems, load balancers, CDNs, and databases to keep your application safe from attackers. Gadget also takes responsibility for updating all these components, giving you your time back to actually build your application.
Similar to: Heroku, Google Cloud Run
Hosting and a URL
Every Gadget app is hosted and accessible from the moment it is created at https://your-subdomain.gadget.app
. There's no deploy step or setup process to move your app into production -- it's ready to go as soon as you are. This is because Gadget development environments run on the same infrastructure as the production ones, so deploying is really just publishing the latest version of your app to production.
Similar to: Heroku, Google Cloud Run
Operator tooling
The Gadget Editor includes excellent tooling for understanding how your application is working in development and production. Each application has a dedicated log viewer where your logs and the platform's logs are both searchable. Each database table in an app also has a dedicated, operator-facing data viewer for quickly inspecting record data.
Similar to: Splunk, AWS CloudTrail, SQL console apps