{"id":21846616,"url":"https://github.com/binarybirds/file-manager-kit","last_synced_at":"2026-04-27T08:31:35.085Z","repository":{"id":157103686,"uuid":"628181643","full_name":"BinaryBirds/file-manager-kit","owner":"BinaryBirds","description":"Useful extensions for the Swift Foundation FileManager.","archived":false,"fork":false,"pushed_at":"2026-01-27T09:41:37.000Z","size":57,"stargazers_count":31,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-01-27T22:22:02.432Z","etag":null,"topics":["swift","swift-6"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BinaryBirds.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-04-15T06:36:37.000Z","updated_at":"2026-01-15T13:16:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"66a61935-bf6b-410b-9c40-cb4a2d07ba8f","html_url":"https://github.com/BinaryBirds/file-manager-kit","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/BinaryBirds/file-manager-kit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BinaryBirds%2Ffile-manager-kit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BinaryBirds%2Ffile-manager-kit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BinaryBirds%2Ffile-manager-kit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BinaryBirds%2Ffile-manager-kit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BinaryBirds","download_url":"https://codeload.github.com/BinaryBirds/file-manager-kit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BinaryBirds%2Ffile-manager-kit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32329463,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["swift","swift-6"],"created_at":"2024-11-27T23:14:42.584Z","updated_at":"2026-04-27T08:31:35.071Z","avatar_url":"https://github.com/BinaryBirds.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FileManagerKit\n\nSwift extensions and DSLs for filesystem testing, scripting, and inspection.\n\n![Release: 0.5.0](https://img.shields.io/badge/Release-0%2E5%2E0-F05138)\n\n## Features\n\nThis package contains two products:\n\n- FileManagerKit – high-level extensions for FileManager\n- FileManagerKitBuilder – a DSL for creating filesystem layouts (ideal for tests)\n\n## Requirements\n\n![Swift 6.1+](https://img.shields.io/badge/Swift-6%2E1%2B-F05138)\n![Platforms: Linux, macOS, iOS, tvOS, watchOS, visionOS](https://img.shields.io/badge/Platforms-Linux_%7C_macOS_%7C_iOS_%7C_tvOS_%7C_watchOS_%7C_visionOS-F05138)\n\n- Swift 6.1+\n\n- Platforms:\n  - Linux\n  - macOS 15+\n  - iOS 18+\n  - tvOS 18+\n  - watchOS 11+\n  - visionOS 2+\n\n## Installation\n\nUse Swift Package Manager; add the dependency to your `Package.swift` file:\n\n```swift\n.package(url: \"https://github.com/binarybirds/file-manager-kit\", .exact: \"1.0.0-beta.1\"),\n```\n\nThen add `FileManagerKit` to your target dependencies:\n\n```swift\n.product(name: \"FileManagerKit\", package: \"file-manager-kit\"),\n```\n\nAlso add the other library too, if you need the builder:\n\n```swift\n.product(name: \"FileManagerKitBuilder\", package: \"file-manager-kit\"),\n```\n\n## Usage\n\n![DocC documentation](https://img.shields.io/badge/DocC-documentation-F05138)\nDocumentation is available at the following [link](https://binarybirds.github.io/file-manager-kit).\nHere are a few common use-cases.\n\n### FileManagerKit\n\nA set of ergonomic, safe extensions for working with FileManager.\n\nCheck if file or directory exists:\n\n```swift\nlet fileURL = URL(filePath: \"/path/to/file\")\nif fileManager.exists(at: fileURL) {\n    print(\"Exists!\")\n}\n```\n\nCreate a directory:\n\n```swift\nlet dirURL = URL(filePath: \"/path/to/new-dir\")\ntry fileManager.createDirectory(at: dirURL)\n```\n\nCreate a file:\n\n```swift\nlet fileURL = URL(filePath: \"/path/to/file.txt\")\nlet data = \"Hello\".data(using: .utf8)\ntry fileManager.createFile(at: fileURL, contents: data)\n```\n\nDelete a file or directory:\n\n```swift\nlet targetURL = URL(filePath: \"/path/to/delete\")\ntry fileManager.delete(at: targetURL)\n```\n\nList directory contents:\n\n```swift\nlet contents = fileManager.listDirectory(at: URL(filePath: \"/path/to/dir\"))\nprint(contents)\n```\n\nCopy and move:\n\n```swift\ntry fileManager.copy(from: URL(filePath: \"/from\"), to: URL(filePath: \"/to\"))\n\ntry fileManager.move(from: URL(filePath: \"/from\"), to: URL(filePath: \"/to\"))\n```\n\nGet file size information:\n\n```swift\nlet size = try fileManager.size(at: URL(filePath: \"/path/to/file\"))\nprint(\"\\(size) bytes\")\n```\n\n### FileManagerKitBuilder\n\nA Swift DSL to declaratively build, inspect, and tear down file system structures — great for testing.\n\nSimple Example to create and clean up a file structure:\n\n```swift\nimport FileManagerKitBuilder\n\nlet playground = FileManagerPlayground {\n    Directory(name: \"foo\") {\n        File(name: \"bar.txt\", string: \"Hello, world!\")\n    }\n}\n\nlet _ = try playground.build()\ntry playground.remove()\n```\n\nCustom type example, you can use a `BuildableItem` to generate structured files (e.g., JSON):\n\n```swift\npublic struct JSON\u003cT: Encodable\u003e: BuildableItem {\n    public let name: String\n    public let contents: T\n\n    public func buildItem() -\u003e FileManagerPlayground.Item {\n        let data = try! JSONEncoder().encode(contents)\n        let string = String(data: data, encoding: .utf8)!\n        return .file(File(name: \"\\(name).json\", string: string))\n    }\n}\n\nstruct User: Codable { let name: String }\n\nlet playground = FileManagerPlayground {\n    Directory(name: \"data\") {\n        JSON(name: \"user\", contents: User(name: \"Deku\"))\n    }\n}\n\ntry playground.build()\n```\n\nUse `.test` to run assertions in a temporary sandbox:\n\n```swift\ntry FileManagerPlayground {\n    Directory(name: \"foo\") {\n        \"bar.txt\"\n    }\n}\n.test { fileManager, rootUrl in\n    let fileURL = rootUrl.appending(path: \"foo/bar.txt\")\n    #expect(fileManager.fileExists(at: fileURL))\n}\n```\n\n## Development\n\n- Build: `swift build`\n- Test:\n  - local: `swift test`\n  - using Docker: `make docker-test`\n- Format: `make format`\n- Check: `make check`\n\n## Contributing\n\n[Pull requests](https://github.com/BinaryBirds/file-manager-kit/pulls) are welcome. Please keep changes focused and include tests for new logic. 🙏\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbinarybirds%2Ffile-manager-kit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbinarybirds%2Ffile-manager-kit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbinarybirds%2Ffile-manager-kit/lists"}