Supported Languages & Frameworks

What Forgeon can auto-detect and how each platform is built and run.


Forgeon auto-detects your tech from files like package.json, go.mod, pyproject.toml, requirements.txt, pom.xml, build.gradle , Cargo.toml, composer.json, Program.cs , and more. If your stack isn’t listed, use a Dockerfile and it will deploy just fine.

Quick overview

  • Next.js (Node)

    • Auto-detect: package.json + next
    • Build: next build
    • Run: next start -p $PORT
    • Port: 3000
    • Notes: SSR supported; static export also works
  • Remix / Vite / CRA / SPA (Node)

    • Auto-detect: package.json + framework deps
    • Build: vite build or react-scripts build
    • Run: Node static server or static export
    • Port: 3000
    • Notes: Prefer static export when possible
  • Nuxt (Node)

    • Auto-detect: package.json + nuxt
    • Build: nuxt build
    • Run: nuxt start
    • Port: 3000
    • Notes: SSR supported
  • SvelteKit (Node)

    • Auto-detect: package.json + @sveltejs/kit
    • Build: vite build
    • Run: Node adapter output or static export
    • Port: 3000
    • Notes: Use adapter for Node or static
  • Astro (Node)

    • Auto-detect: package.json + astro
    • Build: astro build
    • Run: Static or Node adapter
    • Port: 3000
    • Notes: Great for static sites
  • Express / Koa / Fastify (Node)

    • Auto-detect: package.json + start script
    • Build: optional
    • Run: node server.js (or your entry)
    • Port: 3000
    • Notes: Bind 0.0.0.0 and use PORT
  • Go (Fiber, Gin, Echo, stdlib)

    • Auto-detect: go.mod
    • Build: go build -o app
    • Run: ./app
    • Port: 8080
    • Notes: Include a /readyz endpoint
  • Python (Django, Flask, FastAPI)

    • Auto-detect: pyproject.toml or requirements.txt
    • Build: pip install -r ...
    • Run: gunicorn or uvicorn
    • Port: 8000
    • Notes: Ensure correct ASGI/WSGI entrypoint
  • PHP (Laravel)

    • Auto-detect: composer.json
    • Build: composer install
    • Run: php artisan serve or PHP-FPM
    • Port: 8000
    • Notes: Prefer PHP-FPM + web server image
  • Ruby on Rails

    • Auto-detect: Gemfile
    • Build: bundle install
    • Run: rails server or Puma
    • Port: 3000
    • Notes: Precompile assets in build step
  • Java (Spring Boot)

    • Auto-detect: pom.xml or build.gradle
    • Build: mvn package or gradle bootJar
    • Run: java -jar app.jar
    • Port: 8080
    • Notes: JDK 17+ recommended
  • .NET (ASP.NET Core)

    • Auto-detect: *.csproj
    • Build: dotnet publish
    • Run: dotnet app.dll
    • Port: 8080
    • Notes: Target linux-x64
  • Rust (Axum, Actix)

    • Auto-detect: Cargo.toml
    • Build: cargo build --release
    • Run: ./target/release/app
    • Port: 8080
    • Notes: Small, fast, great for APIs
  • Elixir (Phoenix)

    • Auto-detect: mix.exs
    • Build: mix assets.deploy && mix release
    • Run: ./bin/app start
    • Port: 4000
    • Notes: Prefer releases for prod
  • Deno / Fresh

    • Auto-detect: deno.json
    • Build: —
    • Run: deno run -A main.ts
    • Port: 8000
    • Notes: Pin permissions; use PORT
  • Bun

    • Auto-detect: bun.lockb or package.json
    • Build: bun build
    • Run: bun run start
    • Port: 3000
    • Notes: Some libs still stabilizing
  • Static Sites

    • Auto-detect: build output like dist/
    • Build: your build script
    • Run: served as static
    • Port: —
    • Notes: CDN-style hosting
  • Dockerfile (Custom)

    • Auto-detect: Dockerfile
    • Build: your Docker build
    • Run: your container CMD
    • Port: your port
    • Notes: Use when in doubt

Whatever the stack, your web server should bind to 0.0.0.0 and listen on the PORT environment variable.

Node.js frameworks

Next.js

  • Detects by: package.json with next
  • Default build: next build
  • Default run: next start -p $PORT
  • Notes: SSR and static export are supported. If you export, we serve it as a static site (no Node runtime needed).

Nuxt / SvelteKit / Astro / Remix / Vite / SPA

  • Detects by: package.json deps (nuxt, @sveltejs/kit, astro, @remix-run/*, vite, etc.)
  • Build: framework build script
  • Run:
    • SSR: framework start script on $PORT
    • Static: we publish the built dist/ (or equivalent) directly
  • Tip: prefer a static build when you don’t need SSR — it’s faster and cheaper.

Raw Node (Express / Koa / Fastify)

  • Detects by: package.json with start script
  • Run: node server.js or node app.js on $PORT
  • Health: add /readyz to speed up readiness checks

Go

  • Detects by: go.mod
  • Build: go build -o app ./... (detector picks main)
  • Run: ./app on $PORT
  • Framework hints: auto-notes for Fiber, Gin, Echo (parsed from go.mod)
  • Health: /readyz strongly recommended
build & run
$go build -o app ./...
$PORT=8080 ./app

Example

main.go — Fiber example
package main
import (
  "os"
  "github.com/gofiber/fiber/v2"
)
func main() {
  app := fiber.New()
  app.Get("/readyz", func(c *fiber.Ctx) error { return c.SendStatus(200) })
  port := os.Getenv("PORT"); if port == "" { port = "8080" }
  app.Listen("0.0.0.0:" + port)
}