freshcrate
Home > Uncategorized > SafeDI

SafeDI

Compile-time-safe dependency injection for Swift without the boilerplate

Description

Compile-time-safe dependency injection for Swift without the boilerplate

README

SafeDI

CI Status codecov License

Compile-time-safe dependency injection without the boilerplate. No containers. No service locators. No hand-written DI types.

Why teams choose SafeDI

  • Dependency injection that feels natural. Get the simplicity of manual dependency injection without ceremony.
  • Compile-time graph validation. If the code compiles, the dependency graph is valid.
  • Scoped runtime values. Make your real logged-in User available non-optionally to any type in the subtree with just a single macro decoration.
  • Full-graph mocks. Generated from your real dependency graph, mock() lets you override any branch for easy previews and tests.
  • Architecture-independent. SwiftUI or UIKit, coordinators or MVVM, one module or hundreds — SafeDI fits what you already have.
  • Clear failures. SafeDI flags unsolvable dependency graphs, outlining the problem and suggesting fixes.

The core concept

SafeDI reads your code, validates your dependencies, and generates production and mock dependency trees—all during project compilation.

Opting a type into the SafeDI dependency tree is simple: add the @Instantiable macro to your type declaration, and decorate each dependency with a macro that indicates its lifecycle. Here is what a notes app might look like in SafeDI:

// `NotesApp` is the root of the dependency graph. SafeDI generates its public `init()`.
@Instantiable(isRoot: true) @main
public struct NotesApp: App, Instantiable {
    public var body: some Scene {
        WindowGroup {
            if let user = userService.user {
                // Forward the authenticated user into the logged-in subtree.
                loggedInViewBuilder.instantiate(user)
            } else {
                nameEntryViewBuilder.instantiate()
            }
        }
    }

    @ObservedObject @Instantiated private var userService: UserService
    @Instantiated private let nameEntryViewBuilder: Instantiator<NameEntryView>
    @Instantiated private let loggedInViewBuilder: Instantiator<LoggedInView>
}

@Instantiable
public struct LoggedInView: View, Instantiable {
    public var body: some View {  }

    // `user` is a runtime value forwarded in at this boundary.
    @Forwarded private let user: User
    // `userService` is received from an ancestor in the tree.
    @Received private let userService: UserService
    // `noteStorage` is created by `LoggedInView` and lives for its lifetime.
    @Instantiated private let noteStorage: NoteStorage
}

@Instantiable
public final class NoteStorage: Instantiable {
    // `user` and `stringStorage` are received from ancestors in the tree.
    @Received private let user: User
    @Received private let stringStorage: StringStorage
}

User is a runtime-derived value. It is forwarded once at the logged-in boundary and received later by the types that need it—non-optional, scoped to the subtree where it exists.

This is the core SafeDI model:

  • write normal Swift types,
  • declare dependencies where they live,
  • let SafeDI validate and generate the wiring.

For a comprehensive explanation of SafeDI’s macros and their usage, please read the Macros section of our manual.

Tests and previews from real feature roots

Decorate a type with @Instantiable(generateMock: true) and SafeDI generates a static func mock(…) -> Type method that builds the full dependency subtree for that type. The same declarations that define the production graph generate the test and preview graphs.

If every dependency can be mocked, calling mock() with no arguments works:

#Preview {
    LoggedInView.mock()
}

// Types can give SafeDI a mock without providing a production implementation via `mockOnly`.
@Instantiable(mockOnly: true)
extension User {
    public static func mock() -> User {
        User(name: "Mock User")
    }
}

For previews and tests that need real data, pass forwarded values directly and use safeDIOverrides to reach into the subtree:

#Preview {
    LoggedInView.mock(
        user: User(name: "dfed"),
        safeDIOverrides: .init(
            noteStorage: .init(defaultNote: "dfed says hello")
        )
    )
}

safeDIOverrides is a generated struct whose fields mirror the subtree SafeDI built. SafeDI still wires the rest of the graph around each override, so customizations compose with the subtree instead of replacing it.

Features

✓ Compile-time safe✓ Thread safe✓ Hierarchical dependency scoping
✓ Constructor injection✓ Multi-module support✓ Dependency inversion support
✓ Transitive dependency solving✓ Cycle detection✓ Architecture independent
✓ No DI-specific types or generics required✓ Full-graph mocks✓ Clear errors: never debug generated code

