'Deploy your first app to Fly.io with flyctl launch and the Machines
Scanned 9/2/2026
Install to Claude Code
npx -y skills add jeremylongshore/tons-of-skills-marketplace --skill flyio-hello-world --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Flyio Hello World?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/jeremylongshore-flyio-hello-world-tons-of-skills-marketplace)More formats (shields.io, HTML) on the badges page.
---
name: flyio-hello-world
description: 'Deploy your first app to Fly.io with flyctl launch and the Machines
API.
Use when starting a new Fly.io project, deploying a container globally,
or testing edge compute deployment.
Trigger: "fly.io hello world", "fly launch", "deploy to fly.io", "first fly app".
'
allowed-tools: Read, Write, Edit, Bash(fly:*), Bash(curl:*), Bash(docker:*)
version: 1.7.0
license: MIT
author: Jeremy Longshore <jeremy@intentsolutions.io>
tags:
- saas
- edge-compute
- flyio
compatibility: Designed for Claude Code
---
# Fly.io Hello World
## Overview
Deploy a minimal app to Fly.io using `fly launch`. Fly.io runs Docker containers on Firecracker microVMs across 30+ regions worldwide. Two paths: `flyctl` CLI (simple) or Machines API (programmatic).
## Prerequisites
- A disposable staging app name, app-scoped token from the secret manager, Docker, and a known teardown owner.
## Examples
Deploy the example to a disposable staging app using a scoped token, send only a synthetic health request, verify the response contains no secrets, and destroy or stop the test app through the approved cleanup path after validating rollback behavior.
## Instructions
### Step 1: Launch with flyctl
```bash
# Create a new directory with a Dockerfile
mkdir fly-hello && cd fly-hello
cat > Dockerfile << 'EOF'
FROM node:20-alpine
WORKDIR /app
COPY server.js .
EXPOSE 3000
CMD ["node", "server.js"]
EOF
cat > server.js << 'EOF'
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({
message: 'Hello from Fly.io!',
region: process.env.FLY_REGION,
app: process.env.FLY_APP_NAME,
}));
});
server.listen(3000, () => console.log('Listening on :3000'));
EOF
# Launch — creates app, generates fly.toml, deploys
fly launch --name hello-fly --region iad --now
```
### Step 2: Verify Deployment
```bash
# Check status
fly status
# Open in browser
fly open
# View logs
fly logs
# Test with cURL
curl https://hello-fly.fly.dev/
# {"message":"Hello from Fly.io!","region":"iad","app":"hello-fly"}
```
### Step 3: Deploy via Machines API
```typescript
const FLY_API = 'https://api.machines.dev';
const headers = {
'Authorization': `Bearer ${process.env.FLY_API_TOKEN}`,
'Content-Type': 'application/json',
};
// Create an app
const app = await fetch(`${FLY_API}/v1/apps`, {
method: 'POST',
headers,
body: JSON.stringify({
app_name: 'hello-api',
org_slug: 'personal',
}),
}).then(r => r.json());
// Create a machine in the app
const machine = await fetch(`${FLY_API}/v1/apps/hello-api/machines`, {
method: 'POST',
headers,
body: JSON.stringify({
region: 'iad',
config: {
image: 'nginx:alpine',
services: [{
ports: [{ port: 443, handlers: ['tls', 'http'] }],
protocol: 'tcp',
internal_port: 80,
}],
guest: { cpu_kind: 'shared', cpus: 1, memory_mb: 256 },
},
}),
}).then(r => r.json());
console.log(`Machine ${machine.id} created in ${machine.region}`);
```
## Output
```
Machine e784079f004d86 created in iad
App URL: https://hello-api.fly.dev
```
## Error Handling
| Error | Cause | Solution |
|-------|-------|----------|
| `No machines in group` | App exists but no machines | Run `fly deploy` or create via API |
| `Could not find image` | Docker build failed | Check Dockerfile, run `docker build .` locally |
| `Region not available` | Invalid region code | Use `fly platform regions` to list valid codes |
| `Insufficient resources` | Org quota reached | Check `fly orgs show` or upgrade plan |
## Resources
- [Fly Launch](https://fly.io/docs/reference/fly-launch/)
- [Deploy an App](https://fly.io/docs/launch/deploy/)
- [Machines API](https://fly.io/docs/machines/api/machines-resource/)
## Next Steps
Proceed to `flyio-local-dev-loop` for development workflow setup.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!