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.

+ +
+
+
+
+ +
+
+ +

Connect any two devices on the planet

+

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."

+

- weird.one

+
+
+ + + + {/* iroh protocols */} +
+
+
+

Compose your own tailor-made protocol stack

+

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.

- -
-
-
-
- -
-
- -

Connect any two devices on the planet

-

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."

-

- weird.one

-
-
- - {/* iroh protocols */} -
-
-
-

Compose your own tailor-made protocol stack

-

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