or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

authentication-teams.mdblobs-storage.mdbuild-system.mddeployment.mdenvironment-variables.mdfunctions.mdindex.mdlocal-development.mdsite-management.md

functions.mddocs/

0

# Functions

1

2

Serverless function management including creation, local development, testing, and deployment of Netlify Functions with support for multiple languages and frameworks.

3

4

## Capabilities

5

6

### Function Creation

7

8

Create new serverless functions from templates with language and framework support.

9

10

```typescript { .api }

11

/**

12

* Create a new serverless function from template

13

* Command: netlify functions:create [name] [options]

14

*/

15

interface FunctionCreateOptions {

16

/** Function name */

17

name?: string;

18

/** Template URL or repository */

19

url?: string;

20

/** Programming language (javascript, typescript, go, etc.) */

21

language?: string;

22

/** Disable network features during creation */

23

offline?: boolean;

24

}

25

```

26

27

**Usage Examples:**

28

29

```bash

30

# Create function with interactive prompts

31

netlify functions:create

32

33

# Create named function

34

netlify functions:create hello-world

35

36

# Create function with specific language

37

netlify functions:create api-handler --language typescript

38

39

# Create function from custom template

40

netlify functions:create custom-func --url https://github.com/user/template

41

42

# Create function offline

43

netlify functions:create --offline

44

```

45

46

### Function Development and Testing

47

48

Local development and testing tools for serverless functions.

49

50

```typescript { .api }

51

/**

52

* Build functions locally

53

* Command: netlify functions:build [options]

54

*/

55

interface FunctionBuildOptions {

56

/** Functions directory */

57

functions?: string;

58

/** Source directory for functions */

59

src?: string;

60

}

61

62

/**

63

* Invoke/test functions locally

64

* Command: netlify functions:invoke [name] [options]

65

*/

66

interface FunctionInvokeOptions {

67

/** Function name to invoke */

68

name?: string;

69

/** Functions folder */

70

functions?: string;

71

/** Query string parameters */

72

querystring?: string;

73

/** POST payload data */

74

payload?: string;

75

/** Simulate Netlify Identity JWT token */

76

identity?: boolean;

77

/** Simulate unauthenticated request */

78

noIdentity?: boolean;

79

/** Netlify dev server port */

80

port?: number;

81

/** Disable network features */

82

offline?: boolean;

83

}

84

85

/**

86

* List local functions

87

* Command: netlify functions:list [options]

88

*/

89

interface FunctionListOptions {

90

/** Functions directory */

91

functions?: string;

92

/** Output as JSON */

93

json?: boolean;

94

}

95

96

/**

97

* Serve functions locally

98

* Command: netlify functions:serve [options]

99

*/

100

interface FunctionServeOptions {

101

/** Functions directory */

102

functions?: string;

103

/** Functions server port */

104

port?: number;

105

/** Disable network features */

106

offline?: boolean;

107

}

108

```

109

110

**Usage Examples:**

111

112

```bash

113

# Build functions

114

netlify functions:build

115

116

# Build from custom source directory

117

netlify functions:build --src src/lambda --functions dist/functions

118

119

# List all functions

120

netlify functions:list

121

122

# List functions as JSON

123

netlify functions:list --json

124

125

# Invoke function locally

126

netlify functions:invoke hello-world

127

128

# Invoke with query parameters

129

netlify functions:invoke api --querystring "id=123&type=user"

130

131

# Invoke with POST data

132

netlify functions:invoke create-user --payload '{"name":"John","email":"john@example.com"}'

133

134

# Invoke with Identity simulation

135

netlify functions:invoke protected-route --identity

136

137

# Serve functions on custom port

138

netlify functions:serve --port 9999

139

```

140

141

### Function Templates and Languages

142

143

Supported languages and template system for function creation:

144

145

```typescript { .api }

146

/**

147

* Supported function languages and runtimes

148

*/

149

type FunctionLanguage =

150

| 'javascript'

151

| 'typescript'

152

| 'go'

153

| 'rust'

154

| 'python';

155

156

/**

157

* Function template configuration

158

*/

159

interface FunctionTemplate {

160

/** Template name */

161

name: string;

162

/** Template description */

163

description: string;

164

/** Supported language */

165

language: FunctionLanguage;

166

/** Template repository URL */

167

url: string;

168

/** Required dependencies */

169

dependencies?: string[];

170

/** Environment variables needed */

171

envVars?: string[];

172

/** Template category */

173

category: 'api' | 'scheduled' | 'auth' | 'form' | 'webhook' | 'utility';

174

}

175

176

/**

177

* Popular built-in templates

178

*/

179

interface BuiltInTemplates {

180

'hello-world': FunctionTemplate;

181

'fetch-api': FunctionTemplate;

182

'send-email': FunctionTemplate;

183

'stripe-webhook': FunctionTemplate;

184

'auth-callback': FunctionTemplate;

185

'scheduled-task': FunctionTemplate;

186

'form-handler': FunctionTemplate;

187

'image-processing': FunctionTemplate;

188

'database-query': FunctionTemplate;

189

}

190

```

