Build internal tools.
Remarkably fast.

Retool cuts the time it takes to build internal tools in half. Stop wrestling with UI libraries, struggling to unify data sources, and figuring out access controls. Jump straight into shipping tools that make stakeholders happy and move your business forward.

Watch Alex build an app with Retool in 4 minutes

From startups to Fortune 500s, some of the world's best teams use Retool to power their internal tools.


Assemble your app. In 30 seconds.

Almost all internal tools are made up of the same components: Tables, Dropdowns, Buttons, Text Inputs, Forms and so on. Retool provides a complete set of powerful building blocks out of the box. Spend your time getting UI in front of stakeholders, not hunting down the best React table library.

Explore the component library

const newStage = Object.assign(job_stage_form.data, { Type: select1.value })
const new_job_stages = job_stages.value.concat(newStage)
job_stages.setValue(new_job_stages)
modal1.close()
select1.setValue(null)

const index = i; // variable which is the index of the button that triggered this
const newData = Array.from(job_stages.value);
newData.splice(i, 1)
job_stages.setValue(newData);

var rawData = getProductDetails.data
var prdStlCmpLst = new Array()
for (x in rawData)
if (rawData[x]["dim_date_shops_products.material_family"] == select19.value)
prdStlCmpLst.push(rawData[x]["dim_date_shops_products.taxonomy_style"])
return prdStlCmpLst
SELECT
nps.'Product Feedback',
nps.nps_count as NPS,
feedbacks.feedback_count as Feedback,
sfdc.sfdc_count as Salesforce,
sfdc.opp_dollars as Opportunity_Dollars
from
{{npsTableCounts.data}} as nps
join {{feedbackTableCounts.data}} as feedbacks on nps.'Product Feedback' = feedbacks.FeedbackID
join {{sfdcTableCounts.data}} as sfdc on sfdc.FeedbackID = nps.'Product Feedback'
where
(
{{ multiselect2.value.length === 0 }}
OR nps.'Product Feedback' = ANY({{ multiselect2.value }})
)
     

Connect anything, together.

Retool connects to most databases and nearly anything with a REST or GraphQL API. Read in data from MongoDB, join it via SQL, record user approvals, and POST the result to Stripe's API to create invoices. Retool empowers you to work with all of your data sources inside of a single app.

See our native integrations

There’s no need to worry about storing isFetching in Redux or debouncing duplicate button clicks — Retool manages all the data fetching and UI. You only write the things that are custom to your internal tool, like the SQL queries, POST requests, or data transformers.

Start writing queries

Customize with code.

Retool is built by developers, for developers. We’ve made it highly hackable, so you won’t be limited by visual abstractions or domain-specific languages. If you can write it with JavaScript and an API, you can probably realize it in Retool.

Javascript anywhere.

You can write JavaScript almost anywhere inside of Retool, just wrap an expression with {{ }} and it’ll execute as sandboxed JS. Using Transformers, you can write larger, reusable blocks of code for manipulating data. There’s also an integrated API for directly interacting with components and queries via JS.

Write JavaScript in Retool

Extensible component structure.

It’s easy to create custom React.js components right in Retool by importing existing code or starting from scratch. You can pass data between your custom component and the Retool app and reference external JavaScript libraries via URL. Just like native components, you can place instances of your new component anywhere on the canvas.

Generate custom components

Version tracking with Git.

The internals of Retool apps are available to view and modify. Every app is a JSON blob, which we then serialize into human-readable YAML for clean diffs and pull requests. With an on-premises install and Git syncing configured, developers can create and edit Retool apps on their own branch and create PRs when changes are ready for production.

Setup Retool Git syncing

Utility libraries included.

By default, Retool includes a complete set of utility libraries that take the pain out of common JS tasks. Call Moment.js to manipulate dates and times. Use Numbro to convert and format numbers. Lean on PapaParse for CSV-to-JSON conversion. For just about anything else, there's Lodash.

See available JavaScript libraries

Deploy your tools securely.

Retool comes with the security, reliability, and permissioning that every internal tool needs. If you're concerned about data security, you can even host Retool on-premises, behind your own VPN, and in your own VPC. Contact us to get setup.

Deploy Retool on-prem in 5 minutes
Retool features
  • SAML SSO and 2FA

  • Granular access controls and audit logs

  • Versioned releases & revision history

  • On-premises deployment


Try Retool for free today.

Get started building your internal tool in under 10 minutes.