diff --git a/docs.json b/docs.json index ff43b1f..c449c54 100644 --- a/docs.json +++ b/docs.json @@ -26,6 +26,7 @@ "languages/swift", "languages/kotlin", "languages/javascript", + "languages/go", "languages/wasm-browser" ] }, diff --git a/languages/go.mdx b/languages/go.mdx new file mode 100644 index 0000000..e00d2e9 --- /dev/null +++ b/languages/go.mdx @@ -0,0 +1,78 @@ +--- +title: "Go" +description: "Use iroh from Go via the [iroh-ffi](https://github.com/n0-computer/iroh-ffi) bindings." +--- + +[`iroh-go`](https://git.coopcloud.tech/decentral1se/iroh-go) is still +considered experimental but ready for testing and open for contribution to +improve the quality and reliability of the bindings. There is a specific focus +on making the installation and cross platform support [as simple as +possible](https://git.coopcloud.tech/decentral1se/iroh-go#motivation). + +| Platform | Architectures | +| --- | --- | +| Linux | x86_64, aarch64 (musl) | + +- **API reference:** [Go API docs](https://godocs.io/git.coopcloud.tech/decentral1se/iroh-go) +- **Examples:** [iroh-go/examples](https://git.coopcloud.tech/decentral1se/iroh-go/src/branch/main/examples) +- **All languages:** [platform support matrix](/languages#platform-support) + +## Install + +We're aiming to publish a stable tag once we see more usage and adoption of the +Go bindings. + +```bash +go get git.coopcloud.tech/decentral1se/iroh-go +``` + +## Hello, iroh + +```go +package main + +import ( + "fmt" + + iroh "git.coopcloud.tech/decentral1se/iroh-go" +) + +var ( + alpn = []byte("iroh-go-hello/0") +) + +func main() { + preset := iroh.PresetN0() + opts := iroh.EndpointOptions{ + Preset: &preset, + Alpns: &[][]byte{alpn}, + } + + endpoint, err := iroh.EndpointBind(opts) + if err != nil { + panic(err) + } + + endpoint.Online() + + fmt.Println("endpoint id:", endpoint.Id()) +} +``` + +This binds an endpoint using the N0 preset (public discovery + default relays), +waits until it has a home relay, and prints its 64-character endpoint id. Run +it with `go run`. + +## Next steps + + + Connect two endpoints and stream messages between them. + + + + Connect multiple endpoints and broadcast messages. + + + + Source, examples, and issue tracker for the iroh Go FFI bindings. Contributions are welcome! + diff --git a/languages/index.mdx b/languages/index.mdx index 34839f2..bb26136 100644 --- a/languages/index.mdx +++ b/languages/index.mdx @@ -1,9 +1,9 @@ --- title: "Overview" -description: "Use iroh from Rust, Python, Swift, Kotlin, or JavaScript." +description: "Use iroh from Rust, Python, Swift, Kotlin, JavaScript or Go." --- -iroh is available in Rust, Python, Swift, Kotlin, and JavaScript. Pick the language that fits your app and follow its guide to get a working endpoint in minutes. +iroh is available in Rust, Python, Swift, Kotlin, JavaScript, and Go. Pick the language that fits your app and follow its guide to get a working endpoint in minutes. | Language | Status | Platform notes | | --- | --- | --- | @@ -12,6 +12,12 @@ iroh is available in Rust, Python, Swift, Kotlin, and JavaScript. Pick the langu | [Swift](/languages/swift) | Official | iOS + macOS | | [Kotlin](/languages/kotlin) | Official | JVM + Android | | [JavaScript](/languages/javascript) | Official | Node.js via N-API | +| [Go](/languages/go) | Community | FFI bindings via [iroh-ffi](https://github.com/n0-computer/iroh-ffi) | + +"Community" bindings are built and maintained by community members rather than +the number0 team. They aren't covered by official support, may lag behind +iroh releases, and cover fewer platforms — check each binding's page for +current status before depending on it. All five official bindings share the same basic API surface for sending streams or datagrams over QUIC. The Rust language bindings are the most complete and @@ -25,19 +31,19 @@ up-to-date, and contain custom configuration and protocol features. The [n0.computer](https://n0.computer) team offers official support for the following platforms. -| Platform | Rust | Python | Swift | Kotlin | JavaScript | -| --- | --- | --- | --- | --- | --- | -| iOS (device + sim) | ✓ | — | ✓ | — | — | -| Android (aarch64, armv7) | ✓ | — | — | ✓ | ✓ | -| macOS arm64 | ✓ | ✓ | ✓ | ✓ | ✓ | -| macOS x86_64 | ✓ | ✓ | ✗ | ✓ | ✗ | -| Linux x86_64 (glibc) | ✓ | ✓ | — | ✓ | ✓ | -| Linux x86_64 (musl) | ✓ | ✗ | — | ✗ | ✓ | -| Linux aarch64 (glibc) | ✓ | ✓ | — | ✓ | ✓ | -| Linux aarch64 (musl) | ✓ | ✗ | — | ✗ | ✓ | -| Linux armv7 | ✓ | ✗ | — | ✗ | ✓ | -| Windows x86_64 | ✓ | ✓ | — | ✓ | ✓ | -| Windows aarch64 | ✓ | ✗ | — | ✗ | ✓ | +| Platform | Rust | Python | Swift | Kotlin | JavaScript | Go | +| --- | --- | --- | --- | --- | --- | -- | +| iOS (device + sim) | ✓ | — | ✓ | — | — | - | +| Android (aarch64, armv7) | ✓ | — | — | ✓ | ✓ | - | +| macOS arm64 | ✓ | ✓ | ✓ | ✓ | ✓ | - | +| macOS x86_64 | ✓ | ✓ | ✗ | ✓ | ✗ | - | +| Linux x86_64 (glibc) | ✓ | ✓ | — | ✓ | ✓ | - | +| Linux x86_64 (musl) | ✓ | ✗ | — | ✗ | ✓ | ✓ | +| Linux aarch64 (glibc) | ✓ | ✓ | — | ✓ | ✓ | - | +| Linux aarch64 (musl) | ✓ | ✗ | — | ✗ | ✓ | ✓ | +| Linux armv7 | ✓ | ✗ | — | ✗ | ✓ | - | +| Windows x86_64 | ✓ | ✓ | — | ✓ | ✓ | - | +| Windows aarch64 | ✓ | ✗ | — | ✗ | ✓ | - | Get in touch and tell us what you're building. We can prioritize new bindings or help you maintain your own.