pxxl.toml file in your repository root. Use the reference below to find the correct values for your language and framework.
Technical Stack Command Matrix
| Tech Stack | Package Manager | Install Command | Build Command | Start Command |
|---|---|---|---|---|
| Static HTML | None | None | None | python3 -m http.server ${PORT:-8080} --bind 0.0.0.0 |
| Vite / React | npm / pnpm / bun | npm install | npm run build | npm run preview -- --host 0.0.0.0 --port ${PORT:-4173} |
| Next.js | npm / pnpm / bun | npm install | npm run build | npm start |
| Express API | npm / pnpm / bun | npm install | npm run build (if TS) | node dist/index.js |
| FastAPI | pip / poetry | pip install -r requirements.txt | None | uvicorn main:app --host 0.0.0.0 --port ${PORT:-8000} |
| Django | pip / poetry | pip install -r requirements.txt | python manage.py collectstatic | gunicorn config.wsgi:application --bind 0.0.0.0:${PORT:-8000} |
| Go API | Go Modules | go mod download | go build -o app . | ./app |
| Laravel | Composer | composer install --no-dev | php artisan config:cache | php artisan serve --host 0.0.0.0 --port ${PORT:-8000} |
| Ruby / Rails | Bundler | bundle install | bundle exec rails assets:precompile | bundle exec rails server -b 0.0.0.0 -p ${PORT:-3000} |
| Spring Boot | Maven / Gradle | ./mvnw dependency:go-offline | ./mvnw package -DskipTests | java -jar target/*.jar |
Node.js Configurations
Pxxl supports all major Node.js package managers. It detects your manager automatically from the lock file present in your repository (package-lock.json → npm, pnpm-lock.yaml → pnpm, yarn.lock → yarn, bun.lockb → bun) and runs the corresponding binary.
Next.js
For Next.js applications, use the standard build command and make sure yourstart script binds to all interfaces so the Pxxl proxy can reach the container:
package.json
Vite, React, Vue, Svelte, and Astro
To serve a client-side SPA, use Vite’s built-in preview server configured for host routing. If you need full server-side fallback routing, pair it with a small Express server that catches all routes and returnsindex.html.
Python Configurations
FastAPI and Flask
FastAPI requires an ASGI server (Uvicorn). Flask requires a WSGI server (Gunicorn). Both must bind to0.0.0.0 so the Pxxl proxy can forward traffic to the container.
Django
Run database migrations as part of your build or release phase. Never hard-code database credentials — use environment variables and let Pxxl inject them at runtime.Go Configurations
Go builds produce a single statically-linked binary, making containers lightweight and fast to start.PORT environment variable and bind to 0.0.0.0:
main.go
Pxxl injects
PORT automatically at runtime. If your code hard-codes a port number, the container will start on the wrong port and fail the health check.PHP and Laravel Configurations
For production Laravel deployments, optimise Composer’s autoloader and cache the framework’s config, route, and view files to eliminate file-system lookups on every request.Monorepo and Multi-Service Configurations
Base Directory Scoping
When you deploy from a monorepo, set the Base Directory in your project settings to scope the build context to the subdirectory that contains your application. Pxxl treats that directory as the repository root during install and build.| Project in Monorepo | Base Directory Value |
|---|---|
apps/web-client/ | apps/web-client |
services/user-api/ | services/user-api |
packages/admin/ | packages/admin |
Multi-Service Pattern
If your repository contains multiple processes — for example a web server and a background worker — create two separate Pxxl projects pointing at the same repository but using different start commands:| Service | Start Command | Port Exposed? |
|---|---|---|
| Web Service | Your HTTP server entry point, e.g. npm run start | Yes — receives public traffic |
| Worker Service | Your queue consumer entry point, e.g. celery -A app worker or npm run worker | No — runs as a background process |
