Swiftpack.co -  Appsaurus/FluentSeeder as Swift Package
Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
The easiest way to seed a database using Fluent.
.package(url: "https://github.com/Appsaurus/FluentSeeder.git", from: "0.1.5")


Swift Vapor Swift Package Manager License

FluentSeeder makes it easier to seed Fluent models. For testing purposes, it can create psuedo realistic random data for your models based on their property names and types using RandomFactory.


FluentSeeder is available through Swift Package Manager. To install, add the following to your Package.swift file.

let package = Package(
    name: "YourProject",
    dependencies: [
        .package(url: "https://github.com/Appsaurus/FluentSeeder", from: "0.1.0"),
    targets: [
      //If just using for test purposes (recommended use case)
      .testTarget(name: "YourAppTests", dependencies: ["FluentSeeder", ... ])
      //Not recommended but still possible to use to seed your actual app.
      .target(name: "YourApp", dependencies: ["FluentSeeder", ... ])


1. Import the library

import FluentSeeder

2. Implement Seeder

Registering and configuration of services, databases, and migrations can be done via overriding register(services:), configure(databases:) and configure(migrations:) respectively.

public class ExampleSeeder: Seeder{
	public typealias Database = SQLiteDatabase
	open static func seeds() -> [SeedProtocol]{
		return [
			//Seed models first
			Seed<ExampleModel>(count: 50),
			Seed<ExampleSiblingModel>(count: 25),
			Seed<ExampleChildModel>(count: 10),

			//Then relationships that depend on those models existing
			SiblingSeed<ExampleModelSiblingPivot>(count: 10),
			//You can seed parents for each child
			ParentSeed<ExampleModel, ExampleChildModel>(at: \.optionalParentModelId)
			//Or if you prefer to seed the relationship in the other direction (possibly for one-to-many relationship)
			ChildSeed<ExampleModel, ExampleChildModel>.init(count: 3, at:  \.optionalParentModelId)

3. Add your seeder's migration to the database

//Don't forget to add your model mirations first
migrations.add(model: ExampleModel.self, database: .sqlite)
migrations.add(model: ExampleSiblingModel.self, database: .sqlite)
migrations.add(model: ExampleChildModel.self, database: .sqlite)
migrations.add(model: ExampleModelSiblingPivot.self, database: .sqlite)

migrations.add(migration: ExampleSeeder.self, database: .sqlite)

Custom seeds

By supplying a ModelFactory to the Seed initializer, you can customize how your model is initialized and override the default randmized data. For relationship seeds, you can supply querys to filter which models are included when creating relationships are formed. For SiblingSeed you can optionally supply a leftQuery and rightQuery, and for ParentSeed and ChildSeed you can optionally supply parentQuery and childQuery. If no queries are provided, random samples are taken from each seeded model, or all models are iterated depending upon the direction of the seeded relationship.


We would love you to contribute to FluentSeeder, check the CONTRIBUTING file for more info.


FluentSeeder is available under the MIT license. See the LICENSE file for more info.


Stars: 2
Last commit: 2 weeks ago

Ad: Job Offers

iOS Software Engineer @ Perry Street Software
Perry Street Software is Jack’d and SCRUFF. We are two of the world’s largest gay, bi, trans and queer social dating apps on iOS and Android. Our brands reach more than 20 million members worldwide so members can connect, meet and express themselves on a platform that prioritizes privacy and security. We invest heavily into SwiftUI and using Swift Packages to modularize the codebase.

Submit a free job ad (while I'm testing this). The analytics numbers for this website are here.

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics