Deployment flow
When you run jelou deploy, the platform:
- Reads
jelou.json to find the slug and entrypoint
- Collects all deployable files from the directory
- Displays a summary with names and sizes
- Uploads the files and runs the deployment
- Renames your entrypoint to
user-function.ts
- Generates a
main.ts wrapper that imports your code and starts the server
- 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
| Limit | Value |
|---|
| Files per deployment | 20 |
| Size per file | 256 KB |
| Total size | 1 MB |
| Allowed extensions | .ts, .js, .json, .md, .txt |
| Required entrypoint | index.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: Specify the slug and deployment ID:jelou rollback query-customer dep_def67890
# ✓ Rolled back to dep_def67890
CI/CD with GitHub Actions
Basic deployment
With secrets
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'
name: Deploy with Secrets
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: Configure secrets
env:
JELOU_TOKEN: ${{ secrets.JELOU_TOKEN }}
run: |
jelou secrets set query-customer \
CRM_API_KEY=${{ secrets.CRM_API_KEY }} \
JELOU_API_KEY=${{ secrets.JELOU_API_KEY }}
- name: Deploy
env:
JELOU_TOKEN: ${{ secrets.JELOU_TOKEN }}
run: |
DEPLOY_URL=$(jelou deploy --no-confirm --json | jq -r '.data.url')
echo "Deployed to $DEPLOY_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
| Route | Description |
|---|
/__health | Health check and function metadata |
/mcp | MCP endpoint (unless config.mcp: false) |
| Your route | Handler route (default: * matches any path) |
| Route | Description |
|---|
/__health | Health check with list of all tools |
/mcp | Unified MCP server with all tools |
/<tool-key> | Each tool’s route (auto-generated kebab-case or custom config.path) |