DEV Community

Cover image for I Tested a Heroku Alternative With a FastAPI App, No Docker Setup Needed
Harsh Kanani
Harsh Kanani

Posted on

I Tested a Heroku Alternative With a FastAPI App, No Docker Setup Needed

I wanted to deploy a FastAPI application without turning deployment into a separate infrastructure project. The application was already working locally. It had a small API, environment variables, a health endpoint, and a database connection planned for the production version.

What it did not have was a Dockerfile, infrastructure manifest, or manually created deployment configuration.

I wanted to test whether a modern Heroku alternative could begin with the application repository, understand the project, and prepare the deployment without requiring me to containerize it first.

After reviewing this broader comparison of Heroku alternatives, I tested the repository with Kuberns.

The FastAPI application I used

The project was intentionally small, but it had the same basic structure as a larger backend service.

fastapi-app/
├── app/
│   ├── __init__.py
│   └── main.py
├── requirements.txt
└── README.md
Enter fullscreen mode Exit fullscreen mode

The application contained a root endpoint, a health endpoint, and one environment-based setting.

import os

from fastapi import FastAPI

app = FastAPI(title="FastAPI Deployment Test")

APP_ENV = os.getenv("APP_ENV", "development")


@app.get("/")
def read_root():
    return {
        "message": "FastAPI is running",
        "environment": APP_ENV,
    }


@app.get("/health")
def health_check():
    return {
        "status": "healthy",
    }
Enter fullscreen mode Exit fullscreen mode

The dependencies were defined in requirements.txt.

fastapi
uvicorn[standard]
Enter fullscreen mode Exit fullscreen mode

For a production application, I would pin dependency versions using the project’s chosen dependency-management workflow. This keeps builds reproducible and prevents an unexpected package update from changing application behavior.

What I deliberately did not add

I did not create a Dockerfile. I also did not add a platform-specific manifest, manually configure a server, or write a deployment pipeline before connecting the repository.

Those files can be useful when a team needs detailed infrastructure control. But they also create configuration that someone must understand and maintain.

My question was simple:

Can the deployment platform understand a normal FastAPI repository and prepare what it needs without making Docker knowledge a requirement?

Why this matters for FastAPI developers

Running FastAPI locally is straightforward. Production deployment introduces a different set of concerns. The platform needs to identify the Python application, install the required packages, determine how the service should start, expose it correctly, apply environment values, and provide enough visibility to understand the deployment.

Developers also need to verify that the application responds after deployment. A successful build does not automatically mean the API, database connection, authentication, or external integrations are working.

Traditional infrastructure workflows often require developers to translate these requirements into Docker, server, networking, or CI/CD configuration.

I wanted the platform to handle more of that translation while still allowing me to review the result.

Why I was looking beyond Heroku

Heroku helped make application deployment easier for developers who did not want to manage servers manually. On February 6, 2026, Heroku announced its move to a sustaining engineering model. The core platform is now focused on stability, security, reliability, and support rather than introducing new features.

That does not mean an existing FastAPI application should leave Heroku without a clear reason.

For a new project, I wanted to evaluate a platform designed around the way developers build and deploy applications today. That includes multiple frameworks, full-stack products, complex backends, and repositories that may not already contain infrastructure configuration.

Connecting the repository to Kuberns

Kuberns is an Agentic AI platform for deployment.

The process started by connecting the source repository and selecting the branch I wanted to deploy. Kuberns then analyzed the project. The agentic AI examined the repository and prepared the deployment configuration based on the application it found.

I did not need to decide how to containerize the FastAPI service or begin by creating infrastructure resources manually. Once the analysis was complete, I could review the deployment configuration from the dashboard before starting the deployment.

That review step is important. Agentic deployment should not mean that developers lose visibility. I still wanted to confirm that the platform had understood the application correctly before allowing it to run in a production-style environment.

Adding environment variables

The test application required one environment value:

