Show HN: WebRTTY – Share a terminal session over WebRTC

(github.com)

125 points | by maxmcd 1985 days ago

8 comments

  • snissn 1985 days ago
    Could anyone share a tutorial on how to set up a basic WebRTC text and/or voice chat from scratch? I've tried but failed to get a proof of concept built, and personally have not found any great documentation
    • Uehreka 1985 days ago
      As someone who has done some work with WebRTC (attempting to build a video conferencing app for work) it's hard to boil things down to a "Hello World" due to the whole ICE and signalling thing. It's unfortunate, but in order to get this client-side peer-to-peer thing working, you need to have a server in the cloud (i.e. not behind NAT) that can pass signals between the two peers.

      The tutorials other people have linked to look good, just note that unless you're talking between 2 computers within your local network (and even then you'll have to copy-paste their IP addresses to each other), you'll need to either deploy a server or use a 3rd party library like PeerJS that uses one.

      I hope that eventually IPv6 will obviate the need for NAT and make this whole thing much simpler, but until then, this is what we've got.

      • voltagex_ 1985 days ago
        I wonder if there's any plans for peer discovery, at least locally.

        I guess that's where your central server comes in - even in a perfect scenario where there's no NAT between peers.

    • deviantfero 1984 days ago
      Hi there, I authored this small chat-text/file-transfer demo without any third party libraries for WebRTC communication [0].

      It is very easy to get running in your computer since it's made with the purpose of explaining data flow withing WebRTC, logs have been implemented describing this flow in both client and server, you can find a blog post about it here [1].

      [0] https://github.com/agilityfeat/file-transfer-demo

      [1] https://webrtc.ventures/2018/04/file-transfers-small-demonst...

    • ermir 1985 days ago
      I wrote an article on my blog for this exact same topic. It's voice and video, but text chat is quite a bit easier.

      https://suldashi.com/dead-simple-webrtc-explanation/

    • jgrowl 1985 days ago
    • resource0x 1985 days ago
      • megous 1985 days ago
        Depends on third party services. Perhaps something involving janus gateway would be better?
        • resource0x 1985 days ago
          Maybe it's better, but another one is simpler (no need to bother with the server part at all). From reliability viewpoint, hard to say. A priory, I would trust firebase more, but I might be wrong.
  • h43z 1985 days ago
    Neat idea to use WebRTC. Do I understand it correctly therefore no central server is involved?

    I was once in need to stream my shell to some colleges and so I hacked together a tiny shellscript http://liveshell.43z.one/ which should work on most Linux systems without installing any dependencies.

    • maxmcd 1985 days ago
      Correct, no central server. It does use google's stun server to establish the connection, but you can swap that out with another stun server with the -s flag (it's easy to host your own and there are many free stun servers)

      The -o flag makes things easier but uses https://10kb.site to do the sdp exchange

      That shell script is cool

      • verroq 1984 days ago
        With no TURN server I cannot see it will always work.
  • th0ma5 1985 days ago
    RTTY made me think radio and not remote. Still fun!
    • anilakar 1985 days ago
      It would be fun to run good old 45 baud RTTY over a WebRTC audio channel.
  • lgrahl 1985 days ago
    Neat! I wrote something similar [1] more than a year ago which allows you to create one or more remote shells but sharing can only be done via tmux (shameless advertising).

    [1]: https://github.com/rawrtc/rawrtc-terminal-demo

  • Sean-Der 1985 days ago
    Congrats on the release maxmcd, you really built something cool quick!

    The best thing about Go is those easy deploys, it would be great to drop this on a remote server and go at it. Could be helpful for getting quick shell help for a friend. Or maybe a way for people to avoid having jump boxes (and SSH only available via VPN) solutions are endless :)

  • gregwebs 1985 days ago
  • kbumsik 1985 days ago
    I'm not an expert in web, but isn't WebSockets better for this purpose? What's the advantage of using WebRTC for text-based terminal over WebSockets?
    • matthewmacleod 1985 days ago
      WebRTC is mostly about peer-to-peer communication (with a focus on audio and video support alongside data), whereas WebSockets is more about client-server communication. That is, a WebSocket connection needs to be made explicitly to some kind of server; WebRTC handles a peer-to-peer connection setup somewhat transparently.

      WebRTC still needs to communicate between peers in order to set up that connection. In fact, many applications using it will use a WebSocket server to handle that initial communication – basically messages between the peers that say "this is where I am and how you can connect". In the case of this WebTTY project, this initial communication is encoded in the "connection data" that needs to be shared to set up the connection, so there's no need for that channel.

  • souterrain 1985 days ago
    I don’t like the name. RTTY[1] is a thing, and this repo is not related to that thing.

    [1]: https://en.m.wikipedia.org/wiki/Radioteletype