Folder Structure#
Now that you’ve created, built, and run your first Vapor app, let’s take a moment to familiarize you with Vapor’s folder structure. The structure is based on SPM’s folder structure, so if you’ve worked with SPM before it should be familiar.
.
├── Public
├── Sources
│ ├── App
│ │ ├── Controllers
│ │ ├── Migrations
│ │ ├── Models
│ │ ├── configure.swift
│ │ ├── entrypoint.swift
│ │ └── routes.swift
│
├── Tests
│ └── AppTests
└── Package.swift
The sections below explain each part of the folder structure in more detail.
Public#
This folder contains any public files that will be served by your app if FileMiddleware is enabled. This is usually images, style sheets, and browser scripts. For example, a request to localhost:8080/favicon.ico will check to see if Public/favicon.ico exists and return it.
You will need to enable FileMiddleware in your configure.swift file before Vapor can serve public files.
// Serves files from `Public/` directory
let fileMiddleware = FileMiddleware(
publicDirectory: app.directory.publicDirectory
)
app.middleware.use(fileMiddleware)
Sources#
This folder contains all of the Swift source files for your project.
The top level folder, App, reflect your package’s module,
as declared in the SwiftPM manifest.
App#
This is where all of your application logic goes.
Controllers#
Controllers are a great way of grouping together application logic. Most controllers have many functions that accept a request and return some sort of response.
Migrations#
The migrations folder is where your database migrations go if you are using Fluent.
Models#
The models folder is a great place to store your Content structs or Fluent Models.
configure.swift#
This file contains the configure(_:) function. This method is called by entrypoint.swift to configure the newly created Application. This is where you should register services like routes, databases, providers, and more.
entrypoint.swift#
This file contains the @main entry point for the application that sets up, configures and runs your Vapor application.
routes.swift#
This file contains the routes(_:) function. This method is called near the end of configure(_:) to register routes to your Application.
Tests#
Each non-executable module in your Sources folder can have a corresponding folder in Tests. This contains code built on the XCTest module for testing your package. Tests can be run using swift test on the command line or pressing ⌘+U in Xcode.
AppTests#
This folder contains the unit tests for code in your App module.
Package.swift#
Finally is SPM’s package manifest.