or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

auto-imports.mdbuild-system.mdcompatibility.mdcomponents.mdconfiguration.mdcontext-runtime.mddevelopment-tools.mdindex.mdmodule-system.mdpath-resolution.mdplugins-templates.mdserver-integration.md

plugins-templates.mddocs/

0

# Plugins & Templates

1

2

Plugin registration and template generation for virtual file system and TypeScript support. Manages both runtime plugins and build-time template generation.

3

4

## Capabilities

5

6

### Plugin Registration

7

8

Register Nuxt plugins for client-side, server-side, or universal execution.

9

10

```typescript { .api }

11

/**

12

* Register a Nuxt plugin

13

* @param plugin - Plugin file path or plugin object

14

* @param opts - Plugin registration options

15

* @returns Normalized NuxtPlugin object

16

*/

17

function addPlugin(

18

plugin: NuxtPlugin | string,

19

opts?: AddPluginOptions

20

): NuxtPlugin;

21

22

/**

23

* Add template and register as plugin

24

* @param plugin - Plugin template or file path

25

* @param opts - Plugin registration options

26

* @returns Normalized NuxtPlugin object

27

*/

28

function addPluginTemplate(

29

plugin: NuxtPluginTemplate | string,

30

opts?: AddPluginOptions

31

): NuxtPlugin;

32

33

/**

34

* Normalize plugin object

35

* @param plugin - Plugin to normalize

36

* @returns Normalized NuxtPlugin object

37

*/

38

function normalizePlugin(plugin: NuxtPlugin | string): NuxtPlugin;

39

40

interface NuxtPlugin {

41

/** Plugin source code or file path */

42

src: string;

43

/** Plugin execution mode */

44

mode?: PluginMode;

45

/** Plugin runs only once */

46

ssr?: boolean;

47

/** Plugin name */

48

name?: string;

49

/** Plugin priority */

50

order?: number;

51

/** Plugin environment */

52

env?: PluginEnv;

53

/** Plugin metadata */

54

meta?: PluginMeta;

55

}

56

57

type PluginMode = "client" | "server" | "all";

58

type PluginEnv = { islands?: boolean };

59

60

interface AddPluginOptions {

61

/** Append plugin to end of array */

62

append?: boolean;

63

/** Prepend plugin to beginning of array */

64

prepend?: boolean;

65

}

66

67

interface PluginMeta {

68

/** Plugin name */

69

name?: string;

70

/** Plugin version */

71

version?: string;

72

[key: string]: any;

73

}

74

```

75

76

**Usage Examples:**

77

78

```typescript

79

import { addPlugin, addPluginTemplate } from "@nuxt/kit";

80

81

// Add existing plugin file

82

addPlugin("~/plugins/my-plugin.client.js");

83

84

// Add plugin with options

85

addPlugin({

86

src: "~/plugins/analytics.js",

87

mode: "client",

88

name: "analytics-plugin"

89

});

90

91

// Add plugin template

92

addPluginTemplate({

93

src: "~/templates/api-plugin.mjs",

94

filename: "api-plugin.mjs",

95

options: {

96

apiEndpoint: "https://api.example.com",

97

timeout: 5000

98

}

99

});

100

101

// Add inline plugin

102

addPlugin({

103

name: "inline-setup",

104

setup() {

105

// Plugin code here

106

console.log("Plugin initialized");

107

}

108

});

109

```

110

111

### Template System

112

113

Generate virtual files and manage the template system for build-time code generation.

114

115

```typescript { .api }

116

/**

117

* Add template to virtual file system

118

* @param template - Template configuration or file path

119

* @returns Resolved template object

120

*/

121

function addTemplate<T>(template: NuxtTemplate<T> | string): ResolvedNuxtTemplate<T>;

122

123

/**

124

* Add virtual file for Nuxt Nitro server build

125

* @param template - Server template configuration

126

* @returns Server template object

127

*/

128

function addServerTemplate(template: NuxtServerTemplate): NuxtServerTemplate;

129

130

/**

131

* Add type template and register as TypeScript reference

132

* @param template - Type template configuration

133

* @param context - Template context options

134

* @returns Resolved template object

135

*/

136

function addTypeTemplate<T>(

137

template: NuxtTypeTemplate<T>,

138

context?: { nitro?: boolean; nuxt?: boolean }

139

): ResolvedNuxtTemplate<T>;

140

141

/**

142

* Normalize template object

143

* @param template - Template to normalize

144

* @param buildDir - Build directory path

145

* @returns Resolved template object

146

*/

147

function normalizeTemplate<T>(

148

template: NuxtTemplate<T> | string,

149

buildDir?: string

150

): ResolvedNuxtTemplate<T>;

151

152

interface NuxtTemplate<T = Record<string, any>> {

153

/** Template source file path */

154

src?: string;

155

/** Output filename */

156

filename?: string;

157

/** Template destination path */

158

dst?: string;

159

/** Template data/options */

160

options?: T;

161

/** Template content generator */

162

getContents?: (data: T) => string | Promise<string>;

163

/** Write template to filesystem */

164

write?: boolean;

165

/** Template metadata */

166

meta?: TemplateMeta;

167

}

168

169

interface ResolvedNuxtTemplate<T = Record<string, any>> extends NuxtTemplate<T> {

170

/** Resolved destination path */

171

dst: string;

172

/** Resolved filename */

173

filename: string;

174

}

175

176

interface TemplateMeta {

177

/** Template component */

178

component?: boolean;

179

[key: string]: any;

180

}

181

```

