{"id":16145530,"url":"https://github.com/deftu/copycat","last_synced_at":"2026-02-07T11:32:22.288Z","repository":{"id":249517719,"uuid":"831731918","full_name":"Deftu/Copycat","owner":"Deftu","description":"A basic clipboard manager for Java using Rust and JNI.","archived":false,"fork":false,"pushed_at":"2025-07-31T05:21:01.000Z","size":130,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-21T16:48:28.328Z","etag":null,"topics":["clipboard","clipboard-management","clipboard-manager","java","java-jni","java-library","jni","jni-android","jni-android-library","jni-java","rust","rust-lang"],"latest_commit_sha":null,"homepage":"https://maven.deftu.dev","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Deftu.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":"2024-07-21T13:16:43.000Z","updated_at":"2025-07-31T05:21:06.000Z","dependencies_parsed_at":"2025-05-26T21:38:52.346Z","dependency_job_id":"047e35a6-3b2a-4599-be46-5749b9f2c4b3","html_url":"https://github.com/Deftu/Copycat","commit_stats":null,"previous_names":["deftu/copycat"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Deftu/Copycat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Deftu%2FCopycat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Deftu%2FCopycat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Deftu%2FCopycat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Deftu%2FCopycat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Deftu","download_url":"https://codeload.github.com/Deftu/Copycat/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Deftu%2FCopycat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29193586,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T07:37:03.739Z","status":"ssl_error","status_checked_at":"2026-02-07T07:37:03.029Z","response_time":63,"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":["clipboard","clipboard-management","clipboard-manager","java","java-jni","java-library","jni","jni-android","jni-android-library","jni-java","rust","rust-lang"],"created_at":"2024-10-10T00:16:44.129Z","updated_at":"2026-02-07T11:32:22.274Z","avatar_url":"https://github.com/Deftu.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Copycat\nBasic clipboard access in your Java applications!\n\n---\n\n## Usage\n\n### Repository\n\n\n\u003cdetails\u003e\n    \u003csummary\u003eGroovy (.gradle)\u003c/summary\u003e\n\n```gradle\nmaven {\n    name = \"Deftu Releases\"\n    url = \"https://maven.deftu.dev/releases\"\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003eKotlin (.gradle.kts)\u003c/summary\u003e\n\n```kotlin\nmaven(url = \"https://maven.deftu.dev/releases\") {\n    name = \"Deftu Releases\"\n}\n```\n\u003c/details\u003e\n\n### Dependency\n\n![Repository badge](https://maven.deftu.dev/api/badge/latest/releases/dev/deftu/copycat?color=C33F3F\u0026name=Copycat)\n\n\u003cdetails\u003e\n    \u003csummary\u003eGroovy (.gradle)\u003c/summary\u003e\n\n```gradle\nimplementation \"dev.deftu:copycat:\u003cVERSION\u003e\"\n[\n    \"windows-x64\",\n    \"windows-x86\",\n    \"linux-x64\",\n    \"linux-x86\",\n    \"linux-arm\",\n    \"linux-arm64\",\n    \"osx-x64\",\n    \"osx-arm64\"\n].forEach { target -\u003e\n    runtimeOnly \"dev.deftu:copycat-natives-$target:\u003cVERSION\u003e\"\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003eKotlin (.gradle.kts)\u003c/summary\u003e\n\n```gradle\nimplementation(\"dev.deftu:copycat:\u003cVERSION\u003e\")\nlistOf(\n    \"windows-x64\",\n    \"windows-x86\",\n    \"linux-x64\",\n    \"linux-x86\",\n    \"linux-arm\",\n    \"linux-arm64\",\n    \"os-x-x64\",\n    \"os-x-arm64\"\n).forEach { target -\u003e\n    runtimeOnly(\"dev.deftu:copycat-natives-$target:\u003cVERSION\u003e\")\n}\n```\n\n\u003c/details\u003e\n\n### Operating system \u0026 architecture support\n\n- Windows x64\n- Windows x86\n- Linux x64\n- Linux x86\n- Linux ARM (Android)\n- Linux ARM64 (Android)\n- macOS x64 (Intel)\n- macOS ARM64 (Apple Silicon)\n\n### Interacting with the clipboard\n\nA user-facing API is provided via `dev.deftu.clipboard.Clipboard`, pointing to the native methods provided by the native library by default.\n\n```java\nimport dev.deftu.clipboard.Clipboard;\n\npublic class Main {\n    public static void main(String[] args) {\n        Clipboard clipboard = Clipboard.getInstance();\n        clipboard.setString(\"Hello, world!\");\n        System.out.println(clipboard.getString());\n    }\n}\n```\n\n### Native loading\n\nBy default, when a `Clipboard` instance is created, it will make an attempt to load the default native library provided by Copycat. If you'd rather load the natives later, or provide your own, you can do so by marking the native as loaded using `Clipboard#markNativeLoaded()`.\n\n```java\nimport dev.deftu.clipboard.Clipboard;\n\npublic class Main {\n    public static void main(String[] args) {\n        Clipboard.markNativeLoaded();\n        Clipboard clipboard = Clipboard.getInstance();\n        clipboard.setString(\"Hello, world!\"); // Throws an UnsatisfiedLinkError! There are no natives loaded.\n        System.out.println(clipboard.getString());\n    }\n}\n```\n\n### Custom natives\n\nIf you'd like to provide your own natives, you can do so by using the `Clipboard#loadAndMarkNative(String)` method. Alternatively, you can separately use the `Clipboard#loadNative(String)` method to load the native without marking it as loaded and then use `Clipboard#markNativeLoaded()` to mark it as loaded.\n\n```java\nimport dev.deftu.clipboard.Clipboard;\n\npublic class Main {\n    public static void main(String[] args) {\n        Clipboard.loadAndMarkNative(\"path/to/native\");\n        Clipboard clipboard = Clipboard.getInstance();\n        clipboard.setString(\"Hello, world!\");\n        System.out.println(clipboard.getString());\n    }\n}\n```\n\nOR\n\n```java\nimport dev.deftu.clipboard.Clipboard;\n\npublic class Main {\n    public static void main(String[] args) {\n        Clipboard.loadNative(\"path/to/native\");\n        Clipboard.markNativeLoaded();\n        Clipboard clipboard = Clipboard.getInstance();\n        clipboard.setString(\"Hello, world!\");\n        System.out.println(clipboard.getString());\n    }\n}\n```\n\n### Working with images\n\nCopycat provides a way to interact with images on the clipboard. This is done through the `dev.deftu.clipboard.ClipboardImage` class.\n\n```java\nimport dev.deftu.clipboard.Clipboard;\nimport dev.deftu.clipboard.ClipboardImage;\n\npublic class Main {\n    public static void main(String[] args) {\n        Clipboard clipboard = Clipboard.getInstance();\n        ClipboardImage image = clipboard.getImage();\n        System.out.println(image.getWidth() + \"x\" + image.getHeight());\n    }\n}\n```\n\nTo keep the library agnostic of image libraries, the image is represented simply as a byte array, width and height.\n\n### AWT BufferedImage support\n\nIf you're using AWT's `BufferedImage`, Copycat provides an extension library to convert between `BufferedImage` and `ClipboardImage`.\n\n![Repository badge](https://maven.deftu.dev/api/badge/latest/releases/dev/deftu/copycat-image-awt?color=C33F3F\u0026name=Copycat+Image+AWT)\n\n\u003cdetails\u003e\n    \u003csummary\u003eGroovy (.gradle)\u003c/summary\u003e\n\n```gradle\nimplementation \"dev.deftu:copycat-image-awt:\u003cVERSION\u003e\"\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003eKotlin (.gradle.kts)\u003c/summary\u003e\n\n```gradle\nimplementation(\"dev.deftu:copycat-image-awt:\u003cVERSION\u003e\")\n```\n\n\u003c/details\u003e\n\n```java\nimport dev.deftu.clipboard.Clipboard;\nimport dev.deftu.clipboard.ClipboardImage;\nimport dev.deftu.clipboard.BufferedClipboardImage;\n\nimport java.awt.image.BufferedImage;\nimport javax.imageio.ImageIO;\n\npublic class Main {\n    public static void main(String[] args) {\n        Clipboard clipboard = Clipboard.getInstance();\n        ClipboardImage image = clipboard.getImage();\n        \n        BufferedImage bufferedImage = BufferedClipboardImage.toBufferedImage(image);\n        ClipboardImage clipboardImage = BufferedClipboardImage.toClipboardImage(bufferedImage);\n        \n        System.out.println(bufferedImage.getWidth() + \"x\" + bufferedImage.getHeight());\n        \n        try {\n            ImageIO.write(bufferedImage, \"png\", new File(\"image.png\"));\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n    }\n}\n```\n\n---\n\n\n**This project is licensed under [LGPL-3.0][lgpl]**\\\n**\u0026copy; 2024 Deftu**\n\n[lgpl]: https://www.gnu.org/licenses/lgpl-3.0.en.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeftu%2Fcopycat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeftu%2Fcopycat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeftu%2Fcopycat/lists"}