Getting started

Three steps to integrate:

  1. Add .package(url: "https://github.com/dfed/SafeDI.git", from: "2.0.0") to your Package.swift dependencies.
  2. Attach the SafeDIGenerator build tool plugin to your first-party target(s).
  3. Decorate your app’s root type with @Instantiable(isRoot: true) and add @Instantiable to the dependencies it reaches.

Working sample projects live in the Examples folder — clone, open, and build. The Manual covers Xcode projects, multi-module packages, custom build systems, and prebuild scripts in depth.

If you are migrating an existing project to SafeDI, follow our migration guide. If you are upgrading from SafeDI 1.x, follow the 1.x → 2.x migration guide.

Comparing SafeDI to other DI libraries

SafeDI is closest in spirit to Needle and Weaver: all three validate the dependency graph at compile time and support hierarchical scoping, letting runtime-derived values like an authenticated user live non-optionally inside a subtree. Where Needle asks you to maintain a dependency protocol for every type, and Weaver keeps a separate container declaration alongside your code, SafeDI leaves your types untouched — the macros are the integration.

Factory and swift-dependencies take a container/environment approach that shines for scalar dependencies like a Clock or a URLSession. SafeDI is built around the object graph itself — hierarchical scoping makes graph-local runtime values (an auth token, a logged-in user) first-class subtree dependencies, received non-optionally where they’re actually needed. Swinject goes further in that runtime-lookup direction and offers no compile-time validation at all.

SwiftUI’s own Environment is a useful mental model for a dependency tree — but without compile-time validation. SafeDI applies that tree shape to the full object graph and guarantees it resolves.

Across all of these, SafeDI is the only Swift DI library that generates full-graph mocks from your real dependency graph, and the only hierarchical DI library whose integration errors surface as Swift macro diagnostics with fix-its directly in your IDE.

Contributing

I’m glad you’re interested in SafeDI, and I’d love to see where you take it. Please review the contributing guidelines prior to submitting a Pull Request.

Thanks for being part of this journey, and happy injecting!

Author

SafeDI was created by Dan Federman, the architect of Airbnb’s closed-source Swift dependency injection system. Following his tenure at Airbnb, Dan developed SafeDI to share a modern, compile-time-safe dependency injection solution with the Swift community.

Dan has a proven track record of maintaining open-source libraries: he co-created Valet and has been maintaining the repo since its debut in 2015.

Acknowledgements

Special thanks to @kierajmumick for helping shape the early design of SafeDI.

Release History