APP_ENV=production
Enter fullscreen mode Exit fullscreen mode

I added it through the dashboard rather than placing it inside the repository.

A real FastAPI application may require additional values such as:

DATABASE_URL
SECRET_KEY
ALLOWED_ORIGINS
EMAIL_API_KEY
Enter fullscreen mode Exit fullscreen mode

These values should never be committed directly to Git.

The platform can analyze the application structure, but it cannot invent or safely infer private credentials. Supplying and protecting those values remains the developer’s responsibility.

Reviewing the deployment from the dashboard

After starting the deployment, I could follow the process from the Kuberns dashboard. The useful part was having the project analysis, deployment configuration, build progress, and runtime information available through one workflow.

If the deployment failed, I would first determine which stage caused the problem.

A dependency failure would suggest an issue with requirements.txt. An application startup failure could indicate an import problem or incorrect runtime behavior. A runtime error after deployment might point to a missing environment value or an unavailable external service.

This distinction helps avoid random configuration changes.

Instead of rebuilding the infrastructure from scratch, the developer can use the dashboard information to identify whether the problem belongs to the application, its dependencies, or its environment.

Verifying the deployed API

I did not treat the deployment status as the final test. After the application was live, I checked the health endpoint:

curl https://your-application-domain/health
Enter fullscreen mode Exit fullscreen mode

Expected response:

{
  "status": "healthy"
}
Enter fullscreen mode Exit fullscreen mode

I also checked the root endpoint:

curl https://your-application-domain/
Enter fullscreen mode Exit fullscreen mode

The response should confirm that the production environment value is available:

{
  "message": "FastAPI is running",
  "environment": "production"
}
Enter fullscreen mode Exit fullscreen mode

For a production backend, I would continue by testing database connectivity, authentication, CORS behavior, error handling, and external integrations.

A basic health route only confirms that the application process can respond. It does not prove that every dependency is healthy.

What Kuberns handled

Kuberns analyzed the repository and assisted with preparing the deployment. I did not need to create a Dockerfile, configure a server, or manually translate the FastAPI application into infrastructure settings before deployment.

The platform also provided a dashboard where I could review the prepared configuration and follow the deployment. This reduced the amount of work between having a functioning repository and having a deployed application.

What remained my responsibility

Kuberns simplified deployment, but it did not remove application responsibility. I still needed to provide environment values, protect secrets, verify the detected configuration, and test the live API.

If the application used a database, I would also need to plan migrations carefully and verify them in a non-production environment. This is the balance I want from an agentic deployment platform.

The platform should reduce infrastructure work without hiding the application from the developer.

Why Kuberns was the best fit for this FastAPI project

The strongest part of the experience was not simply that the API went from a repository to a deployed service. It was that I did not need to prepare Docker or infrastructure configuration before the platform could understand the project.

That matters for developers who want to build backend products rather than become deployment specialists.

It also makes the workflow useful beyond FastAPI. Kuberns is designed for full-stack and complex backend projects with agentic AI for deployment, so the same repository-first approach can support projects built with different frameworks.

Developers comparing more traditional PaaS workflows can also review this Heroku vs Render vs Kuberns comparison.

For this use case, Kuberns gave me the strongest combination of low setup effort, application visibility, and reduced infrastructure work.

Final thoughts

A useful Heroku alternative should preserve the simplicity developers originally valued while improving the workflow for modern applications.

For my FastAPI project, that meant connecting the repository, allowing the agentic AI to analyze it, reviewing the prepared deployment, adding the required environment values, and monitoring everything through the dashboard.

I did not need to create a Dockerfile or configure infrastructure before deploying.

Plans start at $10, a Trial Option is available, and bundle packs provide additional savings. A small FastAPI repository is a practical way to test the workflow before using it for a larger backend application.

My conclusion was simple:

I wanted to deploy my FastAPI application, not build a deployment system for it. Kuberns let me focus on the application.

Top comments (0)