diff --git a/src/App.js b/src/App.js
index 62d4026..e0474ad 100644
--- a/src/App.js
+++ b/src/App.js
@@ -11,6 +11,7 @@ import NpmCard from './components/NpmCard'
import JsOrgCard from './components/JsOrgCard'
import PypiCard from './components/PypiCard'
import S3Card from './components/S3Card'
+import CratesioCard from './components/CratesioCard'
import './App.css'
const GlobalStyle = createGlobalStyle`
@@ -54,6 +55,7 @@ export default function App() {
+
diff --git a/src/components/CratesioCard.js b/src/components/CratesioCard.js
new file mode 100644
index 0000000..6e2f808
--- /dev/null
+++ b/src/components/CratesioCard.js
@@ -0,0 +1,17 @@
+import React from 'react'
+import { DiRust } from 'react-icons/di'
+import { Card, CardTitle, DedicatedAvailability } from './Card'
+
+export default function CratesioCard({ name }) {
+ return (
+
+ crates.io (Rust)
+ }
+ />
+
+ )
+}
diff --git a/src/services/cratesio.js b/src/services/cratesio.js
new file mode 100644
index 0000000..c1296a9
--- /dev/null
+++ b/src/services/cratesio.js
@@ -0,0 +1,23 @@
+const fetch = require('isomorphic-unfetch')
+
+async function getAvailability(name) {
+ const response = await fetch(
+ `https://crates.io/api/v1/crates/${encodeURIComponent(name)}`
+ )
+ return response.status !== 200
+}
+
+module.exports = async (req, res) => {
+ const name = req.query.name
+
+ if (!name) {
+ return res.status(400).json({ error: 'no query given' })
+ }
+
+ try {
+ const availability = await getAvailability(name)
+ res.json({ availability })
+ } catch (err) {
+ res.status(400).json({ error: err.message })
+ }
+}