diff --git a/recipes/glutin/recipe.sh b/recipes/glutin/recipe.sh
deleted file mode 100644
index 41fc5a1001a587d98c1146514d1c419ce6806eea..0000000000000000000000000000000000000000
--- a/recipes/glutin/recipe.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-GIT=https://gitlab.redox-os.org/redox-os/glutin.git
-GIT_UPSTREAM=https://github.com/rust-windowing/glutin.git
-BUILD_DEPENDS=(llvm mesa zlib)
-BRANCH=redox-0.29
-
-function recipe_build {
-    sysroot="$(realpath ../sysroot)"
-    set -x
-    cargo rustc --target "$TARGET" --release --package glutin_examples --example window \
-        -- \
-        -L "${sysroot}/lib" \
-        -C link-args="-Wl,-Bstatic $("${PKG_CONFIG}" --libs osmesa) -lz -lstdc++ -lc -lgcc"
-    set +x
-    skip=1
-}
-
-function recipe_stage {
-    dest="$(realpath $1)"
-    mkdir -pv "$dest/bin"
-    cp -v "target/${TARGET}/release/examples/window" "$dest/bin/glutin"
-    skip=1
-}
diff --git a/recipes/glutin/recipe.toml b/recipes/glutin/recipe.toml
new file mode 100644
index 0000000000000000000000000000000000000000..18fed532d492780c23357bc953787a8220889595
--- /dev/null
+++ b/recipes/glutin/recipe.toml
@@ -0,0 +1,32 @@
+[source]
+git = "https://gitlab.redox-os.org/redox-os/glutin.git"
+branch = "redox-0.29"
+upstream = "https://github.com/rust-windowing/glutin.git"
+
+[build]
+template = "custom"
+dependencies = [
+    "llvm",
+    "mesa",
+    "zlib"
+]
+script = """
+EXAMPLES=(
+    multiwindow
+    transparent
+    window
+)
+for example in "${EXAMPLES[@]}"
+do
+    cargo rustc \
+        --target "$TARGET" \
+        --release \
+        --manifest-path "${COOKBOOK_SOURCE}/glutin_examples/Cargo.toml" \
+        --example "${example}" \
+        -- \
+        -L "${COOKBOK_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/examples/${example}" "${COOKBOOK_STAGE}/bin/glutin_${example}"
+done
+"""