Skip to main content

Deployment flow

When you run jelou deploy, the platform:
  1. Reads jelou.json to find the slug and entrypoint
  2. Collects all deployable files from the directory
  3. Displays a summary with names and sizes
  4. Uploads the files and runs the deployment
  5. Renames your entrypoint to user-function.ts
  6. Generates a main.ts wrapper that imports your code and starts the server
  7. Injects your secrets as environment variables
jelou deploy
# ▸ Files: index.ts (1.2 KB), helpers.ts (800 B), jelou.json (98 B), deno.json (65 B)
# ? Deploy query-customer? (Y/n) y
# ✓ Deployed
# ▸ ID:  dep_abc12345
# ▸ URL: https://query-customer.fn.jelou.ai

File limits

LimitValue
Files per deployment20
Size per file256 KB
Total size1 MB
Allowed extensions.ts, .js, .json, .md, .txt
Required entrypointindex.ts

What is automatically excluded

  • node_modules/
  • .git/
  • .env
  • dist/
  • .jelou/
  • Hidden files (starting with .)

Skip confirmation

For automated deployments, use --no-confirm:
jelou deploy --no-confirm

Rollback

If you need to revert to a previous version, use jelou rollback.
Without arguments, it shows a menu with recent deployments:
jelou rollback
# ? Select deployment to rollback to:
#   ▸ dep_abc12345.. — 2 hours ago by [email protected] (current)
#     dep_def67890.. — 1 day ago by [email protected]
#     dep_ghi11223.. — 3 days ago by [email protected]

CI/CD with GitHub Actions

deploy.yml
name: Deploy Function
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install CLI
        run: npm install -g @jelou/cli

      - name: Deploy
        env:
          JELOU_TOKEN: ${{ secrets.JELOU_TOKEN }}
        run: jelou deploy --no-confirm --json | jq '.data.url'
Use --json in pipelines to get structured output you can parse with jq. The format is always { "ok": true, "data": ... } on stdout.

Exposed routes

RouteDescription
/__healthHealth check and function metadata
/mcpMCP endpoint (unless config.mcp: false)
Your routeHandler route (default: * matches any path)