Home
Softono
a

apache

Professional software vendor delivering innovative solutions on the Softono platform. Specialized in both open-source and proprietary software development.

Total Products
17

Software by apache

Answer
Open Source

Answer

<a href="https://answer.apache.org"> <img alt="logo" src="docs/img/logo.svg" height="99px"> </a> # Apache Answer - Build Q&A platform A Q&A platform software for teams at any scales. Whether it’s a community forum, help center, or knowledge management platform, you can always count on Answer. To learn more about the project, visit [answer.apache.org](https://answer.apache.org). [![LICENSE](https://img.shields.io/github/license/apache/answer)](https://github.com/apache/answer/blob/main/LICENSE) [![Language](https://img.shields.io/badge/language-go-blue.svg)](https://golang.org/) [![Language](https://img.shields.io/badge/language-react-blue.svg)](https://reactjs.org/) [![Go Report Card](https://goreportcard.com/badge/github.com/apache/answer)](https://goreportcard.com/report/github.com/apache/answer) [![Discord](https://img.shields.io/badge/discord-chat-5865f2?logo=discord&logoColor=f5f5f5)](https://discord.gg/Jm7Y4cbUej) ## Screenshots ![screenshot](docs/img/screenshot.png) ## Quick start ### Running with docker ```bash docker run -d -p 9080:80 -v answer-data:/data --name answer apache/answer:2.0.1 ``` For more information, see [Installation](https://answer.apache.org/docs/installation). ### Plugins Answer provides a plugin system for developers to create custom plugins and expand Answer’s features. You can find the [plugin documentation here](https://answer.apache.org/community/plugins). We value your feedback and suggestions to improve our documentation. If you have any comments or questions, please feel free to contact us. We’re excited to see what you can create using our plugin system! You can also check out the [plugins here](https://answer.apache.org/plugins). ## Building from Source ### Prerequisites - Golang >= 1.23 - Node.js >= 20 - pnpm >= 9 - [mockgen](https://github.com/uber-go/mock?tab=readme-ov-file#installation) >= 0.6.0 - [wire](https://github.com/google/wire/) >= 0.5.0 ### Build ```bash # Install wire and mockgen for building. You can run `make check` to check if they are installed. $ make generate # Install frontend dependencies and build $ make ui # Install backend dependencies and build $ make build ``` ## Contributing Contributions are always welcome! See [CONTRIBUTING](https://answer.apache.org/community/contributing) for ways to get started. ## License [Apache License 2.0](https://github.com/apache/answer/blob/main/LICENSE)

Help Desk & Support Community & Forums
15.5K Github Stars
Apache Airflow
Open Source

Apache Airflow

<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- START Apache Airflow, please keep comment here to allow auto update of PyPI readme.md --> # Apache Airflow | Category | Badges | |------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | License | [![License](https://img.shields.io/:license-Apache%202-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0.txt) | | PyPI | [![PyPI version](https://badge.fury.io/py/apache-airflow.svg)](https://badge.fury.io/py/apache-airflow) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/apache-airflow.svg)](https://pypi.org/project/apache-airflow/) [![PyPI - Downloads](https://img.shields.io/pypi/dm/apache-airflow)](https://pypi.org/project/apache-airflow/) | | Containers | [![Docker Pulls](https://img.shields.io/docker/pulls/apache/airflow.svg)](https://hub.docker.com/r/apache/airflow) [![Docker Stars](https://img.shields.io/docker/stars/apache/airflow.svg)](https://hub.docker.com/r/apache/airflow) [![Artifact HUB](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/apache-airflow)](https://artifacthub.io/packages/search?repo=apache-airflow) | | Community | [![Contributors](https://img.shields.io/github/contributors/apache/airflow)](https://github.com/apache/airflow/graphs/contributors) [![Slack Status](https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack&style=social)](https://s.apache.org/airflow-slack) ![Commit Activity](https://img.shields.io/github/commit-activity/m/apache/airflow) [![LFX Health Score](https://insights.linuxfoundation.org/api/badge/health-score?project=apache-airflow)](https://insights.linuxfoundation.org/project/apache-airflow) | | Dev tools | [![prek](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/j178/prek/master/docs/assets/badge-v0.json)](https://github.com/j178/prek) | | Version | Build Status | |---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| | Main | [![Tests AMD main](https://github.com/apache/airflow/actions/workflows/ci-amd.yml/badge.svg)](https://github.com/apache/airflow/actions/workflows/ci-amd.yml) [![Tests ARM main](https://github.com/apache/airflow/actions/workflows/ci-arm.yml/badge.svg)](https://github.com/apache/airflow/actions/workflows/ci-arm.yml) | | 3.x | [![Tests AMD 3.2](https://github.com/apache/airflow/actions/workflows/ci-amd.yml/badge.svg?branch=v3-2-test)](https://github.com/apache/airflow/actions/workflows/ci-amd.yml) [![Tests ARM 3.2](https://github.com/apache/airflow/actions/workflows/ci-arm.yml/badge.svg?branch=v3-2-test)](https://github.com/apache/airflow/actions/workflows/ci-arm.yml) | <picture width="500"> <img src="https://github.com/apache/airflow/blob/19ebcac2395ef9a6b6ded3a2faa29dc960c1e635/docs/apache-airflow/img/logos/wordmark_1.png?raw=true" alt="Apache Airflow logo" /> </picture> [Apache Airflow](https://airflow.apache.org/docs/apache-airflow/stable/) (or simply Airflow) is a platform to programmatically author, schedule, and monitor workflows. When workflows are defined as code, they become more maintainable, versionable, testable, and collaborative. Use Airflow to author workflows (Dags) that orchestrate tasks. The Airflow scheduler executes your tasks on an array of workers while following the specified dependencies. Rich command line utilities make performing complex surgeries on Dags a snap. The rich user interface makes it easy to visualize pipelines running in production, monitor progress, and troubleshoot issues when needed. <!-- END Apache Airflow, please keep comment here to allow auto update of PyPI readme.md --> <!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --> **Table of contents** - [Project Focus](#project-focus) - [Principles](#principles) - [Requirements](#requirements) - [Getting started](#getting-started) - [Installing from PyPI](#installing-from-pypi) - [Installation](#installation) - [Official source code](#official-source-code) - [Convenience packages](#convenience-packages) - [User Interface](#user-interface) - [Semantic versioning](#semantic-versioning) - [Version Life Cycle](#version-life-cycle) - [Support for Python and Kubernetes versions](#support-for-python-and-kubernetes-versions) - [Base OS support for reference Airflow images](#base-os-support-for-reference-airflow-images) - [Approach to dependencies of Airflow](#approach-to-dependencies-of-airflow) - [Contributing](#contributing) - [Community standards](#community-standards) - [Agent-assisted contribution (apache-steward)](#agent-assisted-contribution-apache-steward) - [Voting Policy](#voting-policy) - [Who uses Apache Airflow?](#who-uses-apache-airflow) - [Who maintains Apache Airflow?](#who-maintains-apache-airflow) - [What goes into the next release?](#what-goes-into-the-next-release) - [Can I use the Apache Airflow logo in my presentation?](#can-i-use-the-apache-airflow-logo-in-my-presentation) - [Links](#links) - [Sponsors](#sponsors) <!-- END doctoc generated TOC please keep comment here to allow auto update --> ## Project Focus Airflow works best with workflows that are mostly static and slowly changing. When the Dag structure is similar from one run to the next, it clarifies the unit of work and continuity. Other similar projects include [Luigi](https://github.com/spotify/luigi), [Oozie](https://oozie.apache.org/) and [Azkaban](https://azkaban.github.io/). Airflow is commonly used to process data, but has the opinion that tasks should ideally be idempotent (i.e., results of the task will be the same, and will not create duplicated data in a destination system), and should not pass large quantities of data from one task to the next (though tasks can pass metadata using Airflow's [XCom feature](https://airflow.apache.org/docs/apache-airflow/stable/concepts/xcoms.html)). For high-volume, data-intensive tasks, a best practice is to delegate to external services specializing in that type of work. Airflow is not a streaming solution, but it is often used to process real-time data, pulling data off streams in batches. ## Principles - **Dynamic**: Pipelines are defined in code, enabling dynamic dag generation and parameterization. - **Extensible**: The Airflow framework includes a wide range of built-in operators and can be extended to fit your needs. - **Flexible**: Airflow leverages the [**Jinja**](https://jinja.palletsprojects.com) templating engine, allowing rich customizations. <!-- START Requirements, please keep comment here to allow auto update of PyPI readme.md --> ## Requirements Apache Airflow is tested with: | | Main version (dev) | Stable version (3.2.0) | Stable version (2.11.2) | |------------|------------------------------------|-------------------------------------|------------------------------| | Python | 3.10, 3.11, 3.12, 3.13, 3.14 | 3.10, 3.11, 3.12, 3.13, 3.14 | 3.10, 3.11, 3.12 | | Platform | AMD64/ARM64 | AMD64/ARM64 | AMD64/ARM64(\*) | | Kubernetes | 1.30, 1.31, 1.32, 1.33, 1.34, 1.35 | 1.30, 1.31, 1.32, 1.33, 1.34, 1.35 | 1.26, 1.27, 1.28, 1.29, 1.30 | | PostgreSQL | 14, 15, 16, 17, 18 | 14, 15, 16, 17, 18 | 12, 13, 14, 15, 16 | | MySQL | 8.0, 8.4, Innovation | 8.0, 8.4, Innovation | 8.0, Innovation | | SQLite | 3.15.0+ | 3.15.0+ | 3.15.0+ | \* Experimental **Note**: MariaDB is not tested/recommended. **Note**: SQLite is used in Airflow tests. Do not use it in production. We recommend using the latest stable version of SQLite for local development. **Note**: Airflow currently can be run on POSIX-compliant Operating Systems. For development, it is regularly tested on fairly modern Linux Distros and recent versions of macOS. On Windows you can run it via WSL2 (Windows Subsystem for Linux 2) or via Linux Containers. The work to add Windows support is tracked via [#10388](https://github.com/apache/airflow/issues/10388), but it is not a high priority. You should only use Linux-based distros as "Production" execution environment as this is the only environment that is supported. The only distro that is used in our CI tests and that is used in the [Community managed DockerHub image](https://hub.docker.com/p/apache/airflow) is `Debian Bookworm`. <!-- END Requirements, please keep comment here to allow auto update of PyPI readme.md --> <!-- START Getting started, please keep comment here to allow auto update of PyPI readme.md --> ## Getting started Visit the official Airflow website documentation (latest **stable** release) for help with [installing Airflow](https://airflow.apache.org/docs/apache-airflow/stable/installation/), [getting started](https://airflow.apache.org/docs/apache-airflow/stable/start.html), or walking through a more complete [tutorial](https://airflow.apache.org/docs/apache-airflow/stable/tutorial/). > Note: If you're looking for documentation for the main branch (latest development branch): you can find it on [s.apache.org/airflow-docs](https://s.apache.org/airflow-docs/). For more information on Airflow Improvement Proposals (AIPs), visit the [Airflow Wiki](https://cwiki.apache.org/confluence/display/AIRFLOW/Airflow+Improvement+Proposals). Documentation for dependent projects like provider distributions, Docker image, Helm Chart, you'll find it in [the documentation index](https://airflow.apache.org/docs/). <!-- END Getting started, please keep comment here to allow auto update of PyPI readme.md --> <!-- START Installing from PyPI, please keep comment here to allow auto update of PyPI readme.md --> ## Installing from PyPI We publish Apache Airflow as `apache-airflow` package in PyPI. Installing it however might be sometimes tricky because Airflow is a bit of both a library and application. Libraries usually keep their dependencies open, and applications usually pin them, but we should do neither and both simultaneously. We decided to keep our dependencies as open as possible (in `pyproject.toml`) so users can install different versions of libraries if needed. This means that `pip install apache-airflow` will not work from time to time or will produce unusable Airflow installation. To have repeatable installation, however, we keep a set of "known-to-be-working" constraint files in the orphan `constraints-main` and `constraints-2-0` branches. We keep those "known-to-be-working" constraints files separately per major/minor Python version. You can use them as constraint files when installing Airflow from PyPI. Note that you have to specify correct Airflow tag/version/branch and Python versions in the URL. 1. Installing just Airflow: > Note: Only `pip` installation is currently officially supported. While it is possible to install Airflow with tools like [Poetry](https://python-poetry.org) or [pip-tools](https://pypi.org/project/pip-tools), they do not share the same workflow as `pip` - especially when it comes to constraint vs. requirements management. Installing via `Poetry` or `pip-tools` is not currently supported. If you wish to install Airflow using those tools, you should use the constraint files and convert them to the appropriate format and workflow that your tool requires. ```bash pip install 'apache-airflow==3.2.0' \ --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-3.2.0/constraints-3.10.txt" ``` 2. Installing with extras (i.e., postgres, google) ```bash pip install 'apache-airflow[postgres,google]==3.2.0' \ --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-3.2.0/constraints-3.10.txt" ``` For information on installing provider distributions, check [providers](http://airflow.apache.org/docs/apache-airflow-providers/index.html). <!-- END Installing from PyPI, please keep comment here to allow auto update of PyPI readme.md --> ## Installation For comprehensive instructions on setting up your local development environment and installing Apache Airflow, please refer to the [INSTALLING.md](INSTALLING.md) file. <!-- START Official source code, please keep comment here to allow auto update of PyPI readme.md --> ## Official source code Apache Airflow is an [Apache Software Foundation](https://www.apache.org) (ASF) project, and our official source code releases: - Follow the [ASF Release Policy](https://www.apache.org/legal/release-policy.html) - Can be downloaded from [the ASF Distribution Directory](https://downloads.apache.org/airflow) - Are cryptographically signed by the release manager - Are officially voted on by the PMC members during the [Release Approval Process](https://www.apache.org/legal/release-policy.html#release-approval) Following the ASF rules, the source packages released must be sufficient for a user to build and test the release provided they have access to the appropriate platform and tools. <!-- END Official source code, please keep comment here to allow auto update of PyPI readme.md --> ## Convenience packages There are other ways of installing and using Airflow. Those are "convenience" methods - they are not "official releases" as stated by the `ASF Release Policy`, but they can be used by the users who do not want to build the software themselves. Those are - in the order of most common ways people install Airflow: - [PyPI releases](https://pypi.org/project/apache-airflow/) to install Airflow using standard `pip` tool - [Docker Images](https://hub.docker.com/r/apache/airflow) to install airflow via `docker` tool, use them in Kubernetes, Helm Charts, `docker-compose`, `docker swarm`, etc. You can read more about using, customizing, and extending the images in the [Latest docs](https://airflow.apache.org/docs/docker-stack/index.html), and learn details on the internals in the [images](https://airflow.apache.org/docs/docker-stack/index.html) document. - [Tags in GitHub](https://github.com/apache/airflow/tags) to retrieve the git project sources that were used to generate official source packages via git All those artifacts are not official releases, but they are prepared using officially released sources. Some of those artifacts are "development" or "pre-release" ones, and they are clearly marked as such following the ASF Policy. ## User Interface - **Dags**: Overview of all Dags in your environment. ![Dags](https://raw.githubusercontent.com/apache/airflow/main/airflow-core/docs/img/ui-dark/dags.png) - **Assets**: Overview of Assets with dependencies. ![Asset Dependencies](https://raw.githubusercontent.com/apache/airflow/main/airflow-core/docs/img/ui-dark/assets_graph.png) - **Grid**: Grid representation of a Dag that spans across time. ![Grid](https://raw.githubusercontent.com/apache/airflow/main/airflow-core/docs/img/ui-dark/grid.png) - **Graph**: Visualization of a Dag's dependencies and their current status for a specific run. ![Graph](https://raw.githubusercontent.com/apache/airflow/main/airflow-core/docs/img/ui-dark/graph.png) - **Home**: Summary statistics of your Airflow environment. ![Home](https://raw.githubusercontent.com/apache/airflow/main/airflow-core/docs/img/ui-dark/home.png) - **Backfill**: Backfilling a Dag for a specific date range. ![Backfill](https://raw.githubusercontent.com/apache/airflow/main/airflow-core/docs/img/ui-dark/backfill.png) - **Code**: Quick way to view source code of a Dag. ![Code](https://raw.githubusercontent.com/apache/airflow/main/airflow-core/docs/img/ui-dark/code.png) ## Semantic versioning As of Airflow 2.0.0, we support a strict [SemVer](https://semver.org/) approach for all packages released. There are few specific rules that we agreed to that define details of versioning of the different packages: * **Airflow**: SemVer rules apply to core airflow only (excludes any changes to providers). Changing limits for versions of Airflow dependencies is not a breaking change on its own. * **Airflow Providers**: SemVer rules apply to changes in the particular provider's code only. SemVer MAJOR and MINOR versions for the packages are independent of the Airflow version. For example, `google 4.1.0` and `amazon 3.1.1` providers can happily be installed with `Airflow 2.1.2`. If there are limits of cross-dependencies between providers and Airflow packages, they are present in providers as `install_requires` limitations. We aim to keep backwards compatibility of providers with all previously released Airflow 2 versions but there will sometimes be breaking changes that might make some, or all providers, have minimum Airflow version specified. * **Airflow Helm Chart**: SemVer rules apply to changes in the chart only. SemVer MAJOR and MINOR versions for the chart are independent of the Airflow version. We aim to keep backwards compatibility of the Helm Chart with all released Airflow 2 versions, but some new features might only work starting from specific Airflow releases. We might however limit the Helm Chart to depend on minimal Airflow version. * **Airflow API clients**: Their versioning is independent from Airflow versions. They follow their own SemVer rules for breaking changes and new features - which for example allows to change the way we generate the clients. ## Version Life Cycle Apache Airflow version life cycle: <!-- This table is automatically updated by prek scripts/ci/prek/supported_versions.py --> <!-- Beginning of auto-generated table --> | Version | Current Patch/Minor | State | First Release | Limited Maintenance | EOL/Terminated | |-----------|-----------------------|-------------|-----------------|-----------------------|------------------| | 3 | 3.2.2 | Maintenance | Apr 22, 2025 | TBD | TBD | | 2 | 2.11.2 | EOL | Dec 17, 2020 | Oct 22, 2025 | Apr 22, 2026 | | 1.10 | 1.10.15 | EOL | Aug 27, 2018 | Dec 17, 2020 | June 17, 2021 | | 1.9 | 1.9.0 | EOL | Jan 03, 2018 | Aug 27, 2018 | Aug 27, 2018 | | 1.8 | 1.8.2 | EOL | Mar 19, 2017 | Jan 03, 2018 | Jan 03, 2018 | | 1.7 | 1.7.1.2 | EOL | Mar 28, 2016 | Mar 19, 2017 | Mar 19, 2017 | <!-- End of auto-generated table --> Limited support versions will be supported with security and critical bug fix only. EOL versions will not get any fixes nor support. We always recommend that all users run the latest available minor release for whatever major version is in use. We **highly** recommend upgrading to the latest Airflow major release at the earliest convenient time and before the EOL date. ## Support for Python and Kubernetes versions As of Airflow 2.0, we agreed to certain rules we follow for Python and Kubernetes support. They are based on the official release schedule of Python and Kubernetes, nicely summarized in the [Python Developer's Guide](https://devguide.python.org/#status-of-python-branches) and [Kubernetes version skew policy](https://kubernetes.io/docs/setup/release/version-skew-policy/). 1. We drop support for Python and Kubernetes versions when they reach EOL. Except for Kubernetes, a version stays supported by Airflow if two major cloud providers still provide support for it. We drop support for those EOL versions in main right after EOL date, and it is effectively removed when we release the first new MINOR (Or MAJOR if there is no new MINOR version) of Airflow. For example, for Python 3.10 it means that we will drop support in main right after 27.06.2023, and the first MAJOR or MINOR version of Airflow released after will not have it. 2. We support a new version of Python/Kubernetes in main after they are officially released, as soon as we make them work in our CI pipeline (which might not be immediate due to dependencies catching up with new versions of Python mostly) we release new images/support in Airflow based on the working CI setup. 3. This policy is best-effort which means there may be situations where we might terminate support earlier if circumstances require it. ## Base OS support for reference Airflow images The Airflow Community provides conveniently packaged container images that are published whenever we publish an Apache Airflow release. Those images contain: * Base OS with necessary packages to install Airflow (stable Debian OS) * Base Python installation in versions supported at the time of release for the MINOR version of Airflow released (so there could be different versions for 2.3 and 2.2 line for example) * Libraries required to connect to supported Databases (again the set of databases supported depends on the MINOR version of Airflow) * Predefined set of popular providers (for details see the [Dockerfile](https://raw.githubusercontent.com/apache/airflow/main/Dockerfile)). * Possibility of building your own, custom image where the user can choose their own set of providers and libraries (see [Building the image](https://airflow.apache.org/docs/docker-stack/build.html)) * In the future Airflow might also support a "slim" version without providers nor database clients installed The version of the base OS image is the stable version of Debian. Airflow supports using all currently active stable versions - as soon as all Airflow dependencies support building, and we set up the CI pipeline for building and testing the OS version. Approximately 6 months before the end-of-regular support of a previous stable version of the OS, Airflow switches the images released to use the latest supported version of the OS. For example switch from ``Debian Bullseye`` to ``Debian Bookworm`` has been implemented before 2.8.0 release in October 2023 and ``Debian Bookworm`` will be the only option supported as of Airflow 2.10.0. Users will continue to be able to build their images using stable Debian releases until the end of regular support and building and verifying of the images happens in our CI but no unit tests were executed using this image in the `main` branch. ## Approach to dependencies of Airflow Airflow has a lot of dependencies - direct and transitive, also Airflow is both - library and application, therefore our policies to dependencies has to include both - stability of installation of application, but also ability to install newer version of dependencies for those users who develop Dags. We developed the approach where `constraints` are used to make sure airflow can be installed in a repeatable way, while we do not limit our users to upgrade most of the dependencies. As a result we decided not to upper-bound version of Airflow dependencies by default, unless we have good reasons to believe upper-bounding them is needed because of importance of the dependency as well as risk it involves to upgrade specific dependency. We also upper-bound the dependencies that we know cause problems. The constraint mechanism of ours takes care about finding and upgrading all the non-upper bound dependencies automatically (providing that all the tests pass). Our `main` build failures will indicate in case there are versions of dependencies that break our tests - indicating that we should either upper-bind them or that we should fix our code/tests to account for the upstream changes from those dependencies. Whenever we upper-bound such a dependency, we should always comment why we are doing it - i.e. we should have a good reason why dependency is upper-bound. And we should also mention what is the condition to remove the binding. ### Approach for dependencies for Airflow Core Those dependencies are maintained in ``pyproject.toml``. There are few dependencies that we decided are important enough to upper-bound them by default, as they are known to follow predictable versioning scheme, and we know that new versions of those are very likely to bring breaking changes. We commit to regularly review and attempt to upgrade to the newer versions of the dependencies as they are released, but this is manual process. The important dependencies are: * `SQLAlchemy`: upper-bound to specific MINOR version (SQLAlchemy is known to remove deprecations and introduce breaking changes especially that support for different Databases varies and changes at various speed) * `Alembic`: it is important to handle our migrations in predictable and performant way. It is developed together with SQLAlchemy. Our experience with Alembic is that it very stable in MINOR version * `Flask`: We are using Flask as the back-bone of our web UI and API. We know major version of Flask are very likely to introduce breaking changes across those so limiting it to MAJOR version makes sense * `werkzeug`: the library is known to cause problems in new versions. It is tightly coupled with Flask libraries, and we should update them together * `celery`: Celery is a crucial component of Airflow as it used for CeleryExecutor (and similar). Celery [follows SemVer](https://docs.celeryq.dev/en/stable/contributing.html?highlight=semver#versions), so we should upper-bound it to the next MAJOR version. Also, when we bump the upper version of the library, we should make sure Celery Provider minimum Airflow version is updated. * `kubernetes`: Kubernetes is a crucial component of Airflow as it is used for the KubernetesExecutor (and similar). Kubernetes Python library [follows SemVer](https://github.com/kubernetes-client/python#compatibility), so we should upper-bound it to the next MAJOR version. Also, when we bump the upper version of the library, we should make sure Kubernetes Provider minimum Airflow version is updated. ### Approach for dependencies in Airflow Providers and extras The main part of the Airflow is the Airflow Core, but the power of Airflow also comes from a number of providers that extend the core functionality and are released separately, even if we keep them (for now) in the same monorepo for convenience. You can read more about the providers in the [Providers documentation](https://airflow.apache.org/docs/apache-airflow-providers/index.html). We also have set of policies implemented for maintaining and releasing community-managed providers as well as the approach for community vs. 3rd party providers in the [providers](https://github.com/apache/airflow/blob/main/PROVIDERS.rst) document. Those `extras` and `providers` dependencies are maintained in `provider.yaml` of each provider. By default, we should not upper-bound dependencies for providers, however each provider's maintainer might decide to add additional limits (and justify them with comment). <!-- START Contributing, please keep comment here to allow auto update of PyPI readme.md --> ## Contributing Want to help build Apache Airflow? Check out our [contributors' guide](https://github.com/apache/airflow/blob/main/contributing-docs/README.rst) for a comprehensive overview of how to contribute, including setup instructions, coding standards, and pull request guidelines. If you can't wait to contribute, and want to get started asap, check out the [contribution quickstart](https://github.com/apache/airflow/blob/main/contributing-docs/03a_contributors_quick_start_beginners.rst) here! Official Docker (container) images for Apache Airflow are described in [images](https://github.com/apache/airflow/blob/main/dev/breeze/doc/ci/02_images.md). <!-- END Contributing, please keep comment here to allow auto update of PyPI readme.md --> ## Community standards Everyone interacting with the Apache Airflow project — on GitHub, the mailing lists, Slack, the CWiki, or anywhere else — is expected to follow the [Code of Conduct](CODE_OF_CONDUCT.md). When repeated Code of Conduct breaches, spamming, abuse of project resources, or other sustained disruptive behaviour cannot be resolved through normal review and mentoring, the project applies the [Community escalation process](COMMUNITY_ESCALATION.md). It describes the steps maintainers and the PMC may take — from direct feedback, through closing PRs, up to PMC-level or ASF-Infrastructure-level blocks and reporting accounts to GitHub — and how affected contributors can appeal a decision by emailing the PMC at `[email protected]`. ## Agent-assisted contribution (apache-steward) This repo adopts the [`apache/airflow-steward`](https://github.com/apache/airflow-steward) framework via a snapshot mechanism. The framework provides maintainer-facing PR-management skills (`pr-management-triage`, `pr-management-code-review`, `pr-management-stats`, `pr-management-mentor`) that are exposed as agent skills in agent harnesses such as Claude Code. The framework is **not** vendored — it lives as a gitignored snapshot under `.apache-magpie/`, fetched on demand from the version pinned in the committed [`.apache-magpie.lock`](.apache-magpie.lock). The only framework artefact committed to this repo is the `magpie-setup` skill at [`.github/skills/magpie-setup/`](.github/skills/magpie-setup/); everything else is a gitignored symlink the setup skill wires up. A fresh clone needs the snapshot populated before any framework skill is invocable. In your agent harness, run: ```text /magpie-setup ``` (or follow [`.claude/skills/magpie-setup/`](.claude/skills/magpie-setup/)) to fetch the snapshot per the committed lock, scaffold the gitignored symlinks, and install the post-checkout hook that re-creates them on each worktree checkout. Adopter-specific modifications to framework workflows live in [`.apache-magpie-overrides/`](.apache-magpie-overrides/) (committed) — never edit the snapshot directly. Framework changes go via PR to [`apache/airflow-steward`](https://github.com/apache/airflow-steward). <!-- START Who uses Apache Airflow, please keep comment here to allow auto update of PyPI readme.md --> ## Voting Policy * Commits need a +1 vote from a committer who is not the author * When we do AIP voting, both PMC member's and committer's `+1s` are considered a binding vote. ## Who uses Apache Airflow? We know about around 500 organizations that are using Apache Airflow (but there are likely many more) [in the wild](https://github.com/apache/airflow/blob/main/INTHEWILD.md). If you use Airflow - feel free to make a PR to add your organisation to the list. <!-- END Who uses Apache Airflow, please keep comment here to allow auto update of PyPI readme.md --> <!-- START Who maintains Apache Airflow, please keep comment here to allow auto update of PyPI readme.md --> ## Who maintains Apache Airflow? Airflow is the work of the [community](https://github.com/apache/airflow/graphs/contributors), but the [core committers/maintainers](https://people.apache.org/committers-by-project.html#airflow) are responsible for reviewing and merging PRs as well as steering conversations around new feature requests. If you would like to become a maintainer, please review the Apache Airflow [committer requirements](https://github.com/apache/airflow/blob/main/COMMITTERS.rst#guidelines-to-become-an-airflow-committer). <!-- END Who maintains Apache Airflow, please keep comment here to allow auto update of PyPI readme.md --> ## What goes into the next release? Often you will see an issue that is assigned to specific milestone with Airflow version, or a PR that gets merged to the main branch and you might wonder which release the merged PR(s) will be released in or which release the fixed issues will be in. The answer to this is as usual - it depends on various scenarios. The answer is different for PRs and Issues. To add a bit of context, we are following the [Semver](https://semver.org/) versioning scheme as described in [Airflow release process](https://airflow.apache.org/docs/apache-airflow/stable/release-process.html). More details are explained in detail in this README under the [Semantic versioning](#semantic-versioning) chapter, but in short, we have `MAJOR.MINOR.PATCH` versions of Airflow. * `MAJOR` version is incremented in case of breaking changes * `MINOR` version is incremented when there are new features added * `PATCH` version is incremented when there are only bug-fixes and doc-only changes Generally we release `MINOR` versions of Airflow from a branch that is named after the MINOR version. For example `2.7.*` releases are released from `v2-7-stable` branch, `2.8.*` releases are released from `v2-8-stable` branch, etc. 1. Most of the time in our release cycle, when the branch for next `MINOR` branch is not yet created, all PRs merged to `main` (unless they get reverted), will find their way to the next `MINOR` release. For example if the last release is `2.7.3` and `v2-8-stable` branch is not created yet, the next `MINOR` release is `2.8.0` and all PRs merged to main will be released in `2.8.0`. However, some PRs (bug-fixes and doc-only changes) when merged, can be cherry-picked to current `MINOR` branch and released in the next `PATCHLEVEL` release. For example, if `2.8.1` is already released and we are working on `2.9.0dev`, then marking a PR with `2.8.2` milestone means that it will be cherry-picked to `v2-8-test` branch and released in `2.8.2rc1`, and eventually in `2.8.2`. 2. When we prepare for the next `MINOR` release, we cut new `v2-*-test` and `v2-*-stable` branch and prepare `alpha`, `beta` releases for the next `MINOR` version, the PRs merged to main will still be released in the next `MINOR` release until `rc` version is cut. This is happening because the `v2-*-test` and `v2-*-stable` branches are rebased on top of main when next `beta` and `rc` releases are prepared. For example, when we cut `2.10.0beta1` version, anything merged to main before `2.10.0rc1` is released, will find its way to 2.10.0rc1. 3. Then, once we prepare the first RC candidate for the MINOR release, we stop moving the `v2-*-test` and `v2-*-stable` branches and the PRs merged to main will be released in the next `MINOR` release. However, some PRs (bug-fixes and doc-only changes) when merged, can be cherry-picked to current `MINOR` branch and released in the next `PATCHLEVEL` release - for example when the last released version from `v2-10-stable` branch is `2.10.0rc1`, some of the PRs from main can be marked as `2.10.0` milestone by committers, the release manager will try to cherry-pick them into the release branch. If successful, they will be released in `2.10.0rc2` and subsequently in `2.10.0`. This also applies to subsequent `PATCHLEVEL` versions. When for example `2.10.1` is already released, marking a PR with `2.10.2` milestone will mean that it will be cherry-picked to `v2-10-stable` branch and released in `2.10.2rc1` and eventually in `2.10.2`. The final decision about cherry-picking is made by the release manager. Marking issues with a milestone is a bit different. Maintainers do not mark issues with a milestone usually, normally they are only marked in PRs. If PR linked to the issue (and "fixing it") gets merged and released in a specific version following the process described above, the issue will be automatically closed, no milestone will be set for the issue, you need to check the PR that fixed the issue to see which version it was released in. However, sometimes maintainers mark issues with specific milestone, which means that the issue is important to become a candidate to take a look when the release is being prepared. Since this is an Open-Source project, where basically all contributors volunteer their time, there is no guarantee that specific issue will be fixed in specific version. We do not want to hold the release because some issue is not fixed, so in such case release manager will reassign such unfixed issues to the next milestone in case they are not fixed in time for the current release. Therefore, the milestone for issue is more of an intent that it should be looked at, than promise it will be fixed in the version. More context and **FAQ** about the patchlevel release can be found in the [What goes into the next release](dev/WHAT_GOES_INTO_THE_NEXT_RELEASE.md) document in the `dev` folder of the repository. ## Can I use the Apache Airflow logo in my presentation? Yes! Be sure to abide by the Apache Foundation [trademark policies](https://www.apache.org/foundation/marks/#books) and the Apache Airflow [Brandbook](https://cwiki.apache.org/confluence/display/AIRFLOW/Brandbook). The most up-to-date logos are found in [this repo](https://github.com/apache/airflow/tree/main/airflow-core/docs/img/logos/) and on the Apache Software Foundation [website](https://www.apache.org/logos/about.html). ## Links - [Documentation](https://airflow.apache.org/docs/apache-airflow/stable/) - [Chat](https://s.apache.org/airflow-slack) - [Community Information](https://airflow.apache.org/community/) ## Sponsors The CI infrastructure for Apache Airflow has been sponsored by: <!-- Ordered by most recently "funded" --> <a href="https://astronomer.io"><img src="https://assets2.astronomer.io/logos/logoForLIGHTbackground.png" alt="astronomer.io" width="250px"></a> <a href="https://aws.amazon.com/opensource/"><img src="https://github.com/apache/airflow/blob/main/providers/amazon/docs/integration-logos/[email protected]?raw=true" alt="AWS OpenSource" width="130px"></a>

