{"id":25931151,"url":"https://github.com/jzombie/rust-stdin-nonblocking","last_synced_at":"2026-02-14T13:01:47.713Z","repository":{"id":280517930,"uuid":"942284118","full_name":"jzombie/rust-stdin-nonblocking","owner":"jzombie","description":"Dependency-less non-blocking stdin reader for Rust using background threads. Supports streaming and immediate fallback defaults.","archived":false,"fork":false,"pushed_at":"2025-03-13T04:54:17.000Z","size":31,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-22T04:59:52.964Z","etag":null,"topics":["rust-lang","stdin-inputs","stdin-nonblocking","stdin-stream"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/stdin-nonblocking","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jzombie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-03T21:38:54.000Z","updated_at":"2025-03-13T04:54:18.000Z","dependencies_parsed_at":"2025-03-03T22:02:04.460Z","dependency_job_id":"7af49687-356b-42d4-bbce-d5380ec77135","html_url":"https://github.com/jzombie/rust-stdin-nonblocking","commit_stats":null,"previous_names":["jzombie/rust-stdin-nonblocking"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jzombie/rust-stdin-nonblocking","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzombie%2Frust-stdin-nonblocking","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzombie%2Frust-stdin-nonblocking/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzombie%2Frust-stdin-nonblocking/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzombie%2Frust-stdin-nonblocking/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jzombie","download_url":"https://codeload.github.com/jzombie/rust-stdin-nonblocking/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzombie%2Frust-stdin-nonblocking/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29444028,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T12:43:28.304Z","status":"ssl_error","status_checked_at":"2026-02-14T12:43:14.160Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["rust-lang","stdin-inputs","stdin-nonblocking","stdin-stream"],"created_at":"2025-03-03T23:58:07.141Z","updated_at":"2026-02-14T13:01:47.688Z","avatar_url":"https://github.com/jzombie.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rust `stdin` Nonblocking\n\n[![made-with-rust][rust-logo]][rust-src-page]\n[![crates.io][crates-badge]][crates-page]\n[![Documentation][docs-badge]][docs-page]\n[![MIT licensed][license-badge]][license-page]\n\n\n| OS            | Status                                                                               |\n|---------------|--------------------------------------------------------------------------------------|\n| Ubuntu-latest | [![Ubuntu Tests][ubuntu-latest-badge]][ubuntu-latest-workflow]                       |\n| macOS-latest  | [![macOS Tests][macos-latest-badge]][macos-latest-workflow]                          |\n| Windows-latest| [![Windows Tests][windows-latest-badge]][windows-latest-workflow]                    |\n\nDependency-less non-blocking `stdin` reader using background threads. Supports streaming and immediate fallback defaults.\n\nSupports **binary data**, streaming, and immediate fallback defaults.\n\n## Install\n\n```sh\ncargo add stdin-nonblocking\n```\n\n## Usage\n\n### Get `stdin` or Default\n\n```rust\nuse stdin_nonblocking::get_stdin_or_default;\n\n// If running in interactive mode (stdin is a terminal),\n// `get_stdin_or_default` returns the default value immediately.\nlet input = get_stdin_or_default(Some(b\"fallback_value\"));\n\n// Input is always `Vec\u003cu8\u003e`, ensuring binary safety.\nassert_eq!(input, Some(b\"fallback_value\".to_vec()));\n```\n\n### Read `stdin` as Stream\n\n```rust\nuse stdin_nonblocking::spawn_stdin_stream;\nuse std::sync::mpsc::TryRecvError;\nuse std::time::Duration;\n\n// If running in interactive mode (stdin is a terminal),\n// `spawn_stdin_stream` returns an empty receiver, meaning no input will be received.\nlet stdin_stream = spawn_stdin_stream();\n\nloop {\n    match stdin_stream.try_recv() {\n        Ok(bytes) =\u003e println!(\"Received: {:?}\", bytes), // Always raw bytes\n        Err(TryRecvError::Empty) =\u003e {\n            // No input yet; continue execution\n        }\n        Err(TryRecvError::Disconnected) =\u003e {\n            println!(\"Input stream closed. Exiting...\");\n            break;\n        }\n    }\n    std::thread::sleep(Duration::from_millis(500));\n}\n```\n\n### Use with Tokio\n\nRefer to the included [Tokio Example App](./tokio-example-app/).\n\n## Related threads\n  - https://stackoverflow.com/questions/30012995/how-can-i-read-non-blocking-from-stdin\n  - https://www.reddit.com/r/rust/comments/fc71ju/how_to_read_from_stdin_without_blocking/?rdt=55515\n\n\n## License\n\n[MIT License](LICENSE) (c) 2025 Jeremy Harris.\n\n\n[rust-src-page]: https://www.rust-lang.org/\n[rust-logo]: https://img.shields.io/badge/Made%20with-Rust-black?\u0026logo=Rust\n\n[crates-page]: https://crates.io/crates/stdin-nonblocking\n[crates-badge]: https://img.shields.io/crates/v/stdin-nonblocking.svg\n\n[docs-page]: https://docs.rs/stdin-nonblocking\n[docs-badge]: https://docs.rs/stdin-nonblocking/badge.svg\n\n[license-page]: ./LICENSE\n[license-badge]: https://img.shields.io/badge/license-MIT-blue.svg\n\n[ubuntu-latest-badge]: https://github.com/jzombie/rust-stdin-nonblocking/actions/workflows/rust-tests.yml/badge.svg?branch=main\u0026job=Run%20Rust%20Tests%20(OS%20=%20ubuntu-latest)\n[ubuntu-latest-workflow]: https://github.com/jzombie/rust-stdin-nonblocking/actions/workflows/rust-tests.yml?query=branch%3Amain\n\n[macos-latest-badge]: https://github.com/jzombie/rust-stdin-nonblocking/actions/workflows/rust-tests.yml/badge.svg?branch=main\u0026job=Run%20Rust%20Tests%20(OS%20=%20macos-latest)\n[macos-latest-workflow]: https://github.com/jzombie/rust-stdin-nonblocking/actions/workflows/rust-tests.yml?query=branch%3Amain\n\n[windows-latest-badge]: https://github.com/jzombie/rust-stdin-nonblocking/actions/workflows/rust-tests.yml/badge.svg?branch=main\u0026job=Run%20Rust%20Tests%20(OS%20=%20windows-latest)\n[windows-latest-workflow]: https://github.com/jzombie/rust-stdin-nonblocking/actions/workflows/rust-tests.yml?query=branch%3Amain","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjzombie%2Frust-stdin-nonblocking","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjzombie%2Frust-stdin-nonblocking","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjzombie%2Frust-stdin-nonblocking/lists"}