{"id":13505983,"url":"https://github.com/tench-rt/tentacli","last_synced_at":"2026-03-11T17:01:52.998Z","repository":{"id":45513028,"uuid":"513630108","full_name":"idewave/tentacli","owner":"idewave","description":"Rust implementation of world of warcraft client v3.3.5a (smart CLI)","archived":false,"fork":false,"pushed_at":"2024-08-09T14:58:06.000Z","size":539,"stargazers_count":57,"open_issues_count":0,"forks_count":4,"subscribers_count":5,"default_branch":"primary","last_synced_at":"2024-08-11T09:01:04.075Z","etag":null,"topics":["bot","cli","client-side","crossterm","proc-macro","rust","serde-serialization","tokio-rs","tui-rs","wow","wow-wotlk"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/idewave.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"ko_fi":"idewave"}},"created_at":"2022-07-13T18:28:01.000Z","updated_at":"2024-08-11T09:01:10.404Z","dependencies_parsed_at":"2024-02-19T23:24:10.183Z","dependency_job_id":"e81c3f98-65bd-4019-aaee-33c5866ab6d9","html_url":"https://github.com/idewave/tentacli","commit_stats":null,"previous_names":["idewave/tentacli","idewave/idewave-cli"],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idewave%2Ftentacli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idewave%2Ftentacli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idewave%2Ftentacli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idewave%2Ftentacli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/idewave","download_url":"https://codeload.github.com/idewave/tentacli/tar.gz/refs/heads/primary","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222525410,"owners_count":16997732,"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","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":["bot","cli","client-side","crossterm","proc-macro","rust","serde-serialization","tokio-rs","tui-rs","wow","wow-wotlk"],"created_at":"2024-08-01T01:00:30.577Z","updated_at":"2026-03-11T17:01:52.978Z","avatar_url":"https://github.com/idewave.png","language":"Rust","funding_links":["https://ko-fi.com/idewave"],"categories":["Tools"],"sub_categories":["File Formats"],"readme":"## Tentacli\n\nTentacli is a framework for exploring how network protocols work, extended through plugins.\n\nIt runs as a client application that connects directly to a server (or multiple servers), reads and sends packets according to defined rules, and presents the protocol in a human-readable form.\n\nTentacli is not a sniffer or a MITM tool.  \nIt does not intercept third-party traffic — it participates in the protocol as a full-fledged endpoint.\n\nOn top of Tentacli, you can build automated clients that share a common context.  \nThe context (`anymap2`) is shared across all plugins and connections, used to store protocol state and processing logic, and is available for both read and write access at runtime (`Arc\u003cRwLock\u003cCtxMap\u003e\u003e`).\n\nTentacli can be used, for example:\n- as a protocol visualization tool\n- as a testbed for servers using controlled clients\n- as a foundation for specialized protocol clients\n\nThe architecture does not lock you into a fixed set of use cases — what you build is defined by the plugins you write and the packet processing logic you attach.\n\n![Image](https://github.com/user-attachments/assets/9f753516-2a2c-41fe-865f-b92dbc963a41)\n\n# History\n\nTentacli began as a console-based World of Warcraft client, built to study protocol behavior from the client side.\n\nAs development progressed, recurring patterns became clear:\n\n- connection management\n- packet framing and parsing\n- protocol semantics\n- event propagation\n- UI and automation\n\nThese patterns were extracted into a generic, protocol-agnostic runtime.  \nThe result is a framework capable of hosting multiple independent TCP/UDP connections, each extended through modular, reusable plugins.\n\n---\n\n## How Tentacli Is Structured\n\nThe core is a runtime responsible for launching and coordinating plugins.  \nThere are three types of plugins:\n\n---\n\n### Network plugin\n\nUsed to establish a connection to a server and define how the protocol is handled.\n\nResponsible for:\n- establishing the connection to the server\n- selecting the transport (TCP / UDP)\n- reading the raw byte stream from the socket\n- extracting packets from the incoming buffer\n- serializing packets for transmission\n\nInternally, it spawns two asynchronous tasks:\n- `read_task` — reads data from the socket, accumulates a buffer, and extracts packets\n- `write_task` — receives packets from the core and sends them to the server\n\nEach network plugin operates under its own label (`ServerLabel`).  \nLabels must be unique: registering two network plugins with the same label will cause a panic at startup.\n\n---\n\n### Processor plugin\n\nExtends a specific network plugin.\n\nIt does not participate in the connection itself. Instead, it provides:\n- parsers for specific packet types\n- groups of protocol logic handlers\n- generators for outgoing packets and requests\n- logic for reading from and modifying the shared context\n\nProcessor plugins attach to a network plugin by matching its `ServerLabel` and are inserted into the shared packet processing pipeline.\n\n---\n\n### Core plugin\n\nActs as the system coordinator.\n\nA core plugin:\n- receives signals from all processor plugins\n- can send control signals and responses back to network plugins\n- can implement higher-level logic for routing and handling those signals\n\nIt does not work with raw bytes or protocol data directly, but operates on events and processing results (`HandlerOutput`, `Echo`, `Requests`).\n\n---\n\n## Doctor mode\n\nTentacli provides a built-in diagnostic mode to inspect the current build and runtime environment:\n\n```bash\ncargo run --no-default-features --features \u003cyour features\u003e -- doctor\n\n# or\n\n./tentacli doctor\n```\n\nIt reports:\n- Enabled build features\n- Registered plugins (network / processor / core)\n- Wiring between processors and network plugins\n- Configuration resolution context (env, OS config dir, working directory)\n- This is useful for debugging misconfigured builds, missing plugins, or unexpected config resolution.\n\n## Want to Contribute? \n\nContributions are always welcome. Feel free to open a pull request with improvements, bug fixes, or new plugins.\n\nAt the moment, a network plugin for **WoW WotLK** is implemented.\n\nIf this project speaks to you, I’d be glad for any help in building new plugins for other gaming and application-level protocols — network, processor, and core plugins alike.\n\n## Join us in Discord\n\nBefore joining, please read the rules: https://discord.gg/tgEdFD8V22 !\n\n## License\n\nThis project is licensed under the Apache License 2.0.\nSee the LICENSE and NOTICE files for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftench-rt%2Ftentacli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftench-rt%2Ftentacli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftench-rt%2Ftentacli/lists"}