# matyeusm/vite-plugin-fvtt architecture

> Architecture diagram of the GitHub repository matyeusm/vite-plugin-fvtt, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/matyeusm/vite-plugin-fvtt
- Repository: https://github.com/matyeusm/vite-plugin-fvtt

## Overview

vite-plugin-fvtt is a Vite plugin for developing and building Foundry VTT modules and systems. Its main workflow loads Foundry environment and manifest settings, adapts Vite’s library build, then emits manifest-shaped assets, composed language files, and compiled packs. During development, a Vite server watches templates and languages, serves local resources, and proxies Foundry traffic; injected client code applies template and translation updates. The graph follows the plugin lifecycle and README capabilities; unsampled bundle, manifest-loader, middleware, and proxy internals are represented only at their supported module boundaries.

Main entry points: [`src/index.ts`](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/index.ts) (Plugin entry), [`src/server/index.ts`](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/server/index.ts) (Server setup), [`src/context.ts`](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/context.ts) (Plugin context), [`src/bundle.ts`](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/bundle.ts) (Bundle generation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_plugin["Plugin lifecycle"]
  node_plugin["Plugin entry<br/>[index.ts]"]
  node_environment["Environment loader<br/>[environment.ts]"]
  node_manifest["Manifest loader"]
  node_viteconfig["Vite options<br/>[vite-options.ts]"]
end

subgraph group_build["Build resources"]
  node_bundle["Bundle generation<br/>[bundle.ts]"]
  node_language["Language loader<br/>[loader.ts]"]
  node_transformer["Language transformer<br/>[transformer.ts]"]
  node_validator["Language validator<br/>[validator.ts]"]
  node_packs["Pack compiler<br/>[compile-packs.ts]"]
end

subgraph group_dev["Development server"]
  node_server["Server setup<br/>[index.ts]"]
  node_middleware["HTTP middleware<br/>[http-middleware.ts]"]
  node_proxy["Socket proxy<br/>[socket-proxy.ts]"]
  node_templatewatch["Template tracker"]
  node_languagewatch["Language tracker"]
  node_hmr["HMR client<br/>[hmr-client.ts]"]
end

subgraph group_shared["Shared context"]
  node_context["Plugin context<br/>[context.ts]"]
  node_paths["Path utilities<br/>[path-utilities.ts]"]
end

node_developer(("Module developer"))
node_vite["Vite"]
node_foundry["Foundry VTT"]
node_project["Project files"]
node_output["Build output"]

node_developer -->|"configures"| node_vite
node_vite -->|"invokes hooks"| node_plugin
node_plugin -->|"loads settings"| node_environment
node_plugin -->|"loads manifest"| node_manifest
node_plugin -->|"adapts config"| node_viteconfig
node_plugin -->|"stores state"| node_context
node_manifest -->|"sets manifest"| node_context
node_environment -->|"sets environment"| node_context
node_viteconfig -->|"reads manifest"| node_context
node_vite -->|"resolves config"| node_plugin
node_plugin -->|"generates bundle"| node_bundle
node_bundle -->|"reads assets"| node_project
node_bundle -->|"writes assets"| node_output
node_plugin -->|"compiles packs"| node_packs
node_packs -->|"reads pack sources"| node_project
node_packs -->|"writes compiled packs"| node_output
node_plugin -->|"validates translations"| node_validator
node_validator -->|"loads built languages"| node_language
node_validator -->|"compares keys"| node_transformer
node_language -->|"reads language files"| node_project
node_language -->|"registers files"| node_languagewatch
node_vite -->|"starts dev server"| node_server
node_server -->|"initializes watcher"| node_templatewatch
node_server -->|"initializes watcher"| node_languagewatch
node_server -->|"installs middleware"| node_middleware
node_server -->|"installs proxy"| node_proxy
node_templatewatch -->|"sends update event"| node_vite
node_languagewatch -->|"sends update event"| node_vite
node_plugin -->|"injects client"| node_hmr
node_hmr -->|"refreshes applications"| node_foundry
node_proxy -->|"proxies sockets"| node_foundry
node_middleware -->|"serves local files"| node_project
node_middleware -->|"proxies requests"| node_foundry
node_paths -->|"reads configuration"| node_context
node_paths -->|"resolves local paths"| node_project

click node_plugin "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/index.ts"
click node_environment "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/config/environment.ts"
click node_manifest "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/config/foundryvtt-manifest.ts"
click node_viteconfig "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/config/vite-options.ts"
click node_bundle "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/bundle.ts"
click node_language "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/language/loader.ts"
click node_transformer "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/language/transformer.ts"
click node_validator "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/language/validator.ts"
click node_packs "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/packs/compile-packs.ts"
click node_context "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/context.ts"
click node_server "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/server/index.ts"
click node_middleware "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/server/http-middleware.ts"
click node_proxy "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/server/socket-proxy.ts"
click node_templatewatch "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/server/trackers/handlebars-tracker.ts"
click node_languagewatch "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/server/trackers/language-tracker.ts"
click node_hmr "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/server/hmr-client.ts"
click node_paths "https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/utils/path-utilities.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_plugin,node_environment,node_manifest,node_viteconfig toneBlue
class node_bundle,node_language,node_transformer,node_validator,node_packs toneAmber
class node_server,node_middleware,node_proxy,node_templatewatch,node_languagewatch,node_hmr toneMint
class node_context,node_paths toneRose
class node_developer,node_vite,node_foundry,node_project,node_output toneIndigo
```

## Components

### Plugin lifecycle

- [Plugin entry](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/index.ts): `src/index.ts`
- [Environment loader](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/config/environment.ts): `src/config/environment.ts`
- [Manifest loader](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/config/foundryvtt-manifest.ts): `src/config/foundryvtt-manifest.ts`
- [Vite options](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/config/vite-options.ts): `src/config/vite-options.ts`

### Build resources

- [Bundle generation](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/bundle.ts): `src/bundle.ts`
- [Language loader](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/language/loader.ts): `src/language/loader.ts`
- [Language transformer](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/language/transformer.ts): `src/language/transformer.ts`
- [Language validator](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/language/validator.ts): `src/language/validator.ts`
- [Pack compiler](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/packs/compile-packs.ts): `src/packs/compile-packs.ts`

### Development server

- [Server setup](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/server/index.ts): `src/server/index.ts`
- [HTTP middleware](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/server/http-middleware.ts): `src/server/http-middleware.ts`
- [Socket proxy](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/server/socket-proxy.ts): `src/server/socket-proxy.ts`
- [Template tracker](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/server/trackers/handlebars-tracker.ts): `src/server/trackers/handlebars-tracker.ts`
- [Language tracker](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/server/trackers/language-tracker.ts): `src/server/trackers/language-tracker.ts`
- [HMR client](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/server/hmr-client.ts): `src/server/hmr-client.ts`

### Shared context

- [Plugin context](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/context.ts): `src/context.ts`
- [Path utilities](https://github.com/matyeusm/vite-plugin-fvtt/blob/main/src/utils/path-utilities.ts): `src/utils/path-utilities.ts`

### Other components

- **Module developer**
- **Vite**
- **Foundry VTT**
- **Project files**
- **Build output**

## Connections

- Module developer → Vite: configures
- Vite → Plugin entry: invokes hooks
- Plugin entry → Environment loader: loads settings
- Plugin entry → Manifest loader: loads manifest
- Plugin entry → Vite options: adapts config
- Plugin entry → Plugin context: stores state
- Manifest loader → Plugin context: sets manifest
- Environment loader → Plugin context: sets environment
- Vite options → Plugin context: reads manifest
- Vite → Plugin entry: resolves config
- Plugin entry → Bundle generation: generates bundle
- Bundle generation → Project files: reads assets
- Bundle generation → Build output: writes assets
- Plugin entry → Pack compiler: compiles packs
- Pack compiler → Project files: reads pack sources
- Pack compiler → Build output: writes compiled packs
- Plugin entry → Language validator: validates translations
- Language validator → Language loader: loads built languages
- Language validator → Language transformer: compares keys
- Language loader → Project files: reads language files
- Language loader → Language tracker: registers files
- Vite → Server setup: starts dev server
- Server setup → Template tracker: initializes watcher
- Server setup → Language tracker: initializes watcher
- Server setup → HTTP middleware: installs middleware
- Server setup → Socket proxy: installs proxy
- Template tracker → Vite: sends update event
- Language tracker → Vite: sends update event
- Plugin entry → HMR client: injects client
- HMR client → Foundry VTT: refreshes applications
- Socket proxy → Foundry VTT: proxies sockets
- HTTP middleware → Project files: serves local files
- HTTP middleware → Foundry VTT: proxies requests
- Path utilities → Plugin context: reads configuration
- Path utilities → Project files: resolves local paths
