{"id":13509893,"url":"https://github.com/miguelmota/streamhut","last_synced_at":"2025-12-15T06:24:51.200Z","repository":{"id":22765463,"uuid":"26111255","full_name":"miguelmota/streamhut","owner":"miguelmota","description":"Stream your terminal to web without installing anything 🌐 by @miguelmota","archived":false,"fork":false,"pushed_at":"2022-11-19T05:55:14.000Z","size":27471,"stargazers_count":918,"open_issues_count":9,"forks_count":33,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-07-22T14:17:08.842Z","etag":null,"topics":["cli","docker","golang","javascript","netcat","real-time","stdout","stream","streamhut","telnet","terminal","terminal-share","web","websockets"],"latest_commit_sha":null,"homepage":"https://streamhut.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/miguelmota.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":["miguelmota"],"patreon":"miguelmota"}},"created_at":"2014-11-03T09:08:23.000Z","updated_at":"2025-07-19T19:18:32.000Z","dependencies_parsed_at":"2022-07-27T03:32:18.902Z","dependency_job_id":null,"html_url":"https://github.com/miguelmota/streamhut","commit_stats":null,"previous_names":["streamhut/streamhut"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/miguelmota/streamhut","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miguelmota%2Fstreamhut","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miguelmota%2Fstreamhut/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miguelmota%2Fstreamhut/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miguelmota%2Fstreamhut/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miguelmota","download_url":"https://codeload.github.com/miguelmota/streamhut/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miguelmota%2Fstreamhut/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266597080,"owners_count":23953895,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","docker","golang","javascript","netcat","real-time","stdout","stream","streamhut","telnet","terminal","terminal-share","web","websockets"],"created_at":"2024-08-01T02:01:16.194Z","updated_at":"2025-12-15T06:24:46.134Z","avatar_url":"https://github.com/miguelmota.png","language":"Go","funding_links":["https://github.com/sponsors/miguelmota","https://patreon.com/miguelmota"],"categories":["Go","\u003ca name=\"stream-record\"\u003e\u003c/a\u003estream-record","cli"],"sub_categories":[],"readme":"\u003ch3 align=\"center\"\u003e\n  \u003cbr /\u003e\n  \u003cimg src=\"https://user-images.githubusercontent.com/168240/83982881-ecf66c00-a8de-11ea-969e-8b41887d681e.png\" alt=\"logo\" width=\"700\" /\u003e\n  \u003cbr /\u003e\n  \u003cbr /\u003e\n  \u003cbr /\u003e\n\u003c/h3\u003e\n\n# streamhut\n\n\u003e Stream and send data, terminal to web and vice versa.\n\n[![License](http://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/streamhut/streamhut/master/LICENSE)\n[![Build Status](https://travis-ci.org/streamhut/streamhut.svg?branch=master)](https://travis-ci.org/streamhut/streamhut)\n[![Go Report Card](https://goreportcard.com/badge/github.com/streamhut/streamhut?)](https://goreportcard.com/report/github.com/streamhut/streamhut)\n[![GoDoc](https://godoc.org/github.com/streamhut/streamhut?status.svg)](https://godoc.org/github.com/streamhut/streamhut)\n\u003c!--\n[![Mentioned in Awesome Terminals](https://awesome.re/mentioned-badge.svg)](https://github.com/k4m4/terminals-are-sexy)\n--\u003e\n\n## Synopsis\n\n- Stream your terminal to anyone without installing anything.\n- Path names map to channels.\n- Anyone in the same channel can view what's streamed.\n- Easily self-host your own streamhut server.\n\nStreamhut allows you to stream (pipe) realtime data from your terminal stdout/stderr to a web xterm UI or even to another terminal. It also allow you to quickly share data and files between devices.\n\nAs long as you have [`netcat`](https://en.wikipedia.org/wiki/Netcat) which comes pre-installed in most *nix systems than you can use streamhut! If you can't install netcat, you may also use the streamhut CLI client.\n\n#### ⚠️ Disclaimer: This software is alpha quality and not production ready. Use at your own risk!\n\n## Demo\n\n**[https://streamhut.io](https://streamhut.io)**\n\n![Demo](https://s3.amazonaws.com/assets.streamhut.io/streamhut_demo_1.gif)\n\n## Getting Started (without installing anything)\n\n**One liner to stream your terminal:**\n\n```bash\n$ exec \u0026\u003e \u003e(nc stream.ht 1337)\n```\n\nThe above command pipes stdout and stderr of new bash shell to streamhut.\n\n**Stream to a custom channel name:**\n\n```bash\n$ exec \u0026\u003e \u003e(nc stream.ht 1337);echo \\#mychannel\n```\n\n**Example of streaming tail of file:**\n\n```bash\n# terminal 1\n$ cat \u003e data.txt\n```\n\n```bash\n# terminal 2\n$ tail -F data.txt | nc stream.ht 1337\n```\n\n**Stream the current date every second:**\n\n```bash\n$ while true; do date; sleep 1; done | nc stream.ht 1337\n```\n\n**Stream output of a program (delay is required to see share url):**\n\n```bash\n$ (sleep 5; htop) | nc stream.ht 1337\n# waits 5 seconds, and then send contents of program.\n```\n\n**Example of piping a program to both stdout and streamhut:**\n\n```bash\n$ (echo -n; sleep 5; htop) | tee \u003e(nc stream.ht 1337)\n```\n\n**Don't have netcat available?** Pipe to a file descriptor with an open TCP connection:\n\n```bash\n$ exec 3\u003c\u003e/dev/tcp/stream.ht/1337 \u0026\u0026 head -1 \u003c\u00263 \u0026\u0026 exec \u0026\u003e \u003e(tee \u003e(cat \u003e\u00263))\n```\n\n## Install\n\n```bash\n$ go get github.com/streamhut/streamhut\n```\n\n## CLI\n\nExample of using streamhut CLI:\n\n#### Stream to server\n\nPiping commands:\n\n```bash\n$ htop | streamhut\n```\n\nAdd delay to see share url:\n\n```bash\n$ htop | streamhut -d 5\n```\n\nOpen url in browser:\n\n```bash\n$ htop | streamhut -o\n```\n\nStream to different server:\n\n```bash\n$ htop | streamhut -h example.com -p 1337\n```\n\nStream to custom channel:\n\n```bash\n$ htop | streamhut -c mychannel\n```\n\nFor more options, run `streamhut --help`\n\n#### Run your own server:\n\n```bash\n$ streamhut server\n\nStarting server...\nHTTP/WebSocket port: 8080\nTCP port: 1337\n```\n\nRun server with SSL/TLS:\n\n```bash\n$ mkcert localhost\n\n$ sudo streamhut server --tls --tls-cert=localhost.pem --tls-key=localhost-key.pem -p 443\n```\n\nFor more options, run `streamhut server --help`\n\n#### Connecting to a channel\n\n```bash\n# terminal 1\n$ streamhut connect -c mychannel\n```\n\nFor more options, run `streamhut connect --help`\n\n## Docker\n\nYou can run streamhut as a Docker container:\n\n```bash\n$ docker pull streamhut/streamhut\n$ docker run -e PORT=8080 -e TCP_PORT=1337 -p 8080:8080 -p 1337:1337 --restart unless-stopped streamhut/streamhut:latest\n```\n\n## Self-host (docker one-liner)\n\nOne-liner to self-host using Docker:\n\n```bash\ndocker run -p 8080:8080 -p 1337:1337 streamhut/streamhut\n```\n\n## Test\n\n```bash\nmake test\n```\n\n## Development\n\nStart server:\n\n```bash\nmake start\n```\n\nRun migrations:\n\n```bash\nmake migrate\n```\n\n## Web App\n\nThe web app source code is found on [https://github.com/streamhut/web](https://github.com/streamhut/web).\n\n## FAQ\n\n- Q: How is the stream log data stored?\n\n  - A: Currently it's stored in a local sqlite3 database. You can disable storage with the `--no-storage` flag, e.g. `streamhut server --no-storage`.\n\n- Q: What happened to the streamhut NPM module?\n\n  - A: The [node.js implementation](https://github.com/streamhut/streamhut/tree/nodejs) of streamhut is now deprecated in favor of this Golang implementation.\n\n- Q: Can the same channel be used more than once?\n\n  - A: Yes! send `#{channel}` (ie `#mychannel`) as the first stream text to use that channel.\n\n    Example:\n\n    ```bash\n    exec \u0026\u003e \u003e(nc stream.ht 1337);echo \\#mychannel\n    ```\n\n- Q: What's the difference between _stream.ht_ and _streamhut.io_?\n\n  - A: The domain _stream.ht_ is an alias for _streamhut.io_, meaning you can type _stream.ht_ as the domain for convenience. Other aliases are _streamhut.net_ and _streamhut.org_.\n\n- Q: What is the difference between `exec \u003e \u003e(nc stream.ht 1337) 2\u003e\u00261` and `exec \u0026\u003e \u003e(nc stream.ht 1337)`\n\n  - A: They are the same in that they both stream stdout and stderr to the server.\n\n## License\n\nReleased under the [Apache 2.0](./LICENSE) license.\n\n© [Miguel Mota](https://github.com/miguelmota)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiguelmota%2Fstreamhut","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiguelmota%2Fstreamhut","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiguelmota%2Fstreamhut/lists"}