(options =>
+ {
+ options.MinLevel = LogLevel.Debug;
+ options.AddFilter("Nethermind.Libp2p", LogLevel.Debug);
+ });
+
+ return services.BuildServiceProvider();
+ }
+}
diff --git a/dotnet-peer/README.md b/dotnet-peer/README.md
new file mode 100644
index 00000000..8c1f468a
--- /dev/null
+++ b/dotnet-peer/README.md
@@ -0,0 +1,172 @@
+# .NET libp2p Chat Application
+
+
+
+
+
+
+
+
+ The .NET libp2p chat application Console UI
+
+
+A simple chat application built on top of [dotnet-libp2p](https://github.com/NethermindEth/dotnet-libp2p). This project demonstrates a robust, console-based UI (using [Terminal.Gui](https://github.com/migueldeicaza/gui.cs)) to showcase basic peer-to-peer communication using Libp2p protocols. **Note:** This project is in beta and under active development.
+
+## Overview
+
+dotnet-libp2p Chat aims to provide a performant, well-tested implementation of a wide range of protocols that works on multiple platforms, with high throughput and a low memory profile. This chat application leverages Libp2p's PubSub to exchange messages between peers while also displaying vital information such as your peer ID and multiaddress so that you can easily share your connection details with others.
+
+### Key Features
+- **Console UI:** A robust, multi-tab interface built with Terminal.Gui.
+- **Peer Information:** Displays generated peer ID and multiaddress for connecting with others.
+- **Messaging:** Supports JSON-formatted messages as well as plain text messages.
+- **Protocol Integration:** Uses multiple Libp2p protocols for transport and discovery.
+- **Thread-Safe Updates:** UI updates are marshaled on the main loop ensuring smooth and safe interactions.
+## Requirements
+
+- [.NET 8.0 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) or newer
+- Windows, macOS, or Linux operating system
+
+## Installation
+
+Clone the repository and navigate to the dotnet-peer directory:
+
+```bash
+git clone https://github.com/libp2p/universal-connectivity
+cd universal-connectivity/dotnet-peer/Libp2pChat
+```
+
+Build the application:
+
+```bash
+dotnet build
+```
+
+## Usage
+
+Run the application with the default Console UI:
+
+```bash
+dotnet run
+```
+
+For debug logging:
+
+```bash
+dotnet run -- --trace
+```
+
+### UI
+
+#### 1. Terminal.Gui-based UI
+
+An alternate UI implementation using the Terminal.Gui library (a cross-platform console UI toolkit):
+- Offers a more traditional GUI-like experience
+- Provides tab-based navigation
+- Includes a formal message input field with send button
+- Handles window resize events
+
+### User Interface
+
+The application features a TUI (Terminal User Interface) with three main panels:
+
+1. **Chat Room**: The main panel where messages appear
+2. **Peers List**: Shows connected peers with their shortened Peer IDs
+3. **System Logs**: Displays all system events, connection details, and errors
+
+### Commands
+
+- Type a message and press Enter to send it to all connected peers
+- Type `exit` to close the application
+- Use arrow keys to navigate text input
+- Resize the terminal window to see the responsive layout adjust
+
+## Connecting with Other Peers
+
+By default, the application listens on TCP port 9096. This setup enables direct connections with peers that support TCP-based transports, such as Go or Rust implementations. However, due to current transport limitations in dotnet-libp2p, connecting with browser-based JavaScript peers is not yet supported.
+
+### How to Connect:
+1. **Note Your Peer ID:**
+ Your Peer ID is displayed in the **System logs** panel upon startup.
+2. **Connect from Other Environments:**
+ - **Go/Rust Peers:** Update the hardcoded Peer ID in their configuration (e.g., in `main.go` for the Go peer) with your .NET peer's ID.
+ - **JavaScript Peers:**
+ - **Node.js Environment:** JavaScript peers running in Node.js can connect using TCP.
+ - **Browser Environments:** Direct connection is currently not possible because the required browser-friendly transports (e.g., WebSockets or WebRTC) are not implemented.
+
+### Way Forward:
+- **Transport Enhancements:**
+ Future work is focused on implementing additional transport protocols (such as WebSockets and WebRTC) to enable connectivity with browser-based peers.
+- **Community Contributions:**
+ Contributions to extend transport support are highly welcome.
+- **Stay Updated:**
+ Follow the progress in [libp2p/universal-connectivity](https://github.com/libp2p/universal-connectivity) and our project roadmap for the latest updates on transport and protocol support.
+
+
+## Architecture
+
+The application is built using:
+
+- **Nethermind.Libp2p**: The core libp2p implementation for .NET
+- **Terminal.Gui**: TUI framework for .NET (optional implementation)
+- **Spectre.Console**: Rich console output for colorful text and UI elements
+- **Microsoft.Extensions.DependencyInjection**: For dependency injection and service configuration
+- **System.Text.Json**: For message serialization/deserialization
+
+### Key Components
+
+- **ChatMessage**: Defines the shared message format used for communication between peers, ensuring compatibility with other implementations.
+- **Program.cs**: Contains the entire application logic, including:
+ - **UI Management:** Implements the terminal interface using Terminal.Gui (handling chat, peers, and logs).
+ - **Libp2p Configuration:** Sets up peer identity, transport (TCP by default), and PubSub messaging.
+ - **Message Handling:** Manages serialization/deserialization of messages and processes both JSON and plain text messages.
+
+
+### Project Structure
+
+```
+dotnet-peer/
+├── Libp2pChat/
+│ ├── Program.cs # Main application entry point
+│ └── Libp2pChat.csproj # Project file with dependencies
+└── README.md # This documentation
+```
+
+## Integration with Other libp2p Implementations
+
+This .NET peer is part of a larger universal connectivity demo that includes implementations in:
+
+- Go (`/go-peer`)
+- Rust (`/rust-peer`)
+- JavaScript (`/js-peer`)
+
+All implementations use compatible message formats and the GossipSub protocol for decentralized chat.
+
+## Troubleshooting
+
+### Connection Issues
+
+- Ensure firewalls allow TCP connections on port 9096
+- Verify the Peer ID is correctly shared between applications
+- Check System logs panel for detailed error messages
+
+### UI Display Issues
+
+- Resize the terminal window if panels appear distorted
+- Ensure your terminal supports UTF-8 for proper display of box characters
+- For Windows users, consider using Windows Terminal for best results
+
+## Contributing
+
+Contributions are welcome! Here are some ways you can contribute:
+
+1. Report bugs and issues
+2. Add new features or enhancements
+3. Improve documentation
+4. Submit pull requests
+
+Please follow the existing code style and include appropriate tests.
+
+## License
+
+This project is licensed under dual MIT/Apache-2.0 license - see the [LICENSE-MIT](../../LICENSE-MIT) and [LICENSE-APACHE](../../LICENSE-APACHE) files for details.
diff --git a/dotnet-peer/logo.txt b/dotnet-peer/logo.txt
new file mode 100644
index 00000000..a91f8c5b
--- /dev/null
+++ b/dotnet-peer/logo.txt
@@ -0,0 +1,11 @@
+ _____ ____ ________ ________
+ | __ \ / __ \|__ __| | | ____|
+ | | | | | | | | | | | |__ _ __ __
+ | | | | | | | | |_ | | __| '_ \ / _ \
+ | |__| | |__| | | | |__| | |__| |_) | __/
+ |_____/ \____/ |_|\____/|_____| .__/ \___|
+ ____ _ _ |_|
+ / ___| |__ __ _| |_
+| | | '_ \ / _` | __|
+| |___| | | | (_| | |_
+ \____|_| |_|\__,_|\__|
\ No newline at end of file
diff --git a/dotnet-peer/screenshots/dotnet-UI.png b/dotnet-peer/screenshots/dotnet-UI.png
new file mode 100644
index 00000000..47674782
Binary files /dev/null and b/dotnet-peer/screenshots/dotnet-UI.png differ
diff --git a/dotnet-peer/screenshots/screenshot.txt b/dotnet-peer/screenshots/screenshot.txt
new file mode 100644
index 00000000..3c5e067d
--- /dev/null
+++ b/dotnet-peer/screenshots/screenshot.txt
@@ -0,0 +1,26 @@
+┌────────────────────Room: universal-connectivity────────────────────┐┌──────────────Peers──────────────┐
+│ ││12D3KooW9z... │
+│14:33:29 libp2p-dotnet: Hello from .NET peer! ││QmW1bVU7... │
+│14:34:05 go-peer: Hi there, .NET peer! ││ │
+│14:34:12 libp2p-dotnet: This UI looks great ││ │
+│14:34:30 js-peer: Nice to see .NET in the libp2p network ││ │
+│ ││ │
+│ ││ │
+│ ││ │
+│ ││ │
+│ ││ │
+│ ││ │
+│ ││ │
+└──────────────────────────────────────────────────────────────────┘└──────────────────────────────────┘
+┌───────────────────────────────────────System────────────────────────────────────────────────────────┐
+│14:30:05 Initializing libp2p chat application... │
+│14:30:06 Creating peer identity... │
+│14:30:06 Peer ID created: 12D3KooW9zAGanopseR2SpnY2WjJBKRxtkfHpLw2p9F3PYKuCFVSieF │
+│14:30:07 Binding to address: /ip4/0.0.0.0/tcp/9096/p2p/12D3KooW9zAGanopseR2SpnY2WjJBKRxtkfHpLw2p... │
+│14:30:08 Starting peer and PubSub... │
+│14:30:09 Peer started successfully │
+│14:30:09 Listening Addresses: │
+│14:30:09 /ip4/127.0.0.1/tcp/9096/p2p/12D3KooW9zAGanopseR2SpnY2WjJBKRxtkfHpLw2p9F3PYKuCFVSieF │
+│14:30:09 /ip4/192.168.1.5/tcp/9096/p2p/12D3KooW9zAGanopseR2SpnY2WjJBKRxtkfHpLw2p9F3PYKuCFVSieF │
+└──────────────────────────────────────────────────────────────────────────────────────────────────────┘
+libp2p-dotnet > _
\ No newline at end of file