{"id":31913589,"url":"https://github.com/zhibirc/ya2ber","last_synced_at":"2026-04-18T12:01:52.021Z","repository":{"id":54417761,"uuid":"104314985","full_name":"zhibirc/ya2ber","owner":"zhibirc","description":"👥 CLI chat to just chat. No ads, no statistics collection, no special terms, no unknown third-party services, no spies, no tricky interfaces... no bullshit.","archived":false,"fork":false,"pushed_at":"2025-01-18T18:34:55.000Z","size":82,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-22T03:43:58.264Z","etag":null,"topics":["chat","chat-application","net","nodejs","shell","socket","terminal-app","terminal-based"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zhibirc.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-09-21T07:20:40.000Z","updated_at":"2025-01-18T18:34:57.000Z","dependencies_parsed_at":"2025-01-17T12:29:36.384Z","dependency_job_id":"71113ea2-2734-469f-b0b3-b7e478f9e594","html_url":"https://github.com/zhibirc/ya2ber","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zhibirc/ya2ber","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhibirc%2Fya2ber","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhibirc%2Fya2ber/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhibirc%2Fya2ber/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhibirc%2Fya2ber/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zhibirc","download_url":"https://codeload.github.com/zhibirc/ya2ber/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhibirc%2Fya2ber/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31967993,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","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":["chat","chat-application","net","nodejs","shell","socket","terminal-app","terminal-based"],"created_at":"2025-10-13T18:49:56.553Z","updated_at":"2026-04-18T12:01:51.972Z","avatar_url":"https://github.com/zhibirc.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ya2ber\n\n![maintenance](https://img.shields.io/maintenance/yes/2025.svg?style=flat)\n![node-version](https://img.shields.io/badge/node-~22.13.0-brightgreen.svg?style=flat)\n![npm-version](https://img.shields.io/badge/npm-~10.9.2-brightgreen.svg?style=flat)\n\nCLI chat to just chat. No ads, no statistics collection, no special terms, no unknown third-party services, no spies, no tricky interfaces... no bullshit.\n\n---\n\n## Etymology\n\n**ya2ber** is just derived from _yabber_, which is the synonym for _jabber_, which is the synonym for usual _talk_.\n\n## Features\n\n- [x] Authentication based on login and password.\n- [x] Shows how many visitors are in the chat. Currently, this info is shown in PS1 prompt.\n- [x] Chat members are notified when someone left.\n- [x] There are 3 message categories/types - system (including ones from server), authentication purposed and just chat messages.\n- [x] Client and server use JSON as data format for transmitting data to each other. [See](#json-message-schema) how.\n- [x] Entering of password is hidden (like many other CLI applications do, including `sudo`) and isn't stored in history.\n- [x] Authentication errors are well recognized because of verbose error messages.\n- [x] Client doesn't contain any validation logic for user credentials, this a server's responsibility.\n- [x] Server stores such specific user data: registration date, last activity date and last used IP address.\u003csup\u003e*\u003c/sup\u003e\n- [ ] Server doesn't store _any_ message history. Instead, client could store history locally as an option.\n- [ ] Prevention of _typosquatting_ in usernames.\n- [ ] Rework UI for using [blessed](https://github.com/chjj/blessed) curses-like library\n- [ ] [libsignal](https://github.com/signalapp/libsignal) library is used for communication encryption\n\n`*` actually, server stores last login date rather than last activity date for now\n\n## CLI options\n\n## JSON message schema\n\nExample of client's message:\n\n```json\n{\n    \"message\": \"Hello, username!\",\n    \"type\": \"message\",\n    \"command\": \"/username\"\n}\n```\n\nExample of server's message:\n\n```json\n{\n    \"message\": \"username left the chat\",\n    \"type\": \"system\",\n    \"online\": 5\n}\n```\n\n## Development\n\n### Setup\n\n#### Installation\n\n```shell\ngit clone git@github.com:zhibirc/ya2ber.git\n\ncd ya2ber\n\n# it'll automatically install dependencies in all nested application folders\nnpm install\n```\n\n#### Pre-commit\n\nWe use [pre-commit](https://pre-commit.com/) for running code checks locally, just before committing, \nto ensure that all basic code requirements and policies were respected. Installation is pretty simple (one-time action):\n\n```shell\n# install pre-commit using Python's pip\npip install pre-commit\n# OR\n# install pre-commit using using Homebrew\nbrew install pre-commit\n\n# install the Git hook scripts\npre-commit install\n```\n\nNow pre-commit will run automatically on `git commit`!\nConfiguration for pre-commit hooks is stored in `.pre-commit-config.yaml` file.\n\n**pre-commit notes**\n\n- If you want to skip all the pre-commit checks (not recommended!), you can add the `-n` parameter as follows:\n\n```shell\ngit commit -m \"commit message\" -n\n```\n\n- Alternatively if you only want to skip some specific check, you can use `SKIP=\u003chook_id\u003e` before the command:\n\n```shell\nSKIP=codespell git commit -m \"commit message\"\n```\n\n#### Storing secrets\n\nGenerally, it may be necessary to use some sensitive data, usually stored in environment variables, in application. For example, AWS keys. \nIf so, it's important to remember that _any sensitive data shouldn't be leaked to the public_, including GitHub repository.\n\nTo accomplish this, create **.env.local** file (don't use .env file in this case) in the appropriate directory (client/ or server/), \nand put environment variables intended to be private there. This file is ignored by Git and excluded from Docker context on image build.\n\n### Automation scripts\n\nWe use GNU [Make](https://www.gnu.org/software/make/) for automate operations related to source code and application deployment.\n\n#### Available Make project-level commands\n\nGet help/guide for all available commands.\n\n```shell\nmake\n```\n\n```shell\nmake help\n```\n\n```shell\ndocker-compose up -d\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhibirc%2Fya2ber","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzhibirc%2Fya2ber","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhibirc%2Fya2ber/lists"}