|
|
|
|
@ -1,268 +1,475 @@
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
<p align="center">
|
|
|
|
|
📌 <a href="https://dify.ai/blog/introducing-dify-workflow-file-upload-a-demo-on-ai-podcast">Introducing Dify Workflow File Upload: Recreate Google NotebookLM Podcast</a>
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p align="center">
|
|
|
|
|
<a href="https://cloud.dify.ai">Dify Cloud</a> ·
|
|
|
|
|
<a href="https://docs.dify.ai/getting-started/install-self-hosted">Self-hosting</a> ·
|
|
|
|
|
<a href="https://docs.dify.ai">Documentation</a> ·
|
|
|
|
|
<a href="https://dify.ai/pricing">Dify edition overview</a>
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p align="center">
|
|
|
|
|
<a href="https://dify.ai" target="_blank">
|
|
|
|
|
<img alt="Static Badge" src="https://img.shields.io/badge/Product-F04438"></a>
|
|
|
|
|
<a href="https://dify.ai/pricing" target="_blank">
|
|
|
|
|
<img alt="Static Badge" src="https://img.shields.io/badge/free-pricing?logo=free&color=%20%23155EEF&label=pricing&labelColor=%20%23528bff"></a>
|
|
|
|
|
<a href="https://discord.gg/FngNHpbcY7" target="_blank">
|
|
|
|
|
<img src="https://img.shields.io/discord/1082486657678311454?logo=discord&labelColor=%20%235462eb&logoColor=%20%23f5f5f5&color=%20%235462eb"
|
|
|
|
|
alt="chat on Discord"></a>
|
|
|
|
|
<a href="https://reddit.com/r/difyai" target="_blank">
|
|
|
|
|
<img src="https://img.shields.io/reddit/subreddit-subscribers/difyai?style=plastic&logo=reddit&label=r%2Fdifyai&labelColor=white"
|
|
|
|
|
alt="join Reddit"></a>
|
|
|
|
|
<a href="https://twitter.com/intent/follow?screen_name=dify_ai" target="_blank">
|
|
|
|
|
<img src="https://img.shields.io/twitter/follow/dify_ai?logo=X&color=%20%23f5f5f5"
|
|
|
|
|
alt="follow on X(Twitter)"></a>
|
|
|
|
|
<a href="https://www.linkedin.com/company/langgenius/" target="_blank">
|
|
|
|
|
<img src="https://custom-icon-badges.demolab.com/badge/LinkedIn-0A66C2?logo=linkedin-white&logoColor=fff"
|
|
|
|
|
alt="follow on LinkedIn"></a>
|
|
|
|
|
<a href="https://hub.docker.com/u/langgenius" target="_blank">
|
|
|
|
|
<img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/langgenius/dify-web?labelColor=%20%23FDB062&color=%20%23f79009"></a>
|
|
|
|
|
<a href="https://github.com/langgenius/dify/graphs/commit-activity" target="_blank">
|
|
|
|
|
<img alt="Commits last month" src="https://img.shields.io/github/commit-activity/m/langgenius/dify?labelColor=%20%2332b583&color=%20%2312b76a"></a>
|
|
|
|
|
<a href="https://github.com/langgenius/dify/" target="_blank">
|
|
|
|
|
<img alt="Issues closed" src="https://img.shields.io/github/issues-search?query=repo%3Alanggenius%2Fdify%20is%3Aclosed&label=issues%20closed&labelColor=%20%237d89b0&color=%20%235d6b98"></a>
|
|
|
|
|
<a href="https://github.com/langgenius/dify/discussions/" target="_blank">
|
|
|
|
|
<img alt="Discussion posts" src="https://img.shields.io/github/discussions/langgenius/dify?labelColor=%20%239b8afb&color=%20%237a5af8"></a>
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p align="center">
|
|
|
|
|
<a href="./README.md"><img alt="README in English" src="https://img.shields.io/badge/English-d9d9d9"></a>
|
|
|
|
|
<a href="./README_TW.md"><img alt="繁體中文文件" src="https://img.shields.io/badge/繁體中文-d9d9d9"></a>
|
|
|
|
|
<a href="./README_CN.md"><img alt="简体中文版自述文件" src="https://img.shields.io/badge/简体中文-d9d9d9"></a>
|
|
|
|
|
<a href="./README_JA.md"><img alt="日本語のREADME" src="https://img.shields.io/badge/日本語-d9d9d9"></a>
|
|
|
|
|
<a href="./README_ES.md"><img alt="README en Español" src="https://img.shields.io/badge/Español-d9d9d9"></a>
|
|
|
|
|
<a href="./README_FR.md"><img alt="README en Français" src="https://img.shields.io/badge/Français-d9d9d9"></a>
|
|
|
|
|
<a href="./README_KL.md"><img alt="README tlhIngan Hol" src="https://img.shields.io/badge/Klingon-d9d9d9"></a>
|
|
|
|
|
<a href="./README_KR.md"><img alt="README in Korean" src="https://img.shields.io/badge/한국어-d9d9d9"></a>
|
|
|
|
|
<a href="./README_AR.md"><img alt="README بالعربية" src="https://img.shields.io/badge/العربية-d9d9d9"></a>
|
|
|
|
|
<a href="./README_TR.md"><img alt="Türkçe README" src="https://img.shields.io/badge/Türkçe-d9d9d9"></a>
|
|
|
|
|
<a href="./README_VI.md"><img alt="README Tiếng Việt" src="https://img.shields.io/badge/Ti%E1%BA%BFng%20Vi%E1%BB%87t-d9d9d9"></a>
|
|
|
|
|
<a href="./README_DE.md"><img alt="README in Deutsch" src="https://img.shields.io/badge/German-d9d9d9"></a>
|
|
|
|
|
<a href="./README_BN.md"><img alt="README in বাংলা" src="https://img.shields.io/badge/বাংলা-d9d9d9"></a>
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
Dify is an open-source LLM app development platform. Its intuitive interface combines agentic AI workflow, RAG pipeline, agent capabilities, model management, observability features, and more, allowing you to quickly move from prototype to production.
|
|
|
|
|
|
|
|
|
|
## Quick start
|
|
|
|
|
|
|
|
|
|
> Before installing Dify, make sure your machine meets the following minimum system requirements:
|
|
|
|
|
>
|
|
|
|
|
> - CPU >= 2 Core
|
|
|
|
|
> - RAM >= 4 GiB
|
|
|
|
|
|
|
|
|
|
</br>
|
|
|
|
|
|
|
|
|
|
The easiest way to start the Dify server is through [docker compose](docker/docker-compose.yaml). Before running Dify with the following commands, make sure that [Docker](https://docs.docker.com/get-docker/) and [Docker Compose](https://docs.docker.com/compose/install/) are installed on your machine:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
cd dify
|
|
|
|
|
cd docker
|
|
|
|
|
cp .env.example .env
|
|
|
|
|
docker compose up -d
|
|
|
|
|
# editorconfig-checker
|
|
|
|
|
|
|
|
|
|
<a href="https://www.buymeacoffee.com/mstruebing" target="_blank"><img src="https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png" alt="Buy Me A Coffee" style="height: 41px !important;width: 174px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;" ></a>
|
|
|
|
|
|
|
|
|
|
[](https://github.com/editorconfig-checker/editorconfig-checker/actions/workflows/ci.yml)
|
|
|
|
|
[](https://codecov.io/gh/editorconfig-checker/editorconfig-checker)
|
|
|
|
|
[](https://hitsofcode.com/github/editorconfig-checker/editorconfig-checker/view?branch=main&label=Hits-of-Code)
|
|
|
|
|
[](https://goreportcard.com/report/github.com/editorconfig-checker/editorconfig-checker/v3)<!-- x-release-please-major -->
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
1. [What?](#what)
|
|
|
|
|
2. [Quickstart](#quickstart)
|
|
|
|
|
3. [Installation](#installation)
|
|
|
|
|
4. [Usage](#usage)
|
|
|
|
|
5. [Configuration](#configuration)
|
|
|
|
|
6. [Excluding](#excluding)
|
|
|
|
|
1. [Excluding Lines](#excluding-lines)
|
|
|
|
|
2. [Excluding Blocks](#excluding-blocks)
|
|
|
|
|
3. [Excluding Paths](#excluding-paths)
|
|
|
|
|
1. [Inline](#inline)
|
|
|
|
|
2. [Default Excludes](#default-excludes)
|
|
|
|
|
3. [Ignoring Default Excludes](#ignoring-default-excludes)
|
|
|
|
|
4. [Manually Excluding](#manually-excluding)
|
|
|
|
|
1. [via configuration](#via-configuration)
|
|
|
|
|
2. [via arguments](#via-arguments)
|
|
|
|
|
7. [Docker](#docker)
|
|
|
|
|
8. [Continuous Integration](#continuous-integration)
|
|
|
|
|
9. [Support](#support)
|
|
|
|
|
10. [Contributing](#contributing)
|
|
|
|
|
11. [Semantic Versioning Policy](#semantic-versioning-policy)
|
|
|
|
|
|
|
|
|
|
## What?
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
This is a tool to check if your files consider your `.editorconfig` rules.
|
|
|
|
|
Most tools—like linters, for example—only test one filetype and need an extra configuration.
|
|
|
|
|
This tool only needs your `.editorconfig` to check all files.
|
|
|
|
|
|
|
|
|
|
If you don't know about editorconfig already you can read about it here: [editorconfig.org](https://editorconfig.org/).
|
|
|
|
|
|
|
|
|
|
Currently, implemented editorconfig features are:
|
|
|
|
|
|
|
|
|
|
- `end_of_line`
|
|
|
|
|
- `insert_final_newline`
|
|
|
|
|
- `trim_trailing_whitespace`
|
|
|
|
|
- `indent_style`
|
|
|
|
|
- `indent_size`
|
|
|
|
|
- `max_line_length`
|
|
|
|
|
|
|
|
|
|
Unsupported features are:
|
|
|
|
|
|
|
|
|
|
- `charset`
|
|
|
|
|
|
|
|
|
|
## Quickstart
|
|
|
|
|
|
|
|
|
|
<!-- x-release-please-start-version -->
|
|
|
|
|
```shell
|
|
|
|
|
VERSION="v3.3.0"
|
|
|
|
|
OS="linux"
|
|
|
|
|
ARCH="amd64"
|
|
|
|
|
curl -O -L -C - https://github.com/editorconfig-checker/editorconfig-checker/releases/download/$VERSION/ec-$OS-$ARCH.tar.gz && \
|
|
|
|
|
tar xzf ec-$OS-$ARCH.tar.gz && \
|
|
|
|
|
./bin/ec-$OS-$ARCH
|
|
|
|
|
```
|
|
|
|
|
<!-- x-release-please-end -->
|
|
|
|
|
|
|
|
|
|
After running, you can access the Dify dashboard in your browser at [http://localhost/install](http://localhost/install) and start the initialization process.
|
|
|
|
|
|
|
|
|
|
#### Seeking help
|
|
|
|
|
|
|
|
|
|
Please refer to our [FAQ](https://docs.dify.ai/getting-started/install-self-hosted/faqs) if you encounter problems setting up Dify. Reach out to [the community and us](#community--contact) if you are still having issues.
|
|
|
|
|
|
|
|
|
|
> If you'd like to contribute to Dify or do additional development, refer to our [guide to deploying from source code](https://docs.dify.ai/getting-started/install-self-hosted/local-source-code)
|
|
|
|
|
|
|
|
|
|
## Key features
|
|
|
|
|
|
|
|
|
|
**1. Workflow**:
|
|
|
|
|
Build and test powerful AI workflows on a visual canvas, leveraging all the following features and beyond.
|
|
|
|
|
|
|
|
|
|
**2. Comprehensive model support**:
|
|
|
|
|
Seamless integration with hundreds of proprietary / open-source LLMs from dozens of inference providers and self-hosted solutions, covering GPT, Mistral, Llama3, and any OpenAI API-compatible models. A full list of supported model providers can be found [here](https://docs.dify.ai/getting-started/readme/model-providers).
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
**3. Prompt IDE**:
|
|
|
|
|
Intuitive interface for crafting prompts, comparing model performance, and adding additional features such as text-to-speech to a chat-based app.
|
|
|
|
|
|
|
|
|
|
**4. RAG Pipeline**:
|
|
|
|
|
Extensive RAG capabilities that cover everything from document ingestion to retrieval, with out-of-box support for text extraction from PDFs, PPTs, and other common document formats.
|
|
|
|
|
|
|
|
|
|
**5. Agent capabilities**:
|
|
|
|
|
You can define agents based on LLM Function Calling or ReAct, and add pre-built or custom tools for the agent. Dify provides 50+ built-in tools for AI agents, such as Google Search, DALL·E, Stable Diffusion and WolframAlpha.
|
|
|
|
|
|
|
|
|
|
**6. LLMOps**:
|
|
|
|
|
Monitor and analyze application logs and performance over time. You could continuously improve prompts, datasets, and models based on production data and annotations.
|
|
|
|
|
|
|
|
|
|
**7. Backend-as-a-Service**:
|
|
|
|
|
All of Dify's offerings come with corresponding APIs, so you could effortlessly integrate Dify into your own business logic.
|
|
|
|
|
|
|
|
|
|
## Feature Comparison
|
|
|
|
|
|
|
|
|
|
<table style="width: 100%;">
|
|
|
|
|
<tr>
|
|
|
|
|
<th align="center">Feature</th>
|
|
|
|
|
<th align="center">Dify.AI</th>
|
|
|
|
|
<th align="center">LangChain</th>
|
|
|
|
|
<th align="center">Flowise</th>
|
|
|
|
|
<th align="center">OpenAI Assistants API</th>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td align="center">Programming Approach</td>
|
|
|
|
|
<td align="center">API + App-oriented</td>
|
|
|
|
|
<td align="center">Python Code</td>
|
|
|
|
|
<td align="center">App-oriented</td>
|
|
|
|
|
<td align="center">API-oriented</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td align="center">Supported LLMs</td>
|
|
|
|
|
<td align="center">Rich Variety</td>
|
|
|
|
|
<td align="center">Rich Variety</td>
|
|
|
|
|
<td align="center">Rich Variety</td>
|
|
|
|
|
<td align="center">OpenAI-only</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td align="center">RAG Engine</td>
|
|
|
|
|
<td align="center">✅</td>
|
|
|
|
|
<td align="center">✅</td>
|
|
|
|
|
<td align="center">✅</td>
|
|
|
|
|
<td align="center">✅</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td align="center">Agent</td>
|
|
|
|
|
<td align="center">✅</td>
|
|
|
|
|
<td align="center">✅</td>
|
|
|
|
|
<td align="center">❌</td>
|
|
|
|
|
<td align="center">✅</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td align="center">Workflow</td>
|
|
|
|
|
<td align="center">✅</td>
|
|
|
|
|
<td align="center">❌</td>
|
|
|
|
|
<td align="center">✅</td>
|
|
|
|
|
<td align="center">❌</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td align="center">Observability</td>
|
|
|
|
|
<td align="center">✅</td>
|
|
|
|
|
<td align="center">✅</td>
|
|
|
|
|
<td align="center">❌</td>
|
|
|
|
|
<td align="center">❌</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td align="center">Enterprise Feature (SSO/Access control)</td>
|
|
|
|
|
<td align="center">✅</td>
|
|
|
|
|
<td align="center">❌</td>
|
|
|
|
|
<td align="center">❌</td>
|
|
|
|
|
<td align="center">❌</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td align="center">Local Deployment</td>
|
|
|
|
|
<td align="center">✅</td>
|
|
|
|
|
<td align="center">✅</td>
|
|
|
|
|
<td align="center">✅</td>
|
|
|
|
|
<td align="center">❌</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
## Installation
|
|
|
|
|
|
|
|
|
|
## Using Dify
|
|
|
|
|
Grab a binary from the [release page](https://github.com/editorconfig-checker/editorconfig-checker/releases).
|
|
|
|
|
|
|
|
|
|
- **Cloud </br>**
|
|
|
|
|
We host a [Dify Cloud](https://dify.ai) service for anyone to try with zero setup. It provides all the capabilities of the self-deployed version, and includes 200 free GPT-4 calls in the sandbox plan.
|
|
|
|
|
If you have go installed you can run `go get github.com/editorconfig-checker/editorconfig-checker/v3` <!-- x-release-please-major -->
|
|
|
|
|
and run `make build` inside the project folder.
|
|
|
|
|
This will place a binary called `ec` into the `bin` directory.
|
|
|
|
|
|
|
|
|
|
- **Self-hosting Dify Community Edition</br>**
|
|
|
|
|
Quickly get Dify running in your environment with this [starter guide](#quick-start).
|
|
|
|
|
Use our [documentation](https://docs.dify.ai) for further references and more in-depth instructions.
|
|
|
|
|
|
|
|
|
|
- **Dify for enterprise / organizations</br>**
|
|
|
|
|
We provide additional enterprise-centric features. [Log your questions for us through this chatbot](https://udify.app/chat/22L1zSxg6yW1cWQg) or [send us an email](mailto:business@dify.ai?subject=[GitHub]Business%20License%20Inquiry) to discuss enterprise needs. </br>
|
|
|
|
|
> For startups and small businesses using AWS, check out [Dify Premium on AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-t22mebxzwjhu6) and deploy it to your own AWS VPC with one click. It's an affordable AMI offering with the option to create apps with custom logo and branding.
|
|
|
|
|
|
|
|
|
|
## Staying ahead
|
|
|
|
|
|
|
|
|
|
Star Dify on GitHub and be instantly notified of new releases.
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
## Advanced Setup
|
|
|
|
|
|
|
|
|
|
If you need to customize the configuration, please refer to the comments in our [.env.example](docker/.env.example) file and update the corresponding values in your `.env` file. Additionally, you might need to make adjustments to the `docker-compose.yaml` file itself, such as changing image versions, port mappings, or volume mounts, based on your specific deployment environment and requirements. After making any changes, please re-run `docker-compose up -d`. You can find the full list of available environment variables [here](https://docs.dify.ai/getting-started/install-self-hosted/environments).
|
|
|
|
|
|
|
|
|
|
If you'd like to configure a highly-available setup, there are community-contributed [Helm Charts](https://helm.sh/) and YAML files which allow Dify to be deployed on Kubernetes.
|
|
|
|
|
|
|
|
|
|
- [Helm Chart by @LeoQuote](https://github.com/douban/charts/tree/master/charts/dify)
|
|
|
|
|
- [Helm Chart by @BorisPolonsky](https://github.com/BorisPolonsky/dify-helm)
|
|
|
|
|
- [Helm Chart by @magicsong](https://github.com/magicsong/ai-charts)
|
|
|
|
|
- [YAML file by @Winson-030](https://github.com/Winson-030/dify-kubernetes)
|
|
|
|
|
- [YAML file by @wyy-holding](https://github.com/wyy-holding/dify-k8s)
|
|
|
|
|
|
|
|
|
|
#### Using Terraform for Deployment
|
|
|
|
|
|
|
|
|
|
Deploy Dify to Cloud Platform with a single click using [terraform](https://www.terraform.io/)
|
|
|
|
|
|
|
|
|
|
##### Azure Global
|
|
|
|
|
|
|
|
|
|
- [Azure Terraform by @nikawang](https://github.com/nikawang/dify-azure-terraform)
|
|
|
|
|
|
|
|
|
|
##### Google Cloud
|
|
|
|
|
|
|
|
|
|
- [Google Cloud Terraform by @sotazum](https://github.com/DeNA/dify-google-cloud-terraform)
|
|
|
|
|
|
|
|
|
|
#### Using AWS CDK for Deployment
|
|
|
|
|
|
|
|
|
|
Deploy Dify to AWS with [CDK](https://aws.amazon.com/cdk/)
|
|
|
|
|
|
|
|
|
|
##### AWS
|
|
|
|
|
|
|
|
|
|
- [AWS CDK by @KevinZhao](https://github.com/aws-samples/solution-for-deploying-dify-on-aws)
|
|
|
|
|
If you are using Arch Linux, you can use [pacman](https://wiki.archlinux.org/title/Pacman) to install from [extra repository](https://archlinux.org/packages/extra/x86_64/editorconfig-checker/):
|
|
|
|
|
|
|
|
|
|
#### Using Alibaba Cloud Computing Nest
|
|
|
|
|
```shell
|
|
|
|
|
pacman -S editorconfig-checker
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Quickly deploy Dify to Alibaba cloud with [Alibaba Cloud Computing Nest](https://computenest.console.aliyun.com/service/instance/create/default?type=user&ServiceName=Dify%E7%A4%BE%E5%8C%BA%E7%89%88)
|
|
|
|
|
Also, development (VCS) package is available in the [AUR](https://aur.archlinux.org/packages/editorconfig-checker-git):
|
|
|
|
|
|
|
|
|
|
#### Using Alibaba Cloud Data Management
|
|
|
|
|
```shell
|
|
|
|
|
# <favourite-aur-helper> <install-command> editorconfig-checker-git
|
|
|
|
|
|
|
|
|
|
One-Click deploy Dify to Alibaba Cloud with [Alibaba Cloud Data Management](https://www.alibabacloud.com/help/en/dms/dify-in-invitational-preview/)
|
|
|
|
|
# i.e.
|
|
|
|
|
paru -S editorconfig-checker-git
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
If Go 1.16 or greater is installed, you can also install it globally via `go install`:
|
|
|
|
|
|
|
|
|
|
## Contributing
|
|
|
|
|
```shell
|
|
|
|
|
go install github.com/editorconfig-checker/editorconfig-checker/v3/cmd/editorconfig-checker@latest
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
|
|
```txt
|
|
|
|
|
USAGE:
|
|
|
|
|
-config string
|
|
|
|
|
config
|
|
|
|
|
-debug
|
|
|
|
|
print debugging information
|
|
|
|
|
-disable-end-of-line
|
|
|
|
|
disables the trailing whitespace check
|
|
|
|
|
-disable-indent-size
|
|
|
|
|
disables only the indent-size check
|
|
|
|
|
-disable-indentation
|
|
|
|
|
disables the indentation check
|
|
|
|
|
-disable-insert-final-newline
|
|
|
|
|
disables the final newline check
|
|
|
|
|
-disable-trim-trailing-whitespace
|
|
|
|
|
disables the trailing whitespace check
|
|
|
|
|
-dry-run
|
|
|
|
|
show which files would be checked
|
|
|
|
|
-exclude string
|
|
|
|
|
a regex which files should be excluded from checking - needs to be a valid regular expression
|
|
|
|
|
-format
|
|
|
|
|
specifies the output format, see "Formats" below for more information
|
|
|
|
|
-h print the help
|
|
|
|
|
-help
|
|
|
|
|
print the help
|
|
|
|
|
-ignore-defaults
|
|
|
|
|
ignore default excludes
|
|
|
|
|
-init
|
|
|
|
|
creates an initial configuration
|
|
|
|
|
-no-color
|
|
|
|
|
disables printing color
|
|
|
|
|
-color
|
|
|
|
|
enables printing color
|
|
|
|
|
-v print debugging information
|
|
|
|
|
-verbose
|
|
|
|
|
print debugging information
|
|
|
|
|
-version
|
|
|
|
|
print the version number
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
If you run this tool from a repository root it will check all files which are added to the git repository and are text files. If the tool isn't able to determine a file type it will be added to be checked too.
|
|
|
|
|
|
|
|
|
|
If you run this tool from a normal directory it will check all files which are text files. If the tool isn't able to determine a file type it will be added to be checked too.
|
|
|
|
|
|
|
|
|
|
### Formats
|
|
|
|
|
|
|
|
|
|
The following output formats are supported:
|
|
|
|
|
|
|
|
|
|
- **default**: Plain text, human readable output.<br/>
|
|
|
|
|
```text
|
|
|
|
|
<file>:
|
|
|
|
|
<startingLine>-<endLine>: <message>
|
|
|
|
|
```
|
|
|
|
|
- **gcc**: GCC compatible output. Useful for editors that support compiling and showing syntax errors. <br/>
|
|
|
|
|
`<file>:<line>:<column>: <type>: <message>`
|
|
|
|
|
- **github-actions**: The format used by GitHub Actions <br/>
|
|
|
|
|
`::error file=<file>,line=<startingLine>,endLine=<endingLine>::<message>`
|
|
|
|
|
- **codeclimate**: The [Code Climate](https://github.com/codeclimate/platform/blob/master/spec/analyzers/SPEC.md#data-types) json format used for [custom quality reports](https://docs.gitlab.com/ee/ci/testing/code_quality.html#implement-a-custom-tool) in GitLab CI
|
|
|
|
|
```json
|
|
|
|
|
[
|
|
|
|
|
{
|
|
|
|
|
"check_name": "editorconfig-checker",
|
|
|
|
|
"description": "Wrong indent style found (tabs instead of spaces)",
|
|
|
|
|
"fingerprint": "e87a958a3960d60a11d4b49c563cccd2",
|
|
|
|
|
"severity": "minor",
|
|
|
|
|
"location": {
|
|
|
|
|
"path": ".vscode/extensions.json",
|
|
|
|
|
"lines": {
|
|
|
|
|
"begin": 2,
|
|
|
|
|
"end": 2
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Configuration
|
|
|
|
|
|
|
|
|
|
The configuration is done via arguments or it will take the first config file found with the following file names:
|
|
|
|
|
|
|
|
|
|
- `.editorconfig-checker.json`
|
|
|
|
|
- `.ecrc` (deprecated filename, soon unsupported)
|
|
|
|
|
|
|
|
|
|
A sample configuration file can look like this and will be used from your current working directory if not specified via the `--config` argument:
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"Verbose": false,
|
|
|
|
|
"Debug": false,
|
|
|
|
|
"IgnoreDefaults": false,
|
|
|
|
|
"SpacesAfterTabs": false,
|
|
|
|
|
"NoColor": false,
|
|
|
|
|
"Exclude": [],
|
|
|
|
|
"AllowedContentTypes": [],
|
|
|
|
|
"PassedFiles": [],
|
|
|
|
|
"Disable": {
|
|
|
|
|
"EndOfLine": false,
|
|
|
|
|
"Indentation": false,
|
|
|
|
|
"IndentSize": false,
|
|
|
|
|
"InsertFinalNewline": false,
|
|
|
|
|
"TrimTrailingWhitespace": false,
|
|
|
|
|
"MaxLineLength": false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
For those who'd like to contribute code, see our [Contribution Guide](https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md).
|
|
|
|
|
At the same time, please consider supporting Dify by sharing it on social media and at events and conferences.
|
|
|
|
|
You can set any of the options under the `"Disable"` section to `true` to disable those particular checks.
|
|
|
|
|
|
|
|
|
|
> We are looking for contributors to help translate Dify into languages other than Mandarin or English. If you are interested in helping, please see the [i18n README](https://github.com/langgenius/dify/blob/main/web/i18n/README.md) for more information, and leave us a comment in the `global-users` channel of our [Discord Community Server](https://discord.gg/8Tpq4AcN9c).
|
|
|
|
|
You could also specify command line arguments, and they will get merged with the configuration file. The command line arguments have a higher precedence than the configuration.
|
|
|
|
|
|
|
|
|
|
## Community & contact
|
|
|
|
|
You can create a configuration with the `init`-flag. If you specify a `config`-path it will be created there.
|
|
|
|
|
|
|
|
|
|
- [GitHub Discussion](https://github.com/langgenius/dify/discussions). Best for: sharing feedback and asking questions.
|
|
|
|
|
- [GitHub Issues](https://github.com/langgenius/dify/issues). Best for: bugs you encounter using Dify.AI, and feature proposals. See our [Contribution Guide](https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md).
|
|
|
|
|
- [Discord](https://discord.gg/FngNHpbcY7). Best for: sharing your applications and hanging out with the community.
|
|
|
|
|
- [X(Twitter)](https://twitter.com/dify_ai). Best for: sharing your applications and hanging out with the community.
|
|
|
|
|
By default, the allowed_content_types are:
|
|
|
|
|
|
|
|
|
|
**Contributors**
|
|
|
|
|
1. `text/` (matches `text/plain`, `text/html`, etc.)
|
|
|
|
|
1. `application/ecmascript`
|
|
|
|
|
1. `application/json`
|
|
|
|
|
1. `application/x-ndjson`
|
|
|
|
|
1. `application/xml`
|
|
|
|
|
1. `+json` (matches `application/geo+json`, etc.)
|
|
|
|
|
1. `+xml` (matches `application/rss+xml`, etc.)
|
|
|
|
|
1. `application/octet-stream`
|
|
|
|
|
|
|
|
|
|
<a href="https://github.com/langgenius/dify/graphs/contributors">
|
|
|
|
|
<img src="https://contrib.rocks/image?repo=langgenius/dify" />
|
|
|
|
|
</a>
|
|
|
|
|
`application/octet-stream` is needed as a fallback when no content type could be determined. You can add additional accepted content types with the `allowed_content_types` key. But the default ones don't get removed.
|
|
|
|
|
|
|
|
|
|
## Star history
|
|
|
|
|
## Excluding
|
|
|
|
|
|
|
|
|
|
### Excluding Lines
|
|
|
|
|
|
|
|
|
|
You can exclude single lines inline. To do that you need a comment on that line that says: `editorconfig-checker-disable-line`.
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
const myTemplateString = `
|
|
|
|
|
first line
|
|
|
|
|
wrongly indented line because it needs to be` // editorconfig-checker-disable-line
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Alternatively, you can use `editorconfig-checker-disable-next-line` to skip the line that comes after this comment.
|
|
|
|
|
This modifier is present to improve readability, or because your sometimes have no other choice because of your own/language constraints.
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
// editorconfig-checker-disable-next-line used because blah blah blah what ever the reason blah
|
|
|
|
|
const myTemplateString = `a line that is (...) longer (...) than ... usual` // or with a very long inline comment
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
[](https://star-history.com/#langgenius/dify&Date)
|
|
|
|
|
Please note that using `editorconfig-checker-disable-next-line` has only an effect on the next line, so it will report if the line where you added the modifier doesn't comply.
|
|
|
|
|
|
|
|
|
|
## Security disclosure
|
|
|
|
|
### Excluding Blocks
|
|
|
|
|
|
|
|
|
|
To protect your privacy, please avoid posting security issues on GitHub. Instead, send your questions to security@dify.ai and we will provide you with a more detailed answer.
|
|
|
|
|
To temporarily disable all checks, add a comment containing `editorconfig-checker-disable`. Re-enable with a comment containing `editorconfig-checker-enable`
|
|
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
```javascript
|
|
|
|
|
// editorconfig-checker-disable
|
|
|
|
|
const myTemplateString = `
|
|
|
|
|
first line
|
|
|
|
|
wrongly indented line because it needs to be
|
|
|
|
|
`
|
|
|
|
|
// editorconfig-checker-enable
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Excluding Paths
|
|
|
|
|
|
|
|
|
|
You can exclude paths from being checked in several ways:
|
|
|
|
|
|
|
|
|
|
- ignoring a file by documenting it inside the to-be-excluded file
|
|
|
|
|
- adding a regex matching the path to the [configuration file](#configuration)
|
|
|
|
|
- passing a regex matching the path as argument to `--exclude`
|
|
|
|
|
|
|
|
|
|
All these excludes are used in addition to the [default excludes](#default-excludes), unless you [opt out of them](#ignoring-default-excludes).
|
|
|
|
|
|
|
|
|
|
If you want to see which files would be checked without checking them you can pass the `--dry-run` flag.
|
|
|
|
|
|
|
|
|
|
Note that while `--dry-run` might output absolute paths, the regular expression you write must match the filenames using relative paths from where editorconfig-checker is used. This becomes especially relevant if you need to anchor your regular expression in order to only match files in the top level your checked directory.
|
|
|
|
|
|
|
|
|
|
Additionally, paths will be normalized to Unix style before matching against the regex list happens. As a result you don't have to write `[\\/]` to account for Windows and Unix path styles but can just use `/` instead.
|
|
|
|
|
|
|
|
|
|
#### Inline
|
|
|
|
|
|
|
|
|
|
If you want to exclude a file inline you need a comment on the first line of the file that contains: `editorconfig-checker-disable-file`
|
|
|
|
|
|
|
|
|
|
```haskell
|
|
|
|
|
-- editorconfig-checker-disable-file
|
|
|
|
|
add :: Int -> Int -> Int
|
|
|
|
|
add x y =
|
|
|
|
|
let result = x + y -- falsy indentation would not report
|
|
|
|
|
in result -- falsy indentation would not report
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### Default Excludes
|
|
|
|
|
|
|
|
|
|
If you choose to [ignore them](#ignoring-default-excludes), these paths are excluded automatically:
|
|
|
|
|
|
|
|
|
|
```txt
|
|
|
|
|
// source control related files and folders
|
|
|
|
|
"\\.git/",
|
|
|
|
|
"\\.jj/",
|
|
|
|
|
// package manager, generated, & lock files
|
|
|
|
|
// Cargo (Rust)
|
|
|
|
|
"Cargo\\.lock$",
|
|
|
|
|
// Composer (PHP)
|
|
|
|
|
"composer\\.lock$",
|
|
|
|
|
// RubyGems (Ruby)
|
|
|
|
|
"Gemfile\\.lock$",
|
|
|
|
|
// Go Modules (Go)
|
|
|
|
|
"go\\.(mod|sum)$",
|
|
|
|
|
// Gradle (Java)
|
|
|
|
|
"gradle/wrapper/gradle-wrapper\\.properties$",
|
|
|
|
|
"gradlew(\\.bat)?$",
|
|
|
|
|
"(buildscript-)?gradle\\.lockfile?$",
|
|
|
|
|
// Maven (Java)
|
|
|
|
|
"\\.mvn/wrapper/maven-wrapper\\.properties$",
|
|
|
|
|
"\\.mvn/wrapper/MavenWrapperDownloader\\.java$",
|
|
|
|
|
"mvnw(\\.cmd)?$",
|
|
|
|
|
// NodeJS
|
|
|
|
|
"/node_modules/",
|
|
|
|
|
// npm (NodeJS)
|
|
|
|
|
"npm-shrinkwrap\\.json$",
|
|
|
|
|
"package-lock\\.json$",
|
|
|
|
|
// pip (Python)
|
|
|
|
|
"Pipfile\\.lock$",
|
|
|
|
|
// Poetry (Python)
|
|
|
|
|
"poetry\\.lock$",
|
|
|
|
|
// pnpm (NodeJS)
|
|
|
|
|
"pnpm-lock\\.yaml$",
|
|
|
|
|
// Terraform & OpenTofu
|
|
|
|
|
"\\.terraform\\.lock\\.hcl$",
|
|
|
|
|
// uv (Python)
|
|
|
|
|
"uv\\.lock$",
|
|
|
|
|
// yarn (NodeJS)
|
|
|
|
|
"\\.pnp\\.c?js$",
|
|
|
|
|
"\\.pnp\\.loader\\.mjs$",
|
|
|
|
|
"\\.yarn/",
|
|
|
|
|
"yarn\\.lock$",
|
|
|
|
|
// font files
|
|
|
|
|
"\\.eot$",
|
|
|
|
|
"\\.otf$",
|
|
|
|
|
"\\.ttf$",
|
|
|
|
|
"\\.woff2?$",
|
|
|
|
|
// image & video formats
|
|
|
|
|
"\\.avif$",
|
|
|
|
|
"\\.gif$",
|
|
|
|
|
"\\.ico$",
|
|
|
|
|
"\\.jpe?g$",
|
|
|
|
|
"\\.mp4$",
|
|
|
|
|
"\\.p[bgnp]m$",
|
|
|
|
|
"\\.png$",
|
|
|
|
|
"\\.svg$",
|
|
|
|
|
"\\.tiff?$",
|
|
|
|
|
"\\.webp$",
|
|
|
|
|
"\\.wmv$",
|
|
|
|
|
// other binary or container formats
|
|
|
|
|
"\\.bak$",
|
|
|
|
|
"\\.bin$",
|
|
|
|
|
"\\.docx?$",
|
|
|
|
|
"\\.exe$",
|
|
|
|
|
"\\.pdf$",
|
|
|
|
|
"\\.snap$",
|
|
|
|
|
"\\.xlsx?$",
|
|
|
|
|
// archive formats
|
|
|
|
|
"\\.7z$",
|
|
|
|
|
"\\.bz2$",
|
|
|
|
|
"\\.gz$",
|
|
|
|
|
"\\.jar$",
|
|
|
|
|
"\\.tar$",
|
|
|
|
|
"\\.tgz$",
|
|
|
|
|
"\\.war$",
|
|
|
|
|
"\\.zip$",
|
|
|
|
|
// log & (git) patch files
|
|
|
|
|
"\\.log$",
|
|
|
|
|
"\\.patch$",
|
|
|
|
|
// generated or minified CSS and JavaScript files
|
|
|
|
|
"\\.(css|js)\\.map$",
|
|
|
|
|
"min\\.(css|js)$",
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### Ignoring Default Excludes
|
|
|
|
|
|
|
|
|
|
If you either set `IgnoreDefaults` to `true` or pass the `-ignore-defaults` commandline switch, the [default excludes](#default-excludes) will be ignored entirely.
|
|
|
|
|
|
|
|
|
|
#### Manually Excluding
|
|
|
|
|
|
|
|
|
|
##### via configuration
|
|
|
|
|
|
|
|
|
|
In your [configuration file](#configuration) you can exclude files with the `"exclude"` key which takes an array of regular expressions.
|
|
|
|
|
This will get merged with the default excludes (if not [ignored](#ignoring-default-excludes)). You should remember to escape your regular expressions correctly.
|
|
|
|
|
|
|
|
|
|
A [configuration file](#configuration) which would ignore all test files and all Markdown files can look like this:
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"Verbose": false,
|
|
|
|
|
"IgnoreDefaults": false,
|
|
|
|
|
"Exclude": ["testfiles", "\\.md$"],
|
|
|
|
|
"SpacesAfterTabs": false,
|
|
|
|
|
"Disable": {
|
|
|
|
|
"EndOfLine": false,
|
|
|
|
|
"Indentation": false,
|
|
|
|
|
"IndentSize": false,
|
|
|
|
|
"InsertFinalNewline": false,
|
|
|
|
|
"TrimTrailingWhitespace": false,
|
|
|
|
|
"MaxLineLength": false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### via arguments
|
|
|
|
|
|
|
|
|
|
If you want to play around how the tool would behave you can also pass the `--exclude` argument to the binary. This will accept a regular expression as well. The argument given will be added to the excludes as defined by your [configuration file](#configuration) (respecting both its [`Exclude`](#via-configuration) and [`IgnoreDefaults`](#ignoring-default-excludes) settings).
|
|
|
|
|
|
|
|
|
|
For example: `ec --exclude node_modules`
|
|
|
|
|
|
|
|
|
|
## Docker
|
|
|
|
|
|
|
|
|
|
You are able to run this tool inside a Docker container.
|
|
|
|
|
To do this you need to have Docker installed and run this command in your repository root which you want to check:
|
|
|
|
|
`docker run --rm --volume=$PWD:/check mstruebing/editorconfig-checker`
|
|
|
|
|
|
|
|
|
|
Docker Hub: [mstruebing/editorconfig-checker](https://hub.docker.com/r/mstruebing/editorconfig-checker)
|
|
|
|
|
|
|
|
|
|
## Continuous Integration
|
|
|
|
|
|
|
|
|
|
### Mega-Linter
|
|
|
|
|
|
|
|
|
|
Instead of installing and configuring `editorconfig-checker` and all other linters in your project CI workflows (GitHub Actions & others), you can use [Mega-Linter](https://megalinter.io/latest/) which does all that for you with a single [assisted installation](https://megalinter.io/latest/install-assisted/).
|
|
|
|
|
|
|
|
|
|
Mega-Linter embeds [editorconfig-checker](https://megalinter.io/latest/descriptors/editorconfig_editorconfig_checker/) by default in all its [flavors](https://megalinter.io/latest/flavors/), meaning that it will be run at each commit or Pull Request to detect any issue related to `.editorconfig`.
|
|
|
|
|
|
|
|
|
|
If you want to use only `editorconfig-checker` and not the 70+ other linters, you can use the following `.mega-linter.yml` configuration file:
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
|
ENABLE:
|
|
|
|
|
- EDITORCONFIG
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### GitLab CI
|
|
|
|
|
|
|
|
|
|
The [ss-open/ci/recipes project](https://gitlab.com/ss-open/ci/recipes) offers a ready to use lint job integrating editorconfig-checker.
|
|
|
|
|
|
|
|
|
|
- Main documentation: <https://gitlab.com/ss-open/ci/recipes/-/blob/main/README.md>
|
|
|
|
|
- Editorconfig job specific documentation: <https://gitlab.com/ss-open/ci/recipes/-/blob/main/stages/lint/editorconfig/README.md>
|
|
|
|
|
|
|
|
|
|
## Support
|
|
|
|
|
|
|
|
|
|
If you have any questions, suggestions, need a wrapper for a programming language or just want to chat join #editorconfig-checker on freenode(IRC).
|
|
|
|
|
If you don't have an IRC-client set up you can use the [freenode webchat](https://webchat.freenode.net/?channels=editorconfig-checker).
|
|
|
|
|
|
|
|
|
|
## Contributing
|
|
|
|
|
|
|
|
|
|
This repository is available under the [Dify Open Source License](LICENSE), which is essentially Apache 2.0 with a few additional restrictions.
|
|
|
|
|
Anyone can help to improve the project, submit a Feature Request, a bug report or even correct a spelling mistake.
|
|
|
|
|
|
|
|
|
|
The steps to contribute can be found in the [CONTRIBUTING.md](./CONTRIBUTING.md) file.
|
|
|
|
|
|
|
|
|
|
## Semantic Versioning Policy
|
|
|
|
|
|
|
|
|
|
**editorconfig-checker** adheres to [Semantic Versioning](https://semver.org/) for releases.
|
|
|
|
|
|
|
|
|
|
However, as it is a code quality tool, it's not always clear when a minor or major version bump occurs. The following rules are used to determine the version bump:
|
|
|
|
|
|
|
|
|
|
- Patch release (1.0.x -> 1.0.y)
|
|
|
|
|
- Updates to output formats (error messages, logs, ...).
|
|
|
|
|
- Performance improvements which doesn't affect behavior.
|
|
|
|
|
- Build process changes (e.g., updating dependencies, updating `Dockerfile`, ...).
|
|
|
|
|
- Reverts (reverting a previous commit).
|
|
|
|
|
- Bug fixes which result in **editorconfig-checker** reporting less linting errors (removing "false-positive" linting errors).
|
|
|
|
|
- Minor release (1.x.0 -> 1.y.0)
|
|
|
|
|
- Adding new [configuration options](#configuration), including new CLI flags.
|
|
|
|
|
- Adding new [path to exclude by default](#default-excludes).
|
|
|
|
|
- Adding new [output formats](#formats).
|
|
|
|
|
- Supporting a new [editorconfig](https://editorconfig.org/) property (e.g: `insert_final_newline`, `indent_size`, ...).
|
|
|
|
|
- Any new feature which doesn't break existing behavior.
|
|
|
|
|
- Major release (x.0.0 -> y.0.0)
|
|
|
|
|
- Removal of a [configuration](#configuration) option.
|
|
|
|
|
- Removal of an [output format](#formats).
|
|
|
|
|
- Removal of a [path to exclude by default](#default-excludes).
|
|
|
|
|
- Removal of support for an [editorconfig](https://editorconfig.org/) property.
|
|
|
|
|
- Bug fixes, which result in **editorconfig-checker** reporting more linting errors, because the previous behavior was incorrect according to the [editorconfig specification](https://editorconfig.org/).
|
|
|
|
|
|