Cron & Job Scheduling Data Pipelines & ETL
45.8K Github Stars
Apache Solr
Open Source

Apache Solr

<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> # Welcome to the Apache Solr project! ----------------------------------- Solr is the blazing-fast, open source, multi-modal search platform built on [Apache Lucene](https://lucene.apache.org/). It powers full-text, vector, and geospatial search at many of the world's largest organizations. [![Build Status](https://ci-builds.apache.org/job/Solr/job/Solr-Artifacts-main/badge/icon?subject=Solr%20Artifacts)](https://ci-builds.apache.org/job/Solr/job/Solr-Artifacts-main/) [![Build Status](https://ci-builds.apache.org/job/Solr/job/Solr-Lint-main/badge/icon?subject=Solr%20Lint)](https://ci-builds.apache.org/job/Solr/job/Solr-Lint-main/) For a complete description of the Solr project, team composition, source code repositories, and other details, please see the Solr web site at https://solr.apache.org/ ## Download Downloads for Apache Solr distributions are available at https://solr.apache.org/downloads.html. ## Running Solr ### Installing Solr The Reference Guide contains an entire [Deployment Guide](https://solr.apache.org/guide/solr/latest/deployment-guide/system-requirements.html) to walk you through installing Solr. ### Running Solr in Docker You can run Solr in Docker via the [official image](https://hub.docker.com/_/solr). Learn more about [Solr in Docker](https://solr.apache.org/guide/solr/latest/deployment-guide/solr-in-docker.html) ### Running Solr on Kubernetes Solr has official support for running on Kubernetes, in the official Docker image. Please refer to the [Solr Operator](https://solr.apache.org/operator) home for details, tutorials and instructions. ## How to Use Solr includes a few examples to help you get started. To run a specific example, enter: ``` bin/solr start -e <EXAMPLE> where <EXAMPLE> is one of: cloud: SolrCloud example techproducts: Comprehensive example illustrating many of Solr's core capabilities schemaless: Schema-less example (schema is inferred from data during indexing) films: Example of starting with _default configset and adding explicit fields dynamically ``` For instance, if you want to run the techproducts example, enter: ``` bin/solr start -e techproducts ``` For a more in-depth introduction, please check out the [tutorials in the Solr Reference Guide](https://solr.apache.org/guide/solr/latest/getting-started/solr-tutorial.html). ## Support - [Users Mailing List](https://solr.apache.org/community.html#mailing-lists-chat) - Slack: Solr Community Channel. Sign up at https://s.apache.org/solr-slack - IRC: `#solr` on [libera.chat](https://web.libera.chat/?channels=#solr) ## Developer Documentation Learn more about developing Solr by reading through the developer docs in [./dev-docs](./dev-docs) source tree or building Solr from source in [./dev-docs/solr-source-code.adoc](./dev-docs/solr-source-code.adoc) ### Quickstart Solr uses [Gradle](https://gradle.org/) for its build system. Here are some useful hints to build and run Solr locally: - To build a Solr dev distribution: ``` ./gradlew dev ``` - To run the Solr dev distribution locally: ``` cd ./solr/packaging/build/dev bin/solr start ``` - Open a web browser and go to http://localhost:8983/solr/ to access the Solr Admin interface. You can also use the `bin/solr` script to create and manage Solr collections. For example use the `bin/solr post` tool to index some sample data. ## Get Involved Please review [CONTRIBUTING.md](CONTRIBUTING.md) for information on contributing to the project. To get involved in the developer community: - [Mailing Lists](https://solr.apache.org/community.html#mailing-lists-chat) - Slack: `#solr-dev` in the `the-asf` organization. Sign up at https://the-asf.slack.com/messages/CE70MDPMF - [Issue Tracker (JIRA)](https://issues.apache.org/jira/browse/SOLR) - IRC: `#solr-dev` on [libera.chat](https://web.libera.chat/?channels=#solr-dev)

Database Search Engines
1.6K Github Stars
Druid
Open Source

Druid

<!-- ~ Licensed to the Apache Software Foundation (ASF) under one ~ or more contributor license agreements. See the NOTICE file ~ distributed with this work for additional information ~ regarding copyright ownership. The ASF licenses this file ~ to you under the Apache License, Version 2.0 (the ~ "License"); you may not use this file except in compliance ~ with the License. You may obtain a copy of the License at ~ ~ http://www.apache.org/licenses/LICENSE-2.0 ~ ~ Unless required by applicable law or agreed to in writing, ~ software distributed under the License is distributed on an ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY ~ KIND, either express or implied. See the License for the ~ specific language governing permissions and limitations ~ under the License. --> [![Coverage Status](https://img.shields.io/codecov/c/gh/apache/druid?logo=codecov)](https://codecov.io/gh/apache/druid) [![Docker](https://img.shields.io/badge/container-docker-blue.svg?logo=docker)](https://hub.docker.com/r/apache/druid) [![Helm](https://img.shields.io/badge/helm-druid-5F90AB?logo=helm)](https://github.com/asdf2014/druid-helm) <!--- Following badges are disabled until they can be fixed: --> <!--- [![Inspections Status](https://img.shields.io/teamcity/http/teamcity.jetbrains.com/s/OpenSourceProjects_Druid_Inspections.svg?label=TeamCity%20inspections)](https://teamcity.jetbrains.com/viewType.html?buildTypeId=OpenSourceProjects_Druid_Inspections) --> | Workflow | Status | | :----------------------------------- | :----------------------------------------------------------- | | ⚙️ CodeQL Config | [![codeql-config](https://img.shields.io/github/actions/workflow/status/apache/druid/codeql-config.yml?branch=master&logo=github-actions&style=flat-square)](https://github.com/apache/druid/actions/workflows/codeql-config.yml) | | 🔍 CodeQL | [![codeql](https://img.shields.io/github/actions/workflow/status/apache/druid/codeql.yml?branch=master&logo=github-actions&style=flat-square)](https://github.com/apache/druid/actions/workflows/codeql.yml) | | 🕒 Cron Job ITS | [![cron-job-its](https://img.shields.io/github/actions/workflow/status/apache/druid/cron-job-its.yml?branch=master&logo=github-actions&style=flat-square)](https://github.com/apache/druid/actions/workflows/cron-job-its.yml) | | 🏷️ Labeler | [![labeler](https://img.shields.io/github/actions/workflow/status/apache/druid/labeler.yml?logo=github-actions&style=flat-square)](https://github.com/apache/druid/actions/workflows/labeler.yml) | | 🛠️ Static Checks | [![static-checks](https://img.shields.io/github/actions/workflow/status/apache/druid/static-checks.yml?branch=master&logo=github-actions&style=flat-square)](https://github.com/apache/druid/actions/workflows/static-checks.yml) | | 🧪 Unit and Integration Tests Unified | [![unit-and-integration-tests-unified](https://img.shields.io/github/actions/workflow/status/apache/druid/unit-and-integration-tests-unified.yml?branch=master&logo=github-actions&style=flat-square)](https://github.com/apache/druid/actions/workflows/unit-and-integration-tests-unified.yml) | --- [![Website](https://img.shields.io/badge/Website-druid.apache.org-blue?style=flat-square&logo=apache-druid)](https://druid.apache.org/) [![Twitter](https://img.shields.io/badge/Twitter-%40druidio-blue?style=flat-square&logo=twitter)](https://twitter.com/druidio) [![Download](https://img.shields.io/badge/Download-Downloads_Page-blue?style=flat-square&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj4KICA8cGF0aCBkPSJNNDQxLjkgMTY3LjNsLTE5LjgtMTkuOGMtNC43LTQuNy0xMi4zLTQuNy0xNyAwbC0xODIuMSAxODAuNy0xODEuMS0xODAuN2MtNC43LTQuNy0xMi4zLTQuNy0xNyAwbC0xOS44IDE5LjhjLTQuNyA0LjctNC43IDEyLjMgMCAxN2wyMDkuNCAyMDkuNGM0LjcgNC43IDEyLjMgNC43IDE3IDBsMjA5LjQtMjA5LjRjNC43LTQuNyA0LjctMTIuMyAwLTE3eiIvPgo8L3N2Zz4K)](https://druid.apache.org/downloads.html) [![Get Started](https://img.shields.io/badge/Get_Started-Getting_Started-blue?style=flat-square&logo=quicklook)](#getting-started) [![Documentation](https://img.shields.io/badge/Documentation-Design_Docs-blue?style=flat-square&logo=read-the-docs)](https://druid.apache.org/docs/latest/design/) [![Community](https://img.shields.io/badge/Community-Join_Us-blue?style=flat-square&logo=slack)](#community) [![Build](https://img.shields.io/badge/Build-Building_From_Source-blue?style=flat-square&logo=github-actions)](#building-from-source) [![Contribute](https://img.shields.io/badge/Contribute-How_to_Contribute-blue?style=flat-square&logo=github)](#contributing) [![License](https://img.shields.io/badge/License-Apache_2.0-blue?style=flat-square&logo=apache)](#license) --- ## Apache Druid Druid is a high performance real-time analytics database. Druid's main value add is to reduce time to insight and action. Druid is designed for workflows where fast queries and ingest really matter. Druid excels at powering UIs, running operational (ad-hoc) queries, or handling high concurrency. Consider Druid as an open source alternative to data warehouses for a variety of use cases. The [design documentation](https://druid.apache.org/docs/latest/design/architecture.html) explains the key concepts. ### Getting started You can get started with Druid with our [local](https://druid.apache.org/docs/latest/tutorials/quickstart.html) or [Docker](http://druid.apache.org/docs/latest/tutorials/docker.html) quickstart. For Kubernetes deployments, the [druid-operator](https://github.com/apache/druid-operator) is maintained in a separate repository. Druid provides a rich set of APIs (via HTTP and [JDBC](https://druid.apache.org/docs/latest/querying/sql.html#jdbc)) for loading, managing, and querying your data. You can also interact with Druid via the built-in [web console](https://druid.apache.org/docs/latest/operations/web-console.html) (shown below). #### Load data [![data loader Kafka](https://user-images.githubusercontent.com/177816/65819337-054eac80-e1d0-11e9-8842-97b92d8c6159.gif)](https://druid.apache.org/docs/latest/ingestion/index.html) Load [streaming](https://druid.apache.org/docs/latest/ingestion/index.html#streaming) and [batch](https://druid.apache.org/docs/latest/ingestion/index.html#batch) data using a point-and-click wizard to guide you through ingestion setup. Monitor one off tasks and ingestion supervisors. #### Manage the cluster [![management](https://user-images.githubusercontent.com/177816/65819338-08499d00-e1d0-11e9-80fe-faee9e9468cb.gif)](https://druid.apache.org/docs/latest/ingestion/data-management.html) Manage your cluster with ease. Get a view of your [datasources](https://druid.apache.org/docs/latest/design/architecture.html), [segments](https://druid.apache.org/docs/latest/design/segments.html), [ingestion tasks](https://druid.apache.org/docs/latest/ingestion/tasks.html), and [services](https://druid.apache.org/docs/latest/design/processes.html) from one convenient location. All powered by [SQL systems tables](https://druid.apache.org/docs/latest/querying/sql.html#metadata-tables), allowing you to see the underlying query for each view. #### Issue queries [![query view combo](https://user-images.githubusercontent.com/177816/65819341-0c75ba80-e1d0-11e9-9730-0f2d084defcc.gif)](https://druid.apache.org/docs/latest/querying/sql.html) Use the built-in query workbench to prototype [DruidSQL](https://druid.apache.org/docs/latest/querying/sql.html) and [native](https://druid.apache.org/docs/latest/querying/querying.html) queries or connect one of the [many tools](https://druid.apache.org/libraries.html) that help you make the most out of Druid. ### Documentation See the [latest documentation](https://druid.apache.org/docs/latest/) for the documentation for the current official release. If you need information on a previous release, you can browse [previous releases documentation](https://druid.apache.org/docs/). Make documentation and tutorials updates in [`/docs`](https://github.com/apache/druid/tree/master/docs) using [Markdown](https://www.markdownguide.org/) or extended Markdown [(MDX)](https://mdxjs.com/). Then, open a pull request. To build the site locally, you need Node 18 or higher and to install Docusaurus 3 with `npm|yarn install` in the `website` directory. Then you can run `npm|yarn start` to launch a local build of the docs. If you're looking to update non-doc pages like Use Cases, those files are in the [`druid-website-src`](https://github.com/apache/druid-website-src/tree/master) repo. For more information, see the [README in the `./website` directory](./website/README.md). ### Community Visit the official project [community](https://druid.apache.org/community/) page to read about getting involved in contributing to Apache Druid, and how we help one another use and operate Druid. * Druid users can find help in the [`druid-user`](https://groups.google.com/forum/#!forum/druid-user) mailing list on Google Groups, and have more technical conversations in `#troubleshooting` on Slack. * Druid development discussions take place in the [`druid-dev`](https://lists.apache.org/[email protected]) mailing list ([[email protected]](https://lists.apache.org/[email protected])). Subscribe by emailing [[email protected]](mailto:[email protected]). For live conversations, join the `#dev` channel on Slack. Check out the official [community](https://druid.apache.org/community/) page for details of how to join the community Slack channels. Find articles written by community members and a calendar of upcoming events on the [project site](https://druid.apache.org/) - contribute your own events and articles by submitting a PR in the [`apache/druid-website-src`](https://github.com/apache/druid-website-src/tree/master/_data) repository. ### Building from source Please note that JDK 21 or JDK 25 is required to build Druid. See the latest [build guide](https://druid.apache.org/docs/latest/development/build.html) for instructions on building Apache Druid from source. ### Contributing Please follow the [community guidelines](https://druid.apache.org/community/) for contributing. For instructions on setting up IntelliJ [dev/intellij-setup.md](dev/intellij-setup.md) ### License [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)

NoSQL Databases Data Warehouses
14K Github Stars
Guacamole
Open Source

Guacamole

------------------------------------------------------------ About this README ------------------------------------------------------------ This README is intended to provide quick and to-the-point documentation for technical users intending to compile parts of Apache Guacamole themselves. Source archives are available from the downloads section of the project website: http://guacamole.apache.org/ A full manual is available as well: http://guacamole.apache.org/doc/gug/ ------------------------------------------------------------ What is guacamole-server? ------------------------------------------------------------ The guacamole-server package is a set of software which forms the basis of the Guacamole stack. It consists of guacd, libguac, and several protocol support libraries. guacd is the Guacamole proxy daemon used by the Guacamole web application and framework. As JavaScript cannot handle binary protocols (like VNC and remote desktop) efficiently, a new text-based protocol was developed which would contain a common superset of the operations needed for efficient remote desktop access, but would be easy for JavaScript programs to process. guacd is the proxy which translates between arbitrary protocols and the Guacamole protocol. ------------------------------------------------------------ Required dependencies ------------------------------------------------------------ All software within guacamole-server is built using the popular GNU Automake, and thus provides the standard configure script. Before compiling, at least the following required dependencies must already be installed: 1) Cairo (http://cairographics.org/) 2) libjpeg-turbo (http://libjpeg-turbo.virtualgl.org/) OR libjpeg (http://www.ijg.org/) 3) libpng (http://www.libpng.org/pub/png/libpng.html) 4) OSSP UUID (http://www.ossp.org/pkg/lib/uuid/) ------------------------------------------------------------ Optional dependencies ------------------------------------------------------------ In addition, the following optional dependencies may be installed in order to enable optional features of Guacamole. Note that while the various supported protocols are technically optional, you will no doubt wish to install the dependencies of at least ONE supported protocol, as Guacamole would be useless otherwise. RDP: * FreeRDP (http://www.freerdp.com/) SSH: * libssh2 (http://www.libssh2.org/) * OpenSSL (https://www.openssl.org/) * Pango (http://www.pango.org/) Telnet: * libtelnet (https://github.com/seanmiddleditch/libtelnet) * Pango (http://www.pango.org/) VNC: * libVNCserver (http://libvnc.github.io/) Support for audio within VNC: * PulseAudio (http://www.freedesktop.org/wiki/Software/PulseAudio/) Support for SFTP file transfer for VNC or RDP: * libssh2 (http://www.libssh2.org/) * OpenSSL (https://www.openssl.org/) Support for WebP image compression: * libwebp (https://developers.google.com/speed/webp/) "guacenc" video encoding utility: * FFmpeg (https://ffmpeg.org/) ------------------------------------------------------------ Compiling and installing guacd, libguac, etc. ------------------------------------------------------------ All software within guacamole-server is built using the popular GNU Automake, and thus provides the standard configure script. 1) Run configure $ ./configure Assuming all dependencies have been installed, this should succeed without errors. If you wish to install the init script as well, you need to specify the location where your system init scripts are located (typically /etc/init.d): $ ./configure --with-init-dir=/etc/init.d Running configure in this manner will cause the "make install" step to install an init script to the specified directory, which you can then activate using the service management mechanism provided by your distribution). 2) Run make $ make guacd, libguac, and any available protocol support libraries will now compile. 3) Install (as root) # make install All software that was just built, including documentation, will be installed. guacd will install to your /usr/local/sbin directory by default. You can change the install location by using the --prefix option for configure. ------------------------------------------------------------ Running guacd ------------------------------------------------------------ If you installed the init script during compile and install, you should be able to start guacd through the service management utilities provided by your distribution (if any) or by running the init script directly (as root): # /etc/init.d/guacd start Root access is needed to write the pidfile /var/run/guacd.pid. You can also run guacd itself directly without the init script (as any user): $ guacd guacd currently takes several command-line options: -b HOST Changes the host or address that guacd listens on. -l PORT Changes the port that guacd listens on (the default is port 4822). -p PIDFILE Causes guacd to write the PID of the daemon process to the specified file. This is useful for init scripts and is used by the provided init script. -L LEVEL Sets the maximum level at which guacd will log messages to syslog and, if running in the foreground, the console. Legal values are debug, info, warning, and error. The default value is info. -f Causes guacd to run in the foreground, rather than automatically forking into the background. Additional information can be found in the guacd man page: $ man guacd ------------------------------------------------------------ Reporting problems ------------------------------------------------------------ Please report any bugs encountered by opening a new issue in the JIRA system hosted at: https://issues.apache.org/jira/browse/GUACAMOLE

Tunnel & Remote Access
3.9K Github Stars
OFBiz
Open Source

OFBiz

