diff --git a/recipes/pathfinder/recipe.sh b/recipes/pathfinder/recipe.sh
deleted file mode 100644
index 37f8eb4461b49ed128d49b22d2cceb82e027a316..0000000000000000000000000000000000000000
--- a/recipes/pathfinder/recipe.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-GIT=https://gitlab.redox-os.org/redox-os/pathfinder.git
-BRANCH=redox
-GIT_UPSTREAM=https://github.com/servo/pathfinder.git
-BUILD_DEPENDS=(llvm mesa zlib)
-BRANCH=redox
-CARGOFLAGS="--manifest-path examples/canvas_glutin_minimal/Cargo.toml"
-
-function recipe_build {
-    sysroot="$(realpath ../sysroot)"
-    cp -p "$ROOT/Xargo.toml" "Xargo.toml"
-    set -x
-    xargo rustc --target "$TARGET" --release ${CARGOFLAGS} \
-        -- \
-        -L "${sysroot}/lib" \
-        -C link-args="$("${PKG_CONFIG}" --libs osmesa) -lglapi -lz -lstdc++ -lc -lgcc"
-    set +x
-    skip=1
-}
-
-function recipe_stage {
-    dest="$(realpath $1)"
-    mkdir -pv "$dest/bin"
-    cp -v "target/${TARGET}/release/canvas_glutin_minimal" "$dest/bin/pathfinder"
-    skip=1
-}
diff --git a/recipes/pathfinder/recipe.toml b/recipes/pathfinder/recipe.toml
new file mode 100644
index 0000000000000000000000000000000000000000..358b0a2aa00f2a24eb947d0e64f00f5a3cd0d175
--- /dev/null
+++ b/recipes/pathfinder/recipe.toml
@@ -0,0 +1,23 @@
+[source]
+git = "https://gitlab.redox-os.org/redox-os/pathfinder.git"
+branch = "redox"
+upstream = "https://github.com/servo/pathfinder.git"
+
+[build]
+template = "custom"
+dependencies = [
+    "llvm",
+    "mesa",
+    "zlib",
+]
+script = """
+cargo rustc \
+    --target "$TARGET" \
+    --release \
+    --manifest-path "${COOKBOOK_SOURCE}/examples/canvas_glutin_minimal/Cargo.toml" \
+    -- \
+    -L "${COOK_SYSROOT}/lib" \
+    -C link-args="-Wl,-Bstatic $("${TARGET}-pkg-config" --libs osmesa) -lz -lstdc++ -lc -lgcc"
+mkdir -pv "${COOKBOOK_STAGE}/bin"
+cp -v "target/${TARGET}/release/canvas_glutin_minimal" "${COOKBOOK_STAGE}/bin/pathfinder"
+"""