diff --git a/public/img/user-logos/delta_chat.png b/public/img/user-logos/delta_chat.png
new file mode 100644
index 00000000..1c420628
Binary files /dev/null and b/public/img/user-logos/delta_chat.png differ
diff --git a/public/img/user-logos/nous.png b/public/img/user-logos/nous.png
new file mode 100644
index 00000000..5aaa31ba
Binary files /dev/null and b/public/img/user-logos/nous.png differ
diff --git a/public/img/user-logos/rave.png b/public/img/user-logos/rave.png
new file mode 100644
index 00000000..6e411f44
Binary files /dev/null and b/public/img/user-logos/rave.png differ
diff --git a/public/img/user-logos/recall.png b/public/img/user-logos/recall.png
new file mode 100644
index 00000000..3b0b3045
Binary files /dev/null and b/public/img/user-logos/recall.png differ
diff --git a/public/img/user-logos/shaga.png b/public/img/user-logos/shaga.png
new file mode 100644
index 00000000..0cbb9670
Binary files /dev/null and b/public/img/user-logos/shaga.png differ
diff --git a/public/img/user-logos/spacedrive.png b/public/img/user-logos/spacedrive.png
new file mode 100644
index 00000000..6685a831
Binary files /dev/null and b/public/img/user-logos/spacedrive.png differ
diff --git a/src/app/blog/a-new-direction-for-iroh/page.mdx b/src/app/blog/a-new-direction-for-iroh/page.mdx
index 1be96028..3f3f553b 100644
--- a/src/app/blog/a-new-direction-for-iroh/page.mdx
+++ b/src/app/blog/a-new-direction-for-iroh/page.mdx
@@ -1,5 +1,4 @@
import { BlogPostLayout } from '@/components/BlogPostLayout'
-import Image from 'next/image'
export const post = {
draft: false,
@@ -52,4 +51,4 @@ The world needs IPFS. The only way to get there is to learn & grow. If you’ve
\ No newline at end of file
+
diff --git a/src/app/page.jsx b/src/app/page.jsx
new file mode 100644
index 00000000..32b4c92f
--- /dev/null
+++ b/src/app/page.jsx
@@ -0,0 +1,184 @@
+import Image from 'next/image'
+import Link from 'next/link'
+import clsx from 'clsx'
+import { BookOpenIcon, ArrowRightIcon } from '@heroicons/react/24/outline'
+
+import {FooterMarketing} from '@/components/FooterMarketing';
+import {HeaderSparse} from '@/components/HeaderSparse';
+import {HomeHero} from '@/components/HomeHero';
+import {UsersShowcase} from '@/components/UsersShowcase';
+import {FromTheBlog} from '@/components/FromTheBlog';
+import {WrenchCodeIcon} from '@/components/icons/WrenchCodeIcon';
+import {PerfChartIllustration} from '@/components/PerfChartIllustration';
+import {ConnectDevicesIllustration} from '@/components/ConnectDevicesIllustration';
+import {ProtocolHeroList} from '@/components/ProtocolHeroList';
+import {LogoCloud} from '@/components/LogoCloud';
+
+import logoRust from '@/images/language-logos/rust.svg';
+import { Code, CodeGroup } from '@/components/Code';
+
+export const metadata = {
+ title: 'Iroh',
+ description:
+ 'less net work for networks',
+};
+
+export default function Page() {
+ return (
+
+
+
+
+
+ {/* hero */}
+
+
+
+
+
+
+
+
+
+
+
+
+ p2p that just works
+
+
Iroh is a library for building on direct connections between devices, putting more control in the hands of your users.
Iroh gives you an API for dialing by public key. You say “connect to that phone”, iroh will find & maintain the fastest connection for you, regardless of where it is.
+
+
+
“In stark contrast to other p2p & dweb technologies we've played with - which are exciting due to their implications for the future - Iroh brought instant gains in our present."
An ecosystem of ready-made, composable protocols are built on top of iroh. Mix & match to get the feature set you need.
+
+
+
+
+
+
+
+
+
Build your own protocol
+
Don't see a protocol you need? Build your own! Iroh gives you a reliable foundation for building distributed systems that reach the edge. The rest is up to you.
+
+ Protocol Docs
+
+
+
+
+
Continuously Measured
+
All commits to iroh's main branch run through a growing set of simulations & tests
+
+ Iroh Perf Site
+
+
+
+
+ {/* use cases */}
+
+
+
+
+
+
+
+
Real World Use
+
Iroh is running in production on hundreds of thousands of devices, on all major platforms.
+
+
+
+
+
+
+ {/* build in your language */}
+
+
+
+
+
+
+
+
+
Build something amazing, today.
+
+ Start Building
+
+
+
+
+ {`// a program that creates two endpoints & sends a ping between them
+use anyhow::Result;
+use iroh::{Endpoint, protocol::Router};
+use iroh_ping::{ALPN as PingALPN, Ping};
+
+#[tokio::main]
+async fn main() -> Result<()> {
+ // create the receive side
+ let recv_ep = Endpoint::builder().discovery_n0().bind().await?;
+ let recv_router = Router::builder(recv_ep)
+ .accept(PingALPN, Ping::new())
+ .spawn();
+
+ let addr = recv_router.endpoint().node_addr().await?;
+
+ // create a send side & send a ping
+ let send_ep = Endpoint::builder().discovery_n0().bind().await?;
+ let send_pinger = Ping::new();
+ send_pinger.ping(&send_ep, addr).await?;
+
+ // ok!
+ Ok(())
+}`}
+
+
+
+
+
+
+
+
+
From the Blog
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/app/page.mdx b/src/app/page.mdx
deleted file mode 100644
index b56d1344..00000000
--- a/src/app/page.mdx
+++ /dev/null
@@ -1,210 +0,0 @@
-import Image from 'next/image'
-import Link from 'next/link'
-import clsx from 'clsx'
-import { BookOpenIcon, ArrowRightIcon } from '@heroicons/react/24/outline'
-
-import {FooterMarketing} from '@/components/FooterMarketing';
-import {HeaderSparse} from '@/components/HeaderSparse';
-import {HomeHero} from '@/components/HomeHero';
-import {UsersShowcase} from '@/components/UsersShowcase';
-import {GlowCard} from '@/components/GlowCard';
-import {FromTheBlog} from '@/components/FromTheBlog';
-import {WrenchCodeIcon} from '@/components/icons/WrenchCodeIcon';
-import {PerfChartIllustration} from '@/components/PerfChartIllustration';
-import {ConnectDevicesIllustration} from '@/components/ConnectDevicesIllustration';
-import {ProtocolHeroList} from '@/components/ProtocolHeroList';
-
-import logoRust from '@/images/logos/rust.svg';
-
-export const metadata = {
- title: 'Iroh',
- description:
- 'less net work for networks',
-};
-
-
-
-
-
- {/* hero */}
-
-
-
-
-
-
-
-
-
-
-
-
- p2p that just works
-
-
Iroh is a library for building on direct connections between devices, putting more control in the hands of your users.
Iroh gives you an API for dialing by public key. You say “connect to that phone”, iroh will find & maintain the fastest connection for you, regardless of where it is.
-
-
-
“In stark contrast to other p2p & dweb technologies we've played with - which are exciting due to their implications for the future - Iroh brought instant gains in our present."
An ecosystem of ready-made, composable protocols are built on top of iroh. Mix & match to get the feature set you need.
-
-
-
-
-
-
-
-
-
Build your own protocol
-
Don't see a protocol you need? Build your own! Iroh gives you a reliable foundation for building distributed systems that reach the edge. The rest is up to you.
-
- Protocol Docs
-
-
-
-
-
Continuously Measured
-
All commits to iroh's main branch run through a growing set of simulations & tests
-
- Iroh Perf Site
-
-
-
-
- {/* use cases */}
-
-
-
-
-
-
-
-
Real World Use
-
Iroh is running in production on hundreds of thousands of devices, on all major platforms.
-
-
-
-
-
-
- {/* build in your language */}
-
-
-
-
-
-
-
-
-
Build something amazing, today.
-
- Start Building
-
-
-
-
-
-```rust {{ title: 'rust' }}
-use std::{env, str::FromStr};
-
-use iroh::base::ticket::BlobTicket;
-use iroh::node::Node;
-
-// serve & fetch data with iroh, from any two devices in the world
-// run this example from any two computers, and iroh will connect them!
-#[tokio::main]
-async fn main() -> anyhow::Result<()> {
- // create a new node with default protocols
- let node = Node::memory().spawn().await?;
-
- // Choose between client & server roles based on a download argument
- if let Some(ticket) = env::args().collect::>().get(1) {
- // we have a download argument. Fetch some data!
- let ticket = BlobTicket::from_str(&ticket).expect("failed to parse blob ticket");
-
- let response = node
- .blobs()
- .download(ticket.hash(), ticket.node_addr().clone())
- .await?
- .await
- .expect("unable to download hash");
-
- println!(
- "downloaded {} bytes from node {}",
- response.downloaded_size,
- ticket.node_addr().node_id
- );
-
- let bytes = node.blobs().read_to_bytes(ticket.hash()).await?;
- let s = std::str::from_utf8(&bytes).expect("unable to parse blob as as utf-8 string");
- println!("{s}");
- } else {
- // no download argument, serve some data that says "Hello, world!"
- let res = node.blobs().add_bytes("Hello, world!").await?;
-
- // create a "ticket" for sharing data with a peer
- let ticket = node
- .blobs()
- .share(res.hash, res.format, Default::default())
- .await?;
-
- // print the ticket, containing all the above information
- println!("Serving data! In another terminal, run:");
- println!("cargo run --example hello {}", ticket);
- tokio::signal::ctrl_c().await?;
- node.shutdown().await?;
- }
-
- Ok(())
-}
-
-```
-
-
-
-
-
-
-
-
-
-
-
From the Blog
-
-
-
-
-
-
diff --git a/src/app/proto/protocols.js b/src/app/proto/protocols.js
index 48954141..956b765e 100644
--- a/src/app/proto/protocols.js
+++ b/src/app/proto/protocols.js
@@ -37,5 +37,14 @@ export const protocols = [
"documentation": "https://docs.rs/iroh-roq/latest/iroh_roq/",
"repository": "https://github.com/n0-computer/iroh-roq",
"version": "v0.1.0"
+ },
+ {
+ "icon": "",
+ "title": "Godot iroh",
+ "tagline": "A peer-to-peer multiplayer extension for Godot based on Iroh.",
+ "slug": "godot-iroh",
+ "documentation": "https://godotengine.org/asset-library/asset/3948",
+ "repository": "https://github.com/tipragot/godot-iroh",
+ "version": "v0.1.5"
}
]
diff --git a/src/components/Libraries.jsx b/src/components/Libraries.jsx
index 15d7a07f..961d5a45 100644
--- a/src/components/Libraries.jsx
+++ b/src/components/Libraries.jsx
@@ -3,11 +3,7 @@ import { ArrowTopRightOnSquareIcon } from '@heroicons/react/20/solid'
import {Button} from '@/components/Button';
import {Heading} from '@/components/Heading';
-import logoKotlin from '@/images/logos/kotlin.svg';
-import logoPython from '@/images/logos/python.svg';
-import logoRust from '@/images/logos/rust.svg';
-import logoSwift from '@/images/logos/swift.svg';
-import logoNodeJs from '@/images/logos/node.svg';
+import logoRust from '@/images/language-logos/rust.svg';
import { Tag } from '@/components/Tag';
const libraries = [
diff --git a/src/components/LogoCloud.jsx b/src/components/LogoCloud.jsx
new file mode 100644
index 00000000..fed5dc59
--- /dev/null
+++ b/src/components/LogoCloud.jsx
@@ -0,0 +1,34 @@
+import React from 'react';
+import {ThemeImage} from '@/components/ThemeImage'
+
+const companies = [
+ "spacedrive",
+ "nous",
+ "shaga",
+ "rave",
+ "delta_chat",
+ "recall"
+];
+
+export function LogoCloud() {
+ return (
+
+
+
Trusted by the world’s most innovative teams
+
+
+ {companies.map((co)=> (
+
+ ))}
+
+
+ )
+}
diff --git a/src/images/logos/go.svg b/src/images/language-logos/go.svg
similarity index 100%
rename from src/images/logos/go.svg
rename to src/images/language-logos/go.svg
diff --git a/src/images/logos/kotlin.svg b/src/images/language-logos/kotlin.svg
similarity index 100%
rename from src/images/logos/kotlin.svg
rename to src/images/language-logos/kotlin.svg
diff --git a/src/images/logos/node.svg b/src/images/language-logos/node.svg
similarity index 100%
rename from src/images/logos/node.svg
rename to src/images/language-logos/node.svg
diff --git a/src/images/logos/php.svg b/src/images/language-logos/php.svg
similarity index 100%
rename from src/images/logos/php.svg
rename to src/images/language-logos/php.svg
diff --git a/src/images/logos/python.svg b/src/images/language-logos/python.svg
similarity index 100%
rename from src/images/logos/python.svg
rename to src/images/language-logos/python.svg
diff --git a/src/images/logos/ruby.svg b/src/images/language-logos/ruby.svg
similarity index 100%
rename from src/images/logos/ruby.svg
rename to src/images/language-logos/ruby.svg
diff --git a/src/images/logos/rust.svg b/src/images/language-logos/rust.svg
similarity index 100%
rename from src/images/logos/rust.svg
rename to src/images/language-logos/rust.svg
diff --git a/src/images/logos/swift.svg b/src/images/language-logos/swift.svg
similarity index 100%
rename from src/images/logos/swift.svg
rename to src/images/language-logos/swift.svg