<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> # Apache OFBiz® [![Licence](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0) [![Version](https://img.shields.io/badge/Version-trunk-red.svg)](https://github.com/apache/ofbiz-framework) [![Java CI with Gradle](https://github.com/apache/ofbiz-framework/actions/workflows/gradle.yml/badge.svg?branch=trunk)](https://github.com/apache/ofbiz-framework/actions/workflows/gradle.yml) [![CodeQL](https://github.com/apache/ofbiz-framework/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/apache/ofbiz-framework/actions/workflows/codeql-analysis.yml)<!-- For the CodeQL badge to not get stuck on failing, you need to delete the last failing CodeQL workflow (AKA action)--> [![Build Status](https://ci2.apache.org/badges/ofbizTrunkFrameworkPlugins.svg)](https://ci2.apache.org/#/builders?tags=%2BofbizTrunkFrameworkPlugins)<!--For the BuildBot badge to not get stuck on failure, ALL builds of all branches handled by https://svn.apache.org/repos/infra/infrastructure/buildbot2/projects/ofbiz.py need to pass--> [![services health](https://qpkb254zxeu.montastic.io/badge)](https://qpkb254zxeu.montastic.io) [![Scorecard supply-chain security](https://github.com/apache/ofbiz-framework/actions/workflows/scorecard.yml/badge.svg)](https://github.com/apache/ofbiz-framework/actions/workflows/scorecard.yml) [![openssf scorecard](https://api.securityscorecards.dev/projects/github.com/apache/ofbiz-framework/badge)](https://securityscorecards.dev/viewer/?uri=github.com/apache/ofbiz-framework) [![openssf best practices](https://www.bestpractices.dev/projects/8708/badge)](https://www.bestpractices.dev/projects/8708) --- Welcome to **Apache OFBiz**! A powerful top level Apache software project. OFBiz is an Enterprise Resource Planning (ERP) System written in Java and houses a large set of libraries, entities, services and features to run all aspects of your business. For more details about OFBiz please visit the OFBiz Documentation page: [OFBiz documentation](http://ofbiz.apache.org/documentation.html) [OFBiz License](http://www.apache.org/licenses/LICENSE-2.0) ## Notes > **Note** - > If you want to use Eclipse, read the [Setup eclipse project for OFBiz](#setup-eclipse-project-for-ofbiz) > section to set it up. > **Note** - > If you want to use an external database like MySQL or PostgreSQL, read > the [Setup an external database](#setup-an-external-database-like-mysql-postgresql-etc) section. > **Note** - > If you want to run OFBiz without an internet connection, read the > [Running gradle tasks without an internet connection](#running-gradle-tasks-without-an-internet-connection) section. > **Note** - > The directory structure and repositories have changed. For more > information read the [Repository and directory structure](#repository-and-directory-structure) section. > **Note** - > If you are in China you may encounter network issues or proxy settings. This is unrelated to OFBiz. ## System requirements The only requirements to run OFBiz are * to have the Java Development Kit (JDK) version 17 installed on your system (not just the JRE, but the full JDK) that you can download from the link below. Make sure to set the `$JAVA_HOME` environment variable. [JDK download](https://adoptopenjdk.net/). [To know more about the JDK](https://medium.com/@javachampions/java-is-still-free-2-0-0-6b9aa8d6d244) > **Warning** - > On Windows, do not install OFBiz in a directory whose path contains spaces. * If on Windows, a Powershell version >= 7.1.3 installed that you can download from the below link. [Powershell](https://github.com/PowerShell/PowerShell) <!-- tag: quickstart --> ## Quick start To quickly install and fire-up OFBiz, please follow the below instructions from the command line at the OFBiz top level directory (folder). ### Download the Gradle wrapper MS Windows: `init-gradle-wrapper` > **Important** > > - If you encounter an error >> "Powershell is not recognized as an internal or external command, operable program or batch file" > > follow the advice at: [https://s.apache.org/vdcv8](https://s.apache.org/vdcv8). If you want more details see: https://s.apache.org/urnju > > - If you run into problems, check the execution policy of PowerShell. See [https://s.apache.org/urnju](https://s.apache.org/urnju) for details. > By setting the execution policy to "unrestricted", you'll be prompted to run the script once you run the init-gradle-wrapper command. > **Note** - > If you wonder where are stored the PowerShell Executables, here are the answers: [https://s.apache.org/w5dye](https://s.apache.org/w5dye) Unix-like OS: `./gradle/init-gradle-wrapper.sh` ### Prepare OFBiz #### Clean system and load the complete OFBiz data > **Note** - > Depending on your Internet connection speed it might take a long time > for this step to complete if you are using OFBiz for the first time as it needs > to download all dependencies. So please be patient! MS Windows: `gradlew cleanAll loadAll` Unix-like OS: `./gradlew cleanAll loadAll` > **Warning** - This command deletes all previous data and resets it to the initial demo data. ### Start OFBiz MS Windows: `gradlew ofbiz` Unix-like OS: `./gradlew ofbiz` > **Note** - > Ignore the % progress indicator because this task does not end as long > as OFBiz is running. ### Visit OFBiz through your browser [Order Back Office interface](https://localhost:8443/ordermgr) [Accounting Back Office interface](https://localhost:8443/accounting) [Administrator interface](https://localhost:8443/webtools) You can log in with the user **admin** and password **ofbiz**. <!-- endtag: quickstart --> > **Note** - > In case if problems visit our [Further reading section](#further-reading). ## Docker If you want to set and use Docker, [here is the documentation](https://nightlies.apache.org/ofbiz/trunk/readme/html5/DOCKER.html). ## Production setup > **Note** - > Currently, deployment configuration is tied to the source code. If you want to separate deployment configuration from production code we recommend using Docker, see [Docker](#Docker) section above. Following is a simple production setup. For more detailed information visit [Apache OFBiz Technical Production Setup Guide](https://cwiki.apache.org/confluence/display/OFBIZ/Apache+OFBiz+Technical+Production+Setup+Guide). ### Package OFBiz MS Windows: `gradlew distZip` Unix-like OS: `./gradlew distTar` ### Copy to server Copy the archive from `build/distributions` directory to the server and unarchive them with `tar xf` or `unzip`. ### Run OFBiz From the unarchived directory you can run either `bin/ofbiz` shell script or `bin/ofbiz.bat` batch script. ### Install as a service MS Windows: you can use [nssm](link:https://nssm.cc/usage). Unix-like OS: [This article](https://cwiki.apache.org/confluence/display/OFBIZ/How+to+run+OFBiz+as+a+Service) might give you an idea, although it seems to be outdated. Either way, you can use the standard mechanism of your distribution, like for example creating an `/etc/systemd/system/ofbiz.service` file. ### Troubleshooting On Windows you might get the following error when trying to run the `ofbiz.bat` script: `The input line is too long. The syntax of the command is incorrect.` The current workaround is to clone the repository and run gradlew commands from the root folder instead. ## Security > **Caution** - > You can find more information about security in OFBiz at > [the site security page](https://ofbiz.apache.org/security.html) ## Build system syntax All build tasks are executed using the **Gradle** build system which is embedded in OFBiz. To execute build tasks go to OFBiz top-level directory (folder) and execute tasks from there. ### Operating System Syntax The syntax for tasks differ slightly between windows and Unix-like systems * **Windows**: `gradlew <tasks-in-here>` * **Unix-like**: `./gradlew <tasks-in-here>` For the rest of this document, we will use the windows syntax, if you are on a Unix-like system, you need to add the `./` to gradlew. ### Types of tasks in Gradle There are two types of tasks designed for OFBiz in Gradle: * **Standard tasks**: To execute general standard Gradle tasks * **OFBiz server tasks**: To execute OFBiz startup commands. These tasks start with one of the following words: * **ofbiz** : standard server commands * **ofbizBackground** : server commands running in a background forked process Tips: * OFBiz **server commands** require **"quoting"** the commands. For example: `gradlew "ofbiz --help"` * Shortcuts to task names can be used by writing the first letter of every word in a task name. However, you cannot use the shortcut form for OFBiz server tasks. Example: `gradlew loadAdminUserLogin -PuserLoginId=myadmin` = `gradlew lAUL -PuserLoginId=myadmin` * Dependent tasks can be skipped with the -x switch. Example: `gradlew build -x test` does not run the tests within the build. #### Example standard tasks `gradlew build` `gradlew cleanAll loadAll testIntegration` #### Example OFBiz server tasks `gradlew "ofbiz --help"` `gradlew "ofbiz --test" --debug-jvm` `gradlew "ofbizBackground --start --portoffset 10000"` `gradlew "ofbiz --shutdown --portoffset 10000"` `gradlew ofbiz` (default is --start) #### Example mixed tasks (standard and OFBiz server) `gradlew cleanAll loadAll "ofbiz --start --portoffset 10000"` ## Quick reference You can use the below common list of tasks as a quick reference for controlling the system. This document uses the windows task syntax, if you are on a Unix-like system, you need to add the `./` to gradlew i.e. `./gradlew` ### Help tasks #### List OFBiz server commands List all available commands to control the OFBiz server `gradlew "ofbiz --help"` #### List build tasks List all available tasks from the build system `gradlew tasks` #### List build projects List all available projects in the build system `gradlew projects` #### Gradle build system help Show usage and options for the Gradle build system `gradlew --help` ### Server command tasks #### Start OFBiz `gradlew "ofbiz --start"` start is the default server task so this also works: `gradlew ofbiz` #### Shutdown OFBiz `gradlew "ofbiz --shutdown"` #### Get OFBiz status `gradlew "ofbiz --status"` #### Force OFBiz shutdown Terminate all running OFBiz server instances by calling the appropriate operating system kill command. Use this command to force OFBiz termination if the --shutdown command does not work. Usually this is needed when in the middle of data loading or testing in OFBiz. Warning: Be careful in using this command as force termination might lead to inconsistent state / data `gradlew terminateOfbiz` #### Start OFBiz in remote debug mode Starts OFBiz in remote debug mode and waits for debugger or IDEs to connect on port **5005** `gradlew ofbiz --debug-jvm` #### Start OFBiz on a different port Start OFBiz of the network port offsetted by the range provided in the argument to --portoffset `gradlew "ofbiz --start --portoffset 10000"` #### Start OFBiz in the background Start OFBiz in the background by forking it to a new process and redirecting the output to **runtime/logs/console.log** `gradlew "ofbizBackground --start"` OR `gradlew ofbizBackground` You can also offset the port, for example: `gradlew "ofbizBackground --start --portoffset 10000"` #### Passing JVM runtime options to OFBiz You can pass JVM runtime options by specifying the project property `-PjvmArgs`. `gradlew ofbiz -PjvmArgs="-Xms1024M -Xmx2048M" -Dsome.parameter=hello` If you do not specify `jvmArgs`, a default of `-Xms128M -Xmx1024M` is set. ### Data loading tasks OFBiz contains the following data reader types: * **seed**: OFBiz and External Seed Data - to be maintained along with source and updated whenever a system deployment is updated * **seed-initial**: OFBiz and External Seed Data - to be maintained along with source like other seed data, but only loaded initially and not updated when a system is updated except manually reviewing each line * **demo**: OFBiz Only Demo Data * **ext**: External General Data (custom) * **ext-test**: External Test Data (custom) * **ext-demo**: External Demo Data (custom) * **tenant**: Data to load into the master tenants database "ofbiztenant". This data is required to identify where a tenant's database is located. For more information you can review the relevant [tenant documentation](https://cwiki.apache.org/confluence/display/OFBIZ/Multitenancy+support) Available options for the --load-data server command are the following: * **readers=[name]**: only load data from certain readers separated by comma. e.g. seed,seed-initial,ext * **file=[path]**: load a single file from location or several files separated by commas. e.g. /my/file/1,/my/file/2 * **dir=[path]**: load all data files found in directory * **component=[name]**: only load data from a specific component. e.g. base * **delegator=[name]**: use the defined delegator. Default is "default". If the value passed is **"all-tenants"**, then OFBiz will load the data for all defined tenants in the system. * **group=[name]**: override the entity group (org.apache.ofbiz). e.g. com.example.something * **timeout=[millis]**: timeout in milliseconds * **create-pks**: create primary keys * **drop-pks**: drop primary keys * **create-constraints**: create indexes and foreign keys after loading * **drop-constraints**: drop indexes and foreign keys before loading * **create-fks**: create dummy (placeholder) foreign keys * **maintain-txs**: maintain timestamps in data file * **try-inserts**: use mostly inserts * **repair-columns**: repair column sizes (default is true w/ drop-constraints) * **continue-on-failure**: By default OFBiz will fail and stop if it is unable to load any of the files it is attempting to load. By passing this property, OFBiz will ignore failures and continue loading all files #### Load specific OFBiz data You can choose which data readers to pass in the following syntax: `gradlew "ofbiz --load-data readers=<readers-here-comma-separated>"` Example: `gradlew "ofbiz --load-data readers=seed,seed-initial,ext,ext-demo"` > Beware that copying this command in Microsoft Word will automatically transform > the double dash in en dashes (Unicode 0x2013: –) Other cases not related to Word > were also reported. So when this command does not work check that you are using > dash! #### Load all OFBiz data Loads all data sets; meant for initial loading of generic OFBiz data. Can be applied for development, testing, demonstration, etc. purposes. Be aware that executing this task can result in your data being overwritten in your database of choice. `gradlew loadAll` OR `gradlew "ofbiz --load-data"` > **CAUTION** - Use with caution in production environments. #### Load seed data Load ONLY the seed data (not seed-initial, demo, ext* or anything else); meant for use after an update of the code to reload the seed data as it is generally maintained along with the code and needs to be in sync for operation `gradlew "ofbiz --load-data readers=seed"` #### Load ext data Load seed, seed-initial and ext data; meant for manual/generic testing, development, or going into production with a derived system based on stock OFBiz where the ext data basically replaces the demo data `gradlew "ofbiz --load-data readers=seed,seed-initial,ext"` #### Load ext test data Load seed, seed-initial, ext and ext-test data; meant for automated testing with a derived system based on stock OFBiz `gradlew "ofbiz --load-data readers=seed,seed-initial,ext,ext-test"` #### Load data from an entity file Load data from an XML file holding entity data. `gradlew "ofbiz --load-data file=foo/bar/FileNameHere.xml"` #### Create a new tenant Create a new tenant in your environment, create the delegator, load initial data with admin-user and password (needs multitenant=Y in general.properties). The following project parameters are passed: * tenantId: mandatory * tenantName: optional, default is value of tenantId * domainName: optional, default is org.apache.ofbiz * tenantReaders: optional, default value is seed,seed-initial,demo * dbPlatform: optional, H(H2), M(MySQL), O(Oracle), P(PostgreSQL) (default D) * dbIp: optional, ip address of the database * dbUser: optional, username of the database * dbPassword: optional, password of the database `gradlew createTenant -PtenantId=mytenant` `gradlew createTenant -PtenantId=mytenant -PtenantName="My Name" -PdomainName=com.example -PtenantReaders=seed,seed-initial,ext -PdbPlatform=M -PdbIp=127.0.0.1 -PdbUser=mydbuser -PdbPassword=mydbpass` If run successfully, the system creates a new tenant having: * delegator: default#$\{tenandId} (e.g. default#mytenant) * admin user: $\{tenantId}-admin (e.g. mytenant-admin) * admin user password: ofbiz #### Load data for a specific tenant Load data for one specific tenant in a multitenant environment. Note that you must set multitenant=Y in general.properties and the following project parameters are passed: * tenantId (mandatory) * tenantReaders (optional) * tenantComponent (optional) `gradlew loadTenant -PtenantId=mytenant` `gradlew loadTenant -PtenantId=mytenant -PtenantReaders=seed,seed-initial,demo -PtenantComponent=base` ### Testing tasks <!-- tag: testingtasks --> #### Execute all unit tests (no need access to the DB) `gradlew test` #### Execute all integration tests (need access to the DB) `gradlew testIntegration` OR `gradlew 'ofbiz --test'` #### Execute integration tests with a different log level It is possible to start integration tests with a log level different from the default one. The log levels allowed are listed below from most verbose to least verbose: * always * verbose * timing * info * important * warning * error * fatal `gradlew "ofbiz --test loglevel=fatal"` #### Execute an integration test case Run a test case, in this example the component is "entity" and the case name is "entity-tests" > **Warning** - > If the test fails and you see in the log that the test lacks data in the DB, > verify that a *TestData.xml is not required in the *Test.xml where the test case is defined. > In this case you can't use the test case, you need to use the test suite. `gradlew "ofbiz --test component=entity --test suitename=entitytests --test case=entity-query-tests"` #### Execute an integration test case in debug mode with verbose log Listens on port **5005** `gradlew "ofbiz --test component=entity --test loglevel=verbose" --debug-jvm` #### Execute an integration test suite `gradlew "ofbiz --test component=entity --test suitename=entitytests"` #### Execute an integration test suite in debug mode Listens on port **5005** `gradlew "ofbiz --test component=entity --test suitename=entitytests" --debug-jvm` #### Execute all component tests `gradlew "ofbiz --test component=entity"` #### Execute all component tests in debug mode Listens on port **5005** `gradlew "ofbiz --test component=entity" --debug-jvm` <!-- endtag: testingtasks --> ### Miscellaneous tasks #### Run all tests on a clean system `gradlew cleanAll loadAll testIntegration` #### Clean all generated artifacts `gradlew cleanAll` #### Refresh the generated artifacts `gradlew clean build` #### Create an admin user account Create an admin user with login name MyUserName and default password with value "ofbiz". Upon first login OFBiz will request changing the default password `gradlew loadAdminUserLogin -PuserLoginId=MyUserName` #### Compile Java without using Xlint output By default Xlint prints output of all warnings detected by the compiler, if you want to silence them `gradlew -PXlint:none build` #### Run OWASP tool to identify dependency vulnerabilities (CVEs) The below command activates a gradle plugin (OWASP) and Identifies and reports known vulnerabilities (CVEs) in OFBiz library dependencies. The task takes time to complete, and once done, a report will be generated in $OFBIZ_HOME/build/reports/dependency-check-report.html `gradlew -PenableOwasp dependencyCheckAnalyze` #### Setup eclipse project for OFBiz Setting up OFBiz on eclipse is done by simply running the below command and then importing the project to eclipse. This command will generate the necessary **.classpath** and **.project** files for eclipse and it will also make the source code for external libraries available in eclipse (i.e. you can view source through Ctrl + Click) The first time you run this command it will take a long time to execute because it will download source packages available for project dependencies. `gradlew eclipse` #### Package and distribute OFBiz In order to deploy OFBiz on a target system and in particular in a production environment without requiring the target system to download Gradle and OFBiz dependencies from the Internet, it is possible to generate an archive bundling OFBiz with all the Jars it depends on as a `tar` archive `gradlew distTar` or as a `zip` archive. `gradlew distZip` Those archives are available in the `build/distributions` directory. To run OFBiz from those archive you must first unarchive them with `tar xf` or `unzip` and then from that directory you can run either `bin/ofbiz` shell script or `bin/ofbiz.bat` batch script with the appropriate ofbiz options. ## OFBiz plugin system OFBiz provides an extension mechanism through plugins. Plugins are standard OFBiz components that reside in the plugins directory. Plugins can be added manually or fetched from a maven repository. The standard tasks for managing plugins are listed below. > **Note** - > OFBiz plugin versions follow [Semantic Versioning > 2.0.0](http://semver.org/) ### Pull (download and install) a plugin automatically Download a plugin with all its dependencies (plugins) and install them one-by-one starting with the dependencies and ending with the plugin itself. `gradlew pullPlugin -PdependencyId="org.apache.ofbiz.plugin:myplugin:0.1.0"` If the plugin resides in a custom maven repository (not jcenter or localhost) then you can use specify the repository using below command: `gradlew pullPlugin -PrepoUrl="http://www.example.com/custom-maven" -PdependencyId="org.apache.ofbiz.plugin:myplugin:0.1.0"` If you need username and password to access the custom repository: `gradlew pullPlugin -PrepoUrl="http://www.example.com/custom-maven" -PrepoUser=myuser -PrepoPassword=mypassword -PdependencyId="org.apache.ofbiz.plugin:myplugin:0.1.0"` ### Pull an official plugin from source control Download an official plugin from source control and place it in the plugins directory. It's able to handle branches switches > **Important** - > You need to use the last Git version, at least a 2.26 version MS Windows: `pullPluginSource example` Unix-like OS: `./pullPluginSource.sh example` ### Pull all official plugins from source control Download all officially supported plugins from source control and place them in /plugins. It's able to handle branches switches > **Caution** - > This task deletes the /plugins directory and replaces it with the official plugins. > **Important** - > You need to use the last Git version, at least a 2.26 version MS Windows: `pullAllPluginsSource` Unix-like OS: `./pullAllPluginsSource.sh` ### Install a plugin If you have a plugin called mycustomplugin and want to install it in OFBiz follow the below instructions: * Extract the plugin if it is compressed * Place the extracted directory into /plugins * Run the below command `gradlew installPlugin -PpluginId=myplugin` The above commands executes the task "install" in the plugin's build.gradle file if it exists ### Uninstall a plugin If you have an existing plugin called mycustomplugin and you wish to uninstall run the below command `gradlew uninstallPlugin -PpluginId=myplugin` The above command executes the task "uninstall" in the plugin's build.gradle file if it exists ### Remove a plugin Calls **uninstallPlugin** on an existing plugin and then delete it from the file-system `gradlew removePlugin -PpluginId=myplugin` ### Create a new plugin Create a new plugin. The following project parameters are passed: * pluginId: mandatory * pluginResourceName: optional, default is the Capitalized value of pluginId * webappName: optional, default is the value of pluginId * basePermission: optional, default is the UPPERCASE value of pluginId `gradlew createPlugin -PpluginId=myplugin` `gradlew createPlugin -PpluginId=myplugin -PpluginResourceName=MyPlugin -PwebappName=mypluginweb -PbasePermission=MYSECURITY` The above command creates a new plugin in /plugins/myplugin ### Push a plugin to a repository This task publishes an OFBiz plugin into a maven package and then uploads it to a maven repository. Currently, pushing is limited to localhost maven repository (work in progress). To push a plugin the following parameters are passed: * pluginId: mandatory * groupId: optional, defaults to org.apache.ofbiz.plugin * pluginVersion: optional, defaults to 0.1.0-SNAPSHOT * pluginDescription: optional, defaults to "Publication of OFBiz plugin $\{pluginId}" `gradlew pushPlugin -PpluginId=myplugin` `gradlew pushPlugin -PpluginId=mycompany -PpluginGroup=com.mycompany.ofbiz.plugin -PpluginVersion=1.2.3 -PpluginDescription="Introduce special functionality X"` ## Miscellaneous Documentation ### Further reading * [Known issues](https://cwiki.apache.org/confluence/display/OFBIZ/FAQ%2B-%2BTips%2B-%2BTricks%2B-%2BCookbook%2B-%2BHowTo#FAQ-Tips-Tricks-Cookbook-HowTo-Knownissues) * [Tips and Tricks](https://cwiki.apache.org/confluence/display/OFBIZ/FAQ%2B-%2BTips%2B-%2BTricks%2B-%2BCookbook%2B-%2BHowTo) ### Repository and directory structure OFBiz is split into two repositories: * **ofbiz-framework**: Contains the core framework and main applications in the system like accounting, party, order, etc * **ofbiz-plugins**: Renamed from "special-purpose" and contains optional components that are officially supported by the community Furthermore, the hot-deploy directory is removed as the plugins directory works as a replacement for both "special-purpose" and "hot-deploy". If you need to load the components in the plugins directory in a specific order place a component-load.xml file in the plugins directory listing the order. To check out a plugin from source control use the Windows or Unix-like **pullPluginSource** script. To check out all plugins from source control use the **pullAllPluginsSource** script. **Beware** this deletes a previously existing plugins directory. ### Running gradle tasks without an Internet connection OFBiz must run with an Internet connection the **first time** it is prepared on the system because it needs to download all the required dependencies. After preparing OFBiz the first time correctly, it is possible to run OFBiz without an Internet connection by using the `--offline` command line switch which tells Gradle to fetch its dependencies from the cache. If any dependencies are missing from the cache and you pass `--offline` switch then the build execution will fail. ### Setup an external database like MySQL, PostgreSQL, etc To setup an external database instead of the default embedded H2 database, you will need to follow the following instructions: 1. Find the JDBC driver suitable for your database using one of the following options: * Search for the JDBC driver in [jcenter](https://bintray.com/bintray/jcenter) and place it in build.gradle dependencies e.g. `runtime 'mysql:mysql-connector-java:8.0.30'` OR * Download the JDBC driver jar and place it in $OFBIZ_HOME/lib or the lib sub-directory of any component 2. Modify the entityengine.xml file located in $OFBIZ_HOME/framework/entity/config to switch the default database to the one you selected. For more details you can read the relevant section in the [technical setup guide](https://cwiki.apache.org/confluence/display/OFBIZ/Apache+OFBiz+Technical+Production+Setup+Guide). ### Setup gradle tab-completion on Unix-like systems To get tab completion (auto complete gradle commands by pressing tab) you can download the script from the below link and place it in the appropriate location for your system. [Gradle tab completion](https://edub.me/gradle-completion-bash) For example, on debian based systems, you can use the following command: `sudo curl -L -s https://edub.me/gradle-completion-bash -o /etc/bash_completion.d/gradle-tab-completion.bash` ## Crypto notice This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See http://www.wassenaar.org/ for more information. The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this Apache Software Foundation distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code. The following provides more details on the included cryptographic software: * Various classes in OFBiz, including DesCrypt, HashCrypt, and BlowFishCrypt use libraries from the Sun Java JDK API including java.security.* and javax.crypto.* (the JCE, Java Cryptography Extensions API) * Other classes such as HttpClient and various related ones use the JSSE (Java Secure Sockets Extension) API

ERP
1.1K Github Stars
Openmeetings
Open Source

Openmeetings

## Apache OpenMeetings ![About Openmeetings Logo](/openmeetings-server/src/site/resources/images/logo.svg) [Apache OpenMeetings](https://openmeetings.apache.org) provides: - [x] **video conferencing** - [x] **instant messaging** - [x] **white board** - [x] **collaborative document editing** - [x] **other groupware tools** It uses API functions of Media Server for Remoting and Streaming [Kurento](https://www.kurento.org)). ### Getting Started For the latest information, please visit the project website: - [OpenMeetings Website](https://openmeetings.apache.org/) Documentation for installation and upgrade can be found at: - [Installation Guide](https://openmeetings.apache.org/installation.html) - [Upgrade Instructions](https://openmeetings.apache.org/Upgrade.html) All available mailing lists are listed here: - [Mailing Lists](https://openmeetings.apache.org/mailing-lists.html) ### Prerequisites Apache OpenMeeting requires the following software to build: - [Apache Maven 3.8.7 or later](https://maven.apache.org/) Apache OpenMeetings requires the following software to run: - [Java SE 21](https://www.oracle.com/java/technologies/downloads/#java21) ### Building and running To build and run the project from source: 1. Ensure the prerequisites are installed. 2. Build the project using Maven in the root directory: ``` mvn clean install -PallModules ``` 3. To run OpenMeetings: - Navigate to `openmeetings-server/target` directory. - Extract `apache-openmeetings-x.x.x.tar.gz` (or `apache-openmeetings-x.x.x.zip` for Windows). - Enter the `apache-openmeetings-x.x.x` directory and execute the startup script: ``` ./bin/startup.sh ``` (Use `./bin/startup.bat` for Windows.) 4. Detailed build documentation: [Build Instructions](https://openmeetings.apache.org/BuildInstructions.html) ### Builds and CI | Description | Jenkins CI | |---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Master nightly | [![Build Status](https://ci-builds.apache.org/job/OpenMeetings/job/openmeetings/badge/icon)](https://ci-builds.apache.org/job/OpenMeetings/job/openmeetings/) | | Master Pull Request | [![Build Status](https://ci-builds.apache.org/job/OpenMeetings/job/openmeetings-pr-build/badge/icon)](https://ci-builds.apache.org/job/OpenMeetings/job/openmeetings-pr-build/) | ### Release Notes See the [CHANGELOG.md](/CHANGELOG.md) file for a detailed log. ### Recent Releases <details> <summary>Release 9.0.0 - Security, SIP and Dark theme.</summary> 9.0.0 ----- [Release 9.0.0](https://www.apache.org/dyn/closer.lua/openmeetings/9.0.0), provides following improvements: IMPORTANT: Java 21 and KMS 7.3.0+ are required Security: * Weak hash functions are dropped * 'Remember Me' is more secure * All libraries are updated to most recent versions UI: * fabric.js is updated to most recent version * Dark theme is added * File deletion via trash button click is fixed ***3 security vulnerabilities were addressed*** Some other fixes and improvements, 15 issues were addressed </details> <details> <summary>Release 8.1.0 - Security updates.</summary> 8.1.0 ----- [Release 8.1.0](https://www.apache.org/dist/openmeetings/8.1.0), provides following improvements: Security: * All libraries are updated to most recent versions WB: * Whiteboard video player controls are fixed Some other fixes and improvements, 9 issues were addressed </details> <details> <summary>Release 8.0.0 - Security updates, switching to Tomcat 11 and Jakarta stack.</summary> 8.0.0 ----- [Release 8.0.0](https://www.apache.org/dist/openmeetings/8.0.0), provides following improvements: Security: * OM is moved to Jakarta stack * All libraries are updated to most recent versions UI: * Fullcalendar v6 is used ***1 security vulnerability was addressed*** Some other fixes and improvements, 8 issues were addressed </details> <details> <summary>Older Releases Details:</summary> 7.2.0 ----- [Release 7.2.0](https://www.apache.org/dist/openmeetings/7.2.0), provides following improvements: IMPORTANT: Java 17 and KMS 6.18.0+ are required Security: * Login/email are now processed in case insensitive mode * Messages and contacts: message folders are not shared between users * All dependencies are updated with most recent versions UI: * Too big profile pictures are now resized * Room looks better in RTL mode * Email messages looks better Some other fixes and improvements, 10 issues were addressed 7.1.0 ----- [Release 7.1.0](https://archive.apache.org/dist/openmeetings/7.1.0), provides following improvements: IMPORTANT: Java 17 and KMS 6.18.0+ are required Security: * Invitation hash check made strict * Set of user permissions is fixed * Paths entered in Admin->Config are being verified * All dependencies are updated with most recent versions Stability: * TURN server config is passed to the client ***3 security vulnerabilities were addressed*** Some other fixes and improvements, 12 issues were addressed 7.0.0 ----- [Release 7.0.0](https://archive.apache.org/dist/openmeetings/7.0.0), provides following improvements: IMPORTANT: Java 17 is required UI and Security: * Microphone on/off doesn't interrupt the streaming * Stability fix at Safari * Full screen mode for WB * Redo tool for WB * 2-factor authentication * Libraries are updated with most recent versions Some other fixes and improvements, 28 issues were addressed 6.3.0 ----- [Release 6.3.0](https://archive.apache.org/dist/openmeetings/6.3.0), provides following improvements: Stability and UI: * Multiple WB fixes * Confirm popups are unified * Multiple fixes for latest Safari * Libraries are updated with most recent versions Some other fixes and improvements, 26 issues were addressed 6.2.0 ----- [Release 6.2.0](https://archive.apache.org/dist/openmeetings/6.2.0), provides following improvements: UI improvements, stability fixes, mobile version and adds OpenAPI spec in 3.0.x format Stability and UI: * UI fixes * Modal PopUpFix * Upgrade to Bootstrap5 * Fixes for Mobile Version and landscape mode * Improve ability for starting from Home Screen on Mobile device Integration: * OpenAPI Spec in swagger format see https://openmeetings.apache.org/swagger * Improved Integration examples for Node and PHP Some other fixes and improvements, 28 issues were addressed 6.1.0 ----- [Release 6.1.0](https://archive.apache.org/dist/openmeetings/6.1.0), provides following improvements: This release provides WebRTC audio/video/screen-sharing in the Room Stability: * Room is more stable * Screen sharing on Safari is fixed * Recording in interview room is fixed UI: * OM theme can selected in Admin -> Config * Configurable Extra menu is added to the rooms * Date/time picker is better localized Some other fixes and improvements, 27 issues were addressed 6.0.0 ----- [Release 6.0.0](https://archive.apache.org/dist/openmeetings/6.0.0), provides following improvements: This release provides WebRTC audio/video/screen-sharing in the Room Security: * TLS1.2. is used for OAuth * NetTest client count can be limited * Captcha is now configurable * Recordings can be globally disabled Stability: * Audio/video in room is more stable UI: * Translations are improved * Invitation form displayes time in client time zone * Notifications are displayed using JS Notification API * Video pods size can be fixed and configurable per-user Some other fixes and improvements, 40 issues were addressed 5.1.0 ----- [Release 5.1.0](https://archive.apache.org/dist/openmeetings/5.1.0), provides following improvements: This release provides WebRTC audio/video/screen-sharing in the Room Stability: * Room Audio/Video should be more stable * OM should work as expected after KMS server restart * Backup is further improved * Audio/Video connection established faster * Most recent versions of dependencies are used UI: * User display name is used almost everywhere * Browser notifications are used to notify about new chat messages and moderator actions * Interview room was broken * Mute and "Mic status" were broken Some other fixes and improvements, 52 issues were addressed 5.0.1 ----- [Release 5.0.1](https://archive.apache.org/dist/openmeetings/5.0.1), provides following improvements: This release provides WebRTC audio/video/screen-sharing in the Room Security: * Rate limit is checked for network test web service * Libraries are updated to latest versions * Password complexity can be fine-tuned Backup/Restore: * Group files/recordings might be restored to wrong group UI: * Translations and support of RTL languages are improved * Dashboard widgets and personal room are always displayed in current user language Some other fixes and improvements, 21 issues were addressed 5.0.0 ----- [Release 5.0.0](https://archive.apache.org/dist/openmeetings/5.0.0), provides following improvements: This release provides WebRTC audio/video/screen-sharing in the Room IMPORTANT: Java 11 is required Flash plugin is no longer required in the browser Security: * Libraries are updated to latest versions * More strict CSP is implemented * User accounts are hidden for regular users * User email addresses are hidden UI: * Support for touch events is added (mobiles, tablets) * Better support for new MS Edge browser * Direct link for entering the room with room name (not ID) * Front camera is used by default * User avatar is editable at Admin->Users Audio/Video: * Stability is improved * Connection to KMS is auto-recovering * Camera resolution changes take effect immediately * Multiple client-side JS errors are fixed Some other fixes and improvements, 74 issues were addressed 4.0.11 ----- [Release 4.0.11](https://archive.apache.org/dist/openmeetings/4.0.11), provides following improvements: Security: * 3rd-party libraries are updated to latest versions * Email sending via SSL is added * User email addresses are hidden Other fixes and improvements, 11 issues were addressed 5.0.0-M4 ----- [Release 5.0.0-M4](https://archive.apache.org/dist/openmeetings/5.0.0-M4), provides following improvements: This release provides WebRTC audio/video/screen-sharing in the Room IMPORTANT: Java 11 is required Flash plugin is no more required in the browser UI: * Main UI library has been changed Jquery-UI -> Bootstrap * Hotkey to resize&arrage "video" windows is added * Camera/Microphone on/off icons are less confusing * The room can be blocked until moderator will enter * Room sidebar dock button works as expected * Right-click menu for WB tab is fixed * Link to privacy statement is added to sign-in dialog Audio/Video: * Audio-only clients doesn't create "video" windows * Audio/Video stream tries to re-connect in case of any issue Backup/Restore: * Backup/restore was re-worked and better covered with tests * Multiple other issues are addressed Integration: * OAuth: user attributes retrieval is improved * LDAP documentation is improved * User picture can be retrieved from LDAP Please NOTE: this version might be not production ready Some other fixes and improvements, 56 issues were addressed 5.0.0-M3 ----- [Release 5.0.0-M3](https://archive.apache.org/dist/openmeetings/5.0.0-M3), provides following improvements: This release provides WebRTC audio/video/screen-sharing in the Room IMPORTANT: Java 11 is required Flash plugin is no more required in the browser Backup/Restore: * Multiple issues with restore were fixed * Confirmation of backup import was added * File/recording hashes are preserved when possible White board: * Document upload/conversion is improved * Whiteboards are not auto-created on room enter * Keyboard shortcut for quick poll is added Room: * User list is now sorted Audio/Video: * Multiple issues with audio/video/screen sharing are fixed Please NOTE: this version might be not production ready Some other fixes and improvements, 36 issues were addressed 5.0.0-M2 ----- [Release 5.0.0-M2](https://archive.apache.org/dist/openmeetings/5.0.0-M2), provides following improvements: This release provides WebRTC audio/video/screen-sharing in the Room IMPORTANT: Java 11 is required Flash plugin is no more required in the browser Backup/Restore: * OAuth configs were not properly backup White board: * Math formula is improved * Room files are improved * Clean WB REST method perform real-time clean Room: * Rooms can be customized on group basis * "Ghost" users are not displayed in the room * External user name is displayed as expected Please NOTE: this version might be not production ready Some other fixes and improvements, 18 issues were addressed 4.0.9 ----- [Release 4.0.9](https://archive.apache.org/dist/openmeetings/4.0.9), provides following improvements: Backup/Restore: * Recordings of deleted users were restored as public * OAuth configs were not properly backup White board: * Math formula is improved * Room files are improved * Clean WB REST method perform real-time clean Room User list: * "Ghost" users are not displayed in the room * External user name is displayed as expected Other fixes and improvements, 19 issues were addressed 5.0.0-M1 ----- [Release 5.0.0-M1](https://archive.apache.org/dist/openmeetings/5.0.0-M1), provides following improvements: This release provides WebRTC audio/video/screen-sharing in the Room Flash plugin is no more required in the browser Please NOTE: this version might be not production ready Some other fixes and improvements, 30 issues were addressed 4.0.8 ----- [Release 4.0.8](https://archive.apache.org/dist/openmeetings/4.0.8), provides following improvements: Mobile client: * Mobile clients are displayed in user list * Audio/Video switching is more stable OAuth: * VK based OAuth login is fixed * Integrate Wso2 Identity Server Activities&Actions: * Less actions for non-moderators * No duplicated actions are displayed White board: * Video on WB works in latest Safari * White Out tool is added * Whiteboard size can be tuned * Link to LaTeX guide is added Room User list: * Issue with user's display name is fixed * "Ghost" users are not displayed in the room Other fixes and improvements, 30 issues were addressed 4.0.7 ----- [Release 4.0.7](https://archive.apache.org/dist/openmeetings/4.0.7), provides following improvements: * kick function in RoomWebService is fixed * Reply button is added to Private Message * Multiple issues are fixed in Room * Save white board as JPG is removed * HttpClient in AppointmentManager is updated 3.x to 4.x * "endless" invitations can now be invalidated * Ability to chose user display name is added * Delete white board object using mouse is now possible * Ability to duplicate room poll is added * Health check web service API is added * OAuth2 authorization can be done via HTTP header * cliparts can be in SVG format Other fixes and improvements, 18 issues were addressed 4.0.6 ----- [Release 4.0.6](https://archive.apache.org/dist/openmeetings/4.0.6), provides following improvements: * Multiple issues with device list retrieval in Settings dialog * Web services were improved * Multiple issues with room recording * Frontend self registering Other fixes and improvements, 16 issues were addressed 4.0.5 ----- [Release 4.0.5](https://archive.apache.org/dist/openmeetings/4.0.5), provides following improvements: Room: * Interview room is improved: re-designed, multiple video windows are supported * Multiple improvements in Admin * File tree is improved * Multiple improvements in white boards Other fixes and improvements, 24 issues were addressed 4.0.4 ----- [Release 4.0.4](https://archive.apache.org/dist/openmeetings/4.0.4), provides following improvements: The purpose of this release is to provide GDPR compatible version of OpenMeetings Room: * Performance is improved * Audio/Video streams were not closed in IE * File conversion on Windows is improved Other fixes and improvements, 9 issues were fixed 4.0.3 ----- [Release 4.0.3](https://archive.apache.org/dist/openmeetings/4.0.3), provides following improvements: Security fix in Calendar Room: * Performance was improved * Issues with audio/video were fixed * Quick poll was added Multiple improvements in web services Other fixes and improvements, 13 issues were fixed 4.0.2 ----- [Release 4.0.2](https://archive.apache.org/dist/openmeetings/4.0.2), provides following improvements: Security fixes in Chat and Admin Chat: * Send on Enter/Ctrl+Enter * Invited guest's name displayed as expected * Turned OFF global chat is not displayed * Link works as expected * Smiles works as expected * Hover removed from chat Room: * Download as PDF * Download/screen-sharing application in IE * No duplicated users * Activities&Actions improved * Number of users is displayed in the room * Mathematical formulas on WB Other fixes and improvements, 32 issues were fixed 4.0.1 ----- [Release 4.0.1](https://archive.apache.org/dist/openmeetings/4.0.1), provides following improvements: * Openlaszlo code is removed * Login via OAuth is improved * External video source is room is fixed * Multiple improvements of White-board * Multiple improvements of Chat * JS/CSS files are minified and merged to reduce load time * Overall stability is improved Other fixes and improvements, 43 issues were fixed 4.0.0 ----- [Release 4.0.0](https://archive.apache.org/dist/openmeetings/4.0.0), provides following improvements: * Room White board is rewritten to use HTML5 instead of Flash * All Audio/Video components were rewritten using Apache Flex * Bunch of automatic tests were written, code was cleaned-up and simplified * outdated SMSlib was removed from the dependencies * RTL in room is improved * swftool 3rd party tool is not required any more * OAuth authorization is fixed additional VK provider is added * language resources are minimized * performance is improved Admin->Config * config keys are generalized * config types are introduced Other fixes and improvements, 515 issues were fixed 3.3.2 ----- [Release 3.3.2](https://archive.apache.org/dist/openmeetings/3.3.2), provides following improvements: * Audio/Video in conference room is fixed * Strong password is enforced during self registration * 'dashboard.show.chat' should work as expected * New Setting is added 'user can create rooms' Other fixes and improvements, 8 issues were fixed 3.3.1 ----- [Release 3.3.1](https://archive.apache.org/dist/openmeetings/3.3.1), provides following improvements: * Clustering works as expected * SIP works as expected * Multiple issues in web services were fixed * RTMPT mode is fixed * Multiple UI improvements Other fixes and improvements, 19 issues were fixed 3.3.0 ----- [Release 3.3.0](https://archive.apache.org/dist/openmeetings/3.3.0), provides following improvements: Security fixes in: * Chat * All requests via security headers * More secure password processing rules and storage * More strict rules for uploaded files * SQL injection in web services 11 security vulnerabilities were addressed Whiteboard: * Room is displayed without overlap in IE * Multiple display issues * Wb room element can now be hidden Other fixes and improvements, 21 issues were fixed 3.2.1 ----- [Service release 1 for 3.2.0](https://archive.apache.org/dist/openmeetings/3.2.1), provides following improvements: Room * Video is more stable * Office files download is fixed * Multi-upload is added * External video works as expected * WB drawing on slides works as expected Chat * chat is made resizable * multiple issues in chat are fixed * typing indicator is added Calendar * date/time validator is improved * whole group can be invited by admin to event Other fixes and improvements, 49 issues were fixed </details> ### License Apache OpenMeetings is licensed under the Apache License 2.0. For more details, see [LICENSE](http://www.apache.org/licenses/LICENSE-2.0). This product also includes third-party software. See more at [NOTICE.md](/NOTICE.md).

