# Supported languages and stacks

Tokay reads the project files to choose the runtime, framework, and start command, so most applications do not need platform specific build configuration. This page describes the environments we have verified and what to do when Tokay cannot identify a runnable Service.

## Supported runtimes

Tokay supports Node.js, Bun, Python, Go, Ruby, Rust, PHP, and static HTML.

Version requirements in the project are respected. Examples include a `go.mod` toolchain line, a Rust toolchain file, or a PHP version requirement in Composer. When the project does not pin a version, Tokay chooses a current supported version.

## Verified frameworks

The following frameworks have been tested end to end. An unlisted framework can still work when it uses a supported runtime and a normal build or start command, and plain scripts work in every supported language.

- **Node.js and Bun.** Express, Next.js, Nuxt, SvelteKit, Astro, Remix, Koa, Fastify, Hapi, NestJS, Hono, Restify, SolidStart, and Qwik.
- **Python.** Django, FastAPI, Flask, Starlette, Litestar, Quart, Falcon, Bottle, Pyramid, and Streamlit.
- **Ruby.** Rails, Sinatra, Roda, Hanami, Grape, Padrino, and Cuba.
- **PHP.** Laravel, Symfony, Slim, Lumen, CodeIgniter, and CakePHP.
- **Go.** net/http, Fiber, Gin, Echo, Chi, Gorilla/mux, and Beego.
- **Rust.** Axum, Actix-web, Rocket, Warp, Poem, Tide, and Salvo.

## Static site generators

A static site builds during deployment and is served as a web app with HTTPS and a URL like any other.

- Hugo, Astro, Eleventy, Gatsby, Docusaurus, VitePress, and Next.js (static export).

## Database migration tools

When the code uses one of these tools, Tokay runs the migration as part of the deploy. [Database migrations](database-migrations.md) describes the rehearsal, snapshot, and approval safety around every run.

- **Node.js.** Prisma, Drizzle, Sequelize, TypeORM, MikroORM, Knex, and Graphile Migrate.
- **Python.** Django, Alembic, and Aerich.
- **Ruby.** ActiveRecord.
- **PHP.** Eloquent.
- **Go.** golang-migrate and Atlas.
- **Rust.** SQLx and Diesel.

## Package managers

Tokay detects the package manager from the project's manifest and lockfile and installs dependencies with it.

- **Node.js and Bun.** npm, pnpm, Yarn, and Bun.
- **Python.** pip, uv, Poetry, PDM, and Pipenv.
- **Ruby.** Bundler.
- **PHP.** Composer.
- **Go.** go modules.
- **Rust.** Cargo.

## System tools are part of the runtime

Some applications call operating system packages to generate PDFs, process images, or run a headless browser. Tokay detects those calls and includes the required tools in the Service environment when supported.

## Make an unusual project detectable

Make sure the code includes a clear entry point and uses a supported runtime. If Tokay does not find a runnable Service, add or clarify an entry point such as `server.js`, `app.py`, or `index.html`, then push or analyze the code again.

See [How Tokay sets up your app](how-tokay-sets-up-your-app.md) for the full detection and review process.