VersionChangesUrgencyDate
2.0.0-beta-5## What's Changed * Docs: document SafeDI cycle mechanics, erasure matrix, and selected init by @dfed in https://github.com/dfed/SafeDI/pull/270 * README: remove phantom Features-table header + drop 'Or skip ahead' by @dfed in https://github.com/dfed/SafeDI/pull/274 * Plugin: strip comments and strings before PluginScanner regex match by @dfed in https://github.com/dfed/SafeDI/pull/271 * Tests: enable compile verification on five previously-skipped mock tests by @dfed in https://github.com/dfed/High4/21/2026
2.0.0-alpha-18-xcode-plugin-test## What's Changed * Docs: document SafeDI cycle mechanics, erasure matrix, and selected init by @dfed in https://github.com/dfed/SafeDI/pull/270 * README: remove phantom Features-table header + drop 'Or skip ahead' by @dfed in https://github.com/dfed/SafeDI/pull/274 * Plugin: strip comments and strings before PluginScanner regex match by @dfed in https://github.com/dfed/SafeDI/pull/271 * Tests: enable compile verification on five previously-skipped mock tests by @dfed in https://github.com/dfed/High4/20/2026
2.0.0-beta-4## What's Changed * Polish beta docs and generator cleanup by @dfed in https://github.com/dfed/SafeDI/pull/253 * Docs: rewrite README and refactor notes Example around User forwarding by @dfed in https://github.com/dfed/SafeDI/pull/254 * Docs polish, test renames, codegen cleanup by @dfed in https://github.com/dfed/SafeDI/pull/255 * Fix mock generation using init signature instead of hand-written mock by @dfed in https://github.com/dfed/SafeDI/pull/257 * Tests: declare Instantiable conformance dHigh4/20/2026
2.0.0-beta-3## What's Changed * Add package resolution retry to all CI jobs by @dfed in https://github.com/dfed/SafeDI/pull/252 * Improve mock generation for fulfilledByType and mockOnly coexistence by @dfed in https://github.com/dfed/SafeDI/pull/250 * Fix mock closure types to use property type and handle erased existentials by @dfed in https://github.com/dfed/SafeDI/pull/251 **Full Changelog**: https://github.com/dfed/SafeDI/compare/2.0.0-beta-2...2.0.0-beta-3High4/15/2026
2.0.0-beta-2## What's Changed * Fix forwarded mock default when mock has required parameters by @dfed in https://github.com/dfed/SafeDI/pull/249 **Full Changelog**: https://github.com/dfed/SafeDI/compare/2.0.0-beta-1...2.0.0-beta-2Medium4/12/2026
2.0.0-beta-1## What's Changed * Cover shared mock configuration file generation paths by @dfed in https://github.com/dfed/SafeDI/pull/245 * Remove retroactive sendable conformance by @dfed in https://github.com/dfed/SafeDI/pull/246 * Add mockOnly parameter to @Instantiable by @dfed in https://github.com/dfed/SafeDI/pull/248 **Full Changelog**: https://github.com/dfed/SafeDI/compare/2.0.0-alpha-17...2.0.0-beta-1Medium4/12/2026
2.0.0-alpha-17## What's Changed * Rename SafeDIParameters to SafeDIOverrides and add doc comments to generated mock types by @dfed in https://github.com/dfed/SafeDI/pull/244 **Full Changelog**: https://github.com/dfed/SafeDI/compare/2.0.0-alpha-16...2.0.0-alpha-17Medium4/11/2026
2.0.0-alpha-16## What's Changed * Add -internalize-at-link to SafeDITool release builds by @dfed in https://github.com/dfed/SafeDI/pull/239 * Speed up CI with concurrency groups and targeted CodeQL builds by @dfed in https://github.com/dfed/SafeDI/pull/240 * Use concreteType for SafeDIMockConfiguration struct extensions by @dfed in https://github.com/dfed/SafeDI/pull/243 * Move onlyIfAvailable received dependencies into SafeDIParameters (simple) by @dfed in https://github.com/dfed/SafeDI/pull/241 **Full ChaMedium4/10/2026
2.0.0-alpha-15## What's Changed * Revert leaf mock wrapper generation by @dfed in https://github.com/dfed/SafeDI/pull/238 **Full Changelog**: https://github.com/dfed/SafeDI/compare/2.0.0-alpha-14...2.0.0-alpha-15Medium4/10/2026
2.0.0-alpha-14## What's Changed * Unify build tool plugins with prebuilt artifact bundle and Linux support by @dfed in https://github.com/dfed/SafeDI/pull/231 * Always generate mock configuration wrappers by @dfed in https://github.com/dfed/SafeDI/pull/235 **Full Changelog**: https://github.com/dfed/SafeDI/compare/2.0.0-alpha-11...2.0.0-alpha-14Medium4/10/2026
2.0.0-alpha-13**Full Changelog**: https://github.com/dfed/SafeDI/compare/2.0.0-alpha-12...2.0.0-alpha-13Medium4/9/2026
2.0.0-alpha-12**Full Changelog**: https://github.com/dfed/SafeDI/compare/2.0.0-alpha-11...2.0.0-alpha-12Medium4/9/2026
2.0.0-alpha-11**DO NOT USE**: Placeholder release for artifact bundle bootstrapping.Medium4/9/2026
2.0.0-alpha-10## What's Changed * Bump addressable from 2.8.7 to 2.9.0 in the bundler group across 1 directory by @dependabot[bot] in https://github.com/dfed/SafeDI/pull/229 * Fix generateMock fixit insertion order by @dfed in https://github.com/dfed/SafeDI/pull/230 * Redesign mock API with tree-structured SafeDIParameters by @dfed in https://github.com/dfed/SafeDI/pull/228 **Full Changelog**: https://github.com/dfed/SafeDI/compare/2.0.0-alpha-9...2.0.0-alpha-10Medium4/9/2026
2.0.0-alpha-9## What's Changed * Validate forwarded-property constraint in mock scope mapping by @dfed in https://github.com/dfed/SafeDI/pull/224 * Move @SafeDIConfiguration docs to its own section under Macros by @dfed in https://github.com/dfed/SafeDI/pull/225 * Move lint.sh under CLI directory by @dfed in https://github.com/dfed/SafeDI/pull/226 * Change @SafeDIConfiguration to #SafeDIConfiguration freestanding macro by @dfed in https://github.com/dfed/SafeDI/pull/227 **Full Changelog**: https://gMedium4/7/2026
2.0.0-alpha-8## What's Changed * Bump Prebuilt example by @dfed in https://github.com/dfed/SafeDI/pull/221 * Split SafeDIToolMockGenerationTests into focused test files by @dfed in https://github.com/dfed/SafeDI/pull/223 * Symlink SafeDICore into SafeDIMacros to eliminate x86_64 host builds by @dfed in https://github.com/dfed/SafeDI/pull/222 **Full Changelog**: https://github.com/dfed/SafeDI/compare/2.0.0-alpha-7...2.0.0-alpha-8Medium4/6/2026
2.0.0-alpha-7## What's Changed * Fix mock code gen for dependency cycles through Instantiator boundaries by @dfed in https://github.com/dfed/SafeDI/pull/219 * Detect and error on partially-lazy dependency cycles by @dfed in https://github.com/dfed/SafeDI/pull/220 * Remove swift-collections dependency by @dfed in https://github.com/dfed/SafeDI/pull/218 **Full Changelog**: https://github.com/dfed/SafeDI/compare/2.0.0-alpha-6...2.0.0-alpha-7Medium4/6/2026
2.0.0-alpha-6## What's Changed * Add customMockName parameter for generateMock + hand-written mock coexistence by @dfed in https://github.com/dfed/SafeDI/pull/216 * Get code coverage to 100% by @dfed in https://github.com/dfed/SafeDI/pull/217 **Full Changelog**: https://github.com/dfed/SafeDI/compare/2.0.0-alpha-5...2.0.0-alpha-6Medium4/6/2026
2.0.0-alpha-5## What's Changed * Accept fulfillingAdditionalTypes as valid mock return types in macro by @dfed in https://github.com/dfed/SafeDI/pull/215 **Full Changelog**: https://github.com/dfed/SafeDI/compare/2.0.0-alpha-4...2.0.0-alpha-5Medium4/5/2026
2.0.0-alpha-4## What's Changed * Get ExamplePrebuiltPackageIntegration using v2 by @dfed in https://github.com/dfed/SafeDI/pull/211 * Allow mock() to return fulfillingAdditionalTypes with return-type-aware dispatch by @dfed in https://github.com/dfed/SafeDI/pull/213 * Error when generateMock: true conflicts with user-defined mock method by @dfed in https://github.com/dfed/SafeDI/pull/214 **Full Changelog**: https://github.com/dfed/SafeDI/compare/2.0.0-alpha-3...2.0.0-alpha-4Medium4/5/2026
2.0.0-alpha-3## What's Changed * Validate handwritten mock() method return type, visibility, and uniqueness by @dfed in https://github.com/dfed/SafeDI/pull/210 **Full Changelog**: https://github.com/dfed/SafeDI/compare/2.0.0-alpha-2...2.0.0-alpha-3Medium4/4/2026
2.0.0-alpha-2## What's Changed * Pre-release polish for 2.0.0 by @dfed in https://github.com/dfed/SafeDI/pull/206 * Fix mock generation for default-valued parameters with underscore labels by @dfed in https://github.com/dfed/SafeDI/pull/209 * Control mock generation per type via @Instantiable(generateMock: true) by @dfed in https://github.com/dfed/SafeDI/pull/208 **Full Changelog**: https://github.com/dfed/SafeDI/compare/2.0.0-alpha-1...2.0.0-alpha-2Medium4/4/2026
2.0.0-alpha-1## What's Changed * Add @SafeDIConfiguration macro to replace CSV config by @dfed in https://github.com/dfed/SafeDI/pull/199 * Bump to v2.0.0, require Swift 6.3, remove CocoaPods support by @dfed in https://github.com/dfed/SafeDI/pull/201 * Generate one output file per root @Instantiable by @dfed in https://github.com/dfed/SafeDI/pull/202 * Replace plugin root regex with SafeDIRootScanner by @dfed in https://github.com/dfed/SafeDI/pull/203 * Fix additionalDirectoriesToInclude on the Xcode/pMedium4/4/2026
1.5.4## What's Changed * Bump activesupport from 7.2.2.1 to 7.2.3.1 in the bundler group across 1 directory by @dependabot[bot] in https://github.com/dfed/SafeDI/pull/197 * Drop swift-macro-testing to unblock SwiftSyntax updates by @dfed in https://github.com/dfed/SafeDI/pull/198 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.5.3...1.5.4Medium3/25/2026
1.5.3## What's Changed * Fix generated code ordering with transitive Instantiator captures by @dfed in https://github.com/dfed/SafeDI/pull/196 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.5.2...1.5.3Low3/10/2026
1.5.2## What's Changed * Bump ExamplePrebuiltPackageIntegration by @dfed in https://github.com/dfed/SafeDI/pull/194 * Bump SwiftSyntax dependency to 602.0.0 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.5.1...1.5.2Low2/27/2026
1.5.1## What's Changed * Bump actions/checkout to v6 by @dfed in https://github.com/dfed/SafeDI/pull/192 * Fix SPM plugins failing when package path contains spaces by @dfed in https://github.com/dfed/SafeDI/pull/193 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.5.0...1.5.1Low2/9/2026
1.5.0## What's Changed * Improve initializer fixit when there are no parameters and no body by @dfed in https://github.com/dfed/SafeDI/pull/190 * Add --version flag to SafeDITool by @dfed in https://github.com/dfed/SafeDI/pull/191 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.4.3...1.5.0Low1/16/2026
1.4.3## What's Changed * Improve observable object and erased existential examples with AnyUserService by @dfed in https://github.com/dfed/SafeDI/pull/185 * Bump CodeQL by @dfed in https://github.com/dfed/SafeDI/pull/186 * Improve Forwarded documentation by @dfed in https://github.com/dfed/SafeDI/pull/187 * Exit 0 when compiler errors exist by @dfed in https://github.com/dfed/SafeDI/pull/189 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.4.2...1.4.3Low12/5/2025
1.4.2## What's Changed * Detect cycles with a mix of instantiated and received properties by @dfed in https://github.com/dfed/SafeDI/pull/184 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.4.1...1.4.2Low11/12/2025
1.4.1## What's Changed * Allow for depending on `swift-syntax` v602.0.0 ## New Contributors * @dependabot[bot] made their first contribution in https://github.com/dfed/SafeDI/pull/181 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.4.0...1.4.1Low9/17/2025
1.4.0## What's Changed * Plugin integration options are numerous by @dfed in https://github.com/dfed/SafeDI/pull/170 * Document SafeDIPrebuiltGenerator by @dfed in https://github.com/dfed/SafeDI/pull/171 * Schedule CI to run every week by @dfed in https://github.com/dfed/SafeDI/pull/172 * Create codeql.yml by @dfed in https://github.com/dfed/SafeDI/pull/173 * Bump codecov-action to v5 by @dfed in https://github.com/dfed/SafeDI/pull/174 * Build project manually for CodeQL by @dfed in https://gitLow9/10/2025
1.4.0-rc-3## What's Changed * Instantiable must be conformed to in all isolation contexts by @dfed in https://github.com/dfed/SafeDI/pull/177 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.4.0-rc-2...1.4.0-rc-3Low9/1/2025
1.4.0-rc-2## What's Changed * Work around errant Swift 6.2 compiler warning by @dfed in https://github.com/dfed/SafeDI/pull/176 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.4.0-rc-1...1.4.0-rc-2Low9/1/2025
1.4.0-rc-1## What's Changed * Share SafeDICore between Macros and Plugins again by @dfed in https://github.com/dfed/SafeDI/pull/163 This release enables compiling on Swift 6.2. However, it breaks compilation on Swift 6.1.1 when `defaults write com.apple.dt.Xcode IDEPackageEnablePrebuilts YES` is set due to [this issue](https://forums.swift.org/t/preview-swift-syntax-prebuilts-for-macros/80202/16). **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.3.0...1.4.0-rc-1Low8/18/2025
1.3.0## What's Changed * Enable injecting optional properties that are only fulfilled when available by @dfed in https://github.com/dfed/SafeDI/pull/168 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.2.3...1.3.0Low6/30/2025
1.2.3## What's Changed * Initializer fixit should not re-add conforming closure parameter by @dfed in https://github.com/dfed/SafeDI/pull/169 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.2.2...1.2.3Low6/29/2025
1.3.0-alpha-1## What's Changed * Enable injecting optional properties that are only fulfilled when available by @dfed in https://github.com/dfed/SafeDI/pull/168 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.2.2...1.3.0-alpha-1Low6/27/2025
1.2.2* Enables avoiding rewriting the SafeDI.swift generated tree when using the prebuilt Xcode plugin **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.2.1...1.2.2Low6/3/2025
1.2.1## What's Changed * Only write the dependency tree output file if it has changed by @dfed in https://github.com/dfed/SafeDI/pull/167 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.2.0...1.2.1Low6/3/2025
1.2.0## What's Changed * Bump Swift Collections by @dfed in https://github.com/dfed/SafeDI/pull/155 * Adopt Swift Testing by @dfed in https://github.com/dfed/SafeDI/pull/156 * Update format options by @dfed in https://github.com/dfed/SafeDI/pull/157 * Improve test reliability by @dfed in https://github.com/dfed/SafeDI/pull/159 * Adopt conformingTo parameter in MemberMacro by @dfed in https://github.com/dfed/SafeDI/pull/160 * Create SafeDIPrebuiltGenerator + enable using prebuilt SwiftSyntax binLow6/2/2025
1.2.0-rc-6## What's Changed * Enable depending on SwiftSyntax > 600.0.1 by @dfed in https://github.com/dfed/SafeDI/pull/165 * Improve whitespace in initializer FixIt by @dfed in https://github.com/dfed/SafeDI/pull/166 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.2.0-rc-5...1.2.0-rc-6Low6/2/2025
1.2.0-rc-5**Full Changelog**: https://github.com/dfed/SafeDI/compare/1.2.0-rc-4...1.2.0-rc-5Low6/2/2025
1.2.0-rc-4## What's Changed * Enable FixIt to update existing initializer rather than always providing a new one by @dfed in https://github.com/dfed/SafeDI/pull/164 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.2.0-rc-3...1.2.0-rc-4Low6/2/2025
1.2.0-rc-3**Full Changelog**: https://github.com/dfed/SafeDI/compare/1.2.0-rc-2...1.2.0-rc-3Low5/30/2025
1.2.0-rc-2## What's Changed * Delete existing file before moving file to same location by @dfed in https://github.com/dfed/SafeDI/pull/162 **Full Changelog**: https://github.com/dfed/SafeDI/compare/1.2.0-rc-1...1.2.0-rc-2Low5/30/2025
1.2.0-rc-1## What's Changed * Bump Swift Collections by @dfed in https://github.com/dfed/SafeDI/pull/155 * Adopt Swift Testing by @dfed in https://github.com/dfed/SafeDI/pull/156 * Update format options by @dfed in https://github.com/dfed/SafeDI/pull/157 * Improve test reliability by @dfed in https://github.com/dfed/SafeDI/pull/159 * Adopt conformingTo parameter in MemberMacro by @dfed in https://github.com/dfed/SafeDI/pull/160 * Create SafeDIPrebuiltGenerator + enable using prebuilt SwiftSyntax binLow5/30/2025
1.2.0-alpha-8Release 1.2.0-alpha-8Low5/30/2025
1.2.0-alpha-7Release 1.2.0-alpha-7Low5/30/2025
1.2.0-alpha-6Release 1.2.0-alpha-6Low5/29/2025

Dependencies & License Audit

Loading dependencies...

Similar Packages

pysource-minimizeminimize python source code to find bugs more easily v0.10.1
react-native-agentkitConvert React Native app flows to CLI for AI agent automation0.2.2
codegenA code generator to output type definitions from JSON Schema in a growing amount of programming languages0.0.0
uipath-ai-skillsAI skills that turns coding agents into UiPath experts.0.0.0
ZibStack.NETZero-reflection .NET source generators: [Log] structured logging, [Trace] OpenTelemetry spans, [Aop] aspects (Retry/Cache/Metrics), Dto/CrudApi, TypeGen (TypeScript + OpenAPI from C# DTOs). Compile-tiv3.2.4