Video Conferencing
677 Github Stars
Superset
Open Source

Superset

Code Editor for the AI Agents Era - Run an army of Claude Code, Codex, etc. on your machine

Analytics & BI AI Agents BI Dashboards
11.7K Github Stars
pulsar-manager
Open Source

pulsar-manager

# Apache Pulsar manager Apache Pulsar manager is a web-based GUI management tool for managing and monitoring Pulsar. A Pulsar Manager is capable of managing multiple Pulsar clusters. A Pulsar instance or a group of Pulsar clusters is defined as an `Environment` in Pulsar Manager. You can create as many environments as you can. The following diagram illustrates the overall architecture of a Pulsar Manager. ![pulsar-manager-arch](docs/img/pulsar-manager-arch.png) A running Pulsar Manager instance is comprised of two components: one is the `frontend` which provides the GUI to manage and monitor Pulsar clusters, the other one is the `backend` which interacts with Pulsar clusters for collecting metrics, forwarding admin requests to the requested Pulsar cluster or brokers. Since Pulsar Manager directly interacts with Pulsar brokers and bookies for management, it is required to deploy the Pulsar Manager into the same network as your Pulsar clusters. So the Pulsar Manager backend is able to talk to the brokers and bookies in your Pulsar cluster. ## Install ### Use Docker 1. Start Pulsar standalone. ``` docker pull apachepulsar/pulsar:latest docker run -d -it \ -p 6650:6650 \ -p 8080:8080 \ -v pulsardata:/pulsar/data \ -v pulsarconf:/pulsar/conf \ --name pulsar-standalone \ apachepulsar/pulsar:latest \ bin/pulsar standalone ``` 2. Start Pulsar Manager in a separate container. > NOTE: the command links the pulsar-manager container with the pulsar standalone container so they are in the same network. ``` docker pull apachepulsar/pulsar-manager:v0.2.0 docker run -it \ -p 9527:9527 -p 7750:7750 \ -e SPRING_CONFIGURATION_FILE=/pulsar-manager/pulsar-manager/application.properties \ --link pulsar-standalone \ apachepulsar/pulsar-manager:v0.2.0 ``` > NOTE: Enable bookkeeper visual manager(Optional), update the field `bkvm.enabled` to `true` for the file [bkvm.conf](https://github.com/apache/pulsar-manager/blob/master/src/main/resources/bkvm.conf). ``` docker pull apachepulsar/pulsar-manager:v0.2.0 docker run -it \ -p 9527:9527 -p 7750:7750 \ -e SPRING_CONFIGURATION_FILE=/pulsar-manager/pulsar-manager/application.properties \ -v $PWD/bkvm.conf:/pulsar-manager/pulsar-manager/bkvm.conf \ --link pulsar-standalone \ apachepulsar/pulsar-manager:v0.2.0 ``` * `SPRING_CONFIGURATION_FILE`: Default configuration file for spring. ### Use Docker Compose Alternatively, you can start a standalone and Pulsar Manager using the docker compose file provided in this repository. 1. Clone this git repoistory. ```bash https://github.com/apache/pulsar-manager ``` 2. Go to the docker directory. ```bash cd docker ``` 3. Start the docker composed cluster. ```bash docker-compose up ``` ### Deploy Pulsar Manager to Kubernetes The Pulsar Manager can be deployed as part of [Pulsar Helm Chart](https://github.com/apache/pulsar-helm-chart). 1. Install the Pulsar cluster with Pulsar Manager ```bash helm repo add apache https://pulsar.apache.org/charts helm repo update helm install <release-name> apache/pulsar ``` 2. Access the Pulsar Manager. The default values will create a `ClusterIP` for the Pulsar Manager you can use to interact with cluster. To find the IP address of the Pulsar Manager, use the following command: ```bash kubectl get service -n <k8s-namespace> ``` After find the ip address of the Pulsar Manager, you can access the Pulsar Manager at `http://${pulsar-manager-cluster-ip}/#/environments`. ### Deploy from bin package ``` wget https://dist.apache.org/repos/dist/release/pulsar/pulsar-manager/pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz tar -zxvf apache-pulsar-manager-0.2.0-bin.tar.gz cd pulsar-manager tar -xvf pulsar-manager.tar cd pulsar-manager cp -r ../dist ui ./bin/pulsar-manager ``` Now, you can access it at the following address: frontend => http://localhost:7750/ui/index.html. For details, see [Set the administrator account and password](#access-pulsar-manager). #### Enable BookKeeper visual manager(optional) Update the configuration file `pulsar-manager/bkvm.conf`, and set `bkvm.enabled` to `true`. bkvm address => http://localhost:7750/bkvm ### Build from source code #### Prerequisites * Java JDK 1.8 * Node.js 16 or later * npm 8 later * Pulsar 2.4.0 or later #### Build instructions 1. Clone the source code. ``` bash git clone https://github.com/apache/pulsar-manager ``` 2. Build and start the backend. ``` cd pulsar-manager ./gradlew build -x test cd build/distributions unzip pulsar-manager.zip or tar -zxvf pulsar-manager.tar ./pulsar-manager/bin/pulsar-manager ``` 3. Open a new terminal, build and start the front end. ``` cd pulsar-manager/front-end npm install --save npm run dev ``` After running these steps, the Pulsar Manager is running locally at http://127.0.0.1:9527/#/environments. ## Access Pulsar Manager 1. Access Pulsar manager UI at `http://${frontend-end-ip}/#/environments`. If you started Pulsar Manager using docker or docker-compose, the Pulsar Manager is running at port 9527. You can access the Pulsar Manager UI at http://127.0.0.1:9527/#/environments. If you are deploying Pulsar Manager 0.1.0 using the released container, you can log in the Pulsar Manager UI using the following credentials. * Account: `pulsar` * Password: `pulsar` If you are deploying Pulsar Manager using the latest code, you can create a super-user using the following command. Then you can use the super user credentials to log in the Pulsar Manager UI. ``` CSRF_TOKEN=$(curl http://backend-service:7750/pulsar-manager/csrf-token) curl \ -H "X-XSRF-TOKEN: $CSRF_TOKEN" \ -H "Cookie: XSRF-TOKEN=$CSRF_TOKEN;" \ -H 'Content-Type: application/json' \ -X PUT http://backend-service:7750/pulsar-manager/users/superuser \ -d '{"name": "admin", "password": "apachepulsar", "description": "test", "email": "[email protected]"}' ``` * `backend-service`: The IP address or domain name of the backend service. * `password`: The password should be more than or equal to 6 digits. 2. Create an environment. An environment represents a Pulsar instance or a group of clusters you want to manage. A Pulsar Manager is capable of managing multiple environments. - Click "New Environment" button to add an environment. - Input the "Environment Name". The environment name is used for identifying an environment. - Input the "Service URL". The Service URL is the admin service url of your Pulsar cluster. - You need to make sure the service url that Pulsar Manager is able to access. In this example, both pulsar container and pulsar-manager container are linked. So you can use pulsar container name as the domain name of the pulsar standalone cluster. Thus you can type `http://pulsar-standalone:8080`. - Input the "Bookie URL". In this example, you can type `http://pulsar-standalone:6650` ## Configure Pulsar Manager ### Back end For more information about the back end, see [pulsar-manager-backend](https://github.com/apache/pulsar-manager/blob/master/src/README.md). ### Front end For more information about the front end, see [pulsar-manager-frontend](https://github.com/apache/pulsar-manager/blob/master/front-end/README.md). ## Features * Tenants Management * Namespaces Management * Topics Management * Subscriptions Management * Brokers Management * Clusters Management * Dynamic environments with multiple changes * Support JWT Auth ### Log in Use the default account (`pulsar`) and the default password (`pulsar`) to log in. ![pulsar-manager-login](docs/img/pulsar-manager-login.gif) ### Configure environment The pulsar-manager supports multiple environment configurations and can manage multiple environments conveniently. Here, the service URL represents the service IP address of the broker. If you run Pulsar manager in the standalone mode, it should be set to "http://127.0.0.1:8080". You can easily find it in the client.conf file of your pulsar-manager. And the bookie URL represents the service IP address of the bookkeeper. If you run Pulsar manager in the standalone mode, it should be set to "http://127.0.0.1:6650". ![pulsar-manager-environments](docs/img/pulsar-manager-environments.gif) ### Manage tenants ![pulsar-manager-tenants](docs/img/pulsar-manager-tenants.gif) ### Manage namespaces ![pulsar-manager-namespaces](docs/img/pulsar-manager-namespaces.gif) ### Manage topics ![pulsar-manager-topics](docs/img/pulsar-manager-topics.gif) ### Manage subscriptions ![pulsar-manager-subscriptions](docs/img/pulsar-manager-subscriptions.gif) ### Manage clusters ![pulsar-manager-clusters](docs/img/pulsar-manager-clusters.gif) ### Manage brokers ![pulsar-manager-brokers](docs/img/pulsar-manager-brokers.gif) ### Topics monitoring The pulsar-manager can monitor topics and subscriptions. ![pulsar-manager-topics-monitors](docs/img/pulsar-manager-topics-monitors.gif) ### Manage token ![pulsar-manager-token](docs/img/pulsar-manager-token.gif) ## Casdoor ### Casdoor Installation You can use casdoor to realize sso. Casdoor can connect to Pulsar-manager simply. Because the code for connecting the casdoor has been added in Pulsar-manager, we need to configure the casdoor in the back-end and front-end. #### Step1. Deploy Casdoor Firstly, the Casdoor should be deployed. You can refer to the Casdoor official documentation for the [Casdoor](https://casdoor.org/docs/overview) After a successful deployment, you need to ensure: - The Casdoor server is successfully running on **http://localhost:8000**. - Open your favorite browser and visit **http://localhost:7001**, you will see the login page of Casdoor. - Input `admin` and `123` to test login functionality is working fine. Then you can quickly implement a casdoor based login page in your app with the following steps. #### step2. Configure Casdoor Configure casdoor can refer to [casdoor](https://door.casdoor.com/login)(Configure casdoor's browser better not use one browser with your develop browser). You also should configure the organization, and application, you also can refer to [casdoor](https://door.casdoor.com/login). ##### step2.1 you should create an organization ![organization](/docs/img/Pulsar-manager_editOrganization.svg) ##### step2.2 you should create an application ![application](/docs/img/Pulsar-manager_editApplication.svg) #### Step3. Configure back-end code You should configure casdoor's Configuration in the Line 154 of pulsar-manager/src/main/resources/application.properties ```ini casdoor.endpoint=http://localhost:8000 casdoor.clientId=<client id in previous step> casdoor.clientSecret=<client Secret in previous step> casdoor.certificate=<client certificate in previous step> casdoor.organizationName=pulsar casdoor.applicationName=app-pulsar ``` #### Step4. Configure front-end code You also need configure casdoor's Configuration in the Line 50 of pulsar-manager/front-end/src/main.js ``` const config = { serverUrl: "http://localhost:7001", clientId: "6ba06c1e1a30929fdda7", organizationName: "pulsar", appName: "app-plusar", redirectPath: "/#callback", }; ``` Now you can use Casdoor. ## Development ### Default Test database HerdDB #### Introduction Pulsar Manager bundles JDBC Drivers for [HerdDB](https://github.com/diennea/herddb). The default configuration starts and embedded in-memory only HerdDB database. HerdDB can be used in production, you just have to use the correct JDBC URL. Follow the instructions in [application.properties](https://github.com/apache/pulsar-manager/blob/master/src/main/resources/application.properties) to switch the connection to a standalone HerdDB service or cluster. The JDBC URL will look like this: jdbc:herddb:server:localhost:7000 In cluster mode HerdDB uses Apache BookKeeper and Apache ZooKeeper to store data and metadata, you can share your ZooKeeper cluster and the Bookies bundled with Pulsar. The JDBC URL will look like this: jdbc:herddb:zookeeper:localhost:2181/herddb In order to start and setup an HerdDB database follow the instructions on the [HerdDB documentation](https://github.com/diennea/herddb/wiki).

Database Internal Tools & Admin DB Admin & GUI Clients
540 Github Stars
seatunnel
Open Source

seatunnel

# Apache SeaTunnel <img src="https://seatunnel.apache.org/image/logo.png" alt="SeaTunnel Logo" height="200px" align="right" /> [![Build Workflow](https://github.com/apache/seatunnel/actions/workflows/build_main.yml/badge.svg?branch=dev)](https://github.com/apache/seatunnel/actions/workflows/build_main.yml) [![Join Slack](https://img.shields.io/badge/slack-%23seatunnel-4f8eba?logo=slack)](https://s.apache.org/seatunnel-slack) [![Twitter Follow](https://img.shields.io/twitter/follow/ASFSeaTunnel.svg?label=Follow&logo=twitter)](https://twitter.com/ASFSeaTunnel) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/apache/seatunnel) ## Overview SeaTunnel is a multimodal, high-performance, distributed data integration tool, capable of synchronizing vast amounts of data daily. It's trusted by numerous companies for its efficiency and stability. ## Why Choose SeaTunnel SeaTunnel addresses common data integration challenges: - **Diverse Data Sources**: Seamlessly integrates with hundreds of evolving data sources. - **Multimodal Data Integration**: Supports the integration of video, images, binary files, structured and unstructured text data. - **Complex Synchronization Scenarios**: Supports various synchronization methods, including real-time, CDC, and full database synchronization. - **Resource Efficiency**: Minimizes computing resources and JDBC connections for real-time synchronization. - **Quality and Monitoring**: Provides data quality and monitoring to prevent data loss or duplication. ## Key Features - **Diverse Connectors**: Offers support for over 160 connectors, with ongoing expansion. - **Batch-Stream Integration**: Easily adaptable connectors simplify data integration management. - **Distributed Snapshot Algorithm**: Ensures data consistency across synchronized data. - **Multi-Engine Support**: Works with SeaTunnel Zeta Engine, Flink, and Spark. - **JDBC Multiplexing and Log Parsing**: Efficiently synchronizes multi-tables and databases. - **High Throughput and Low Latency**: Provides high-throughput data synchronization with low latency. - **Real-Time Monitoring**: Offers detailed insights during synchronization. ## SeaTunnel Workflow ![SeaTunnel Workflow](docs/images/architecture_diagram.png) Configure jobs, select execution engines, and parallelize data using Source Connectors. Easily develop and extend connectors to meet your needs. ## Supported Connectors - [Source Connectors](https://seatunnel.apache.org/docs/connectors/source) - [Sink Connectors](https://seatunnel.apache.org/docs/connectors/sink) - [Transform Connectors](https://seatunnel.apache.org/docs/transforms) ## Getting Started Download SeaTunnel from the [Official Website](https://seatunnel.apache.org/download). Choose your runtime execution engine: - [SeaTunnel Zeta Engine](https://seatunnel.apache.org/docs/getting-started/locally/quick-start-seatunnel-engine) - [Spark](https://seatunnel.apache.org/docs/getting-started/locally/quick-start-spark) - [Flink](https://seatunnel.apache.org/docs/getting-started/locally/quick-start-flink) ## Multimodal Data Integration - Most data integration tools support structured and unstructured text data, and SeaTunnel does as well. Simply refer to the desired Source/Sink to use. - For integrating video, images, and binary files with SeaTunnel, please refer to the documentation for detailed instructions. ## Apache SeaTunnel Tools SeaTunnel Tools provides a range of peripheral tools, including Apache SeaTunnel Mcp Server, etc,please refer to [SeaTunnel Tools](https://github.com/apache/seatunnel-tools). ## Users Companies and organizations worldwide use SeaTunnel for research, production, and commercial products. Explore real-world use cases of SeaTunnel, such as JP morgan, S7, JDT, Bytedance, Tencent Cloud. More use cases can be found on the [SeaTunnel Users](https://seatunnel.apache.org/user). ## Code of Conduct Participate in this project in accordance with the Contributor Covenant [Code of Conduct](https://www.apache.org/foundation/policies/conduct). ## Contributors We appreciate all developers for their contributions. See the [List Of Contributors](https://github.com/apache/seatunnel/graphs/contributors). ## How to Compile Refer to this [Setup](https://seatunnel.apache.org/docs/developer/setup) for compilation instructions. ## Contact Us - Mail list: **[email protected]**. Subscribe by sending an email to `[email protected]`. - Slack: [Join SeaTunnel Slack](https://s.apache.org/seatunnel-slack) - Twitter: [ASFSeaTunnel on Twitter](https://twitter.com/ASFSeaTunnel) ## Landscapes SeaTunnel enriches the [CNCF CLOUD NATIVE Landscape](https://landscape.cncf.io/?landscape=observability-and-analysis&license=apache-license-2-0). ## License [Apache 2.0 License](LICENSE) ## Frequently Asked Questions ### 1. How do I install SeaTunnel? Follow the [Local Deployment](https://seatunnel.apache.org/docs/getting-started/locally/deployment) on SeaTunnel website to get started quickly. Please refer to the [Cluster Deployment](https://seatunnel.apache.org/docs/engines/zeta/hybrid-cluster-deployment) ### 2. Where can I find documentation and tutorials? [Official Documentation](https://seatunnel.apache.org/docs) includes detailed guides and tutorials to help you get started. ### 3. Is there a community or support channel? You can submit an issue on [GitHub Issues](https://github.com/apache/seatunnel/issues). Join our Slack community [SeaTunnel Slack](https://s.apache.org/seatunnel-slack). More information, please refer to [FAQ](https://seatunnel.apache.org/docs/faq). ### 4. How can I contribute to SeaTunnel? We welcome contributions! Please refer to our [Contribution Guidelines](https://seatunnel.apache.org/docs/developer/coding-guide) for details.

AI & Machine Learning Data Pipelines & ETL
9.4K Github Stars
hertzbeat
Open Source

hertzbeat

