import Vercel
@main
struct App: ExpressHandler {
static let router = Router()
.get("/") { req, res in
res.status(.ok).send("Hello, Swift")
}
.get("/api/me") { req, res in
try res.cors().send(["name": "Andrew"])
}
.get("/hello/:name") { req, res in
res.send("Hello, " + req.pathParams["name"]!)
}
}
Data Fetching
You can use any popular library to fetch data such as Alamofire or async-http-client but we also provide a convenient fetch() method directly in this package:
let obj = try await fetch("https://httpbin.org/json").json()
Edge Config
This package provides full access to Vercel’s Edge Config API. You can access the default edge config store or any additional store assigned to your project:
// Default edge config
let str = EdgeConfig.default.get("some-string-key").string
// Edge config assigned to an environment variable
let num = EdgeConfig("EDGE_CONFIG_2").get("some-int-key").int
Static Files
You can add a top level public folder that will be deployed statically to Vercel’s CDN.
Cron Jobs
Cron jobs are fully supported by adding a vercel.json file to the root of your project and following the Vercel documentation here: https://vercel.com/docs/cron-jobs
Running Locally
Running server side locally has traditionally been a huge pain, but not anymore. This package makes it trivial to run code locally:
swift package --disable-sandbox vercel dev
This will build and run your Swift application and start a local server at http://localhost:7676
Deploy
Locally
To deploy your project locally you need to install Docker and the Vercel CLI. Once installed you can you must link your Vercel project:
vercel link
After linking your project you can deploy it via Swift package manager:
swift package --disable-sandbox vercel deploy
Deploy Options
swift package --disable-sandbox vercel deploy
--prod - Triggers a production deploy to Vercel
--product <name> - The product you want to build. Default: first target in Package.swift with the Vercel dependency
--memory <number> - The amount of memory in megabytes to allocate to your function. Default 512mb
--duration <number> - The maximum duration in seconds that your function will run. Default: 10s
--regions <name> - Comma separated list of regions to deploy your function to. Default: iad1
--port <number> - Custom port to run the local dev server on. Default: 7676
GitHub Actions
Use the following GitHub actions workflow to continuiously deploy your project to Vercel:
Vercel
A Swift runtime and SDK for Vercel Serverless Functions.
Vercel Starter Kit
Getting Started
Check out the intoductory blog post and YouTube tutorial for getting started:
How does this work?
There’s two important pieces to this package that make everything work:
EdgeConfig
Usage
Request Handler
Express Handler
Data Fetching
You can use any popular library to fetch data such as Alamofire or async-http-client but we also provide a convenient
fetch()
method directly in this package:Edge Config
This package provides full access to Vercel’s Edge Config API. You can access the default edge config store or any additional store assigned to your project:
Static Files
You can add a top level
public
folder that will be deployed statically to Vercel’s CDN.Cron Jobs
Cron jobs are fully supported by adding a
vercel.json
file to the root of your project and following the Vercel documentation here: https://vercel.com/docs/cron-jobsRunning Locally
Running server side locally has traditionally been a huge pain, but not anymore. This package makes it trivial to run code locally:
This will build and run your Swift application and start a local server at http://localhost:7676
Deploy
Locally
To deploy your project locally you need to install Docker and the Vercel CLI. Once installed you can you must link your Vercel project:
After linking your project you can deploy it via Swift package manager:
Deploy Options
--prod
- Triggers a production deploy to Vercel--product <name>
- The product you want to build. Default: first target in Package.swift with the Vercel dependency--memory <number>
- The amount of memory in megabytes to allocate to your function. Default 512mb--duration <number>
- The maximum duration in seconds that your function will run. Default: 10s--regions <name>
- Comma separated list of regions to deploy your function to. Default: iad1--port <number>
- Custom port to run the local dev server on. Default: 7676GitHub Actions
Use the following GitHub actions workflow to continuiously deploy your project to Vercel: