diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 9550ee3..ababbb9 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -10,10 +10,8 @@ jobs:
   test:
     runs-on: ubuntu-latest
     steps:
-      - uses: swift-actions/setup-swift@v2
-        with:
-          swift-version: "5.10.1"
       - uses: actions/checkout@v4
-      - run: swift package resolve
-      - run: swift build
+      - uses: vapor/swiftly-action@v0.2
+        with:
+          toolchain: "6.3"
       - run: swift test
diff --git a/.gitignore b/.gitignore
index 62b7e8f..e358ffb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@ xcuserdata/
 DerivedData/
 .swiftpm
 .netrc
+.vscode
diff --git a/Package.resolved b/Package.resolved
index e82d2a3..233e952 100644
--- a/Package.resolved
+++ b/Package.resolved
@@ -1,12 +1,13 @@
 {
+  "originHash" : "1a71bb059423ce2785d3b08fe11c6cfc518197f3f201914375d55a51f718429d",
   "pins" : [
     {
       "identity" : "codegenkit",
       "kind" : "remoteSourceControl",
       "location" : "https://github.com/omochi/CodegenKit.git",
       "state" : {
-        "revision" : "ab5ad508aab30b1572caa6e73ac0206611db0b0d",
-        "version" : "2.0.0"
+        "revision" : "75e9de2abe0d9ea1d821fdd008aba50ce339716e",
+        "version" : "2.1.1"
       }
     },
     {
@@ -14,35 +15,8 @@
       "kind" : "remoteSourceControl",
       "location" : "https://github.com/apple/swift-argument-parser.git",
       "state" : {
-        "revision" : "41982a3656a71c768319979febd796c6fd111d5c",
-        "version" : "1.5.0"
-      }
-    },
-    {
-      "identity" : "swift-cmark",
-      "kind" : "remoteSourceControl",
-      "location" : "https://github.com/apple/swift-cmark.git",
-      "state" : {
-        "revision" : "3ccff77b2dc5b96b77db3da0d68d28068593fa53",
-        "version" : "0.5.0"
-      }
-    },
-    {
-      "identity" : "swift-format",
-      "kind" : "remoteSourceControl",
-      "location" : "https://github.com/swiftlang/swift-format.git",
-      "state" : {
-        "revision" : "65f9da9aad84adb7e2028eb32ca95164aa590e3b",
-        "version" : "600.0.0"
-      }
-    },
-    {
-      "identity" : "swift-markdown",
-      "kind" : "remoteSourceControl",
-      "location" : "https://github.com/apple/swift-markdown.git",
-      "state" : {
-        "revision" : "8f79cb175981458a0a27e76cb42fee8e17b1a993",
-        "version" : "0.5.0"
+        "revision" : "626b5b7b2f45e1b0b1c6f4a309296d1d21d7311b",
+        "version" : "1.7.1"
       }
     },
     {
@@ -50,10 +24,10 @@
       "kind" : "remoteSourceControl",
       "location" : "https://github.com/swiftlang/swift-syntax.git",
       "state" : {
-        "revision" : "cb53fa1bd3219b0b23ded7dfdd3b2baff266fd25",
-        "version" : "600.0.0"
+        "revision" : "9de99a78f099e59caf2b2beec65a4c45d54b2081",
+        "version" : "603.0.1"
       }
     }
   ],
-  "version" : 2
+  "version" : 3
 }
diff --git a/Package.swift b/Package.swift
index 88059a4..513cbce 100644
--- a/Package.swift
+++ b/Package.swift
@@ -1,4 +1,4 @@
-// swift-tools-version: 5.8
+// swift-tools-version: 6.0
 
 import PackageDescription
 
@@ -9,7 +9,7 @@ let package = Package(
         .library(name: "TypeScriptAST", targets: ["TypeScriptAST"])
     ],
     dependencies: [
-        .package(url: "https://github.com/omochi/CodegenKit.git", from: "2.0.0")
+        .package(url: "https://github.com/omochi/CodegenKit.git", from: "2.1.1")
     ],
     targets: [
         .executableTarget(
diff --git a/Plugins/CodegenPlugin/CodegenPlugin.swift b/Plugins/CodegenPlugin/CodegenPlugin.swift
index cf577bc..558642e 100644
--- a/Plugins/CodegenPlugin/CodegenPlugin.swift
+++ b/Plugins/CodegenPlugin/CodegenPlugin.swift
@@ -6,11 +6,11 @@ struct CodegenPlugin: CommandPlugin {
     func performCommand(context: PluginContext, arguments: [String]) async throws {
         let codegen = try context.tool(named: "codegen")
 
-        let sourcesDir = context.package.directory.appending(subpath: "Sources")
+        let sourcesDir = context.package.directoryURL.appending(path: "Sources")
 
         let process = EasyProcess(
-            path: URL(fileURLWithPath: codegen.path.string),
-            args: [sourcesDir.string]
+            path: codegen.url,
+            args: [sourcesDir.path(percentEncoded: false)]
         )
         try process.run()
     }
diff --git a/Plugins/CodegenPlugin/EasyProcess.swift b/Plugins/CodegenPlugin/EasyProcess.swift
index 3baf30b..5dfa654 100644
--- a/Plugins/CodegenPlugin/EasyProcess.swift
+++ b/Plugins/CodegenPlugin/EasyProcess.swift
@@ -4,8 +4,8 @@ struct EasyProcess {
     init(
         path: URL,
         args: [String],
-        outSink: ((Data) -> Void)? = nil,
-        errorSink: ((Data) -> Void)? = nil
+        outSink: (@Sendable (Data) -> Void)? = nil,
+        errorSink: (@Sendable (Data) -> Void)? = nil
     ) {
         self.path = path
         self.args = args
@@ -15,20 +15,20 @@ struct EasyProcess {
 
     var path: URL
     var args: [String]
-    var outSink: (Data) -> Void
-    var errorSink: (Data) -> Void
+    var outSink: @Sendable (Data) -> Void
+    var errorSink: @Sendable (Data) -> Void
 
-    static func makeFileHandleSink(fileHandle: FileHandle) -> (Data) -> Void {
+    static func makeFileHandleSink(fileHandle: FileHandle) -> @Sendable (Data) -> Void {
         return { (data) in
             try? fileHandle.write(contentsOf: data)
         }
     }
 
-    static var defaultOutSink: (Data) -> Void {
+    static var defaultOutSink: @Sendable (Data) -> Void {
         makeFileHandleSink(fileHandle: .standardOutput)
     }
 
-    static var defaultErrorSink: (Data) -> Void {
+    static var defaultErrorSink: @Sendable (Data) -> Void {
         makeFileHandleSink(fileHandle: .standardError)
     }
 
@@ -43,7 +43,7 @@ struct EasyProcess {
         let outPipe = Pipe()
         p.standardOutput = outPipe
 
-        outPipe.fileHandleForReading.readabilityHandler = { (h) in
+        outPipe.fileHandleForReading.readabilityHandler = { [outSink] (h) in
             queue.sync {
                 let data = h.availableData
                 if !data.isEmpty {
@@ -55,7 +55,7 @@ struct EasyProcess {
         let errPipe = Pipe()
         p.standardError = errPipe
 
-        errPipe.fileHandleForReading.readabilityHandler = { (h) in
+        errPipe.fileHandleForReading.readabilityHandler = { [errorSink] (h) in
             queue.sync {
                 let data = h.availableData
                 if !data.isEmpty {
diff --git a/Tests/TypeScriptASTTests/TestCaseBase.swift b/Tests/TypeScriptASTTests/TestCaseBase.swift
index f221a82..45108e4 100644
--- a/Tests/TypeScriptASTTests/TestCaseBase.swift
+++ b/Tests/TypeScriptASTTests/TestCaseBase.swift
@@ -5,7 +5,7 @@ class TestCaseBase: XCTestCase {
     func assertPrint(
         _ node: any ASTNode,
         _ expected: String,
-        file: StaticString = #file,
+        file: StaticString = #filePath,
         line: UInt = #line
     ) {
         XCTAssertEqual(node.print(), expected, file: file, line: line)