<p align="center"> <a href="https://hertzbeat.apache.org"> <img alt="hertzbeat" src="/home/static/img/hertzbeat-brand.svg" width="260"> </a> </p> <p align="center"> <b>Readme</b>: <b><a href="README.md">English</a></b> | <a href="README_CN.md">中文</a> | <a href="README_JP.md">日本語</a> </p> [![Discord](https://img.shields.io/badge/Chat-Discord-7289DA?logo=discord)](https://discord.gg/Fb6M73htGr) [![Twitter](https://img.shields.io/twitter/follow/hertzbeat1024?logo=twitter)](https://x.com/hertzbeat1024) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/8139/badge)](https://www.bestpractices.dev/projects/8139) [![codecov](https://codecov.io/gh/apache/HertzBeat/branch/master/graph/badge.svg)](https://app.codecov.io/gh/apache/hertzbeat) [![Docker Pulls](https://img.shields.io/docker/pulls/apache/hertzbeat?style=%20for-the-badge&logo=docker&label=DockerHub%20Download)](https://hub.docker.com/r/apache/hertzbeat) [![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/hertzbeat)](https://artifacthub.io/packages/search?repo=hertzbeat) [![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCri75zfWX0GHqJFPENEbLow?logo=youtube&label=YouTube%20Channel)](https://www.youtube.com/channel/UCri75zfWX0GHqJFPENEbLow) [![Contribute with Gitpod](https://img.shields.io/badge/Contribute%20with-Gitpod-908a85?logo=gitpod&color=green)](https://gitpod.io/#https://github.com/apache/hertzbeat) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/apache/hertzbeat) [![zread](https://img.shields.io/badge/Ask_Zread-_.svg?style=flat&color=00b0aa&labelColor=000000&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQuOTYxNTYgMS42MDAxSDIuMjQxNTZDMS44ODgxIDEuNjAwMSAxLjYwMTU2IDEuODg2NjQgMS42MDE1NiAyLjI0MDFWNC45NjAxQzEuNjAxNTYgNS4zMTM1NiAxLjg4ODEgNS42MDAxIDIuMjQxNTYgNS42MDAxSDQuOTYxNTZDNS4zMTUwMiA1LjYwMDEgNS42MDE1NiA1LjMxMzU2IDUuNjAxNTYgNC45NjAxVjIuMjQwMUM1LjYwMTU2IDEuODg2NjQgNS4zMTUwMiAxLjYwMDEgNC45NjE1NiAxLjYwMDFaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00Ljk2MTU2IDEwLjM5OTlIMi4yNDE1NkMxLjg4ODEgMTAuMzk5OSAxLjYwMTU2IDEwLjY4NjQgMS42MDE1NiAxMS4wMzk5VjEzLjc1OTlDMS42MDE1NiAxNC4xMTM0IDEuODg4MSAxNC4zOTk5IDIuMjQxNTYgMTQuMzk5OUg0Ljk2MTU2QzUuMzE1MDIgMTQuMzk5OSA1LjYwMTU2IDE0LjExMzQgNS42MDE1NiAxMy43NTk5VjExLjAzOTlDNS42MDE1NiAxMC42ODY0IDUuMzE1MDIgMTAuMzk5OSA0Ljk2MTU2IDEwLjM5OTlaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik0xMy43NTg0IDEuNjAwMUgxMS4wMzg0QzEwLjY4NSAxLjYwMDEgMTAuMzk4NCAxLjg4NjY0IDEwLjM5ODQgMi4yNDAxVjQuOTYwMUMxMC4zOTg0IDUuMzEzNTYgMTAuNjg1IDUuNjAwMSAxMS4wMzg0IDUuNjAwMUgxMy43NTg0QzE0LjExMTkgNS42MDAxIDE0LjM5ODQgNS4zMTM1NiAxNC4zOTg0IDQuOTYwMVYyLjI0MDFDMTQuMzk4NCAxLjg4NjY0IDE0LjExMTkgMS42MDAxIDEzLjc1ODQgMS42MDAxWiIgZmlsbD0iI2ZmZiIvPgo8cGF0aCBkPSJNNCAxMkwxMiA0TDQgMTJaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00IDEyTDEyIDQiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8L3N2Zz4K&logoColor=ffffff)](https://zread.ai/apache/hertzbeat) **Home: [hertzbeat.apache.org](https://hertzbeat.apache.org)** **Email: <a href="mailto:[email protected]">Mail to `[email protected]`</a> to subscribe mailing lists** ## 🎡 <font color="green">Introduction</font> [Apache HertzBeat™](https://github.com/apache/hertzbeat) is an AI-powered next-generation open source real-time observability system. Unified metrics and logs collection, centralized alerting distribution, intelligent management and analysis. No Agent required, high performance cluster, provides powerful custom monitoring and status page building capabilities. ### Features - Integrates **collection + analysis + alerting + notification** into one platform, with new AI-powered interactions and features under HertzBeat AI, and built-in MCP Server capabilities. - Unified metrics platform, agentless, Prometheus-compatible, supports application services, programs, databases, caches, operating systems, big data, middleware, web servers, cloud-native, networks, custom monitoring and more. - Unified logging platform, seamlessly integrates multiple log sources through OTLP protocol for reporting. - Unified alerting platform, integrates internal alerts with various external alert sources, unified alert processing and analysis, flexible real-time and periodic threshold rules, grouping convergence, silence, suppression, etc. - Unified message distribution, alerts processed by the alerting platform are distributed via `Email` `Discord` `Slack` `Telegram` `DingTalk` `WeChat` `FeiShu` `SMS` `Webhook` `ServerChan` and other methods. - Makes protocols such as `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` configurable, allowing you to collect any metrics by simply configuring the template `YML` file online. Imagine being able to quickly adapt to a new monitoring type like K8s or Docker simply by configuring online with HertzBeat. - High performance, supports horizontal expansion of multi-collector clusters, multi-isolated network monitoring and cloud-edge collaboration. - Provides powerful status page building capabilities, easily communicate the real-time status of your service to users. > HertzBeat's unified platform, AI intelligence, powerful customization, multi-type support, high performance, and easy expansion, aims to help users quickly and conveniently achieve observability requirements. ---- ---- ## 🥐 Architecture ![HertzBeat](home/static/img/docs/hertzbeat-arch.png) ## ⛄ Supported > We define all metrics collection types such as `mysql`, `jvm`, and `k8s` as `YML` templates, allowing users to import them to support corresponding types of monitoring. > Welcome everyone to contribute your customized general metrics type YML template during use. - [Website](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-website.yml), [Port Telnet](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-port.yml), [Http Api](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-api.yml), [Ping Connect](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-ping.yml), [Jvm](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-jvm.yml), [SiteMap](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-fullsite.yml), [Ssl Certificate](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-ssl_cert.yml), [SpringBoot2](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-springboot2.yml), [FTP Server](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-ftp.yml), [SpringBoot3](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-springboot3.yml), [Udp Port](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-udp_port.yml), [Dns](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-dns.yml), [Pop3](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-pop3.yml), [Ntp](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-ntp.yml), [Api Code](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-api_code.yml), [Smtp](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-smtp.yml), [Nginx](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-nginx.yml) - [Mysql](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-mysql.yml), [PostgreSQL](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-postgresql.yml), [MariaDB](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-mariadb.yml), [Redis](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-redis.yml), [ElasticSearch](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-elasticsearch.yml), [SqlServer](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-sqlserver.yml), [Oracle](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-oracle.yml), [MongoDB](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-mongodb.yml), [DM](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-dm.yml), [OpenGauss](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-opengauss.yml), [ClickHouse](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-clickhouse.yml), [IoTDB](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-iotdb.yml), [Redis Cluster](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-redis_cluster.yml), [Redis Sentinel](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-redis_sentinel.yml) [Doris BE](https://github.com/apache/hertzbeat/blob/master/hertzbeat-manager/src/main/resources/define/app-doris_be.yml), [Doris FE](https://github.com/apache/hertzbeat/blob/master/hertzbeat-manager/src/main/resources/define/app-doris_fe.yml), [Memcached](https://github.com/apache/hertzbeat/blob/master/hertzbeat-manager/src/main/resources/define/app-memcached.yml), [NebulaGraph](https://github.com/apache/hertzbeat/blob/master/hertzbeat-manager/src/main/resources/define/app-nebula_graph.yml) - [Linux](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-linux.yml), [Ubuntu](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-ubuntu.yml), [CentOS](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-centos.yml), [Windows](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-windows.yml), [EulerOS](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-euleros.yml), [Fedora CoreOS](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-coreos.yml), [OpenSUSE](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-opensuse.yml), [Rocky Linux](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-rockylinux.yml), [Red Hat](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-redhat.yml), [FreeBSD](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-freebsd.yml), [AlmaLinux](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-almalinux.yml), [Debian Linux](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-debian.yml) - [Tomcat](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-tomcat.yml), [Nacos](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-nacos.yml), [Zookeeper](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-zookeeper.yml), [RabbitMQ](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-rabbitmq.yml), [Flink](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-flink.yml), [Kafka](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-kafka.yml), [ShenYu](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-shenyu.yml), [DynamicTp](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-dynamic_tp.yml), [Jetty](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-jetty.yml), [ActiveMQ](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-activemq.yml), [Spring Gateway](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-spring_gateway.yml), [EMQX MQTT](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-emqx.yml), [AirFlow](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-airflow.yml), [Hive](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-hive.yml), [Spark](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-spark.yml), [Hadoop](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-hadoop.yml) - [Kubernetes](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-kubernetes.yml), [Docker](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-docker.yml) - [CiscoSwitch](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-cisco_switch.yml), [HpeSwitch](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-hpe_switch.yml), [HuaweiSwitch](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-huawei_switch.yml), [TpLinkSwitch](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-tplink_switch.yml), [H3cSwitch](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-h3c_switch.yml) - And More Your Custom Template. - Notified Support `Discord` `Slack` `Telegram` `Email` `Dingtalk` `WeChat` `FeiShu` `Webhook` `SMS` `ServerChan`. ## 🐕 Quick Start - If you wish to deploy HertzBeat locally, please refer to the following Deployment Documentation for instructions. ### 🍞 Install HertzBeat > HertzBeat supports installation through source code, docker or package, cpu support x86/arm64. ##### 1:Install quickly via docker 1. Just one command to get started ```shell docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat apache/hertzbeat ``` 2. Access `http://localhost:1157` to start, default account: `admin/hertzbeat` 3. Deploy collector clusters (Optional) ```shell docker run -d -e IDENTITY=custom-collector-name -e MANAGER_HOST=127.0.0.1 -e MANAGER_PORT=1158 --name hertzbeat-collector apache/hertzbeat-collector ``` - `-e IDENTITY=custom-collector-name` : set the collector unique identity name. - `-e MODE=public` : set the running mode(public or private), public cluster or private cloud-edge. - `-e MANAGER_HOST=127.0.0.1` : set the main hertzbeat server ip. - `-e MANAGER_PORT=1158` : set the main hertzbeat server port, default 1158. Detailed config refer to [Install HertzBeat via Docker](https://hertzbeat.apache.org/docs/start/docker-deploy) ##### 2:Install via package 1. Download the release package `apache-hertzbeat-xx-bin.tar.gz` [Download](https://hertzbeat.apache.org/docs/download) 2. Configure the HertzBeat configuration yml file `hertzbeat/config/application.yml` (optional) 3. Run command `$ ./bin/startup.sh ` or `bin/startup.bat` 4. Access `http://localhost:1157` to start, default account: `admin/hertzbeat` 5. Deploy collector clusters (Optional) - Download the release package `apache-hertzbeat-collector-xx-bin.tar.gz` (JVM collector) or the native collector package for your platform, such as `apache-hertzbeat-collector-native-xx-linux-amd64-bin.tar.gz` or `apache-hertzbeat-collector-native-xx-windows-amd64-bin.zip`, to the new machine [Download](https://hertzbeat.apache.org/docs/download) - Configure the collector configuration yml file `hertzbeat-collector/config/application.yml`: unique `identity` name, running `mode` (public or private), hertzbeat `manager-host`, hertzbeat `manager-port` ```yaml collector: dispatch: entrance: netty: enabled: true identity: ${IDENTITY:} mode: ${MODE:public} manager-host: ${MANAGER_HOST:127.0.0.1} manager-port: ${MANAGER_PORT:1158} ``` - If you do not provide JDBC drivers in `ext-lib`, MySQL, MariaDB, and OceanBase can use the built-in query engine and run on the native collector package as well. TiDB follows the same rule for its SQL query metric set. - If `mysql-connector-j` is present in `ext-lib`, the built-in server collector or JVM collector automatically prefers JDBC after restart for MySQL, MariaDB, and OceanBase. TiDB follows the same rule for its SQL query metric set, while its HTTP metrics are unchanged. Oracle and DB2 still require the JVM collector package because they depend on external JDBC drivers. - Run `$ ./bin/startup.sh ` or `bin/startup.bat` for the JVM collector package. Run `$ ./bin/startup.sh ` for Linux or macOS native collector packages, and `bin\\startup.bat` for the Windows native collector package. - Access `http://localhost:1157` and you will see the registered new collector in dashboard Detailed config refer to [Install HertzBeat via Package](https://hertzbeat.apache.org/docs/start/package-deploy) ##### 3:Start via source code 1. Local source code debugging needs to start the back-end project `hertzbeat-startup` and the front-end project `web-app`. 2. Backend:need `maven3+`, `java25`, `lombok`, add VM options in IDE: ` --add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED `, then start the `hertzbeat-startup` service. 3. Web:need `nodejs npm angular-cli` environment, Run `ng serve --open` in `web-app` directory after backend startup. 4. Access `http://localhost:4200` to start, default account: `admin/hertzbeat` Detailed steps refer to [CONTRIBUTING](CONTRIBUTING.md) ##### 4:Install All(hertzbeat+postgresql+tsdb) via Docker-compose Install the postgresql/mysql database, victoria-metrics/iotdb/tdengine database and hertzbeat at one time through [docker-compose deployment script](script/docker-compose). Detailed steps refer to [Install via Docker-Compose](script/docker-compose/README.md) ##### 5: Install All(hertzbeat+collector+postgresql+tsdb) via kubernetes helm charts Install HertzBeat cluster in a Kubernetes cluster by Helm chart. Detailed steps refer to [Artifact Hub](https://artifacthub.io/packages/helm/hertzbeat/hertzbeat) **HAVE FUN** ## ✨ Contributors Thanks to these wonderful people, welcome to join us: [Contributor Guide](CONTRIBUTING.md) <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --> <!-- prettier-ignore-start --> <!-- markdownlint-disable --> <table> <tbody> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/tomsun28"><img src="https://avatars.githubusercontent.com/u/24788200?v=4?s=100" width="100px;" alt="tomsun28"/><br /><sub><b>tomsun28</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=tomsun28" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=tomsun28" title="Documentation">📖</a> <a href="#design-tomsun28" title="Design">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/wang1027-wqh"><img src="https://avatars.githubusercontent.com/u/71161318?v=4?s=100" width="100px;" alt="会编程的王学长"/><br /><sub><b>会编程的王学长</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wang1027-wqh" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=wang1027-wqh" title="Documentation">📖</a> <a href="#design-wang1027-wqh" title="Design">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://www.maxkey.top/"><img src="https://avatars.githubusercontent.com/u/1563377?v=4?s=100" width="100px;" alt="MaxKey"/><br /><sub><b>MaxKey</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=shimingxy" title="Code">💻</a> <a href="#design-shimingxy" title="Design">🎨</a> <a href="#ideas-shimingxy" title="Ideas, Planning, & Feedback">🤔</a></td> <td align="center" valign="top" width="14.28%"><a href="https://blog.gcdd.top/"><img src="https://avatars.githubusercontent.com/u/26523525?v=4?s=100" width="100px;" alt="观沧海"/><br /><sub><b>观沧海</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=gcdd1993" title="Code">💻</a> <a href="#design-gcdd1993" title="Design">🎨</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Agcdd1993" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/a25017012"><img src="https://avatars.githubusercontent.com/u/32265356?v=4?s=100" width="100px;" alt="yuye"/><br /><sub><b>yuye</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=a25017012" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=a25017012" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/jx10086"><img src="https://avatars.githubusercontent.com/u/5323228?v=4?s=100" width="100px;" alt="jx10086"/><br /><sub><b>jx10086</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=jx10086" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Ajx10086" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/winnerTimer"><img src="https://avatars.githubusercontent.com/u/76024658?v=4?s=100" width="100px;" alt="winnerTimer"/><br /><sub><b>winnerTimer</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=winnerTimer" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3AwinnerTimer" title="Bug reports">🐛</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/goo-kits"><img src="https://avatars.githubusercontent.com/u/13163673?v=4?s=100" width="100px;" alt="goo-kits"/><br /><sub><b>goo-kits</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=goo-kits" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Agoo-kits" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/brave4Time"><img src="https://avatars.githubusercontent.com/u/105094014?v=4?s=100" width="100px;" alt="brave4Time"/><br /><sub><b>brave4Time</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=brave4Time" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Abrave4Time" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/walkerlee-lab"><img src="https://avatars.githubusercontent.com/u/8426753?v=4?s=100" width="100px;" alt="WalkerLee"/><br /><sub><b>WalkerLee</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=walkerlee-lab" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Awalkerlee-lab" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/fullofjoy"><img src="https://avatars.githubusercontent.com/u/30247571?v=4?s=100" width="100px;" alt="jianghang"/><br /><sub><b>jianghang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=fullofjoy" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Afullofjoy" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ChineseTony"><img src="https://avatars.githubusercontent.com/u/24618786?v=4?s=100" width="100px;" alt="ChineseTony"/><br /><sub><b>ChineseTony</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ChineseTony" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3AChineseTony" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/wyt199905"><img src="https://avatars.githubusercontent.com/u/85098809?v=4?s=100" width="100px;" alt="wyt199905"/><br /><sub><b>wyt199905</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wyt199905" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/weifuqing"><img src="https://avatars.githubusercontent.com/u/13931013?v=4?s=100" width="100px;" alt="卫傅庆"/><br /><sub><b>卫傅庆</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=weifuqing" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Aweifuqing" title="Bug reports">🐛</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/zklmcookle"><img src="https://avatars.githubusercontent.com/u/107192352?v=4?s=100" width="100px;" alt="zklmcookle"/><br /><sub><b>zklmcookle</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=zklmcookle" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/DevilX5"><img src="https://avatars.githubusercontent.com/u/13269921?v=4?s=100" width="100px;" alt="DevilX5"/><br /><sub><b>DevilX5</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=DevilX5" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=DevilX5" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/djzeng"><img src="https://avatars.githubusercontent.com/u/14074864?v=4?s=100" width="100px;" alt="tea"/><br /><sub><b>tea</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=djzeng" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/yangshihui"><img src="https://avatars.githubusercontent.com/u/28550208?v=4?s=100" width="100px;" alt="yangshihui"/><br /><sub><b>yangshihui</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yangshihui" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Ayangshihui" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/DreamGirl524"><img src="https://avatars.githubusercontent.com/u/81132838?v=4?s=100" width="100px;" alt="DreamGirl524"/><br /><sub><b>DreamGirl524</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=DreamGirl524" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=DreamGirl524" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/gzwlly"><img src="https://avatars.githubusercontent.com/u/83171907?v=4?s=100" width="100px;" alt="gzwlly"/><br /><sub><b>gzwlly</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=gzwlly" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/cuipiheqiuqiu"><img src="https://avatars.githubusercontent.com/u/76642201?v=4?s=100" width="100px;" alt="cuipiheqiuqiu"/><br /><sub><b>cuipiheqiuqiu</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=cuipiheqiuqiu" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=cuipiheqiuqiu" title="Tests">⚠️</a> <a href="#design-cuipiheqiuqiu" title="Design">🎨</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/oyiyou"><img src="https://avatars.githubusercontent.com/u/39228891?v=4?s=100" width="100px;" alt="lambert"/><br /><sub><b>lambert</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=oyiyou" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="http://mroldx.xyz/"><img src="https://avatars.githubusercontent.com/u/34847828?v=4?s=100" width="100px;" alt="mroldx"/><br /><sub><b>mroldx</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=mroldx" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/woshiniusange"><img src="https://avatars.githubusercontent.com/u/91513022?v=4?s=100" width="100px;" alt="woshiniusange"/><br /><sub><b>woshiniusange</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=woshiniusange" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://vampireachao.github.io/"><img src="https://avatars.githubusercontent.com/u/52746628?v=4?s=100" width="100px;" alt="VampireAchao"/><br /><sub><b>VampireAchao</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=VampireAchao" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Ceilzcx"><img src="https://avatars.githubusercontent.com/u/48920254?v=4?s=100" width="100px;" alt="zcx"/><br /><sub><b>zcx</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Ceilzcx" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3ACeilzcx" title="Bug reports">🐛</a> <a href="#design-Ceilzcx" title="Design">🎨</a> <a href="https://github.com/apache/hertzbeat/commits?author=Ceilzcx" title="Tests">⚠️</a> <a href="#blog-Ceilzcx" title="Blogposts">📝</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/CharlieXCL"><img src="https://avatars.githubusercontent.com/u/91540487?v=4?s=100" width="100px;" alt="CharlieXCL"/><br /><sub><b>CharlieXCL</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=CharlieXCL" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Privauto"><img src="https://avatars.githubusercontent.com/u/36581456?v=4?s=100" width="100px;" alt="Privauto"/><br /><sub><b>Privauto</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Privauto" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=Privauto" title="Documentation">📖</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/emrys-he"><img src="https://avatars.githubusercontent.com/u/5848915?v=4?s=100" width="100px;" alt="emrys"/><br /><sub><b>emrys</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=emrys-he" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/SxLiuYu"><img src="https://avatars.githubusercontent.com/u/95198625?v=4?s=100" width="100px;" alt="SxLiuYu"/><br /><sub><b>SxLiuYu</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/issues?q=author%3ASxLiuYu" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://allcontributors.org"><img src="https://avatars.githubusercontent.com/u/46410174?v=4?s=100" width="100px;" alt="All Contributors"/><br /><sub><b>All Contributors</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=all-contributors" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/gxc-myh"><img src="https://avatars.githubusercontent.com/u/85919258?v=4?s=100" width="100px;" alt="铁甲小宝"/><br /><sub><b>铁甲小宝</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=gxc-myh" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=gxc-myh" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/click33"><img src="https://avatars.githubusercontent.com/u/36243476?v=4?s=100" width="100px;" alt="click33"/><br /><sub><b>click33</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=click33" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://jpom.io/"><img src="https://avatars.githubusercontent.com/u/16408873?v=4?s=100" width="100px;" alt="蒋小小"/><br /><sub><b>蒋小小</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=bwcx-jzy" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://www.zhihu.com/people/kevinbauer"><img src="https://avatars.githubusercontent.com/u/28581579?v=4?s=100" width="100px;" alt="Kevin Huang"/><br /><sub><b>Kevin Huang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=kevinhuangwl" title="Documentation">📖</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/TJxiaobao"><img src="https://avatars.githubusercontent.com/u/85919258?v=4?s=100" width="100px;" alt="铁甲小宝"/><br /><sub><b>铁甲小宝</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/issues?q=author%3ATJxiaobao" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=TJxiaobao" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=TJxiaobao" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=TJxiaobao" title="Tests">⚠️</a> <a href="#design-TJxiaobao" title="Design">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Jack-123-power"><img src="https://avatars.githubusercontent.com/u/84333501?v=4?s=100" width="100px;" alt="Captain Jack"/><br /><sub><b>Captain Jack</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Jack-123-power" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/haibo-duan"><img src="https://avatars.githubusercontent.com/u/7974845?v=4?s=100" width="100px;" alt="haibo.duan"/><br /><sub><b>haibo.duan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=haibo-duan" title="Tests">⚠️</a> <a href="https://github.com/apache/hertzbeat/commits?author=haibo-duan" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/assassinfym"><img src="https://avatars.githubusercontent.com/u/15188754?v=4?s=100" width="100px;" alt="assassin"/><br /><sub><b>assassin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/issues?q=author%3Aassassinfym" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=assassinfym" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/csyshu"><img src="https://avatars.githubusercontent.com/u/46591658?v=4?s=100" width="100px;" alt="Reverse wind"/><br /><sub><b>Reverse wind</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=csyshu" title="Tests">⚠️</a> <a href="https://github.com/apache/hertzbeat/commits?author=csyshu" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/luxx-lq"><img src="https://avatars.githubusercontent.com/u/58515565?v=4?s=100" width="100px;" alt="luxx"/><br /><sub><b>luxx</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=luxx-lq" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Ashimine"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=eltociear" title="Documentation">📖</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/zenan08"><img src="https://avatars.githubusercontent.com/u/80514991?v=4?s=100" width="100px;" alt="leizenan"/><br /><sub><b>leizenan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=zenan08" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/BKing2020"><img src="https://avatars.githubusercontent.com/u/28869121?v=4?s=100" width="100px;" alt="BKing"/><br /><sub><b>BKing</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=BKing2020" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/xingshuaiLi"><img src="https://avatars.githubusercontent.com/u/119487588?v=4?s=100" width="100px;" alt="xingshuaiLi"/><br /><sub><b>xingshuaiLi</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=xingshuaiLi" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/wangke6666"><img src="https://avatars.githubusercontent.com/u/113656595?v=4?s=100" width="100px;" alt="wangke6666"/><br /><sub><b>wangke6666</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wangke6666" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/LWBobo"><img src="https://avatars.githubusercontent.com/u/50368698?v=4?s=100" width="100px;" alt="刺猬"/><br /><sub><b>刺猬</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/issues?q=author%3ALWBobo" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=LWBobo" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="http://www.zanglikun.com"><img src="https://avatars.githubusercontent.com/u/61591648?v=4?s=100" width="100px;" alt="Haste"/><br /><sub><b>Haste</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=zanglikun" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/SuitSmile"><img src="https://avatars.githubusercontent.com/u/38679717?v=4?s=100" width="100px;" alt="zhongshi.yi"/><br /><sub><b>zhongshi.yi</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=SuitSmile" title="Documentation">📖</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://www.smallq.cn"><img src="https://avatars.githubusercontent.com/u/39754275?v=4?s=100" width="100px;" alt="Qi Zhang"/><br /><sub><b>Qi Zhang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=zzzhangqi" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/MrAndyMing"><img src="https://avatars.githubusercontent.com/u/49541483?v=4?s=100" width="100px;" alt="MrAndyMing"/><br /><sub><b>MrAndyMing</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=MrAndyMing" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://idongliming.github.io/"><img src="https://avatars.githubusercontent.com/u/31564353?v=4?s=100" width="100px;" alt="idongliming"/><br /><sub><b>idongliming</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=idongliming" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://earthjasonlin.github.io"><img src="https://avatars.githubusercontent.com/u/83632110?v=4?s=100" width="100px;" alt="Zichao Lin"/><br /><sub><b>Zichao Lin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=earthjasonlin" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=earthjasonlin" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="http://blog.liudonghua.com"><img src="https://avatars.githubusercontent.com/u/2276718?v=4?s=100" width="100px;" alt="liudonghua"/><br /><sub><b>liudonghua</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=liudonghua123" title="Code">💻</a> <a href="#ideas-liudonghua123" title="Ideas, Planning, & Feedback">🤔</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/orangeyts"><img src="https://avatars.githubusercontent.com/u/4250869?v=4?s=100" width="100px;" alt="Jerry"/><br /><sub><b>Jerry</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=orangeyts" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=orangeyts" title="Tests">⚠️</a> <a href="#ideas-orangeyts" title="Ideas, Planning, & Feedback">🤔</a></td> <td align="center" valign="top" width="14.28%"><a href="https://dynamictp.cn"><img src="https://avatars.githubusercontent.com/u/13051908?v=4?s=100" width="100px;" alt="yanhom"/><br /><sub><b>yanhom</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yanhom1314" title="Documentation">📖</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://www.jianshu.com/u/a8f822c04f67"><img src="https://avatars.githubusercontent.com/u/18587688?v=4?s=100" width="100px;" alt="fsl"/><br /><sub><b>fsl</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=fengshunli" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/xttttv"><img src="https://avatars.githubusercontent.com/u/116323904?v=4?s=100" width="100px;" alt="xttttv"/><br /><sub><b>xttttv</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=xttttv" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/NavinKumarBarnwal"><img src="https://avatars.githubusercontent.com/u/44504274?v=4?s=100" width="100px;" alt="NavinKumarBarnwal"/><br /><sub><b>NavinKumarBarnwal</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=NavinKumarBarnwal" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/z641205699"><img src="https://avatars.githubusercontent.com/u/45276423?v=4?s=100" width="100px;" alt="Zakkary"/><br /><sub><b>Zakkary</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=z641205699" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/898349230"><img src="https://avatars.githubusercontent.com/u/21972532?v=4?s=100" width="100px;" alt="sunxinbo"/><br /><sub><b>sunxinbo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=898349230" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=898349230" title="Tests">⚠️</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ldzbook"><img src="https://avatars.githubusercontent.com/u/13903790?v=4?s=100" width="100px;" alt="ldzbook"/><br /><sub><b>ldzbook</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ldzbook" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Aldzbook" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/SurryChen"><img src="https://avatars.githubusercontent.com/u/91116490?v=4?s=100" width="100px;" alt="余与雨"/><br /><sub><b>余与雨</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=SurryChen" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=SurryChen" title="Tests">⚠️</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/MysticalDream"><img src="https://avatars.githubusercontent.com/u/78899028?v=4?s=100" width="100px;" alt="MysticalDream"/><br /><sub><b>MysticalDream</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=MysticalDream" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=MysticalDream" title="Tests">⚠️</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/zhouyoulin12"><img src="https://avatars.githubusercontent.com/u/17086633?v=4?s=100" width="100px;" alt="zhouyoulin12"/><br /><sub><b>zhouyoulin12</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=zhouyoulin12" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=zhouyoulin12" title="Tests">⚠️</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/jerjjj"><img src="https://avatars.githubusercontent.com/u/93431283?v=4?s=100" width="100px;" alt="jerjjj"/><br /><sub><b>jerjjj</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=jerjjj" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://wjl110.xyz/"><img src="https://avatars.githubusercontent.com/u/53851034?v=4?s=100" width="100px;" alt="wjl110"/><br /><sub><b>wjl110</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wjl110" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ngyhd"><img src="https://avatars.githubusercontent.com/u/29095207?v=4?s=100" width="100px;" alt="Sean"/><br /><sub><b>Sean</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ngyhd" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Daydreamer-ia"><img src="https://avatars.githubusercontent.com/u/83362909?v=4?s=100" width="100px;" alt="chenyiqin"/><br /><sub><b>chenyiqin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Daydreamer-ia" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=Daydreamer-ia" title="Tests">⚠️</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/hudongdong129"><img src="https://avatars.githubusercontent.com/u/34374227?v=4?s=100" width="100px;" alt="hudongdong129"/><br /><sub><b>hudongdong129</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=hudongdong129" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=hudongdong129" title="Tests">⚠️</a> <a href="https://github.com/apache/hertzbeat/commits?author=hudongdong129" title="Documentation">📖</a> <a href="#design-hudongdong129" title="Design">🎨</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/TherChenYang"><img src="https://avatars.githubusercontent.com/u/124348939?v=4?s=100" width="100px;" alt="TherChenYang"/><br /><sub><b>TherChenYang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=TherChenYang" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=TherChenYang" title="Tests">⚠️</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/HattoriHenzo"><img src="https://avatars.githubusercontent.com/u/5141285?v=4?s=100" width="100px;" alt="HattoriHenzo"/><br /><sub><b>HattoriHenzo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=HattoriHenzo" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=HattoriHenzo" title="Tests">⚠️</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ycilry"><img src="https://avatars.githubusercontent.com/u/63967101?v=4?s=100" width="100px;" alt="ycilry"/><br /><sub><b>ycilry</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ycilry" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/aoshiguchen"><img src="https://avatars.githubusercontent.com/u/10580997?v=4?s=100" width="100px;" alt="aoshiguchen"/><br /><sub><b>aoshiguchen</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=aoshiguchen" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=aoshiguchen" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/caibenxiang"><img src="https://avatars.githubusercontent.com/u/4568241?v=4?s=100" width="100px;" alt="蔡本祥"/><br /><sub><b>蔡本祥</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=caibenxiang" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="http://www.fckeverything.cn:4000/"><img src="https://avatars.githubusercontent.com/u/13827124?v=4?s=100" width="100px;" alt="浮游"/><br /><sub><b>浮游</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=lifefloating" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Grass-Life"><img src="https://avatars.githubusercontent.com/u/114381513?v=4?s=100" width="100px;" alt="Grass-Life"/><br /><sub><b>Grass-Life</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Grass-Life" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/xiaohe428"><img src="https://avatars.githubusercontent.com/u/99130317?v=4?s=100" width="100px;" alt="xiaohe428"/><br /><sub><b>xiaohe428</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=xiaohe428" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=xiaohe428" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/baiban114"><img src="https://avatars.githubusercontent.com/u/59152619?v=4?s=100" width="100px;" alt="TableRow"/><br /><sub><b>TableRow</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=baiban114" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=baiban114" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ByteIDance"><img src="https://avatars.githubusercontent.com/u/100207562?v=4?s=100" width="100px;" alt="ByteIDance"/><br /><sub><b>ByteIDance</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ByteIDance" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/mangel2002"><img src="https://avatars.githubusercontent.com/u/9348020?v=4?s=100" width="100px;" alt="Jangfe"/><br /><sub><b>Jangfe</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=mangel2002" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/zqr10159"><img src="https://avatars.githubusercontent.com/u/30048352?v=4?s=100" width="100px;" alt="zqr10159"/><br /><sub><b>zqr10159</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=zqr10159" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=zqr10159" title="Code">💻</a> <a href="#blog-zqr10159" title="Blogposts">📝</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Azqr10159" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=zqr10159" title="Tests">⚠️</a> <a href="#design-zqr10159" title="Design">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/vinci-897"><img src="https://avatars.githubusercontent.com/u/55838224?v=4?s=100" width="100px;" alt="vinci"/><br /><sub><b>vinci</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=vinci-897" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=vinci-897" title="Documentation">📖</a> <a href="#design-vinci-897" title="Design">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/js110"><img src="https://avatars.githubusercontent.com/u/51191863?v=4?s=100" width="100px;" alt="js110"/><br /><sub><b>js110</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=js110" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/JavaLionLi"><img src="https://avatars.githubusercontent.com/u/31852897?v=4?s=100" width="100px;" alt="CrazyLionLi"/><br /><sub><b>CrazyLionLi</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=JavaLionLi" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="http://www.banmajio.com"><img src="https://avatars.githubusercontent.com/u/53471385?v=4?s=100" width="100px;" alt="banmajio"/><br /><sub><b>banmajio</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=banmajio" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://suder.fun"><img src="https://avatars.githubusercontent.com/u/69955165?v=4?s=100" width="100px;" alt="topsuder"/><br /><sub><b>topsuder</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=topsuder" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/richar2022"><img src="https://avatars.githubusercontent.com/u/129016397?v=4?s=100" width="100px;" alt="richar2022"/><br /><sub><b>richar2022</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=richar2022" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/fcb-xiaobo"><img src="https://avatars.githubusercontent.com/u/60566194?v=4?s=100" width="100px;" alt="fcb-xiaobo"/><br /><sub><b>fcb-xiaobo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=fcb-xiaobo" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/wenkyzhang"><img src="https://avatars.githubusercontent.com/u/13983669?v=4?s=100" width="100px;" alt="wenkyzhang"/><br /><sub><b>wenkyzhang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wenkyzhang" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ZangJuxy"><img src="https://avatars.githubusercontent.com/u/71380295?v=4?s=100" width="100px;" alt="ZangJuxy"/><br /><sub><b>ZangJuxy</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ZangJuxy" title="Documentation">📖</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/l646505418"><img src="https://avatars.githubusercontent.com/u/50475131?v=4?s=100" width="100px;" alt="l646505418"/><br /><sub><b>l646505418</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=l646505418" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Al646505418" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="http://www.carpewang.com"><img src="https://avatars.githubusercontent.com/u/78642589?v=4?s=100" width="100px;" alt="Carpe-Wang"/><br /><sub><b>Carpe-Wang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Carpe-Wang" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3ACarpe-Wang" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/moshu023"><img src="https://avatars.githubusercontent.com/u/48593205?v=4?s=100" width="100px;" alt="莫枢"/><br /><sub><b>莫枢</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=moshu023" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/huangcanda"><img src="https://avatars.githubusercontent.com/u/4470566?v=4?s=100" width="100px;" alt="huangcanda"/><br /><sub><b>huangcanda</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=huangcanda" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://www.zrkizzy.com"><img src="https://avatars.githubusercontent.com/u/85340613?v=4?s=100" width="100px;" alt="世纪末的架构师"/><br /><sub><b>世纪末的架构师</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Architect-Java" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ShuningWan"><img src="https://avatars.githubusercontent.com/u/31086770?v=4?s=100" width="100px;" alt="ShuningWan"/><br /><sub><b>ShuningWan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ShuningWan" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/MrYZhou"><img src="https://avatars.githubusercontent.com/u/44339602?v=4?s=100" width="100px;" alt="MrYZhou"/><br /><sub><b>MrYZhou</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=MrYZhou" title="Documentation">📖</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/suncqujsj"><img src="https://avatars.githubusercontent.com/u/8012932?v=4?s=100" width="100px;" alt="suncqujsj"/><br /><sub><b>suncqujsj</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=suncqujsj" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/sunqinbo"><img src="https://avatars.githubusercontent.com/u/1428540?v=4?s=100" width="100px;" alt="sunqinbo"/><br /><sub><b>sunqinbo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=sunqinbo" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/haoww"><img src="https://avatars.githubusercontent.com/u/32739294?v=4?s=100" width="100px;" alt="haoww"/><br /><sub><b>haoww</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=haoww" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/i-mayuan"><img src="https://avatars.githubusercontent.com/u/101498477?v=4?s=100" width="100px;" alt="i-mayuan"/><br /><sub><b>i-mayuan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=i-mayuan" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/fengruge"><img src="https://avatars.githubusercontent.com/u/85803831?v=4?s=100" width="100px;" alt="fengruge"/><br /><sub><b>fengruge</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=fengruge" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/aystzh"><img src="https://avatars.githubusercontent.com/u/38125392?v=4?s=100" width="100px;" alt="zhanghuan"/><br /><sub><b>zhanghuan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=aystzh" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/shenyumin"><img src="https://avatars.githubusercontent.com/u/8438506?v=4?s=100" width="100px;" alt="shenymin"/><br /><sub><b>shenymin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=shenyumin" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/dhruva1995"><img src="https://avatars.githubusercontent.com/u/12976351?v=4?s=100" width="100px;" alt="Dhruva Chandra"/><br /><sub><b>Dhruva Chandra</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=dhruva1995" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/weiwang988"><img src="https://avatars.githubusercontent.com/u/58241726?v=4?s=100" width="100px;" alt="miss_z"/><br /><sub><b>miss_z</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=weiwang988" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/wyt990"><img src="https://avatars.githubusercontent.com/u/86013697?v=4?s=100" width="100px;" alt="wyt990"/><br /><sub><b>wyt990</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wyt990" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/licocon"><img src="https://avatars.githubusercontent.com/u/36863277?v=4?s=100" width="100px;" alt="licocon"/><br /><sub><b>licocon</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=licocon" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/2406450951"><img src="https://avatars.githubusercontent.com/u/48074721?v=4?s=100" width="100px;" alt="Mi Na"/><br /><sub><b>Mi Na</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=2406450951" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Kylin-Guo"><img src="https://avatars.githubusercontent.com/u/131239856?v=4?s=100" width="100px;" alt="Kylin-Guo"/><br /><sub><b>Kylin-Guo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Kylin-Guo" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/1797899698"><img src="https://avatars.githubusercontent.com/u/40411650?v=4?s=100" width="100px;" alt="Mr灬Dong先生"/><br /><sub><b>Mr灬Dong先生</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=1797899698" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="http://neilblaze.live"><img src="https://avatars.githubusercontent.com/u/48355572?v=4?s=100" width="100px;" alt="Pratyay Banerjee"/><br /><sub><b>Pratyay Banerjee</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Neilblaze" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=Neilblaze" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/yujianzhong520"><img src="https://avatars.githubusercontent.com/u/63705063?v=4?s=100" width="100px;" alt="yujianzhong520"/><br /><sub><b>yujianzhong520</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yujianzhong520" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://sppan24.github.io/"><img src="https://avatars.githubusercontent.com/u/15795173?v=4?s=100" width="100px;" alt="SPPan"/><br /><sub><b>SPPan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=sppan24" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/1130600015"><img src="https://avatars.githubusercontent.com/u/67859663?v=4?s=100" width="100px;" alt="ZhangJiashu"/><br /><sub><b>ZhangJiashu</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=1130600015" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/QZmp236478"><img src="https://avatars.githubusercontent.com/u/56623162?v=4?s=100" width="100px;" alt="impress"/><br /><sub><b>impress</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=QZmp236478" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/jx3775250"><img src="https://avatars.githubusercontent.com/u/40455946?v=4?s=100" width="100px;" alt="凌晨一点半"/><br /><sub><b>凌晨一点半</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=jx3775250" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/eeshaanSA"><img src="https://avatars.githubusercontent.com/u/100678386?v=4?s=100" width="100px;" alt="Eeshaan Sawant"/><br /><sub><b>Eeshaan Sawant</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=eeshaanSA" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/nandofromthebando"><img src="https://avatars.githubusercontent.com/u/87321214?v=4?s=100" width="100px;" alt="nandofromthebando"/><br /><sub><b>nandofromthebando</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=nandofromthebando" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/caiboking"><img src="https://avatars.githubusercontent.com/u/6509883?v=4?s=100" width="100px;" alt="caiboking"/><br /><sub><b>caiboking</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=caiboking" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/baixing99"><img src="https://avatars.githubusercontent.com/u/73473087?v=4?s=100" width="100px;" alt="baixing99"/><br /><sub><b>baixing99</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=baixing99" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ifrenzyc"><img src="https://avatars.githubusercontent.com/u/543927?v=4?s=100" width="100px;" alt="Yang Chuang"/><br /><sub><b>Yang Chuang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ifrenzyc" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/wlin20"><img src="https://avatars.githubusercontent.com/u/20657577?v=4?s=100" width="100px;" alt="wlin20"/><br /><sub><b>wlin20</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wlin20" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/guojing1983"><img src="https://avatars.githubusercontent.com/u/60596094?v=4?s=100" width="100px;" alt="guojing1983"/><br /><sub><b>guojing1983</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=guojing1983" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/itxxq"><img src="https://avatars.githubusercontent.com/u/46962357?v=4?s=100" width="100px;" alt="moxi"/><br /><sub><b>moxi</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=itxxq" title="Documentation">📖</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/qq471754603"><img src="https://avatars.githubusercontent.com/u/23146592?v=4?s=100" width="100px;" alt="qq471754603"/><br /><sub><b>qq471754603</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=qq471754603" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/san346596324"><img src="https://avatars.githubusercontent.com/u/30828520?v=4?s=100" width="100px;" alt="渭雨"/><br /><sub><b>渭雨</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=san346596324" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/luoxuanzao"><img src="https://avatars.githubusercontent.com/u/44692579?v=4?s=100" width="100px;" alt="liuxuezhuo"/><br /><sub><b>liuxuezhuo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=luoxuanzao" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/lisongning"><img src="https://avatars.githubusercontent.com/u/93140178?v=4?s=100" width="100px;" alt="lisongning"/><br /><sub><b>lisongning</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=lisongning" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/YutingNie"><img src="https://avatars.githubusercontent.com/u/104416402?v=4?s=100" width="100px;" alt="YutingNie"/><br /><sub><b>YutingNie</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=YutingNie" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=YutingNie" title="Documentation">📖</a> <a href="#design-YutingNie" title="Design">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/mikezzb"><img src="https://avatars.githubusercontent.com/u/23418428?v=4?s=100" width="100px;" alt="Mike Zhou"/><br /><sub><b>Mike Zhou</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=mikezzb" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=mikezzb" title="Documentation">📖</a> <a href="#design-mikezzb" title="Design">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/lynx009"><img src="https://avatars.githubusercontent.com/u/105542329?v=4?s=100" width="100px;" alt="lynx009"/><br /><sub><b>lynx009</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=lynx009" title="Documentation">📖</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/littlezhongzer"><img src="https://avatars.githubusercontent.com/u/33685289?v=4?s=100" width="100px;" alt="littlezhongzer"/><br /><sub><b>littlezhongzer</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=littlezhongzer" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ChenXiangxxxxx"><img src="https://avatars.githubusercontent.com/u/90089594?v=4?s=100" width="100px;" alt="ChenXiangxxxxx"/><br /><sub><b>ChenXiangxxxxx</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ChenXiangxxxxx" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Mr-zhou315"><img src="https://avatars.githubusercontent.com/u/10276100?v=4?s=100" width="100px;" alt="Mr.zhou"/><br /><sub><b>Mr.zhou</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Mr-zhou315" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/XimfengYao"><img src="https://avatars.githubusercontent.com/u/17541537?v=4?s=100" width="100px;" alt="姚贤丰"/><br /><sub><b>姚贤丰</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=XimfengYao" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/LINGLUOJUN"><img src="https://avatars.githubusercontent.com/u/16778977?v=4?s=100" width="100px;" alt="lingluojun"/><br /><sub><b>lingluojun</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=LINGLUOJUN" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="http://www.luelueking.com"><img src="https://avatars.githubusercontent.com/u/93204032?v=4?s=100" width="100px;" alt="1ue"/><br /><sub><b>1ue</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=luelueking" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="http://www.jimmyqiao.top"><img src="https://avatars.githubusercontent.com/u/67301054?v=4?s=100" width="100px;" alt="qyaaaa"/><br /><sub><b>qyaaaa</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=qyaaaa" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Aqyaaaa" title="Bug reports">🐛</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://novohit.top"><img src="https://avatars.githubusercontent.com/u/101090395?v=4?s=100" width="100px;" alt="novohit"/><br /><sub><b>novohit</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=novohit" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/rbsrcy"><img src="https://avatars.githubusercontent.com/u/4798540?v=4?s=100" width="100px;" alt="zhuoshangyi"/><br /><sub><b>zhuoshangyi</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=rbsrcy" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ruanliang-hualun"><img src="https://avatars.githubusercontent.com/u/65543716?v=4?s=100" width="100px;" alt="ruanliang"/><br /><sub><b>ruanliang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ruanliang-hualun" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=ruanliang-hualun" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Eden4701"><img src="https://avatars.githubusercontent.com/u/68422437?v=4?s=100" width="100px;" alt="Eden4701"/><br /><sub><b>Eden4701</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Eden4701" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=Eden4701" title="Documentation">📖</a> <a href="#design-Eden4701" title="Design">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/XiaTian688"><img src="https://avatars.githubusercontent.com/u/111830921?v=4?s=100" width="100px;" alt="XiaTian688"/><br /><sub><b>XiaTian688</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=XiaTian688" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/liyin"><img src="https://avatars.githubusercontent.com/u/863169?v=4?s=100" width="100px;" alt="liyinjiang"/><br /><sub><b>liyinjiang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=liyin" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/jiashu1024"><img src="https://avatars.githubusercontent.com/u/67859663?v=4?s=100" width="100px;" alt="ZhangJiashu"/><br /><sub><b>ZhangJiashu</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=jiashu1024" title="Documentation">📖</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/1036664317"><img src="https://avatars.githubusercontent.com/u/7696697?v=4?s=100" width="100px;" alt="moghn"/><br /><sub><b>moghn</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=1036664317" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/xiaoguolong"><img src="https://avatars.githubusercontent.com/u/33684988?v=4?s=100" width="100px;" alt="xiaoguolong"/><br /><sub><b>xiaoguolong</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=xiaoguolong" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Clownsw"><img src="https://avatars.githubusercontent.com/u/28394742?v=4?s=100" width="100px;" alt="Smliexx"/><br /><sub><b>Smliexx</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Clownsw" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3AClownsw" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Calvin979"><img src="https://avatars.githubusercontent.com/u/131688897?v=4?s=100" width="100px;" alt="Calvin"/><br /><sub><b>Calvin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Calvin979" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=Calvin979" title="Code">💻</a> <a href="#design-Calvin979" title="Design">🎨</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3ACalvin979" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=Calvin979" title="Tests">⚠️</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/bbelide2"><img src="https://avatars.githubusercontent.com/u/26840796?v=4?s=100" width="100px;" alt="Bala Sukesh"/><br /><sub><b>Bala Sukesh</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=bbelide2" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/jinyaoMa"><img src="https://avatars.githubusercontent.com/u/25066570?v=4?s=100" width="100px;" alt="Jinyao Ma"/><br /><sub><b>Jinyao Ma</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=jinyaoMa" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://linuxsuren.github.io/open-source-best-practice/"><img src="https://avatars.githubusercontent.com/u/1450685?v=4?s=100" width="100px;" alt="Rick"/><br /><sub><b>Rick</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=LinuxSuRen" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=LinuxSuRen" title="Tests">⚠️</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ZY945"><img src="https://avatars.githubusercontent.com/u/74083801?v=4?s=100" width="100px;" alt="东风"/><br /><sub><b>东风</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ZY945" title="Code">💻</a> <a href="#design-ZY945" title="Design">🎨</a> <a href="https://github.com/apache/hertzbeat/commits?author=ZY945" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3AZY945" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/prolevel1"><img src="https://avatars.githubusercontent.com/u/51995525?v=4?s=100" width="100px;" alt="sonam singh"/><br /><sub><b>sonam singh</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=prolevel1" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ZhangZixuan1994"><img src="https://avatars.githubusercontent.com/u/20011653?v=4?s=100" width="100px;" alt="ZhangZixuan1994"/><br /><sub><b>ZhangZixuan1994</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ZhangZixuan1994" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/hurenjie1"><img src="https://avatars.githubusercontent.com/u/40120355?v=4?s=100" width="100px;" alt="SHIG"/><br /><sub><b>SHIG</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=hurenjie1" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://tslj1024.github.io/"><img src="https://avatars.githubusercontent.com/u/155222677?v=4?s=100" width="100px;" alt="泰上老菌"/><br /><sub><b>泰上老菌</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=tslj1024" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ldysdu"><img src="https://avatars.githubusercontent.com/u/15815338?v=4?s=100" width="100px;" alt="ldysdu"/><br /><sub><b>ldysdu</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ldysdu" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/GEM0816g"><img src="https://avatars.githubusercontent.com/u/85116017?v=4?s=100" width="100px;" alt="梁同学"/><br /><sub><b>梁同学</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=GEM0816g" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/avvCode"><img src="https://avatars.githubusercontent.com/u/113538532?v=4?s=100" width="100px;" alt="avv"/><br /><sub><b>avv</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=avvCode" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/yqxxgh"><img src="https://avatars.githubusercontent.com/u/42080876?v=4?s=100" width="100px;" alt="yqxxgh"/><br /><sub><b>yqxxgh</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yqxxgh" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=yqxxgh" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Ayqxxgh" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/CharlieShi46"><img src="https://avatars.githubusercontent.com/u/149798885?v=4?s=100" width="100px;" alt="CharlieShi46"/><br /><sub><b>CharlieShi46</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=CharlieShi46" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Nctllnty"><img src="https://avatars.githubusercontent.com/u/33241818?v=4?s=100" width="100px;" alt="Nctllnty"/><br /><sub><b>Nctllnty</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Nctllnty" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Wang-Yonghao"><img src="https://avatars.githubusercontent.com/u/48146606?v=4?s=100" width="100px;" alt="Wang-Yonghao"/><br /><sub><b>Wang-Yonghao</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Wang-Yonghao" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://www.yuque.com/dudiao/yy"><img src="https://avatars.githubusercontent.com/u/38355949?v=4?s=100" width="100px;" alt="读钓"/><br /><sub><b>读钓</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=dudiao" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/starmilkxin"><img src="https://avatars.githubusercontent.com/u/55646681?v=4?s=100" width="100px;" alt="Xin"/><br /><sub><b>Xin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=starmilkxin" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Astarmilkxin" title="Bug reports">🐛</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/handy-git"><img src="https://avatars.githubusercontent.com/u/32837980?v=4?s=100" width="100px;" alt="handy"/><br /><sub><b>handy</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=handy-git" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/LiuTianyou"><img src="https://avatars.githubusercontent.com/u/30208283?v=4?s=100" width="100px;" alt="LiuTianyou"/><br /><sub><b>LiuTianyou</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=LiuTianyou" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=LiuTianyou" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3ALiuTianyou" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=LiuTianyou" title="Tests">⚠️</a> <a href="#blog-LiuTianyou" title="Blogposts">📝</a> <a href="#design-LiuTianyou" title="Design">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/WinterKi1ler"><img src="https://avatars.githubusercontent.com/u/160592092?v=4?s=100" width="100px;" alt="WinterKi1ler"/><br /><sub><b>WinterKi1ler</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=WinterKi1ler" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="http://sharehoo.cn/"><img src="https://avatars.githubusercontent.com/u/45377370?v=4?s=100" width="100px;" alt="miki"/><br /><sub><b>miki</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=miki-hmt" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://codeflex.substack.com/"><img src="https://avatars.githubusercontent.com/u/85513042?v=4?s=100" width="100px;" alt="Keshav Carpenter"/><br /><sub><b>Keshav Carpenter</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=alpha951" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=alpha951" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/makechoicenow"><img src="https://avatars.githubusercontent.com/u/9911918?v=4?s=100" width="100px;" alt="makechoicenow"/><br /><sub><b>makechoicenow</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=makechoicenow" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/gjjjj0101"><img src="https://avatars.githubusercontent.com/u/71874373?v=4?s=100" width="100px;" alt="Gao Jian"/><br /><sub><b>Gao Jian</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=gjjjj0101" title="Tests">⚠️</a> <a href="https://github.com/apache/hertzbeat/commits?author=gjjjj0101" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=gjjjj0101" title="Documentation">📖</a> <a href="#design-gjjjj0101" title="Design">🎨</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Agjjjj0101" title="Bug reports">🐛</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://jangto.tistory.com/"><img src="https://avatars.githubusercontent.com/u/37864182?v=4?s=100" width="100px;" alt="Hyeon Sung"/><br /><sub><b>Hyeon Sung</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=dukbong" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=dukbong" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://crossoverjie.top/"><img src="https://avatars.githubusercontent.com/u/15684156?v=4?s=100" width="100px;" alt="crossoverJie"/><br /><sub><b>crossoverJie</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=crossoverJie" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=crossoverJie" title="Documentation">📖</a> <a href="#blog-crossoverJie" title="Blogposts">📝</a> <a href="https://github.com/apache/hertzbeat/commits?author=crossoverJie" title="Tests">⚠️</a> <a href="#design-crossoverJie" title="Design">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/PeixyJ"><img src="https://avatars.githubusercontent.com/u/45998593?v=4?s=100" width="100px;" alt="PeixyJ"/><br /><sub><b>PeixyJ</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=PeixyJ" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Hi-Mr-Wind"><img src="https://avatars.githubusercontent.com/u/85803831?v=4?s=100" width="100px;" alt="风如歌"/><br /><sub><b>风如歌</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Hi-Mr-Wind" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/MananPoojara"><img src="https://avatars.githubusercontent.com/u/104253184?v=4?s=100" width="100px;" alt="Manan Pujara"/><br /><sub><b>Manan Pujara</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=MananPoojara" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/xuziyang"><img src="https://avatars.githubusercontent.com/u/8465969?v=4?s=100" width="100px;" alt="xuziyang"/><br /><sub><b>xuziyang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=xuziyang" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=xuziyang" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Axuziyang" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/lwqzz"><img src="https://avatars.githubusercontent.com/u/62584513?v=4?s=100" width="100px;" alt="lwqzz"/><br /><sub><b>lwqzz</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=lwqzz" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/YxYL6125"><img src="https://avatars.githubusercontent.com/u/91076160?v=4?s=100" width="100px;" alt="YxYL"/><br /><sub><b>YxYL</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=YxYL6125" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/tomorrowshipyltm"><img src="https://avatars.githubusercontent.com/u/61336903?v=4?s=100" width="100px;" alt="tomorrowshipyltm"/><br /><sub><b>tomorrowshipyltm</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=tomorrowshipyltm" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/15613060203"><img src="https://avatars.githubusercontent.com/u/41351615?v=4?s=100" width="100px;" alt="栗磊"/><br /><sub><b>栗磊</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=15613060203" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Alanxtl"><img src="https://avatars.githubusercontent.com/u/25652981?v=4?s=100" width="100px;" alt="Alan"/><br /><sub><b>Alan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Alanxtl" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="http://www.hadoop.wiki/"><img src="https://avatars.githubusercontent.com/u/29418975?v=4?s=100" width="100px;" alt="Jast"/><br /><sub><b>Jast</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=zhangshenghang" title="Code">💻</a> <a href="#ideas-zhangshenghang" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/apache/hertzbeat/commits?author=zhangshenghang" title="Documentation">📖</a> <a href="#blog-zhangshenghang" title="Blogposts">📝</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Azhangshenghang" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=zhangshenghang" title="Tests">⚠️</a> <a href="#design-zhangshenghang" title="Design">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/zuobiao-zhou"><img src="https://avatars.githubusercontent.com/u/61108539?v=4?s=100" width="100px;" alt="Zhang Yuxuan"/><br /><sub><b>Zhang Yuxuan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=zuobiao-zhou" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=zuobiao-zhou" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Azuobiao-zhou" title="Bug reports">🐛</a> <a href="#blog-zuobiao-zhou" title="Blogposts">📝</a> <a href="https://github.com/apache/hertzbeat/commits?author=zuobiao-zhou" title="Tests">⚠️</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Pzz-2021"><img src="https://avatars.githubusercontent.com/u/118056735?v=4?s=100" width="100px;" alt="P.P."/><br /><sub><b>P.P.</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Pzz-2021" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/LLP2333"><img src="https://avatars.githubusercontent.com/u/61670545?v=4?s=100" width="100px;" alt="llp2333"/><br /><sub><b>llp2333</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=LLP2333" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/HeartLinked"><img src="https://avatars.githubusercontent.com/u/78212101?v=4?s=100" width="100px;" alt="feiyang li"/><br /><sub><b>feiyang li</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=HeartLinked" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Aias00"><img src="https://avatars.githubusercontent.com/u/25810623?v=4?s=100" width="100px;" alt="aias00"/><br /><sub><b>aias00</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Aias00" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=Aias00" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3AAias00" title="Bug reports">🐛</a> <a href="#ideas-Aias00" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/apache/hertzbeat/commits?author=Aias00" title="Tests">⚠️</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/westboy"><img src="https://avatars.githubusercontent.com/u/6385565?v=4?s=100" width="100px;" alt="Jin"/><br /><sub><b>Jin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=westboy" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://blog.csdn.net/qq_52397471"><img src="https://avatars.githubusercontent.com/u/77964041?v=4?s=100" width="100px;" alt="YuLuo"/><br /><sub><b>YuLuo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yuluo-yx" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Ayuluo-yx" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=yuluo-yx" title="Tests">⚠️</a> <a href="#blog-yuluo-yx" title="Blogposts">📝</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Yanshuming1"><img src="https://avatars.githubusercontent.com/u/118667222?v=4?s=100" width="100px;" alt="linDong"/><br /><sub><b>linDong</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Yanshuming1" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=Yanshuming1" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3AYanshuming1" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/lwjxy"><img src="https://avatars.githubusercontent.com/u/52726400?v=4?s=100" width="100px;" alt="lwjxy"/><br /><sub><b>lwjxy</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=lwjxy" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://thespica.github.io/"><img src="https://avatars.githubusercontent.com/u/119573640?v=4?s=100" width="100px;" alt="John"/><br /><sub><b>John</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Thespica" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=Thespica" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/boatrainlsz"><img src="https://avatars.githubusercontent.com/u/18243785?v=4?s=100" width="100px;" alt="boatrainlsz"/><br /><sub><b>boatrainlsz</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=boatrainlsz" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://www.yitianyigexiangfa.com/"><img src="https://avatars.githubusercontent.com/u/3973419?v=4?s=100" width="100px;" alt="Bill Lau"/><br /><sub><b>Bill Lau</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=JavaProgrammerLB" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/lw-yang"><img src="https://avatars.githubusercontent.com/u/23456873?v=4?s=100" width="100px;" alt="lwyang"/><br /><sub><b>lwyang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=lw-yang" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/xfl12345"><img src="https://avatars.githubusercontent.com/u/17960863?v=4?s=100" width="100px;" alt="xfl12345"/><br /><sub><b>xfl12345</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=xfl12345" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/yykaue"><img src="https://avatars.githubusercontent.com/u/22905143?v=4?s=100" width="100px;" alt="Limbo"/><br /><sub><b>Limbo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yykaue" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/irenhongyan"><img src="https://avatars.githubusercontent.com/u/53438321?v=4?s=100" width="100px;" alt="哈哈哈哈哈哈哈哈哈"/><br /><sub><b>哈哈哈哈哈哈哈哈哈</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=irenhongyan" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ileonli"><img src="https://avatars.githubusercontent.com/u/45332412?v=4?s=100" width="100px;" alt="Leon Li"/><br /><sub><b>Leon Li</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ileonli" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="http://fnil.net/"><img src="https://avatars.githubusercontent.com/u/14142?v=4?s=100" width="100px;" alt="dennis zhuang"/><br /><sub><b>dennis zhuang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=killme2008" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/kerwin612"><img src="https://avatars.githubusercontent.com/u/3371163?v=4?s=100" width="100px;" alt="Kerwin Bryant"/><br /><sub><b>Kerwin Bryant</b></sub></a><br /><a href="#design-kerwin612" title="Design">🎨</a> <a href="https://github.com/apache/hertzbeat/commits?author=kerwin612" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=kerwin612" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Akerwin612" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ShineDevelopment"><img src="https://avatars.githubusercontent.com/u/59306780?v=4?s=100" width="100px;" alt="daixianglong"/><br /><sub><b>daixianglong</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ShineDevelopment" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/mchgood"><img src="https://avatars.githubusercontent.com/u/38482005?v=4?s=100" width="100px;" alt="mchgood"/><br /><sub><b>mchgood</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=mchgood" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/pwallk"><img src="https://avatars.githubusercontent.com/u/69385076?v=4?s=100" width="100px;" alt="kangli"/><br /><sub><b>kangli</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=pwallk" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=pwallk" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Apwallk" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/cdphantom"><img src="https://avatars.githubusercontent.com/u/12674795?v=4?s=100" width="100px;" alt="cdphantom"/><br /><sub><b>cdphantom</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=cdphantom" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/asd108908382"><img src="https://avatars.githubusercontent.com/u/77717999?v=4?s=100" width="100px;" alt="jiawei.guo"/><br /><sub><b>jiawei.guo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=asd108908382" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/QBH-insist"><img src="https://avatars.githubusercontent.com/u/39401478?v=4?s=100" width="100px;" alt="QBH-insist"/><br /><sub><b>QBH-insist</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=QBH-insist" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/jiangsh-ui"><img src="https://avatars.githubusercontent.com/u/86990361?v=4?s=100" width="100px;" alt="jiangsh"/><br /><sub><b>jiangsh</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=jiangsh-ui" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/keaifafafa"><img src="https://avatars.githubusercontent.com/u/83876361?v=4?s=100" width="100px;" alt="Keaifa"/><br /><sub><b>Keaifa</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=keaifafafa" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Akeaifafafa" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/loong95"><img src="https://avatars.githubusercontent.com/u/16333958?v=4?s=100" width="100px;" alt="Loong"/><br /><sub><b>Loong</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=loong95" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ceekay47"><img src="https://avatars.githubusercontent.com/u/104664857?v=4?s=100" width="100px;" alt="Chandrakant Vankayalapati"/><br /><sub><b>Chandrakant Vankayalapati</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ceekay47" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/MRgenial"><img src="https://avatars.githubusercontent.com/u/49973336?v=4?s=100" width="100px;" alt="b_mountain"/><br /><sub><b>b_mountain</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=MRgenial" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/TemirlanBasitov"><img src="https://avatars.githubusercontent.com/u/57500808?v=4?s=100" width="100px;" alt="TemirlanBasitov"/><br /><sub><b>TemirlanBasitov</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=TemirlanBasitov" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/wyfvsfy"><img src="https://avatars.githubusercontent.com/u/11973517?v=4?s=100" width="100px;" alt="wyfvsfy"/><br /><sub><b>wyfvsfy</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wyfvsfy" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/sherry-peng2333"><img src="https://avatars.githubusercontent.com/u/70619577?v=4?s=100" width="100px;" alt="sherry-peng2333"/><br /><sub><b>sherry-peng2333</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=sherry-peng2333" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/lixiaobaivv"><img src="https://avatars.githubusercontent.com/u/39290771?v=4?s=100" width="100px;" alt="Yzzz"/><br /><sub><b>Yzzz</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=lixiaobaivv" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="http://www.bckf.cn/"><img src="https://avatars.githubusercontent.com/u/13309008?v=4?s=100" width="100px;" alt="puruidong"/><br /><sub><b>puruidong</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=pruidong" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/shinestare"><img src="https://avatars.githubusercontent.com/u/13570619?v=4?s=100" width="100px;" alt="shinestare"/><br /><sub><b>shinestare</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=shinestare" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/po-168"><img src="https://avatars.githubusercontent.com/u/185745593?v=4?s=100" width="100px;" alt="po-168"/><br /><sub><b>po-168</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=po-168" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/All-The-Best-for"><img src="https://avatars.githubusercontent.com/u/76414672?v=4?s=100" width="100px;" alt="wbs99"/><br /><sub><b>wbs99</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=All-The-Best-for" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/starryCoder"><img src="https://avatars.githubusercontent.com/u/46510059?v=4?s=100" width="100px;" alt="starryCoder"/><br /><sub><b>starryCoder</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=starryCoder" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/hasimmollah"><img src="https://avatars.githubusercontent.com/u/32538599?v=4?s=100" width="100px;" alt="hasimmollah"/><br /><sub><b>hasimmollah</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=hasimmollah" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ayu-v0"><img src="https://avatars.githubusercontent.com/u/127600988?v=4?s=100" width="100px;" alt="Ayu"/><br /><sub><b>Ayu</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ayu-v0" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Rancho-7"><img src="https://avatars.githubusercontent.com/u/59016860?v=4?s=100" width="100px;" alt="Nick Guo"/><br /><sub><b>Nick Guo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Rancho-7" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=Rancho-7" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3ARancho-7" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/doveLin0818"><img src="https://avatars.githubusercontent.com/u/190927907?v=4?s=100" width="100px;" alt="doveLin"/><br /><sub><b>doveLin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=doveLin0818" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://zzrl.cc/"><img src="https://avatars.githubusercontent.com/u/91836599?v=4?s=100" width="100px;" alt="yunfan24"/><br /><sub><b>yunfan24</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yunfan24" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=yunfan24" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Ayunfan24" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=yunfan24" title="Tests">⚠️</a> <a href="#blog-yunfan24" title="Blogposts">📝</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/lctking"><img src="https://avatars.githubusercontent.com/u/168249998?v=4?s=100" width="100px;" alt="nullwli"/><br /><sub><b>nullwli</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=lctking" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://simonsigre.com/"><img src="https://avatars.githubusercontent.com/u/14932913?v=4?s=100" width="100px;" alt="Simon Sigré"/><br /><sub><b>Simon Sigré</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=simonsigre" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=simonsigre" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="http://www.ponfee.cn/"><img src="https://avatars.githubusercontent.com/u/46117331?v=4?s=100" width="100px;" alt="ponfee"/><br /><sub><b>ponfee</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ponfee" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Vedant7789"><img src="https://avatars.githubusercontent.com/u/147625492?v=4?s=100" width="100px;" alt="Vedant7789"/><br /><sub><b>Vedant7789</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Vedant7789" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Craaaaazy77"><img src="https://avatars.githubusercontent.com/u/23025522?v=4?s=100" width="100px;" alt="Craaaaazy77"/><br /><sub><b>Craaaaazy77</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Craaaaazy77" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Suvrat1629"><img src="https://avatars.githubusercontent.com/u/140749446?v=4?s=100" width="100px;" alt="Suvrat1629"/><br /><sub><b>Suvrat1629</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Suvrat1629" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="http://ghyghoo8.github.io/"><img src="https://avatars.githubusercontent.com/u/363129?v=4?s=100" width="100px;" alt="ghy"/><br /><sub><b>ghy</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ghyghoo8" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/helei1030"><img src="https://avatars.githubusercontent.com/u/11839080?v=4?s=100" width="100px;" alt="helei1030"/><br /><sub><b>helei1030</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=helei1030" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://medium.com/@pjfanning"><img src="https://avatars.githubusercontent.com/u/11783444?v=4?s=100" width="100px;" alt="PJ Fanning"/><br /><sub><b>PJ Fanning</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=pjfanning" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Apjfanning" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=pjfanning" title="Tests">⚠️</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/MonsterChenzhuo"><img src="https://avatars.githubusercontent.com/u/60029759?v=4?s=100" width="100px;" alt="monster"/><br /><sub><b>monster</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=MonsterChenzhuo" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/MasamiYui"><img src="https://avatars.githubusercontent.com/u/22274133?v=4?s=100" width="100px;" alt="Sherlock Yin"/><br /><sub><b>Sherlock Yin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=MasamiYui" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=MasamiYui" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3AMasamiYui" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/wanhao23"><img src="https://avatars.githubusercontent.com/u/29560961?v=4?s=100" width="100px;" alt="wanhao"/><br /><sub><b>wanhao</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wanhao23" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=wanhao23" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/jonasHanhan"><img src="https://avatars.githubusercontent.com/u/130035609?v=4?s=100" width="100px;" alt="jonasHanhan"/><br /><sub><b>jonasHanhan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=jonasHanhan" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/NikhilMurugesan"><img src="https://avatars.githubusercontent.com/u/49281792?v=4?s=100" width="100px;" alt="NikhilMurugesan"/><br /><sub><b>NikhilMurugesan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=NikhilMurugesan" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/myangle1120"><img src="https://avatars.githubusercontent.com/u/19237013?v=4?s=100" width="100px;" alt="myangle1120"/><br /><sub><b>myangle1120</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=myangle1120" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/yasminvo"><img src="https://avatars.githubusercontent.com/u/107528848?v=4?s=100" width="100px;" alt="yasminvo"/><br /><sub><b>yasminvo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yasminvo" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/notbugggg"><img src="https://avatars.githubusercontent.com/u/147966331?v=4?s=100" width="100px;" alt="不关银渐层的事哦"/><br /><sub><b>不关银渐层的事哦</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=notbugggg" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Anotbugggg" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/yyahang"><img src="https://avatars.githubusercontent.com/u/90464876?v=4?s=100" width="100px;" alt="yyahang"/><br /><sub><b>yyahang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yyahang" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/JuJinPark"><img src="https://avatars.githubusercontent.com/u/44892459?v=4?s=100" width="100px;" alt="jujin"/><br /><sub><b>jujin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=JuJinPark" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=JuJinPark" title="Documentation">📖</a> <a href="#ideas-JuJinPark" title="Ideas, Planning, & Feedback">🤔</a> <a href="#blog-JuJinPark" title="Blogposts">📝</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/LL-LIN"><img src="https://avatars.githubusercontent.com/u/43002118?v=4?s=100" width="100px;" alt="LL-LIN"/><br /><sub><b>LL-LIN</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=LL-LIN" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3ALL-LIN" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://bigcyy.github.io/"><img src="https://avatars.githubusercontent.com/u/73413979?v=4?s=100" width="100px;" alt="Yang Chen"/><br /><sub><b>Yang Chen</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=bigcyy" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=bigcyy" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Abigcyy" title="Bug reports">🐛</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/sarthakeash"><img src="https://avatars.githubusercontent.com/u/74091160?v=4?s=100" width="100px;" alt="Sarthak Arora"/><br /><sub><b>Sarthak Arora</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=sarthakeash" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=sarthakeash" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/PengJingzhao"><img src="https://avatars.githubusercontent.com/u/97368949?v=4?s=100" width="100px;" alt="彭镜肇"/><br /><sub><b>彭镜肇</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=PengJingzhao" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/gagaradio"><img src="https://avatars.githubusercontent.com/u/18532370?v=4?s=100" width="100px;" alt="Walter Jia"/><br /><sub><b>Walter Jia</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=gagaradio" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/boyucjz"><img src="https://avatars.githubusercontent.com/u/18730041?v=4?s=100" width="100px;" alt="boyucjz"/><br /><sub><b>boyucjz</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=boyucjz" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Cyanty"><img src="https://avatars.githubusercontent.com/u/153884653?v=4?s=100" width="100px;" alt="Cyanty"/><br /><sub><b>Cyanty</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Cyanty" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=Cyanty" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/KevinLLF"><img src="https://avatars.githubusercontent.com/u/85452733?v=4?s=100" width="100px;" alt="Jay丿167"/><br /><sub><b>Jay丿167</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=KevinLLF" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Duansg"><img src="https://avatars.githubusercontent.com/u/112607719?v=4?s=100" width="100px;" alt="Duansg"/><br /><sub><b>Duansg</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Duansg" title="Documentation">📖</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/xiaomizhou2"><img src="https://avatars.githubusercontent.com/u/47807926?v=4?s=100" width="100px;" alt="zhangyaxi"/><br /><sub><b>zhangyaxi</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=xiaomizhou2" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=xiaomizhou2" title="Tests">⚠️</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/RainBondsongyg"><img src="https://avatars.githubusercontent.com/u/94501396?v=4?s=100" width="100px;" alt="songyg"/><br /><sub><b>songyg</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=RainBondsongyg" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/lx1229"><img src="https://avatars.githubusercontent.com/u/44620005?v=4?s=100" width="100px;" alt="Liuxin"/><br /><sub><b>Liuxin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=lx1229" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/yy549159265"><img src="https://avatars.githubusercontent.com/u/40821310?v=4?s=100" width="100px;" alt="yy549159265"/><br /><sub><b>yy549159265</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yy549159265" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=yy549159265" title="Tests">⚠️</a> <a href="#design-yy549159265" title="Design">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/cto-huhang"><img src="https://avatars.githubusercontent.com/u/53338629?v=4?s=100" width="100px;" alt="cto-huhang"/><br /><sub><b>cto-huhang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=cto-huhang" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Saramanda9988"><img src="https://avatars.githubusercontent.com/u/176664901?v=4?s=100" width="100px;" alt="LunaRain_079"/><br /><sub><b>LunaRain_079</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Saramanda9988" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=Saramanda9988" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/delei"><img src="https://avatars.githubusercontent.com/u/17263766?v=4?s=100" width="100px;" alt="DeleiGuo"/><br /><sub><b>DeleiGuo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=delei" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=delei" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=delei" title="Tests">⚠️</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Adelei" title="Bug reports">🐛</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/chingjustwe"><img src="https://avatars.githubusercontent.com/u/13643747?v=4?s=100" width="100px;" alt="Rocky, Chi"/><br /><sub><b>Rocky, Chi</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=chingjustwe" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/rowankid"><img src="https://avatars.githubusercontent.com/u/18652781?v=4?s=100" width="100px;" alt="Wenqi Luo"/><br /><sub><b>Wenqi Luo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/issues?q=author%3Arowankid" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/tuzuy"><img src="https://avatars.githubusercontent.com/u/95274591?v=4?s=100" width="100px;" alt="tuzuy"/><br /><sub><b>tuzuy</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=tuzuy" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/carlpinto25"><img src="https://avatars.githubusercontent.com/u/117299909?v=4?s=100" width="100px;" alt="carl pinto"/><br /><sub><b>carl pinto</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=carlpinto25" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://cxhello.top/"><img src="https://avatars.githubusercontent.com/u/49056040?v=4?s=100" width="100px;" alt="cxhello"/><br /><sub><b>cxhello</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=cxhello" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/jl15988"><img src="https://avatars.githubusercontent.com/u/70638770?v=4?s=100" width="100px;" alt="会功夫的李白"/><br /><sub><b>会功夫的李白</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=jl15988" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://blog.aytop.cloud/"><img src="https://avatars.githubusercontent.com/u/37127008?v=4?s=100" width="100px;" alt="Albert.Yang"/><br /><sub><b>Albert.Yang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=AlbertYang0801" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://blog.tokenlen.top/"><img src="https://avatars.githubusercontent.com/u/150590575?v=4?s=100" width="100px;" alt="zhou yong kang"/><br /><sub><b>zhou yong kang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=mengnankkkk" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/warrobe"><img src="https://avatars.githubusercontent.com/u/89446159?v=4?s=100" width="100px;" alt="warrobe"/><br /><sub><b>warrobe</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=warrobe" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Jetiaime"><img src="https://avatars.githubusercontent.com/u/93769000?v=4?s=100" width="100px;" alt="TeAmo"/><br /><sub><b>TeAmo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Jetiaime" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/pentium100"><img src="https://avatars.githubusercontent.com/u/27917?v=4?s=100" width="100px;" alt="pentium100"/><br /><sub><b>pentium100</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=pentium100" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/dedyks"><img src="https://avatars.githubusercontent.com/u/23741665?v=4?s=100" width="100px;" alt="Dedy Kurniawan Santoso"/><br /><sub><b>Dedy Kurniawan Santoso</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=dedyks" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/KOYR"><img src="https://avatars.githubusercontent.com/u/53216619?v=4?s=100" width="100px;" alt="KOYR"/><br /><sub><b>KOYR</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=KOYR" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Lathika226"><img src="https://avatars.githubusercontent.com/u/178710568?v=4?s=100" width="100px;" alt="LathikaBaddam"/><br /><sub><b>LathikaBaddam</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Lathika226" title="Documentation">📖</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://shadwal.space/"><img src="https://avatars.githubusercontent.com/u/119167601?v=4?s=100" width="100px;" alt="Sahil Shadwal"/><br /><sub><b>Sahil Shadwal</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Sahil-Shadwal" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/BhanuNidumolu"><img src="https://avatars.githubusercontent.com/u/180380413?v=4?s=100" width="100px;" alt="N.Bhanu Prasad"/><br /><sub><b>N.Bhanu Prasad</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=BhanuNidumolu" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://prakashh-portfolio.vercel.app/"><img src="https://avatars.githubusercontent.com/u/183058331?v=4?s=100" width="100px;" alt="Prakash Kumar"/><br /><sub><b>Prakash Kumar</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Prakash1185" title="Code">💻</a></td> </tr> </tbody> </table> <!-- markdownlint-restore --> <!-- prettier-ignore-end --> <!-- ALL-CONTRIBUTORS-LIST:END --> ## 💬 Join discussion ##### Channel [Join the Mailing Lists](https://lists.apache.org/[email protected]) : Mail to `[email protected]` to subscribe mailing lists. [Chat On Discord](https://discord.gg/Fb6M73htGr) WeChat Group : Add friend `ahertzbeat` and invite to the group. WeChat Official Account : Search ID `usthecom`. [Github Discussion](https://github.com/apache/hertzbeat/discussions) [Follow Us Twitter](https://x.com/hertzbeat1024) [Subscribe YouTube](https://www.youtube.com/channel/UCri75zfWX0GHqJFPENEbLow) ##### Open-Source Project Build From Open-Source HertzBeat is built on so many great open source projects, thanks to them! - `Java Spring SpringBoot Jpa Maven Assembly Netty Lombok Sureness Protobuf HttpClient Guava SnakeYaml JsonPath ...` - `TypeScript Angular NG-ZORRO NG-ALAIN NodeJs Npm Html Less Echarts Rxjs ZoneJs MonacoEditor SlickCarousel Docusaurus ...` ## Landscape <p align="left"> <img src="./home/static/img/home/cncf-landscape-left-logo.svg" width="300">&nbsp;&nbsp;<img src="./home/static/img/home/cncf-right-logo.svg" width="345" /> <br /><br /> HertzBeat has been included in the <a href="https://landscape.cncf.io/?item=observability-and-analysis--observability--hertzbeat"> CNCF Observability And Analysis - Observability Landscape.</a> </p> ## 🛡️ License [`Apache License, Version 2.0`](https://www.apache.org/licenses/LICENSE-2.0.html)

ML Frameworks Monitoring & Observability
7.3K Github Stars
tvm
Open Source

tvm

<!--- Licensed to the Apache Software Foundation (ASF) under one --> <!--- or more contributor license agreements. See the NOTICE file --> <!--- distributed with this work for additional information --> <!--- regarding copyright ownership. The ASF licenses this file --> <!--- to you under the Apache License, Version 2.0 (the --> <!--- "License"); you may not use this file except in compliance --> <!--- with the License. You may obtain a copy of the License at --> <!--- http://www.apache.org/licenses/LICENSE-2.0 --> <!--- Unless required by applicable law or agreed to in writing, --> <!--- software distributed under the License is distributed on an --> <!--- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY --> <!--- KIND, either express or implied. See the License for the --> <!--- specific language governing permissions and limitations --> <!--- under the License. --> <img src=https://raw.githubusercontent.com/apache/tvm-site/main/images/logo/tvm-logo-small.png width=128/> Open Machine Learning Compiler Framework ============================================== [Documentation](https://tvm.apache.org/docs) | [Contributors](CONTRIBUTORS.md) | [Community](https://tvm.apache.org/community) | [Release Notes](NEWS.md) Apache TVM is an open machine learning compilation framework, following the following principles: - Python-first development that enables quick customization of machine learning compiler pipelines. - Universal deployment to bring models into minimum deployable modules. License ------- TVM is licensed under the [Apache-2.0](LICENSE) license. Getting Started --------------- Check out the [TVM Documentation](https://tvm.apache.org/docs/) site for installation instructions, tutorials, examples, and more. The [Getting Started with TVM](https://tvm.apache.org/docs/get_started/overview.html) tutorial is a great place to start. Contribute to TVM ----------------- TVM adopts the Apache committer model. We aim to create an open-source project maintained and owned by the community. Check out the [Contributor Guide](https://tvm.apache.org/docs/contribute/). History and Acknowledgement --------------------------- TVM started as a research project for deep learning compilation. The first version of the project benefited a lot from the following projects: - [Halide](https://github.com/halide/Halide): Part of TVM's TIR and arithmetic simplification module originates from Halide. We also learned and adapted some parts of the lowering pipeline from Halide. - [Loopy](https://github.com/inducer/loopy): use of integer set analysis and its loop transformation primitives. - [Theano](https://github.com/Theano/Theano): the design inspiration of symbolic scan operator for recurrence. Since then, the project has gone through several rounds of redesigns. The current design is also drastically different from the initial design, following the development trend of the ML compiler community. The most recent version focuses on a cross-level design with TensorIR as the tensor-level representation and Relax as the graph-level representation and Python-first transformations. The project's current design goal is to make the ML compiler accessible by enabling most transformations to be customizable in Python and bringing a cross-level representation that can jointly optimize computational graphs, tensor programs, and libraries. The project is also a foundation infra for building Python-first vertical compilers for domains, such as LLMs.

Developer Tools ML Frameworks
13.4K Github Stars
opennlp
Open Source

opennlp

<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Welcome to Apache OpenNLP! =========== [![GitHub license](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://raw.githubusercontent.com/apache/opennlp/main/LICENSE) [![Maven Central](https://img.shields.io/maven-central/v/org.apache.opennlp/opennlp)](https://img.shields.io/maven-central/v/org.apache.opennlp/opennlp) [![Documentation Status](https://img.shields.io/:docs-latest-green.svg)](http://opennlp.apache.org/docs/index.html) [![Build Status](https://github.com/apache/opennlp/workflows/Java%20CI/badge.svg)](https://github.com/apache/opennlp/actions) [![Contributors](https://img.shields.io/github/contributors/apache/opennlp)](https://github.com/apache/opennlp/graphs/contributors) [![GitHub pull requests](https://img.shields.io/github/issues-pr-raw/apache/opennlp.svg)](https://github.com/apache/opennlp/pulls) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/apache/opennlp/badge)](https://api.securityscorecards.dev/projects/github.com/apache/opennlp) The Apache OpenNLP library is a machine learning based toolkit for the processing of natural language text. This toolkit is written completely in Java and provides support for common NLP tasks, such as tokenization, sentence segmentation, part-of-speech tagging, named entity extraction, chunking, parsing, coreference resolution, language detection, stopword filtering (with bundled lists for 11 languages) and more! These tasks are usually required to build more advanced text processing services. The goal of the OpenNLP project is to be a mature toolkit for the above mentioned tasks. An additional goal is to provide a large number of pre-built models for a variety of languages, as well as the annotated text resources that those models are derived from. Presently, OpenNLP includes common classifiers such as Maximum Entropy, Perceptron, Naive Bayes and Support Vector Machines (SVM). OpenNLP can be used both programmatically through its Java API or from a terminal through its CLI. OpenNLP API can be easily plugged into distributed streaming data pipelines like Apache Flink, Apache NiFi, Apache Spark. ## Useful Links For additional information, visit the [OpenNLP Home Page](http://opennlp.apache.org/) You can use OpenNLP with any language, demo models are provided [here](https://downloads.apache.org/opennlp/models/). The models are fully compatible with the latest release, they can be used for testing or getting started. > [!NOTE] > Please train your own models for all other use cases. Documentation, including JavaDocs, code usage and command-line interface examples are available [here](http://opennlp.apache.org/docs/) For recent news, updates and topics, you can: - join the regular [mailing lists](http://opennlp.apache.org/mailing-lists.html), - follow the project's [![Bluesky](https://img.shields.io/badge/Bluesky-0285FF?logo=bluesky&logoColor=fff)](https://bsky.app/profile/apacheopennlp.bsky.social) social media channel, or - join the [![Slack](https://img.shields.io/badge/Slack-4A154B?logo=slack&logoColor=fff)](https://the-asf.slack.com) channel (available to people with an [email protected]_ email address or upon invitation). Please, also check the [![Stack Overflow](https://img.shields.io/badge/-Stack%20Overflow-FE7A16?logo=stack-overflow&logoColor=white)](https://stackoverflow.com/questions/tagged/opennlp) community's OpenNLP questions and answers. ## Overview Currently, the library has different modules: * `opennlp-api` : The public API defining core Apache OpenNLP interfaces and abstractions. * `opennlp-runtime` : The core classes shared across Apache OpenNLP components. * `opennlp-ml-commons` : Common utilities and shared functionality for ML implementations. * `opennlp-ml-maxent` : Maximum Entropy (MaxEnt) machine learning implementation. * `opennlp-ml-bayes` : Naive Bayes machine learning implementation. * `opennlp-ml-perceptron` : Perceptron-based machine learning implementation. * `opennlp-ml-libsvm` : Support Vector Machine (SVM) based text classification via [zlibsvm](https://github.com/rzo1/zlibsvm). * `opennlp-dl` : Apache OpenNLP adapter for [ONNX](https://onnx.ai) models using the `onnxruntime` dependency. * `opennlp-dl-gpu` : Replaces `onnxruntime` with the `onnxruntime_gpu` dependency to support GPU acceleration. * `opennlp-model-resolver` : Classes for discovering and loading Apache OpenNLP models from the classpath. * `opennlp-formats` : Support for reading and writing various NLP training and data formats. * `opennlp-cli` : The command-line tools for training, evaluating, and running models. * `opennlp-tools` : The full end-user toolkit with all core components and utilities in its executable form. * `opennlp-morfologik` : Extension module providing Morfologik-based dictionary and stemming support. * `opennlp-uima` : Extension module providing a set of [Apache UIMA](https://uima.apache.org) annotators. * `opennlp-sandbox` : Other projects in progress reside in the [sandbox](https://github.com/apache/opennlp-sandbox). ## Getting Started You can import the core toolkit directly from Maven or Gradle: #### Maven ``` <dependency> <groupId>org.apache.opennlp</groupId> <artifactId>opennlp-runtime</artifactId> <version>${opennlp.version}</version> </dependency> <!-- if model support is needed --> <dependency> <groupId>org.apache.opennlp</groupId> <artifactId>opennlp-model-resolver</artifactId> <version>${opennlp.version}</version> </dependency> ``` Note: `opennlp-runtime` ships with the MaxEnt ML implementation by default. If you need other ML implementations, please add the corresponding dependencies as well. #### Gradle ``` compile group: "org.apache.opennlp", name: "opennlp-runtime", version: "${opennlp.version}" compile group: "org.apache.opennlp", name: "opennlp-model-resolver", version: "${opennlp.version}" ``` For more details please check our [documentation](https://opennlp.apache.org/docs/) ## Migrating from 2.x to 3.x The 3.x release line of Apache OpenNLP introduces **no** known breaking changes but modularizes the project for better usage as a library and to support future extensibility. The core API remains stable and compatible with 2.x, but the project structure has been reorganized into multiple modules. That means, that you can continue to use the previous `opennlp-tools` artifact as a dependency. However, we strongly recommend to switch to the new modular structure and import only the components you need, which will result in a smaller dependency footprint. Only `opennlp-runtime` needs to be added as a dependency, and you can add additional modules (e.g. `opennlp-ml-maxent`, `opennlp-model-resolver`, etc.) as required by your project. For users of the traditional CLI toolkit, nothing changes with the 3.x release line. CLI usage remains stable as described in the [project's dev manual](https://opennlp.apache.org/docs/). ### Thread safety Starting with 3.0.0, the core `*ME` classes (`POSTaggerME`, `TokenizerME`, `SentenceDetectorME`, `ChunkerME`, `LemmatizerME`, `NameFinderME`) are thread safe and a single instance can be shared across threads. This eliminates the need to pool or recreate ME instances per thread. The legacy `ThreadSafe*ME` wrappers from 2.x still work but are now deprecated; existing code does not need to change to upgrade. ### Head's up The Apache OpenNLP team is planning to change the package namespace from `opennlp` to `org.apache.opennlp` in a future release (potentially 4.x). This change will be made to align with standard Java package naming conventions and to avoid potential conflicts with other libraries. In addition, the Apache OpenNLP team raised the minimal Java version to JDK 21+ for the 3.0.0 release to take advantage of the latest language features and improvements. ## Branches and Merging Strategy To support ongoing development and stable maintenance of Apache OpenNLP, the project follows a dual-branch model: ### Branch overview - **`main`**: Development branch for version **3.0** and beyond. All feature development and 3.x releases occur here. Minimum Java level: 21. - **`opennlp-2.x`**: Maintains the stable **2.x** release line. This branch will receive selective updates and patch releases. Minimum Java level: 17. ### Workflow summary - Feature development - New features targeting versions 3.0+ are developed on feature branches _off_ `main` and merged _into_ `main`. - Bug fixes and dependency updates - Relevant fixes or dependency updates from `main` may be cherry-picked into `opennlp-2.x` as needed. - Releases - **3.x** releases are made from the `main` branch. - **2.x** releases are made from the `opennlp-2.x` branch. - Release tags - Release tags are applied directly to the appropriate version branch (`main` for 3.x or `opennlp-2.x` for 2.x). - The presence of a version branch does not affect the tagging or visibility of releases. ## Building OpenNLP For the main branch, at least JDK 21 and Maven 3.9.x are required to build the library. After cloning the repository go into the destination directory and run: ``` mvn install ``` ### Additional Development Information - Building and integrating [Snowball Stemmer](dev/Snowball-Stemmer.md) for OpenNLP. ## Contributing The Apache OpenNLP project is developed by volunteers and is always looking for new contributors to work on all parts of the project. Every contribution is welcome and needed to make it better. A contribution can be anything from a small documentation typo fix to a new component. If you would like to get involved please follow the instructions [here](https://github.com/apache/opennlp/blob/main/.github/CONTRIBUTING.md)

ML Frameworks
1.6K Github Stars
hamilton
Open Source

hamilton

<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <div align="center"> <h1><img src="https://github.com/apache/hamilton/assets/2328071/feb6abaa-b6d5-4271-a320-0ae4a18d8aa7" width="50"/> Apache Hamilton — portable & expressive <br> data transformation DAGs</h1> <a href='https://hamilton.apache.org/?badge=latest'> <img src='https://readthedocs.org/projects/hamilton/badge/?version=latest' alt='Documentation Status' /> </a><a href="https://www.python.org/downloads/" target="_blank"> <img src="https://img.shields.io/badge/python-3.10%20|%203.11%20|%203.12%20|%203.13%20|%203.14-blue.svg" alt="Python supported"/> </a> <a href="https://pypi.org/project/apache-hamilton/" target="_blank"> <img src="https://badge.fury.io/py/apache-hamilton.svg" alt="PyPi Version"/> </a> <a href="https://pepy.tech/project/apache-hamilton" target="_blank"> <img src="https://pepy.tech/badge/apache-hamilton" alt="Total Downloads"/> </a> <a href="https://pepy.tech/project/apache-hamilton" target="_blank"> <img src="https://static.pepy.tech/badge/apache-hamilton/month" alt="Total Monthly Downloads"/> </a> <br/> <a href="https://join.slack.com/t/hamilton-opensource/shared_invite/zt-2niepkra8-DGKGf_tTYhXuJWBTXtIs4g" target="_blank"> <img src="https://img.shields.io/badge/Apache Hamilton-Join-purple.svg?logo=slack" alt="Apache Hamilton Slack"/> </a> <a href="https://twitter.com/hamilton_os" target="_blank"> <img src="https://img.shields.io/badge/HamiltonOS-Follow-purple.svg?logo=X"/> </a> </div> <br></br> > **Disclaimer** > > Apache Hamilton is an effort undergoing incubation at the Apache Software Foundation (ASF), sponsored by the Apache Incubator PMC. > > Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. > > While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF. Apache Hamilton (incubating) is a lightweight Python library for directed acyclic graphs (DAGs) of data transformations. Your DAG is **portable**; it runs anywhere Python runs, whether it's a script, notebook, Airflow pipeline, FastAPI server, etc. Your DAG is **expressive**; Apache Hamilton has extensive features to define and modify the execution of a DAG (e.g., data validation, experiment tracking, remote execution). To create a DAG, write regular Python functions that specify their dependencies with their parameters. As shown below, it results in readable code that can always be visualized. Apache Hamilton loads that definition and automatically builds the DAG for you! <div align="center"> <img src="./docs/_static/abc_highlight.png" alt="Create a project" width="65%"/> </div> <div align="center"> Functions <code>B()</code> and <code>C()</code> refer to function <code>A</code> via their parameters </div> <br> Apache Hamilton brings modularity and structure to any Python application moving data: ETL pipelines, ML workflows, LLM applications, RAG systems, BI dashboards, and the [Apache Hamilton UI](https://hamilton.apache.org/concepts/ui) allows you to automatically visualize, catalog, and monitor execution. > Apache Hamilton is great for DAGs, but if you need loops or conditional logic to create an LLM agent or a simulation, take a look at our sister library [Burr](https://github.com/apache/burr) 🤖 . # Installation Apache Hamilton supports Python 3.8+. We include the optional `visualization` dependency to display our Apache Hamilton DAG. For visualizations, [Graphviz](https://graphviz.org/download/) needs to be installed on your system separately. ```bash pip install "apache-hamilton[visualization]" ``` To use the Apache Hamilton UI, install the `ui` and `sdk` dependencies. ```bash pip install "apache-hamilton[ui,sdk]" ``` To try Apache Hamilton in the browser, visit [www.tryhamilton.dev](https://www.tryhamilton.dev/?utm_source=README) # Why use Apache Hamilton? Data teams write code to deliver business value, but few have the resources to standardize practices and provide quality assurance. Moving from proof-of-concept to production and cross-function collaboration (e.g., data science, engineering, ops) remain challenging for teams, big or small. Apache Hamilton is designed to help throughout a project's lifecycle: - **Separation of concerns**. Apache Hamilton separates the DAG "definition" and "execution" which lets data scientists focus on solving problems and engineers manage production pipelines. - **Effective collaboration**. The [Apache Hamilton UI provides a shared interface](https://hamilton.apache.org/hamilton-ui/ui/) for teams to inspect results and debug failures throughout the development cycle. - **Low-friction dev to prod**. Use `@config.when()` to modify your DAG between execution environments instead of error-prone `if/else` feature flags. The notebook extension prevents the pain of migrating code from a notebook to a Python module. - **Portable transformations**. Your DAG is [independent of infrastructure or orchestration](https://blog.dagworks.io/publish/posts/detail/145543927?referrer=%2Fpublish%2Fposts), meaning you can develop and debug locally and reuse code across contexts (local, Airflow, FastAPI, etc.). - **Maintainable DAG definition**. Apache Hamilton [automatically builds the DAG from a single line of code whether it has 10 or 1000 nodes](https://hamilton.apache.org/concepts/driver/). It can also assemble multiple Python modules into a pipeline, encouraging modularity. - **Expressive DAGs**. [Function modifiers](https://hamilton.apache.org/concepts/function-modifiers/) are a unique feature to keep your code [DRY](https://en.wikipedia.org/wiki/Don't_repeat_yourself) and reduce the complexity of maintaining large DAGs. Other frameworks inevitably lead to code redundancy or bloated functions. - **Built-in coding style**. The Apache Hamilton DAG is [defined using Python functions](https://hamilton.apache.org/concepts/node/), encouraging modular, easy-to-read, self-documenting, and unit testable code. - **Data and schema validation**. Decorate functions with `@check_output` to validate output properties, and raise warnings or exceptions. Add the `SchemaValidator()` adapter to automatically inspect dataframe-like objects (pandas, polars, Ibis, etc.) to track and validate their schema. - **Built for plugins**. Apache Hamilton is designed to play nice with all tools and provides the right abstractions to create custom integrations with your stack. Our lively community will help you build what you need! # Apache Hamilton UI You can track the execution of your Apache Hamilton DAG in the [Apache Hamilton UI](https://hamilton.apache.org/hamilton-ui/ui/). It automatically populates a data catalog with lineage / tracing and provides execution observability to inspect results and debug errors. You can run it as a [local server](https://hamilton.apache.org/hamilton-ui/ui/#local-mode) or a [self-hosted application using Docker](https://hamilton.apache.org/hamilton-ui/ui/#docker-deployed-mode). <p align="center"> <img src="./docs/_static/hamilton_1.jpeg" alt="Description1" width="30%" style="margin-right: 20px;"/> <img src="./docs/_static/hamilton_2.jpeg" alt="Description2" width="30%" style="margin-right: 20px;"/> <img src="./docs/_static/hamilton_3.jpeg" alt="Description3" width="30%"/> </p> <p align="center"> <em>DAG catalog, automatic dataset profiling, and execution tracking</em> </p> ## Get started with the Apache Hamilton UI 1. To use the Apache Hamilton UI, install the dependencies (see `Installation` section) and start the server with ```bash hamilton ui ``` 2. On the first connection, create a `username` and a new project (the `project_id` should be `1`). <div align="center"> <img src="./docs/_static/new_project.png" alt="Create a project" width="70%"/> </div> <br> 3. Track your Apache Hamilton DAG by creating a `HamiltonTracker` object with your `username` and `project_id` and adding it to your `Builder`. Now, your DAG will appear in the UI's catalog and all executions will be tracked! ```python from hamilton import driver from hamilton_sdk.adapters import HamiltonTracker import my_dag # use your `username` and `project_id` tracker = HamiltonTracker( username="my_username", project_id=1, dag_name="hello_world", ) # adding the tracker to the `Builder` will add the DAG to the catalog dr = ( driver.Builder() .with_modules(my_dag) .with_adapters(tracker) # add your tracker here .build() ) # executing the `Driver` will track results dr.execute(["C"]) ``` # Documentation & learning resources * 📚 See the [official documentation](https://hamilton.apache.org/) to learn about the core concepts of Apache Hamilton. * 👨‍🏫 Consult the [examples on GitHub](https://github.com/apache/hamilton/tree/main/examples) to learn about specific features or integrations with other frameworks. * 📰 The [DAGWorks blog](https://blog.dagworks.io/) includes guides about how to build a data platform and narrative tutorials. * 📺 Find video tutorials on the [DAGWorks YouTube channel](https://www.youtube.com/@DAGWorks-Inc) * 📣 Reach out via the [Apache Hamilton Slack community](https://join.slack.com/t/hamilton-opensource/shared_invite/zt-2niepkra8-DGKGf_tTYhXuJWBTXtIs4g) for help and troubleshooting # How does Apache Hamilton compare to X? Apache Hamilton is not an orchestrator ([you might not need one](https://blog.dagworks.io/p/lean-data-automation-a-principal)), nor a feature store ([but you can use it to build one!](https://blog.dagworks.io/p/featurization-integrating-hamilton)). Its purpose is to help you structure and manage data transformations. If you know dbt, Apache Hamilton does for Python what dbt does for SQL. Another way to frame it is to think about the different layers of a data stack. Apache Hamilton is at the **asset layer**. It helps you organize data transformations code (the **expression layer**), manage changes, and validate & test data. <div align="center" style="width: 100%"> <table> <colgroup> <col style="width: 20%"> <col style="width: 40%"> <col style="width: 40%"> </colgroup> <thead> <tr> <th>Layer</th> <th>Purpose</th> <th>Example Tools</th> </tr> </thead> <tbody> <tr> <td>Orchestration</td> <td>Operational system for the creation of assets</td> <td>Airflow, Metaflow, Prefect, Dagster</td> </tr> <tr> <td>Asset</td> <td>Organize expressions into meaningful units <br> (e.g., dataset, ML model, table)</td> <td><b>Apache Hamilton</b>, dbt, dlt, SQLMesh, <a href="https://github.com/apache/burr">Burr</a></td> </tr> <tr> <td>Expression</td> <td>Language to write data transformations</td> <td>pandas, SQL, polars, Ibis, LangChain</td> </tr> <tr> <td>Execution</td> <td>Perform data transformations</td> <td>Spark, Snowflake, DuckDB, RAPIDS</td> </tr> <tr> <td>Data</td> <td>Physical representation of data, inputs and outputs</td> <td>S3, Postgres, file system, Snowflake</td> </tr> </tbody> </table> </div> See our page on [Why use Apache Hamilton?](https://hamilton.apache.org/get-started/why-hamilton/) and framework [code comparisons](https://hamilton.apache.org/code-comparisons/) for more information. # 📑 License Apache Hamilton is released under the Apache 2.0 License. See [LICENSE](https://github.com/apache/hamilton/blob/main/LICENSE.md) for details. # 🌎 Community ## 👨‍💻 Contributing We're very supportive of changes by new contributors, big or small! Make sure to discuss potential changes by creating an issue or commenting on an existing one before opening a pull request. Good first contributions include creating an example or an integration with your favorite Python library! To contribute, checkout our [contributing guidelines](https://github.com/apache/hamilton/blob/main/CONTRIBUTING.md), our [developer setup guide](https://github.com/apache/hamilton/blob/main/developer_setup.md), and our [Code of Conduct](https://www.apache.org/foundation/policies/conduct.html). ## 😎 Used by Apache Hamilton was started at Stitch Fix before the original creators founded DAGWorks Inc! The library is battle-tested and has been supporting production use cases since 2019. >Read more about the [origin story](https://multithreaded.stitchfix.com/blog/2021/10/14/functions-dags-hamilton/). * [Stitch Fix](https://www.stitchfix.com/) — Time series forecasting * [UK Government Digital Services](https://github.com/alphagov/govuk-feedback-analysis) — National feedback pipeline (processing & analysis) * [IBM](https://www.ibm.com/) — Internal search and ML pipelines * [Opendoor](https://www.opendoor.com/) — Manage PySpark pipelines * [Lexis Nexis](https://www.lexisnexis.com/en-us/home.page) — Feature processing and lineage * [Adobe](https://www.adobe.com/) — Prompt engineering research * [WrenAI](https://github.com/Canner/WrenAI) — async text-to-SQL workflows * [British Cycling](https://www.britishcycling.org.uk/) — Telemetry analysis * [Oak Ridge & PNNL](https://pnnl.gov/) — Naturf project * [ORNL](https://www.ornl.gov/) * [Federal Reserve Board](https://www.federalreserve.gov/) * [Joby Aviation](https://www.jobyaviation.com/) — Flight data processing * [Two](https://www.two.inc/) * [Transfix](https://transfix.io/) — Online featurization and prediction * [Railofy](https://www.railofy.com) — Orchestrate pandas code * [Habitat Energy](https://www.habitat.energy/) — Time-series feature engineering * [KI-Insurance](https://www.ki-insurance.com/) — Feature engineering * [Ascena Retail](https://www.ascena.com/) — Feature engineering * [NaroHQ](https://www.narohq.com/) * [EquipmentShare](https://www.equipmentshare.com/) * [Everstream.ai](https://www.everstream.ai/) * [Flectere](https://flectere.net/) * [F33.ai](https://f33.ai/) * [Kora Money](https://www.koramoney.com) * [Capitec Bank](https://www.capitecbank.co.za/) * [Best Egg](https://bestegg.com/) * [RTV Euro AGD](https://www.euro.com.pl/) * [Wealth.com](https://www.wealth.com/) * [wren.ai](https://wren.ai/) ## 🤝 Code Contributors [![Contributors](https://contrib.rocks/image?repo=apache/hamilton)](https://github.com/apache/hamilton/graphs/contributors) ## 🙌 Special Mentions & 🦟 Bug Hunters Thanks to our awesome community and their active involvement in the Apache Hamilton library. [Nils Olsson](https://github.com/nilsso), [Michał Siedlaczek](https://github.com/elshize), [Alaa Abedrabbo](https://github.com/AAbedrabbo), [Shreya Datar](https://github.com/datarshreya), [Baldo Faieta](https://github.com/baldofaieta), [Anwar Brini](https://github.com/AnwarBrini), [Gourav Kumar](https://github.com/gms101), [Amos Aikman](https://github.com/amosaikman), [Ankush Kundaliya](https://github.com/akundaliya), [David Weselowski](https://github.com/j7zAhU), [Peter Robinson](https://github.com/Peter4137), [Seth Stokes](https://github.com/sT0v), [Louis Maddox](https://github.com/lmmx), [Stephen Bias](https://github.com/s-ducks), [Anup Joseph](https://github.com/AnupJoseph), [Jan Hurst](https://github.com/janhurst), [Flavia Santos](https://github.com/flaviassantos), [Nicolas Huray](https://github.com/nhuray), [Manabu Niseki](https://github.com/ninoseki), [Kyle Pounder](https://github.com/kpounder), [Alex Bustos](https://github.com/bustosalex1), [Andy Day](https://github.com/adayNU), [Alexander Cai](https://github.com/adzcai), [Nils Müller-Wendt](https://github.com/ChronoJon), [Paul Larsen](https://github.com/munichpavel), [ Kemal Eren](https://github.com/kemaleren), [Jernej Frank](https://github.com/jernejfrank), [Noah Ridge](https://github.com/noahridge) # 🎓 Citations We'd appreciate citing Apache Hamilton by referencing one of the following: ```bibtex @inproceedings{DBLP:conf/vldb/KrawczykI22, title = {Hamilton: a modular open source declarative paradigm for high level modeling of dataflows}, author = {Stefan Krawczyk and Elijah ben Izzy}, editor = {Satyanarayana R. Valluri and Mohamed Za{\"{\i}}t}, booktitle = {1st International Workshop on Composable Data Management Systems, CDMS@VLDB 2022, Sydney, Australia, September 9, 2022}, year = {2022}, url = {https://cdmsworkshop.github.io/2022/Proceedings/ShortPapers/Paper6\_StefanKrawczyk.pdf}, timestamp = {Wed, 19 Oct 2022 16:20:48 +0200}, biburl = {https://dblp.org/rec/conf/vldb/KrawczykI22.bib}, bibsource = {dblp computer science bibliography, https://dblp.org} } ``` ```bibtex @inproceedings{CEURWS:conf/vldb/KrawczykIQ22, title = {Hamilton: enabling software engineering best practices for data transformations via generalized dataflow graphs}, author = {Stefan Krawczyk and Elijah ben Izzy and Danielle Quinn}, editor = {Cinzia Cappiello and Sandra Geisler and Maria-Esther Vidal}, booktitle = {1st International Workshop on Data Ecosystems co-located with 48th International Conference on Very Large Databases (VLDB 2022)}, pages = {41--50}, url = {https://ceur-ws.org/Vol-3306/paper5.pdf}, year = {2022} } ``` # 📚 Libraries built on / for Apache Hamilton * [Hypster](https://github.com/gilad-rubin/hypster) - hyperparameter management * [DSP Decision Engine](https://github.com/capitec/dsp-decision-engine) - decision trees * [NaturF](https://github.com/IMMM-SFA/naturf/) - library for data transformation for weather forecasting * [WrenAI](https://github.com/Canner/WrenAI) - RAG * [FlowerPower](https://github.com/legout/flowerpower/) - Scheduler for Apache Hamilton

ML Frameworks Data Pipelines & ETL
2.5K Github Stars
burr
Open Source

burr

<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> # <img src="https://github.com/user-attachments/assets/2ab9b499-7ca2-4ae9-af72-ccc775f30b4e" width=25 height=25/> Apache Burr (incubating) <div> [![Discord](https://img.shields.io/badge/Join-Burr_Discord-7289DA?logo=discord)](https://discord.gg/6Zy2DwP4f3) [![Downloads](https://static.pepy.tech/badge/burr/month)](https://pepy.tech/project/burr) ![PyPI Downloads](https://static.pepy.tech/badge/burr) [![GitHub Last Commit](https://img.shields.io/github/last-commit/apache/burr)](https://github.com/apache/burr/pulse) [![X](https://img.shields.io/badge/follow-%40burr_framework-1DA1F2?logo=x&style=social)](https://twitter.com/burr_framework) <a href="https://twitter.com/burr_framework" target="_blank"> <img src="https://img.shields.io/badge/burr_framework-Follow-purple.svg?logo=X"/> </a> </div> Apache Burr (incubating) makes it easy to develop applications that make decisions (chatbots, agents, simulations, etc...) from simple python building blocks. Apache Burr works well for any application that uses LLMs, and can integrate with any of your favorite frameworks. Burr includes a UI that can track/monitor/trace your system in real time, along with pluggable persisters (e.g. for memory) to save & load application state. Link to [documentation](https://burr.apache.org/). Quick (<3min) video intro [here](https://www.loom.com/share/a10f163428b942fea55db1a84b1140d8?sid=1512863b-f533-4a42-a2f3-95b13deb07c9). Longer [video intro & walkthrough](https://www.youtube.com/watch?v=rEZ4oDN0GdU). Blog post [here](https://blog.dagworks.io/p/burr-develop-stateful-ai-applications). Join discord for help/questions [here](https://discord.gg/6Zy2DwP4f3). ## 🏃Quick start Install from `pypi`: ```bash pip install "apache-burr[start]" ``` (see [the docs](https://burr.apache.org/getting_started/install/) if you're using poetry) Then run the UI server: ```bash burr ``` This will open up Burr's telemetry UI. It comes loaded with some default data so you can click around. It also has a demo chat application to help demonstrate what the UI captures enabling you too see things changing in real-time. Hit the "Demos" side bar on the left and select `chatbot`. To chat it requires the `OPENAI_API_KEY` environment variable to be set, but you can still see how it works if you don't have an API key set. Next, start coding / running examples: ```bash git clone https://github.com/apache/burr && cd burr/examples/hello-world-counter python application.py ``` You'll see the counter example running in the terminal, along with the trace being tracked in the UI. See if you can find it. For more details see the [getting started guide](https://burr.apache.org/getting_started/simple-example/). ## 🔩 How does Apache Burr work? With Apache Burr you express your application as a state machine (i.e. a graph/flowchart). You can (and should!) use it for anything in which you have to manage state, track complex decisions, add human feedback, or dictate an idempotent, self-persisting workflow. The core API is simple -- the Burr hello-world looks like this (plug in your own LLM, or copy from [the docs](https://burr.apache.org/getting_started/simple-example/#build-a-simple-chatbot>) for _gpt-X_) ```python from burr.core import action, State, ApplicationBuilder @action(reads=[], writes=["prompt", "chat_history"]) def human_input(state: State, prompt: str) -> State: # your code -- write what you want here, for example chat_item = {"role" : "user", "content" : prompt} return state.update(prompt=prompt).append(chat_history=chat_item) @action(reads=["chat_history"], writes=["response", "chat_history"]) def ai_response(state: State) -> State: # query the LLM however you want (or don't use an LLM, up to you...) response = _query_llm(state["chat_history"]) # Burr doesn't care how you use LLMs! chat_item = {"role" : "system", "content" : response} return state.update(response=content).append(chat_history=chat_item) app = ( ApplicationBuilder() .with_actions(human_input, ai_response) .with_transitions( ("human_input", "ai_response"), ("ai_response", "human_input") ).with_state(chat_history=[]) .with_entrypoint("human_input") .build() ) *_, state = app.run(halt_after=["ai_response"], inputs={"prompt": "Who was Aaron Burr, sir?"}) print("answer:", app.state["response"]) ``` Apache Burr includes: 1. A (dependency-free) low-abstraction python library that enables you to build and manage state machines with simple python functions 2. A UI you can use view execution telemetry for introspection and debugging 3. A set of integrations to make it easier to persist state, connect to telemetry, and integrate with other systems ![Burr at work](https://github.com/apache/burr/blob/main/chatbot.gif) ## 💻️ What can you do with Apache Burr? Apache Burr can be used to power a variety of applications, including: 1. [A simple gpt-like chatbot](https://github.com/apache/burr/tree/main/examples/multi-modal-chatbot) 2. [A stateful RAG-based chatbot](https://github.com/apache/burr/tree/main/examples/conversational-rag/simple_example) 3. [An LLM-based adventure game](https://github.com/apache/burr/tree/main/examples/llm-adventure-game) 4. [An interactive assistant for writing emails](https://github.com/apache/burr/tree/main/examples/email-assistant) As well as a variety of (non-LLM) use-cases, including a time-series forecasting [simulation](https://github.com/apache/burr/tree/main/examples/simulation), and [hyperparameter tuning](https://github.com/apache/burr/tree/main/examples/ml-training). And a lot more! Using hooks and other integrations you can (a) integrate with any of your favorite vendors (LLM observability, storage, etc...), and (b) build custom actions that delegate to your favorite libraries (like [Apache Hamilton](https://github.com/apache/hamilton)). Apache Burr will _not_ tell you how to build your models, how to query APIs, or how to manage your data. It will help you tie all these together in a way that scales with your needs and makes following the logic of your system easy. Burr comes out of the box with a host of integrations including tooling to build a UI in streamlit and watch your state machine execute. ## 🏗 Start building See the documentation for [getting started](https://burr.apache.org/getting_started/simple-example), and follow the example. Then read through some of the concepts and write your own application! ## 📃 Comparison against common frameworks While Apache Burr is attempting something (somewhat) unique, there are a variety of tools that occupy similar spaces: | Criteria | Apache Burr | Langgraph | temporal | Langchain | Superagent | Apache Hamilton | | ------------------------------------------------- | :--: | :-------: | :------: | :-------: | :--------: | :------: | | Explicitly models a state machine | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | | Framework-agnostic | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | | Asynchronous event-based orchestration | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | | Built for core web-service logic | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | | Open-source user-interface for monitoring/tracing | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | | Works with non-LLM use-cases | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ## 🌯 Why the name Burr? Apache Burr is named after [Aaron Burr](https://en.wikipedia.org/wiki/Aaron_Burr), founding father, third VP of the United States, and murderer/arch-nemesis of [Alexander Hamilton](https://en.wikipedia.org/wiki/Alexander_Hamilton). What's the connection with (Apache) Hamilton? We imagine a world in which Burr and Hamilton lived in harmony and saw through their differences to better the union. Originally Apache Burr was built as a _harness_ to handle state between executions of Apache Hamilton DAGs (because DAGs don't have cycles), but realized that it has a wide array of applications and decided to release it more broadly. # Testimonials > "After evaluating several other obfuscating LLM frameworks, their elegant yet comprehensive state management solution proved to be the powerful answer to rolling out robots driven by AI decision-making." **Ashish Ghosh** *CTO, Peanut Robotics* > "Of course, you can use it [LangChain], but whether it's really production-ready and improves the time from 'code-to-prod' [...], we've been doing LLM apps for two years, and the answer is no [...] All these 'all-in-one' libs suffer from this [...]. Honestly, take a look at Burr. Thank me later." **Reddit user cyan2k** *LocalLlama, Subreddit* > "Using Burr is a no-brainer if you want to build a modular AI application. It is so easy to build with, and I especially love their UI which makes debugging a piece of cake. And the always-ready-to-help team is the cherry on top." **Ishita** *Founder, Watto.ai* > "I just came across Burr and I'm like WOW, this seems like you guys predicted this exact need when building this. No weird esoteric concepts just because it's AI." **Matthew Rideout** *Staff Software Engineer, Paxton AI* > "Burr's state management part is really helpful for creating state snapshots and building debugging, replaying, and even evaluation cases around that." **Rinat Gareev** *Senior Solutions Architect, Provectus* > "I have been using Burr over the past few months, and compared to many agentic LLM platforms out there (e.g. LangChain, CrewAi, AutoGen, Agency Swarm, etc), Burr provides a more robust framework for designing complex behaviors." **Hadi Nayebi** *Co-founder, CognitiveGraphs* > "Moving from LangChain to Burr was a game-changer! > - **Time-Saving**: It took me just a few hours to get started with Burr, compared to the days and weeks I spent trying to navigate LangChain. > - **Cleaner Implementation**: With Burr, I could finally have a cleaner, more sophisticated, and stable implementation. No more wrestling with complex codebases. > - **Team Adoption**: I pitched Burr to my teammates, and we pivoted our entire codebase to it. It's been a smooth ride ever since." **Aditya K.** *DS Architect, TaskHuman* ## 🛣 Roadmap While Apache Burr is stable and well-tested, we have quite a few tools/features on our roadmap! 1. FastAPI integration + hosted deployment -- make it really easy to get Apache Burr in an app in production without thinking about REST APIs 2. Various efficiency/usability improvements for the core library (see [planned capabilities](https://burr.apache.org/concepts/planned-capabilities/) for more details). This includes: 1. First-class support for retries + exception management 2. More integration with popular frameworks (LCEL, LLamaIndex, Apache Hamilton, etc...) 3. Capturing & surfacing extra metadata, e.g. annotations for particular point in time, that you can then pull out for fine-tuning, etc. 4. Improvements to the pydantic-based typing system 3. Tooling for hosted execution of state machines, integrating with your infrastructure (Ray, modal, FastAPI + EC2, etc...) 4. Additional storage integrations. More integrations with technologies like MySQL, S3, etc. so you can run Apache Burr on top of what you have available. If you want to avoid self-hosting the above solutions we're building Burr Cloud. To let us know you're interested sign up [here](https://forms.gle/w9u2QKcPrztApRedA) for the waitlist to get access. ## 🤲 Contributing We welcome contributors! To get started on developing, see the [developer-facing docs](https://burr.apache.org/contributing). ## 👪 Contributors ### Code contributions Users who have contributed core functionality, integrations, or examples. - [Elijah ben Izzy](https://github.com/elijahbenizzy) - [Stefan Krawczyk](https://github.com/skrawcz) - [Joseph Booth](https://github.com/jombooth) - [Nandani Thakur](https://github.com/NandaniThakur) - [Thierry Jean](https://github.com/zilto) - [Hamza Farhan](https://github.com/HamzaFarhan) - [Abdul Rafay](https://github.com/proftorch) - [Margaret Lange](https://github.com/margaretlange) ### Bug hunters/special mentions Users who have contributed small docs fixes, design suggestions, and found bugs - [Luke Chadwick](https://github.com/vertis) - [Evans](https://github.com/sudoevans) - [Sasmitha Manathunga](https://github.com/mmz-001) # 📑 License Apache Burr is released under the Apache 2.0 License. See [LICENSE](https://github.com/apache/burr/blob/main/LICENSE) for details. # 🌎 Community ## 👨‍💻 Contributing We're very supportive of changes by new contributors, big or small! Make sure to discuss potential changes by creating an issue or commenting on an existing one before opening a pull request. Good first contributions include creating an example or an integration with your favorite Python library! To contribute, checkout our [contributing guidelines](https://github.com/apache/burr/blob/main/CONTRIBUTING.rst), our [developer setup guide](https://github.com/apache/burr/blob/main/developer_setup.md), and our [Code of Conduct](https://github.com/apache/burr/blob/main/CODE_OF_CONDUCT.md).

AI Tools AI Agents
2K Github Stars
dolphinscheduler
Open Source

dolphinscheduler

# Apache Dolphinscheduler [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html) ![codecov](https://codecov.io/gh/apache/dolphinscheduler/branch/dev/graph/badge.svg) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=apache-dolphinscheduler&metric=alert_status)](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler) [![Twitter Follow](https://img.shields.io/twitter/follow/dolphinschedule.svg?style=social&label=Follow)](https://twitter.com/dolphinschedule) <!-- markdown-link-check-disable-line --> [![CN doc](https://img.shields.io/badge/文档-中文版-blue.svg)](README_zh_CN.md) ## About Apache DolphinScheduler is a modern data orchestration platform that empowers agile, low-code development of high-performance workflows. It is dedicated to handling complex task dependencies in data pipelines and provides a wide range of built-in job types **out of the box**. Key features for DolphinScheduler are as follows: - Easy to deploy, providing four deployment modes including Standalone, Cluster, Docker, and Kubernetes. - Easy to use, workflows can be created and managed via Web UI, [Python SDK](https://dolphinscheduler.apache.org/python/main/index.html) or Open API - Highly reliable and high availability, with a decentralized, multi-master and multi-worker architecture and native support for horizontal scaling. - High performance, its performance is several times faster than other orchestration platforms, and it is capable of handling tens of millions of tasks per day - Cloud Native, DolphinScheduler supports orchestrating workflows across multiple clouds and data centers, and allows custom task types - Workflow Versioning, provides version control for both workflows and individual workflow instances, including tasks. - Flexible state control of workflows and tasks, supports pausing, stopping, and recovering them at any time. - Multi-tenancy support - Additional features, backfill support(Web UI native), permission control including project and data source etc. ## QuickStart - For quick experience - Want to [start with standalone](https://dolphinscheduler.apache.org/en-us/docs/3.3.0-alpha/guide/installation/standalone) - Want to [start with Docker](https://dolphinscheduler.apache.org/en-us/docs/3.3.0-alpha/guide/start/docker) - For Kubernetes - [Start with Kubernetes](https://dolphinscheduler.apache.org/en-us/docs/3.3.0-alpha/guide/installation/kubernetes) - For Terraform - [Start with Terraform](deploy/terraform/README.md) ## User Interface Screenshots * **Homepage:** Project and workflow overview, including the latest workflow instance and task instance status statistics. ![home](images/home.png) * **Workflow Definition:** Create and manage workflows by drag and drop, easy to build and maintain complex workflows, support [a wide range of tasks](https://dolphinscheduler.apache.org/en-us/docs/3.3.0-alpha/introduction-to-functions_menu/task_menu) out of box. ![workflow-definition](images/workflow-definition.png) * **Workflow Tree View:** Abstract tree structure could provide a clearer understanding of task relationships ![workflow-tree](images/workflow-tree.png) * **Data source:** Supports multiple external data sources, provides unified data access capabilities for MySQL, PostgreSQL, Hive, Trino, etc. ![data-source](images/data-source.png) * **Monitor:** View the status of the master, worker and database in real time, including server resource usage and load, do a quick health check without logging in to the server. ![monitor](images/monitor.png) ## Suggestions & Bug Reports Follow [this guide](https://github.com/apache/dolphinscheduler/issues/new/choose) to report your suggestions or bugs. ## Contributing The community welcomes contributions from everyone. Please refer to this page to find out more details: [How to contribute](docs/docs/en/contribute/join/contribute.md). Check out good first issues [here](https://github.com/apache/dolphinscheduler/contribute) if you are new to DolphinScheduler. ## Community Welcome to join the Apache DolphinScheduler community by: - Use [GitHub Issues](https://github.com/apache/dolphinscheduler/issues) for questions, discussions, and bug reports - Follow the [DolphinScheduler Twitter](https://twitter.com/dolphinschedule) and get the latest news <!-- markdown-link-check-disable-line --> - Subscribe DolphinScheduler mail list, [[email protected]](mailto:[email protected]) for users and [[email protected]](mailto:[email protected]) for developers # Landscapes <p align="center"> <br/><br/> <img src="./images/cncf-landscape-white-bg.jpg" width="175" alt="cncf-landscape"/>&nbsp;&nbsp;<img src="./images/cncf-white-bg.jpg" width="200" alt="cncf-logo"/> <br/><br/> DolphinScheduler enriches the <a href="https://landscape.cncf.io/?item=orchestration-management--scheduling-orchestration--dolphinscheduler">CNCF CLOUD NATIVE Landscape.</a > </p >

Cron & Job Scheduling Data Pipelines & ETL
14.3K Github Stars
dolphinscheduler-operator
Open Source

dolphinscheduler-operator

<!-- ~ Licensed to the Apache Software Foundation (ASF) under one ~ or more contributor license agreements. See the NOTICE file ~ distributed with this work for additional information ~ regarding copyright ownership. The ASF licenses this file ~ to you under the Apache License, Version 2.0 (the ~ "License"); you may not use this file except in compliance ~ with the License. You may obtain a copy of the License at ~ ~ http://www.apache.org/licenses/LICENSE-2.0 ~ ~ Unless required by applicable law or agreed to in writing, ~ software distributed under the License is distributed on an ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY ~ KIND, either express or implied. See the License for the ~ specific language governing permissions and limitations ~ under the License. --> # dolphinscheduler-operator ## Features - Deploy and manage the master, worker, alert, api components. - Scale the Pod numbers with one commond. - Update the component's version (not include the database schema). ## Project Status Project status: `alpha1` Current API version: `v1alpha1` ## Get Started - Create a namespace `ds` ```shell kubectl create namespace ds ``` - Install PostgreSQL database (Optional) If you don't have a running database, you can run ```shell kubectl apply -f config/ds/postgreSQL ``` to create a demo database, note that this is only for demonstration, DO NOT use it in production environment. You need to replace the `hostPath.path` in `postgres-pv.yaml` if you don't have a directory `/var/lib/data`. Connect to PostgreSQL and initialize the database schema by executing [`dolphinscheduler/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql`](https://github.com/apache/dolphinscheduler/blob/dev/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql). - Install zookeeper (Optional) If you don't have a running zookeeper, the demo doployment file is in `config/ds/zookeeper`, ```shell kubectl apply -f config/ds/zookeeper ``` - Create pv and pvc (Optional) If you have pv and pvc, you can config it in `config/sameples`. Or you can create it with `config/ds/ds-pv.yaml` and `config/ds/ds-pvc.yaml`. Notice to replace the `hostPath.path` in `ds-pv.yaml`. And you can mount the lib in dolphinscheduler `/opt/soft` in config/samples/ds_v1alpha1_dsworker.yaml with paramter named lib_pvc_name Mount the logs in `/opt/dolphinscheduler/logs` with the pvcname named `log_pvc_name`. ## query the status of worker ```shell kubectl get dsworkers.ds.apache.dolphinscheduler.dev -n ds ``` ## api explain ```shell kubectl explain dsmaster ``` ## how to test * Replace the database config and zookeeper config paramters in [`config/samples/`](./config/samples/). * Replace the nodeport in [`config/samples/ds_v1alpha1_api.yaml`](./config/samples/ds_v1alpha1_dsapi.yaml) * Install CRDs and controller ## how to deploy ```shell export IMG=ghcr.io/apache/dolphinscheduler-operator:latest make build && make manifests && make install && make deploy ``` * Deploy the sample ```shell cd config/samples kubectl apply -f ds_v1alpha1_dsalert.yaml kubectl apply -f ds_v1alpha1_dsapi.yaml -f ds_v1alpha1_dsmaster.yaml -f ds_v1alpha1_dsworker.yaml ```

Cron & Job Scheduling Container Management
30 Github Stars