182

183

**Usage Examples:**

184

185

```typescript

186

import { addTemplate, addTypeTemplate, addServerTemplate } from "@nuxt/kit";

187

188

// Add simple template

189

addTemplate({

190

filename: "my-config.mjs",

191

getContents: () => `export default ${JSON.stringify(myConfig)}`

192

});

193

194

// Add template with data

195

addTemplate({

196

src: "templates/api-client.mjs",

197

filename: "api-client.mjs",

198

options: {

199

baseURL: "https://api.example.com",

200

timeout: 5000

201

}

202

});

203

204

// Add TypeScript type template

205

addTypeTemplate({

206

filename: "types/my-module.d.ts",

207

getContents: () => `

208

declare module '#app' {

209

interface NuxtApp {

210

$myModule: MyModuleInterface

211

}

212

}

213

214

export interface MyModuleInterface {

215

method(): void;

216

}

217

`

218

});

219

220

// Add server-only template

221

addServerTemplate({

222

src: "templates/server-utils.mjs",

223

filename: "server-utils.mjs"

224

});

225

```

226

227

### Plugin Templates

228

229

Combine plugins with templates for dynamic plugin generation.

230

231

```typescript { .api }

232

interface NuxtPluginTemplate<T = Record<string, any>> extends NuxtTemplate<T> {

233

/** Plugin execution mode */

234

mode?: PluginMode;

235

/** Plugin runs server-side */

236

ssr?: boolean;

237

/** Plugin order */

238

order?: number;

239

}

240

```

241

242

**Usage Examples:**

243

244

```typescript

245

import { addPluginTemplate } from "@nuxt/kit";

246

247

// Dynamic plugin with configuration

248

addPluginTemplate({

249

src: "templates/auth-plugin.mjs",

250

filename: "auth-plugin.mjs",

251

mode: "all",

252

options: {

253

providers: ["google", "github"],

254

redirectUrl: "/dashboard"

255

}

256

});

257

258

// Inline plugin template

259

addPluginTemplate({

260

filename: "runtime-config-plugin.mjs",

261

mode: "client",

262

getContents: (options) => `

263

export default defineNuxtPlugin(() => {

264

const config = ${JSON.stringify(options.config)};

265

return {

266

provide: {

267

config

268

}

269

};

270

});

271

`,

272

options: {

273

config: { apiUrl: "https://api.example.com" }

274

}

275

});

276

```

277

278

### Template Management

279

280

Control template lifecycle and updates.

281

282

```typescript { .api }

283

/**

284

* Trigger rebuilding Nuxt templates

285

* @param options - Template update options

286

* @returns Promise resolving when templates are updated

287

*/

288

function updateTemplates(

289

options?: { filter?: (template: ResolvedNuxtTemplate<any>) => boolean }

290

): Promise<void>;

291

292

/**

293

* Write TypeScript configuration and declarations

294

* @param nuxt - Nuxt instance

295

* @returns Promise resolving when types are written

296

*/

297

function writeTypes(nuxt: Nuxt): Promise<void>;

298

```

299

300

**Usage Examples:**

301

302

```typescript

303

import { updateTemplates, writeTypes } from "@nuxt/kit";

304

305

// Update all templates

306

await updateTemplates();

307

308

// Update specific templates

309

await updateTemplates({

310

filter: (template) => template.filename.includes("api")

311

});

312

313

// Write TypeScript declarations

314

await writeTypes(nuxt);

315

```

316

317

### Advanced Template Patterns

318

319

**Conditional Templates:**

320

321

```typescript

322

import { addTemplate } from "@nuxt/kit";

323

324

export default defineNuxtModule({

325

setup(options, nuxt) {

326

// Only add template in development

327

if (nuxt.options.dev) {

328

addTemplate({

329

filename: "dev-tools.mjs",

330

getContents: () => `

331

export function devLog(message) {

332

console.log('[DEV]', message);

333

}

334

`

335

});

336

}

337

}

338

});

339

```

340

341

**Template with External Data:**

342

343

```typescript

344

import { addTemplate } from "@nuxt/kit";

345

import { readFileSync } from "fs";

346

347

addTemplate({

348

filename: "build-info.mjs",

349

getContents: async () => {

350

const packageJson = JSON.parse(readFileSync("package.json", "utf-8"));

351

const buildTime = new Date().toISOString();

352

353

return `

354

export const buildInfo = {

355

version: "${packageJson.version}",

356

buildTime: "${buildTime}",

357

environment: "${process.env.NODE_ENV}"

358

};

359

`;

360

}

361

});

362

```

363

364

## Types

365

366

```typescript { .api }

367

interface NuxtServerTemplate extends NuxtTemplate {

368

/** Template is for server-side only */

369

island?: boolean;

370

}

371

372

interface NuxtTypeTemplate<T = Record<string, any>> extends NuxtTemplate<T> {

373

/** Generate TypeScript declaration file */

374

declaration?: boolean;

375

}

376

```