Open demo

Build internal apps using only backend code

Turn your script or CLI into a tool everyone on your team can securely use.
Get started
Install
pnpm add @internalstack/server
Declare inputs in backend code
server.ts
import { internalStack } from '@internalstack/server'
import { addCustomerToDatabase, sendWelcomeEmail } from './utils'

const server = await internalStack('live_psk_5b2d902f24a057349d9f2d1c385fef7c59')

server.statefulSession(async(io, { user: onboardedBy }) => {
  const customerName = await io.input.text('Customer name')
  //    ^ This won't resolve until validated input is received!
  const customerEmail = await io.input.text('Customer email')
  await addCustomerToDatabase({
    customerName,
    customerEmail,
    onboardedBy,
    onboardedAt: new Date().toISOString(),
  })
  await sendWelcomeEmail(customerEmail)
})
The UI is automatically generated and presented to the authenticated user
internalstack.dev/myapp
Features

Why build on InternalStack?

Focus on business logic

No more CORS errors, session expired errors, or missing authentication header messages.

Secure

The server runs entirely on-premise. No code or secrets are transmitted.

SSO built in

Users are authenticated and authorized before they hit your server.

Fits right into your workflow

Your code gets committed to your own existing repositories.
Pricing

A plan for every need

Developer

A basic plan for individuals, startups, and indies.

Free Forever

  • 15 developer seats free
  • Full component library
  • Unlimited apps
  • Unlimited app users

Enterprise

A comprehensive solution for large organizations with advanced needs.

$34.99

/seat/mo

  • Everything in free
  • Unlimited developer seats
  • Unlimited teams (with no limit on team size)
  • Fine-grained app access
  • SAML/OIDC SSO
  • SCIM & Directory Sync
  • Audit logs

Get started today

Build an internal app with authentication in 5 minutes