There are multiple libraries provided by the FOSUtilities package: FOSFoundation, FOSMVVM, FOSTesting, FOSTestingUI, FOSMVVMVapor, FOSTestingVapor.
For guides, articles, and API documentation see the library's documentation on the Web or in Xcode.
The package ships a scaffolder that generates a complete FOSMVVM application: a SwiftUI app (localOnly), a SwiftUI app plus a Vapor server sharing one ViewModel contract (clientServer), or a reusable ViewModel package (sharedLibrary). It needs Xcode and xcodegen (brew install xcodegen):
git clone https://github.com/foscomputerservices/FOSUtilities.git
cd FOSUtilities
swift run fosmvvm-bootstrap new --output ~/MyAppA short interview asks for the project name, shape, platforms, bundle id, and team (add --verbose to also print the equivalent --config JSON so reruns can skip the questions). Add --verify to build the generated project and run its tests on your machine (CI already verifies every release this way). Full details: Creating a Project.
doctor audits an existing project against the same rules the scaffolder generates by. If your project is a Swift package that already depends on FOSUtilities, there is nothing to install:
swift package fosmvvm-doctor --shape clientServerAn Xcode-only project — a .xcodeproj with no package manifest — has nothing for swift package to attach to, so run the audit from a FOSUtilities checkout instead (a standalone installable binary is planned):
swift run fosmvvm-bootstrap doctor --project ~/MyApp --shape localOnlyIt reports and never rewrites — every finding names the setting and the value to use. It catches the failures that surface far from their cause: a second direct link to a FOS product, a silently-ignored misspelled build setting, a missing development team, a deployment target under the FOSUtilities floor, a test plan pointing at identifiers a regeneration re-minted. Errors exit non-zero; warnings do not.
FOSFoundation is a library of protocols, patterns, types and routines that I have found generally useful in my projects. Support areas include:
- Extensions to URL for one-line REST-Style requests
- Extensions to JSONEncoder and JSONDecoder for single-statement encoding/decoding of Codables
- Along with standardized support for handling various Date and DateTime styles
- ISO 8601
- JSON
- Along with standardized support for handling various Date and DateTime styles
- Extensions to Collection for throttling execution of requests when servers restrict the number of requests per any time period
- Extensions on String such as:
- CamelCase / snake_case conversion
- Hexadecimal String to/from UInt64, Int64, UInt, and Int
- Cleaning and standardizing user-provided input
- Generating random and unique Strings
- Swift Range support
- String obfuscation/revealing (e.g., ROT 13/ROT 47)
For guides, articles, and API documentation see the library's documentation on the Web or in Xcode.
FOSMVVM is a library that implements the Model-View-ViewModel pattern for binding SwiftUI projects to Vapor web services.
For guides, articles, and API documentation see the library's documentation on the Web or in Xcode.
Here is an example of setting up a new Model-View-ViewModel-based client application
@ViewModel
public struct LandingPageViewModel: RequestableViewModel {
public typealias Request = LandingPageRequest
@LocalizedString public var pageTitle
public var vmId = ViewModelId()
public init() {}
public static func stub() -> Self { .init() }
}struct LandingPageView: ViewModelView {
let viewModel: LandingPageViewModel
var body: some View {
VStack {
Text(viewModel.pageTitle)
.font(.headline)
.padding(.bottom, 30)
}
.padding()
}
}@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
LandingPageView.bind()
}
.environment(
MVVMEnvironment(
currentVersion: .currentApplicationVersion,
appBundle: Bundle.main,
deploymentURLs: [
.production, .init(serverBaseURL: URL(string: "http://api.mywebserver.com")!),
.staging, .init(serverBaseURL: URL(string: "http://staging-api.mywebserver.com")!),
.debug, .init(serverBaseURL: URL(string: "http://localhost:8080")!)
]
)
)
}
}public func configure(_ app: Application) async throws {
// uncomment to serve files from /Public folder
// app.middleware.use(FileMiddleware(publicDirectory: app.directory.publicDirectory))
// register routes
try routes(app)
try app.initYamlLocalization(
bundle: Bundle.module,
resourceDirectoryName: "Resources"
)
}
func routes(_ app: Application) throws {
app.routesregister(viewModel: LandingPageViewModel.self)
}This repository includes Claude Code skills for generating FOSMVVM architecture components. These skills help automate the creation of ViewModels, Fields protocols, DataModels, ServerRequests, and Leaf Views following FOSMVVM patterns.
| Skill | Purpose |
|---|---|
fosmvvm-viewmodel-generator |
Generate ViewModels for UI screens and components |
fosmvvm-fields-generator |
Generate Form Specifications with validation and localization |
fosmvvm-serverrequest-generator |
Generate ServerRequest types for client-server communication |
fosmvvm-fluent-datamodel-generator |
Generate Fluent DataModels for server-side persistence |
fosmvvm-leaf-view-generator |
Generate Leaf templates for WebApps |
fosmvvm-swiftui-view-generator |
Generate SwiftUI views that render ViewModels |
fosmvvm-react-view-generator |
Generate React components that render ViewModels |
fosmvvm-serverrequest-test-generator |
Generate ServerRequest tests using VaporTesting |
fosmvvm-viewmodel-test-generator |
Generate ViewModel tests with multi-locale verification |
fosmvvm-ui-tests-generator |
Generate UI tests for ViewModelViews |
fosmvvm-swiftui-app-setup |
Set up the main App struct for SwiftUI applications |
skill-generator |
Generate new Claude Code skills |
To use these skills in your FOSMVVM projects, add this repository as a Claude Code plugin marketplace.
Option 1: Interactive
/plugin marketplace add foscomputerservices/FOSUtilities
/plugin install fosmvvm-generators@fosmvvm-toolsOption 2: Project Configuration
Add to your project's .claude/settings.json:
{
"enabledPlugins": {
"fosmvvm-generators@fosmvvm-tools": true
},
"extraKnownMarketplaces": {
"fosmvvm-tools": {
"source": {
"source": "github",
"repo": "foscomputerservices/FOSUtilities"
}
}
}
}For detailed FOSMVVM architecture concepts, see FOSMVVMArchitecture.md.
The FOSMVVM skills are also available for OpenClaw agents via ClawHub.
clawhub install fosmvvm-viewmodel-generator
clawhub install fosmvvm-fields-generator
clawhub install fosmvvm-serverrequest-generator
clawhub install fosmvvm-fluent-datamodel-generator
clawhub install fosmvvm-leaf-view-generator
clawhub install fosmvvm-swiftui-view-generator
clawhub install fosmvvm-react-view-generator
clawhub install fosmvvm-serverrequest-test-generator
clawhub install fosmvvm-viewmodel-test-generator
clawhub install fosmvvm-ui-tests-generator
clawhub install fosmvvm-swiftui-app-setupAlternatively, point OpenClaw at this repository's skills directory. Add to ~/.openclaw/openclaw.json:
{
"skills": {
"load": {
"extraDirs": ["/path/to/FOSUtilities/.claude/skills"]
}
}
}Or symlink individual skills into your OpenClaw workspace:
ln -s /path/to/FOSUtilities/.claude/skills/fosmvvm-viewmodel-generator ~/.openclaw/workspace/skills/FOSTestingUtilities is a package of testing patterns, types and routines that I have found generally useful in my projects.
For guides, articles, and API documentation see the library's documentation on the Web or in Xcode.
FOSUtilities supports the Swift Package Manager. To include FOSUtilities in your project add the following to your Package.swift file:
.package(url: "git@github.com:foscomputerservices/FOSUtilities.git", branch: "main"),To use one of the libraries, add one or more entry in the dependencies list of a target in your Package.swift file:
.target(
name: "MyTarget",
dependencies: [
.product(name: "FOSFoundation", package: "FOSUtilities"),
.product(name: "FOSMVVM", package: "FOSUtilities")
// ...
]
),
.testTarget(
name: "MyTests",
dependencies: [
.byName(name: "MyTarget"),
.byName(name: "FOSFoundation"),
.byName(name: "FOSMVVM"),
.byName(name: "FOSTesting"),
.product(name: "Testing", package: "swift-testing")
]
)All contributions are welcome! Please see CONTRIBUTING.md for more details.
This project is maintained by David Hunt owner of FOS Computer Services, LLC.
FOSUtilities is under the Apache License. See the LICENSE file for more information.