191

192

### Function Configuration and Environment

193

194

Function configuration options and environment setup:

195

196

```typescript { .api }

197

/**

198

* Function configuration in netlify.toml

199

*/

200

interface FunctionConfig {

201

/** Function-specific configuration */

202

functions: {

203

/** Functions directory */

204

directory: string;

205

/** Node.js version */

206

node_bundler?: 'esbuild' | 'zisi';

207

/** External node modules to include */

208

external_node_modules?: string[];

209

/** Included files pattern */

210

included_files?: string[];

211

/** Ignore patterns for function bundling */

212

ignore?: string[];

213

};

214

215

/** Individual function settings */

216

[functionName: string]: {

217

/** Runtime for this function */

218

runtime?: string;

219

/** Timeout in seconds (max 900) */

220

timeout?: number;

221

/** Memory allocation in MB */

222

memory?: number;

223

/** Environment variables */

224

environment?: Record<string, string>;

225

/** Schedule for background functions */

226

schedule?: string;

227

};

228

}

229

230

/**

231

* Function runtime environment

232

*/

233

interface FunctionEnvironment {

234

/** Netlify-provided environment variables */

235

netlifyVars: {

236

NETLIFY_DEV: string;

237

URL: string;

238

DEPLOY_URL: string;

239

CONTEXT: string;

240

BRANCH: string;

241

HEAD: string;

242

COMMIT_REF: string;

243

};

244

/** User-defined environment variables */

245

userVars: Record<string, string>;

246

/** Function-specific variables */

247

functionVars: Record<string, string>;

248

}

249

```

250

251

### Function Event and Context Objects

252

253

Structure of event and context objects passed to functions:

254

255

```typescript { .api }

256

/**

257

* Netlify Function event object

258

*/

259

interface NetlifyEvent {

260

/** HTTP method */

261

httpMethod: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'OPTIONS' | 'HEAD';

262

/** Request path */

263

path: string;

264

/** Query string parameters */

265

queryStringParameters: Record<string, string> | null;

266

/** Multi-value query string parameters */

267

multiValueQueryStringParameters: Record<string, string[]> | null;

268

/** Request headers */

269

headers: Record<string, string>;

270

/** Multi-value headers */

271

multiValueHeaders: Record<string, string[]>;

272

/** Request body (base64 encoded if binary) */

273

body: string | null;

274

/** Whether body is base64 encoded */

275

isBase64Encoded: boolean;

276

}

277

278

/**

279

* Netlify Function context object

280

*/

281

interface NetlifyContext {

282

/** Invocation ID */

283

awsRequestId: string;

284

/** Function name */

285

functionName: string;

286

/** Function version */

287

functionVersion: string;

288

/** Remaining time in milliseconds */

289

getRemainingTimeInMillis(): number;

290

/** CloudWatch log group */

291

logGroupName: string;

292

/** CloudWatch log stream */

293

logStreamName: string;

294

/** Memory limit in MB */

295

memoryLimitInMB: string;

296

/** Identity information if authenticated */

297

identity?: {

298

url: string;

299

token: string;

300

claims: Record<string, any>;

301

};

302

/** Client context for mobile apps */

303

clientContext?: {

304

client: {

305

installation_id: string;

306

app_title: string;

307

app_version_name: string;

308

app_version_code: string;

309

app_package_name: string;

310

};

311

env: Record<string, string>;

312

};

313

}

314

315

/**

316

* Function response format

317

*/

318

interface NetlifyResponse {

319

/** HTTP status code */

320

statusCode: number;

321

/** Response headers */

322

headers?: Record<string, string>;

323

/** Multi-value headers */

324

multiValueHeaders?: Record<string, string[]>;

325

/** Response body */

326

body: string;

327

/** Whether body is base64 encoded */

328

isBase64Encoded?: boolean;

329

}

330

331

/**

332

* Function handler signature

333

*/

334

type NetlifyHandler = (

335

event: NetlifyEvent,

336

context: NetlifyContext

337

) => Promise<NetlifyResponse> | NetlifyResponse;

338

```

