{"id":15031485,"url":"https://github.com/apache/plc4x","last_synced_at":"2025-05-13T20:16:31.909Z","repository":{"id":37333905,"uuid":"114859883","full_name":"apache/plc4x","owner":"apache","description":"PLC4X The Industrial IoT adapter","archived":false,"fork":false,"pushed_at":"2025-05-13T06:59:12.000Z","size":168486,"stargazers_count":1396,"open_issues_count":69,"forks_count":436,"subscribers_count":67,"default_branch":"develop","last_synced_at":"2025-05-13T07:30:50.491Z","etag":null,"topics":["ab","ads","bacnet","c","can","cpp","ethernetip","firmata","go","iot","java","knx","modbus","net","opcua","python","s7","siemens"],"latest_commit_sha":null,"homepage":"https://plc4x.apache.org/","language":"Java","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/apache.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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":"2017-12-20T08:00:09.000Z","updated_at":"2025-05-13T06:23:31.000Z","dependencies_parsed_at":"2023-12-30T19:23:46.558Z","dependency_job_id":"67768901-d9c8-4fce-a3a9-4dcdb77d748b","html_url":"https://github.com/apache/plc4x","commit_stats":{"total_commits":8125,"total_committers":114,"mean_commits":71.2719298245614,"dds":0.6555076923076923,"last_synced_commit":"5dbcd54e4c42d77d49748970d289511dd0c25e6a"},"previous_names":["apache/incubator-plc4x"],"tags_count":36,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fplc4x","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fplc4x/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fplc4x/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fplc4x/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apache","download_url":"https://codeload.github.com/apache/plc4x/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254020652,"owners_count":22000756,"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":["ab","ads","bacnet","c","can","cpp","ethernetip","firmata","go","iot","java","knx","modbus","net","opcua","python","s7","siemens"],"created_at":"2024-09-24T20:15:45.895Z","updated_at":"2025-05-13T20:16:31.891Z","avatar_url":"https://github.com/apache.png","language":"Java","readme":"\u003c!--\n  Licensed to the Apache Software Foundation (ASF) under one\n  or more contributor license agreements.  See the NOTICE file\n  distributed with this work for additional information\n  regarding copyright ownership.  The ASF licenses this file\n  to you under the Apache License, Version 2.0 (the\n  \"License\"); you may not use this file except in compliance\n  with the License.  You may obtain a copy of the License at\n\n      https://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing,\n  software distributed under the License is distributed on an\n  \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n  KIND, either express or implied.  See the License for the\n  specific language governing permissions and limitations\n  under the License.\n  --\u003e\n[![Maven central](https://img.shields.io/maven-central/v/org.apache.plc4x/plc4j-api.svg)](https://img.shields.io/maven-central/v/org.apache.plc4x/plc4j-api.svg)\n[![License](https://img.shields.io/github/license/apache/plc4x.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n[![Jenkins Build Status](https://ci-builds.apache.org/job/PLC4X/job/PLC4X/job/develop/badge/icon)](https://ci-builds.apache.org/job/PLC4X/job/PLC4X/job/develop/)\n[![Last commit](https://img.shields.io/github/last-commit/apache/plc4x.svg)]()\n[![Twitter](https://img.shields.io/twitter/follow/ApachePLC4X.svg?label=Follow\u0026style=social)](https://twitter.com/ApachePLC4X)\n[![Java Platform compatibility](https://github.com/apache/plc4x/actions/workflows/java-platform.yml/badge.svg)](https://github.com/apache/plc4x/actions/workflows/java-platform.yml)\n[![Go Platform compatibility](https://github.com/apache/plc4x/actions/workflows/go-platform.yml/badge.svg)](https://github.com/apache/plc4x/actions/workflows/go-platform.yml)\n[![C Platform compatibility](https://github.com/apache/plc4x/actions/workflows/c-platform.yml/badge.svg)](https://github.com/apache/plc4x/actions/workflows/c-platform.yml)\n[![Python Platform Compatibility](https://github.com/apache/plc4x/actions/workflows/python-platform.yml/badge.svg)](https://github.com/apache/plc4x/actions/workflows/python-platform.yml)\n\n\u003ch1 align=\"center\"\u003e\n  \u003cbr\u003e\n   \u003ca href=\"https://plc4x.apache.org\"\u003e\u003cimg src=\"https://plc4x.apache.org/images/apache_plc4x_logo.png\" \n   alt=\"Apache PLC4X Logo\" title=\"Apache PLC4X Logo\"/\u003e\u003c/a\u003e\n  \u003cbr\u003e\n\u003c/h1\u003e\n\u003ch3 align=\"center\"\u003eThe Industrial IoT adapter\u003c/h3\u003e\n\u003ch4 align=\"center\"\u003eThe ultimate goal of PLC4X is to create a set of libraries, that allow unified access to any type of\n PLC\u003c/h4\u003e\n\n***\n\n# Table of contents\n\n* [About PLC4X](#about-apache-plc4x)\n* [Getting Started](#getting-started)\n* [Developers](#developers)\n* [Community](#community)\n* [Contributing](#contributing)\n* [Licensing](#licensing)\n\n***\n\n## About Apache PLC4X\n\nApache PLC4X is an effort to create a set of libraries for communicating with industrial grade programmable logic controllers (PLCs) in a uniform way.\nWe are planning on shipping libraries for usage in:\n\n1. Java\n2. Go\n3. C (not ready for usage)\n4. Python (not ready for usage)\n5. C# (.Net) (not ready for usage - abandoned)\n\nPLC4X also integrates with other Apache projects, such as:\n\n* [Apache Calcite](https://calcite.apache.org/)\n* [Apache Camel](https://camel.apache.org/)\n* [Apache Kafka-Connect](https://kafka.apache.org)\n* [Apache Karaf](https://karaf.apache.org/)\n* [Apache NiFi](https://nifi.apache.org/)\n\nAnd brings stand-alone (Java) utils such as:\n\n* OPC-UA Server: Enables you to communicate with legacy devices using PLC4X with OPC-UA.\n* PLC4X Server: Enables you to communicate with a central PLC4X Server which then communicates with devices via PLC4X.\n\nIt also provides (Java) tools for usage inside an application:\n\n* Connection Cache: New implementation of our framework for re-using and sharing PLC-connections\n* OPM: Object-Plc-Mapping: Allows binding PLC fields to properties in java POJOs similar to JPA\n* Scraper: Utility to do scheduled and repeated data collection.\n\n## Getting started\n\nDepending on the programming language, the usage will differ, therefore please go to the\n[Getting Started](https://plc4x.apache.org/plc4x/latest/users/getting-started/plc4j.html) on the PLC4X website to look up\nthe language of choice.\n\n### Java\n\nNOTE: Currently the minimum Java version is `Java 11`, and we have tested it up to `Java 24`. \nThe project is currently split up into 3 repositories, the `plc4x-extras` repository.  \nWhen building the `plc4x-extras` repo, in order to be able to build all parts, at least `Java 17` is required.\n\nSee the PLC4J user guide on the website to start using PLC4X in your Java application:\n[https://plc4x.apache.org/plc4x/latest/users/getting-started/plc4j.html](https://plc4x.apache.org/users/getting-started/plc4j.html)\n\n## Developers\n\n### Environment\n\nCurrently, the project is configured to require the following software:\n\n1. Java 11 JDK: For running Maven in general as well as compiling the Java and Scala modules `JAVA_HOME` configured to point to that.\n2. Git (even when working on the source distribution)\n3. (Optional, for running all tests) `libpcap/Npcap` for raw socket tests in Java or use of `passive-mode` drivers\n4. (Optional, for running all tests) `Docker` for running some tests making use of `Testcontainers`\n5. (Optional, for building the website) [Graphviz](https://www.graphviz.org/) : For generating the graphs in the documentation\n\nWARNING: The code generation uses a utility which requires some additional VM settings. When running a build from the root, the settings in the `.mvn/jvm.config` are automatically applied. When building only a sub module, it is important to set the vm args: `--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED`. \nIn Intellij for example set these in the IDE settings under: Preferences | Build, Execution, Deployment | Build Tools | Maven | Runner: JVM Options.\n\nThe when doing a build, we automatically run a prerequisite check and fail the build with an explanation, if not all requirements are meet.\n\nA more detailed description is available on our website:\n\nhttps://plc4x.apache.org/plc4x/latest/developers/preparing/index.html\n\n#### For building `PLC4C` we also need:\n\nAll requirements are retrieved by the build itself\n\n#### For building `PLC4Go` we also need:\n\nAll requirements are retrieved by the build itself\n\n#### For building `PLC4Py` we also need:\n\n1. Python 3.8 or higher\n2. Python pyenv\n\n#### For building `PLC4Net` we also need:\n\n1. DotNet SDK 6.0 or above\n\n### Building with Docker\n\nPart of the build requires quite a bit of ram. \nBefore running the Docker build, please ensure that the Docker runtime has at least 12GB of ram available. \n\nIf you don't want to bother setting up the environment on your normal system, and you have Docker installed, you can also build everything in a Docker container:\n\n```\n   docker compose up\n```\n\nThis will build a local Docker container able to build all parts of PLC4X and will run a maven build of the local directory inside this container.\n\nThe default build will run a local release-build, so it can also be used to ensure reproducible builds when releasing.\n\nPer default will it store files locally:\n- Downloaded maven artifacts will go to `out/.repository`\n\nThe reason for this is, that otherwise the artifacts would be packaged in with the source-release artifact, resulting in a 12GB or more zip archive.\nHowever, saving it in the main `target` directory would make the build delete the local repo every time a `mvn clean` is run.\nThe `out` directory however is excluded per default from the assembly descriptor, and therefore it is not included in the source zim.\n\n### Getting Started\n\nYou must have at least Java 11 installed on your system and connectivity to Maven Central\n(for downloading external third party dependencies). Maven 3.6 is required to build, so be sure it's installed and available on your system.\n\nNOTE: There is a convenience Maven-Wrapper installed in the repo, when used, this automatically downloads and installs Maven. If you want to use this, please use `./mvnw` or `mvnw` instead of the normal `mvn` command.\n\nNOTE: When running from sources-zip, the `mvnw` might not be executable on `Mac` or `Linux`. This can easily be fixed by running the following command in the directory.\n\n```\n$ chmod +x mvnw\n```\n\nNOTE: If you are working on a `Windows` system, please use `mvnw.cmd` instead of `./mvnw` in the following build commands.\n\nBuild PLC4X Java jars and install them in your local maven repository\n\n```\n./mvnw -P with-java install\n```\n\nYou can now construct Java applications that use PLC4X. The PLC4X examples\nare a good place to start and are available inside the `plc4j/examples`\ndirectory, which is part of the `plc4x-extras` repository.\n\nThe `Go` drivers can be built by enabling the `with-go` profile:\n\n```\n./mvnw -P with-go install \n```\n\nThe `C# / .Net` implementation is currently in a `work in progress` state.\nIn order to be able to build the `C# / .Net` module, you currently need to activate the:\n`with-dotnet` profiles.\n\n```\n./mvnw -P with-dotnet install\n```\n\nThe Python implementation is currently in a somewhat unclean state and still needs refactoring.\nIn order to be able to build the Python module, you currently need to activate the:\n`with-python` profiles.\n\n```\n./mvnw -P with-python install\n```\n\nIn order to build everything the following command should work:\n\n```\n./mvnw -P with-c,with-dotnet,with-go,with-java,with-python,enable-all-checks install\n```\n\n## Community\n\nJoin the PLC4X community by using one of the following channels. We'll be glad to help!\n\n### Mailing Lists\n\nSubscribe to the following mailing lists:\n* Apache PLC4X Developer List: [dev-subscribe@plc4x.apache.org](mailto:dev-subscribe@plc4x.apache.org)\n* Apache PLC4X Commits List: [commits-subscribe@plc4x.apache.org](mailto:commits-subscribe@plc4x.apache.org)\n* Apache PLC4X Issue Notification List: [issues-subscribe@plc4x.apache.org](mailto:issues-subscribe@plc4x.apache.org)\n\n### LinkedIn\n\nGet the latest PLC4X news on LinkedIn: [https://www.linkedin.com/company/apache-plc4x/posts](https://www.linkedin.com/company/apache-plc4x/posts)\n\n## Contributing\n\nThere are multiple forms in which you can become involved with the PLC4X project.\n\nThese are, but are not limited to:\n\n* Providing information and insights\n* Testing PLC4X and providing feedback\n* Submitting Pull Requests\n* Filing Bug-Reports\n* Active communication on our mailing lists\n* Promoting the project (articles, blog posts, talks at conferences)\n* Documentation\n\nWe are a very friendly bunch so don’t be afraid to step forward.\nIf you'd like to contribute to PLC4X, have a look at our\n[contribution guide](https://plc4x.apache.org/plc4x/latest/developers/contributing.html)!\n\n## Licensing\n\nApache PLC4X is released under the Apache License Version 2.0.\n","funding_links":[],"categories":["Industrial \u0026 SCADA"],"sub_categories":["FreeSWITCH"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapache%2Fplc4x","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapache%2Fplc4x","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapache%2Fplc4x/lists"}