{"id":36419057,"url":"https://github.com/mcoria/goyeneche","last_synced_at":"2026-01-11T17:02:03.417Z","repository":{"id":268268368,"uuid":"903816193","full_name":"mcoria/goyeneche","owner":"mcoria","description":"Java library implementing the UCI (Universal Chess Interface) Protocol","archived":false,"fork":false,"pushed_at":"2025-12-28T13:39:59.000Z","size":225,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-31T00:58:56.930Z","etag":null,"topics":["chess","java","universal-chess-interface"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mcoria.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-12-15T16:23:28.000Z","updated_at":"2025-12-28T13:40:03.000Z","dependencies_parsed_at":"2025-05-08T23:29:01.868Z","dependency_job_id":"16ee3753-9dc2-4647-a12a-b4b7bb761c6a","html_url":"https://github.com/mcoria/goyeneche","commit_stats":null,"previous_names":["mcoria/uci-protocol","mcoria/goyeneche"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/mcoria/goyeneche","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcoria%2Fgoyeneche","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcoria%2Fgoyeneche/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcoria%2Fgoyeneche/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcoria%2Fgoyeneche/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mcoria","download_url":"https://codeload.github.com/mcoria/goyeneche/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcoria%2Fgoyeneche/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28314260,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T14:58:17.114Z","status":"ssl_error","status_checked_at":"2026-01-11T14:55:53.580Z","response_time":60,"last_error":"SSL_read: 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":["chess","java","universal-chess-interface"],"created_at":"2026-01-11T17:02:02.729Z","updated_at":"2026-01-11T17:02:03.412Z","avatar_url":"https://github.com/mcoria.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Java CI with Maven](https://github.com/mcoria/goyeneche/actions/workflows/maven.yml/badge.svg)](https://github.com/mcoria/goyeneche/actions/workflows/maven.yml)\n\n# goyeneche\n\n**goyeneche** is a Java library implementing the **UCI (Universal Chess Interface) Protocol**, enabling easy integration with chess engines or GUI controllers supporting this protocol.\n\n## Features\n\n- Provides a streamlined way to communicate with UCI-compatible chess engines.\n- Send and receive UCI commands with ease.\n- Built with Java, making it simple to integrate into existing Java projects.\n\n## Prerequisites\n\n- **Java 21** or higher\n- **Maven** or **Gradle** for dependency management (optional)\n\n## Installation\n\nTo use **goyeneche** in your project, add the dependency to your `pom.xml` (for Maven) or `build.gradle` (for Gradle).\n\n### Maven\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003enet.chesstango\u003c/groupId\u003e\n    \u003cartifactId\u003egoyeneche\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.6\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### Gradle\n\n```groovy\nimplementation 'net.chesstango:goyeneche:1.0.6'\n```\n\n## Usage\n\nFollow the steps below to integrate **goyeneche** into your project:\n\n1. **Initialize and Configure the UCI Client**\n\n   Set up the UCI client to connect with a UCI-compatible chess engine (e.g., Stockfish).\n\n   ```java\n   public class EngineSkeleton extends AbstractUCIEngine {\n\n    public static void main(String[] args) {\n\n        // Create an instance of the EngineSkeleton to handle UCI commands.\n        EngineSkeleton engineSkeleton = new EngineSkeleton();\n\n        // Configure the engine's output stream to forward responses to the GUI via standard output,\n        // using a StringConsumer for protocol-compliant communication.\n        engineSkeleton.setOutputStream(new UCIOutputStreamToStringAdapter(new StringConsumer(new OutputStreamWriter(System.out))));\n\n        // Open the engine to prepare it for communication with the GUI.\n        engineSkeleton.open();\n\n        // Initialize and set up the UCIActiveStreamReader to read UCI commands from standard input.\n        UCIActiveStreamReader uciActiveStreamReader = createUciActiveStreamReader(engineSkeleton);\n\n        // Start processing UCI commands in the active reader loop.\n        uciActiveStreamReader.run();\n\n        // Close the engine after completing the communication.\n        engineSkeleton.close();\n    }\n\n\n\n    private static UCIActiveStreamReader createUciActiveStreamReader(Consumer\u003cUCICommand\u003e uciCommandConsumer) {\n        UCIActiveStreamReader uciActiveStreamReader = new UCIActiveStreamReader();\n\n        // Configures the active stream reader to read input from the standard input (System.in)\n        // by adapting it to the UCIInputStream interface through a StringSupplier.\n        uciActiveStreamReader.setInputStream(new UCIInputStreamFromStringAdapter(new StringSupplier(new InputStreamReader(System.in))));\n\n        // Directs the output of the active stream reader to be handled by the engineSkeleton's accept method,\n        // enabling the engine to process UCI commands received from the input.\n        uciActiveStreamReader.setOutputStream(uciCommandConsumer::accept);\n\n        // Return the configured UCIActiveStreamReader instance to handle communication with the GUI.\n        return uciActiveStreamReader;\n    }\n\n\n    @Override\n    public void do_uci(ReqUci reqUci) {\n        replyResponse(new RspId(RspId.RspIdType.NAME, \"Skeleton 1.0\"));\n        replyResponse(new RspId(RspId.RspIdType.AUTHOR, \"John Doe\"));\n        replyResponse(new RspUciOk());\n    }\n\n\n    @Override\n    public void do_isReady(ReqIsReady cmdIsReady) {\n        replyResponse(new RspReadyOk());\n    }\n    \n\n    @Override\n    public void do_go(ReqGo reqGo) {\n        replyResponse(new RspBestMove(\"c2c4\"));\n    }\n   }\n   ```\n\n   Execute EngineSkeleton and start exchanging commands as follows:\n   ```\n   \u003e\u003e uci\n   \u003c\u003c id name Skeleton 1.0\n   \u003c\u003c id author John Doe\n   \u003c\u003c uciok\n   \u003e\u003e isready\n   \u003c\u003c readyok\n   \u003e\u003e ucinewgame\n   \u003e\u003e position startpos moves e2e4 e7e5\n   \u003e\u003e go infinite\n   \u003c\u003c bestmove c2c4\n   \u003e\u003e quit\n   ```\n\n2. **Commands for UCI Protocol**\n\n   Here are some commonly used UCI commands you can send through the client:\n\n    - `uci`: Initialize the UCI mode.\n    - `isready`: Check if the engine is ready.\n    - `usinewgame`: Initialize a new game.\n    - `position`: Set up the board position.\n    - `go`: Start calculating the best move.\n    - `stop`: Stop the current calculation.\n\n## Contributing\n\nContributions are welcome! Feel free to open issues and submit pull requests.\n\n## License\n\nThis project is licensed under the **BSD 3-Clause License**. See the `LICENSE` file for details.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcoria%2Fgoyeneche","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmcoria%2Fgoyeneche","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcoria%2Fgoyeneche/lists"}