339

340

### Function Types and Patterns

341

342

Different types of functions and common patterns:

343

344

```typescript { .api }

345

/**

346

* API endpoint function pattern

347

*/

348

interface ApiFunction {

349

handler: NetlifyHandler;

350

/** HTTP methods this function handles */

351

methods: ('GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH')[];

352

/** Path pattern */

353

path: string;

354

/** Authentication required */

355

requiresAuth?: boolean;

356

/** Rate limiting configuration */

357

rateLimit?: {

358

windowMs: number;

359

maxRequests: number;

360

};

361

}

362

363

/**

364

* Background/scheduled function pattern

365

*/

366

interface BackgroundFunction {

367

handler: NetlifyHandler;

368

/** Cron schedule expression */

369

schedule: string;

370

/** Timezone for schedule */

371

timezone?: string;

372

/** Function description */

373

description: string;

374

}

375

376

/**

377

* Form handler function pattern

378

*/

379

interface FormHandler {

380

handler: NetlifyHandler;

381

/** Form name to handle */

382

formName: string;

383

/** Spam protection */

384

spamProtection?: boolean;

385

/** Success redirect URL */

386

successRedirect?: string;

387

/** Error redirect URL */

388

errorRedirect?: string;

389

}

390

391

/**

392

* Webhook function pattern

393

*/

394

interface WebhookFunction {

395

handler: NetlifyHandler;

396

/** Webhook provider */

397

provider: 'stripe' | 'github' | 'slack' | 'zapier' | 'custom';

398

/** Signature verification */

399

verifySignature?: boolean;

400

/** Webhook secret for verification */

401

secret?: string;

402

}

403

```

404

405

### Function Development Workflow

406

407

Typical development workflow for Netlify Functions:

408

409

```typescript { .api }

410

/**

411

* Function development lifecycle

412

*/

413

interface FunctionWorkflow {

414

/** Development phase */

415

development: {

416

/** Create function from template */

417

create: () => Promise<void>;

418

/** Local development server */

419

serve: () => Promise<void>;

420

/** Test function locally */

421

test: () => Promise<void>;

422

/** Debug with logs */

423

debug: () => Promise<void>;

424

};

425

426

/** Testing phase */

427

testing: {

428

/** Unit testing */

429

unit: () => Promise<void>;

430

/** Integration testing */

431

integration: () => Promise<void>;

432

/** Load testing */

433

load: () => Promise<void>;

434

};

435

436

/** Deployment phase */

437

deployment: {

438

/** Build for production */

439

build: () => Promise<void>;

440

/** Deploy to staging */

441

deployStaging: () => Promise<void>;

442

/** Deploy to production */

443

deployProduction: () => Promise<void>;

444

};

445

446

/** Monitoring phase */

447

monitoring: {

448

/** View function logs */

449

logs: () => Promise<void>;

450

/** Monitor performance */

451

performance: () => Promise<void>;

452

/** Error tracking */

453

errors: () => Promise<void>;

454

};

455

}

456

```

457

458

### Function Error Handling

459

460

Error handling patterns and debugging for functions:

461

462

```typescript { .api }

463

/**

464

* Function error types

465

*/

466

interface FunctionError {

467

/** Error type */

468

type: 'syntax' | 'runtime' | 'timeout' | 'memory' | 'network' | 'user';

469

/** Error message */

470

message: string;

471

/** Stack trace */

472

stack?: string;

473

/** Request ID for debugging */

474

requestId: string;

475

/** Function name */

476

functionName: string;

477

/** Timestamp */

478

timestamp: Date;

479

}

480

481

/**

482

* Error response helpers

483

*/

484

interface ErrorHelpers {

485

/** Create 400 Bad Request response */

486

badRequest: (message: string) => NetlifyResponse;

487

/** Create 401 Unauthorized response */

488

unauthorized: (message?: string) => NetlifyResponse;

489

/** Create 403 Forbidden response */

490

forbidden: (message?: string) => NetlifyResponse;

491

/** Create 404 Not Found response */

492

notFound: (message?: string) => NetlifyResponse;

493

/** Create 500 Internal Server Error response */

494

serverError: (message?: string) => NetlifyResponse;

495

/** Create custom error response */

496

customError: (statusCode: number, message: string) => NetlifyResponse;

497

}

498

```