Language Support
Learn which programming languages Heroku supports, and how you can enable hundreds more.
Heroku is for languages
We built Heroku, our fully managed container-based cloud platform, to make it easy for you to run apps written in a variety of programming languages, including first-class support for .NET, Python, Java, PHP, Node.js, Ruby, Go, Scala, and Clojure. Languages are at the heart of what we do — because the languages we support are at the heart of your applications.
Heroku is for choice
Heroku is polyglot—we embrace all languages. Whether you’re part of a team or company built around a single language, a large enterprise using several languages across the board, or a startup building a complex microservice architecture utilizing multiple languages, your apps will be at home here.
Languages with first-class support
The following programming languages receive first-class support on Heroku. This means our dedicated language specialists constantly work at ensuring that the latest language versions, language frameworks and other language features are maintained, patched and fully supported on Heroku.

Python
Whether you’re building with frameworks like Django or FastAPI, or crunching data with NumPy, Heroku stays out of the way. Easily deploy anything from bespoke microservices to complex, database-backed web apps.

.NET
Build and deploy applications in C#, F#, and Visual Basic, using frameworks like ASP.NET Core and Blazor, all with the simplicity and flexibility of the Heroku platform.
Java
Build microservices with Groovy and Ratpack, web apps with minimal fuss using Spark, and high performance web apps with Spring Boot/Spring Cloud, using a range of JDKs.

Node.js
Build front end apps, back end apps, or a combination of both with common Node.js frameworks and libraries like Express, Fastify, React, Ember.js, Vue and more.

Go
Whether you prefer Go’s stdlib, or frameworks like Negroni and Gin, Heroku gets out of the way, letting you build and deploy network services, microservices and high-traffic API endpoints, easily, and scalably.

PHP
Push your code, and let Heroku handle the details – with automatic installation of the PHP version and extensions that your app needs, support for your favorite frameworks, web servers that “just work”, and trivial scalability.

Ruby
Whether you prefer frameworks like Sinatra or Rails, or getting your hands dirty with Unicorn or WebSocket, or using the MRI or JRuby, Heroku’s rock-solid Ruby support delivers.

Scala
Take your Scala solutions, whether microservices built with Finagle, or full-stack solutions built with Play, and combine them deploy it to the cloud, adding to them any of our integrated add-on services such as Treasure Data, Neo4j or Cassandra.

Clojure
Build and deploy Leiningen-based applications with ease, whether they’re micro-services built on libraries like Ring and Compojure, more complete solutions based on Luminus and Pedestal, or front-end apps using ClojureScript and Om.
Supporting other languages via Buildpacks
Support for a language is enabled via Buildpacks, scripted build processes that let Heroku’s polyglot systems handle any language for which a Buildpack exists. You can use any Buildpack contributed by our community, or roll your own.
Buildpacks
Part of the Elements Marketplace, buildpacks developed by the Heroku community let you extend the polyglot Heroku platform in any number of directions. Choose from over 1200 custom-built buildpacks.
Extensibility
If you can’t find what you’re looking for, or you need to customize an existing buildpack, use Heroku’s open Buildpack API to support the language of your choice, in your way.
Heroku Language Support FAQ
What programming languages does Heroku officially support?
Heroku provides official, first-class support for a wide range of modern programming languages. The officially supported languages are:
Official support means that the buildpacks and runtimes for these languages are actively built and maintained by Heroku’s engineering teams. This ensures optimal performance, security, and a seamless deployment experience on the platform.
My programming language isn't on the official list. Can I still use it on Heroku?
Yes, absolutely. Heroku’s platform is designed to be extensible through Buildpacks. If your language isn’t on the officially supported list, you can use a third-party buildpack from the Heroku Elements Marketplace or even create your own. This allows you to deploy applications written in almost any language.
What is a Heroku Buildpack?
A Heroku Buildpack is an automated script that transforms your application’s source code into a runnable asset on the Heroku platform. It handles tasks like detecting your language, installing dependencies, and compiling your code. Heroku utilizes two types of buildpacks:
- Classic Buildpacks: These are used with Heroku’s traditional Cedar generation. They create an optimized package of your app called a slug.
- Cloud Native Buildpacks (CNBs): Used with Heroku’s modern Fir generation, these are open-standard buildpacks that create OCI-compliant container images. This approach offers greater flexibility and compatibility with the broader cloud-native ecosystem.
Essentially, Buildpacks are what make Heroku’s git push heroku main
deployment model possible for so many languages and frameworks.
Can I use multiple languages in the same Heroku project?
Yes. You can use multiple languages within a single project by using more than one buildpack for your application. This is a common practice for applications with distinct front-end and back-end components written in different languages (e.g., a React front-end and a Python API). To get started, choose between the officially supported buildpacks and the community supported buildpacks.
Once you’ve found the languages you need you can add them to your app using the heroku buildpacks:add
command.
Does Heroku support specific web frameworks like Ruby on Rails, Django, or Express.js?
Yes. Heroku’s language support is designed to work seamlessly with all major web frameworks. Because Heroku provides robust support for the underlying language (e.g., Ruby, Python, Node.js), it inherently supports the frameworks built upon them. In fact, many official buildpacks are “framework-aware,” meaning they automatically detect your framework and perform specific optimizations for faster, more reliable deployments.
For compiled languages like Java or .NET, do I need to compile my code before pushing it to Heroku?
No. For the standard buildpack workflow, you should push your source code directly to Heroku, not compiled artifacts. Heroku’s buildpack system is designed to handle the entire compilation for you, setting up the correct toolchain (like Maven or the .NET SDK) to build a runnable production asset. This ensures a clean, consistent, and repeatable build environment every time. For more details visit the getting started docs of the language of your choice.
This approach is the best practice for buildpack deployments. The main exception is if you are using Heroku’s advanced use-case Container Registry workflow, where you would build a Docker image locally (including the compilation step) and then push the completed image to Heroku to be deployed.
Does Heroku support containers and building with a Dockerfile?
Yes, Heroku supports Docker-based deployments via the Container Registry, which is a powerful workflow for teams with existing container-based processes. This is distinct from the default, buildpack-based deployments. The primary difference between the two comes down to ease of use and security, which is why Heroku recommends buildpacks for most use cases.
- Ease of use: Building an image with a Dockerfile requires you to manually define all the steps and software your app needs to run. Buildpacks automate this by inspecting your application code for community standards (like a go.mod or uv.lock file) to determine what is needed, often requiring zero configuration.
- Security: Buildpack-based deploys product composable containers, which allows Heroku to automatically manage your operating system packages through a process called “rebasing.” This lets Heroku apply security patches to system libraries, like Open SSL, for you. Images built with a Dockerfile and deployed via the Container Registry cannot be rebased; you are responsible for rebuilding the image from scratch to pull in OS updates and keep your app secure.
Ready to Get Started?
Stay focused on building great data-driven applications and let Heroku tackle the rest.