Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
266 changes: 251 additions & 15 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,263 @@
# Contributing to Appsmith

Thank you for your interest in Appsmith and for taking the time to contribute to this project. 🙌
Appsmith is a project by developers for developers and there are a lot of ways you can contribute.
If you don't know where to start contributing, ask us on our [Discord channel](https://discord.com/invite/rBTTVJp).

## Code of conduct
Appsmith is a project by developers for developers and there are a lot of ways you can contribute. If you don't know where to start contributing, ask us on our [Discord channel](https://discord.com/invite/rBTTVJp).

Read our [Code of Conduct](CODE_OF_CONDUCT.md) before contributing
## Table of Contents

## How can I contribute?
- [Code of Conduct](#code-of-conduct)
- [Project Architecture](#project-architecture)
- [Quick Start Checklist](#quick-start-checklist)
- [How Can I Contribute?](#how-can-i-contribute)
- [Development Setup](#development-setup)
- [Pull Request Process](#pull-request-process)
- [Community Support](#community-support)

There are many ways in which you can contribute to Appsmith.
---

## Code of Conduct

Read our [Code of Conduct](CODE_OF_CONDUCT.md) before contributing. We are committed to fostering an open, welcoming, and safe environment in the community.

---

## Project Architecture

Understanding the project structure will help you navigate the codebase more effectively:

```
appsmith/
├── app/
│ ├── client/ # Frontend (React + TypeScript)
│ │ ├── src/ # React components, widgets, utilities
│ │ ├── cypress/ # Cypress integration tests
│ │ └── packages/ # Shared packages including RTS (Real-Time Server)
│ └── server/ # Backend (Java + Spring + WebFlux)
│ ├── appsmith-server/ # Main server application
│ └── appsmith-plugins/ # Database/API connectors
├── deploy/ # Docker & Kubernetes deployment configs
├── contributions/ # Contribution guides and documentation
└── static/ # Static assets for documentation
```
Comment on lines +29 to +42
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add a language hint to the fenced code block

Line 29 uses a fenced block without a language tag (MD040). Use text for the tree view block.

Suggested diff
-```
+```text
 appsmith/
 ├── app/
 │   ├── client/          # Frontend (React + TypeScript)
 │   │   ├── src/         # React components, widgets, utilities
 │   │   ├── cypress/     # Cypress integration tests
 │   │   └── packages/    # Shared packages including RTS (Real-Time Server)
 │   └── server/          # Backend (Java + Spring + WebFlux)
 │       ├── appsmith-server/     # Main server application
 │       └── appsmith-plugins/    # Database/API connectors
 ├── deploy/              # Docker & Kubernetes deployment configs
 ├── contributions/       # Contribution guides and documentation
 └── static/              # Static assets for documentation
</details>

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.22.0)</summary>

[warning] 29-29: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

</details>

</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @CONTRIBUTING.md around lines 29 - 42, The fenced tree-view code block (the
block showing the appsmith/ directory structure) is missing a language hint;
update the opening fence from totext so the block is tagged as text (use
the same fenced block that contains the tree view under the appsmith/ heading).


</details>

<!-- fingerprinting:phantom:triton:hawk -->

<!-- This is an auto-generated comment by CodeRabbit -->


### Tech Stack Overview

| Component | Technologies |
|-----------|--------------|
| **Frontend** | React, TypeScript, Redux, Redux-Saga |
| **Backend** | Java 25, Spring, WebFlux, MongoDB, Redis |
| **Testing** | Jest (unit), Cypress (integration), JUnit (server) |
| **Deployment** | Docker, Kubernetes |

---

## Quick Start Checklist

New to contributing? Follow this checklist to get started:

### Before You Start
- [ ] Read this CONTRIBUTING guide
- [ ] Read our [Code of Conduct](CODE_OF_CONDUCT.md)
- [ ] Join our [Discord community](https://discord.com/invite/rBTTVJp) for support

### For Code Contributions
- [ ] Find an issue to work on (see [Finding Issues](#finding-issues))
- [ ] Comment on the issue to get it assigned to you
- [ ] Fork and clone the repository
- [ ] Set up your development environment (see [Development Setup](#development-setup))
- [ ] Create a feature branch from `release`
- [ ] Make your changes and write tests
- [ ] Submit a pull request

### For Documentation Contributions
- [ ] Visit the [appsmith-docs repository](https://github.com/appsmithorg/appsmith-docs)
- [ ] Read the [Docs Contribution Guide](https://github.com/appsmithorg/appsmith-docs/blob/main/CONTRIBUTING.md)

---

## How Can I Contribute?

### 🐛 Report a Bug

#### 🐛 Report a bug
Report all issues through GitHub Issues using the [Report a Bug](https://github.com/appsmithorg/appsmith/issues/new?assignees=Nikhil-Nandagopal&labels=Bug%2CNeeds+Triaging&template=--bug-report.yaml&title=%5BBug%5D%3A+) template.
To help resolve your issue as quickly as possible, read the template and provide all the requested information.

#### 🛠 File a feature request
We welcome all feature requests, whether it's to add new functionality to an existing extension or to offer an idea for a brand new extension.
File your feature request through GitHub Issues using the [Feature Request](https://github.com/appsmithorg/appsmith/issues/new?assignees=Nikhil-Nandagopal&labels=Enhancement&template=--feature-request.yaml&title=%5BFeature%5D%3A+) template.
**Tips for a good bug report:**
- Use a clear and descriptive title
- Include steps to reproduce the issue
- Describe the expected vs. actual behavior
- Include screenshots or screen recordings if helpful
- Mention your environment (OS, browser, Appsmith version)

### 🛠 File a Feature Request

We welcome all feature requests! File your request through GitHub Issues using the [Feature Request](https://github.com/appsmithorg/appsmith/issues/new?assignees=Nikhil-Nandagopal&labels=Enhancement&template=--feature-request.yaml&title=%5BFeature%5D%3A+) template.

**Tips for a good feature request:**
- Describe the problem you're trying to solve
- Explain how your suggestion would help solve it
- Include examples or mockups if available

### 📝 Improve the Documentation

Help us keep our documentation up to date! You can:
- Suggest improvements using the [Documentation templates](https://github.com/appsmithorg/appsmith-docs/issues/new/choose)
- Contribute directly to our [Docs repository](https://github.com/appsmithorg/appsmith-docs)

### ⚙️ Contribute Code

#### Finding Issues

Looking for issues to contribute to? Here are some great starting points:

| Issue Type | Link |
|------------|------|
| Good First Issues | [Browse →](https://github.com/appsmithorg/appsmith/issues?q=is%3Aopen+is%3Aissue+label%3A%22Good+First+Issue%22) |
| Inviting Contributions | [Browse →](https://github.com/appsmithorg/appsmith/issues?q=is%3Aopen+is%3Aissue+label%3A%22Inviting+Contribution%22) |
| Help Wanted | [Browse →](https://github.com/appsmithorg/appsmith/issues?q=is%3Aopen+is%3Aissue+label%3A%22Help+Wanted%22) |

> ⚠️ **Important:** Always get an issue assigned to you before starting work. Comment on the issue expressing your interest. Tag `@contributor-support` if needed. Working on issues without assignment may result in your contribution being rejected.

#### Types of Code Contributions

| Contribution Type | Guide |
|-------------------|-------|
| Frontend (React/TypeScript) | [Client Setup Guide](contributions/ClientSetup.md) |
| Backend (Java/Spring) | [Server Setup Guide](contributions/ServerSetup.md) |
| New Widget | [Widget Development Guide](contributions/AppsmithWidgetDevelopmentGuide.md) |
| New Plugin/Connector | [Plugin Contribution Guide](contributions/ServerCodeContributionsGuidelines/PluginCodeContributionsGuidelines.md) |
| Add Custom JS Library | [Custom JS Library Guide](contributions/CustomJsLibrary.md) |
| Write Tests | [Test Automation Guide](contributions/docs/TestAutomation.md) |

---

## Development Setup

### Prerequisites

Before setting up the development environment, ensure you have:

| Tool | Version | Notes |
|------|---------|-------|
| Docker | Latest | Required for containerized services |
| Node.js | 20.11.1 | Use nvm or fnm for version management |
| Java | OpenJDK 25 | Eclipse Temurin recommended |
| Maven | 3.9+ | Preferably 3.9.12 |
| Git | Latest | For version control |
| mkcert | Latest | For local HTTPS certificates |

Comment on lines +136 to +148
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

# First, let's find and examine CONTRIBUTING.md around line 168
wc -l CONTRIBUTING.md

Repository: appsmithorg/appsmith

Length of output: 83


🏁 Script executed:

# Read the CONTRIBUTING.md file to see the actual content, especially around line 136-172
head -n 175 CONTRIBUTING.md | tail -n 45

Repository: appsmithorg/appsmith

Length of output: 1143


🏁 Script executed:

# Check if contributions/ClientSetup.md exists and search for envsubst
fd ClientSetup.md

Repository: appsmithorg/appsmith

Length of output: 92


🏁 Script executed:

# Search for yarn usage in documentation
rg "yarn" --type md -n

Repository: appsmithorg/appsmith

Length of output: 1484


🏁 Script executed:

# Search for envsubst in contributions/ClientSetup.md
rg "envsubst" contributions/ClientSetup.md -n

Repository: appsmithorg/appsmith

Length of output: 181


🏁 Script executed:

# Also search for any mention of envsubst in the entire codebase
rg "envsubst" --type md -n

Repository: appsmithorg/appsmith

Length of output: 210


Add missing frontend prerequisites to the prerequisites table

Line 169-171 uses yarn commands but yarn is not listed in the prerequisites. Additionally, envsubst is required by the frontend setup (documented in contributions/ClientSetup.md line 26) and is missing. Both tools must be added to prevent setup failures.

Suggested diff
 | Tool | Version | Notes |
 |------|---------|-------|
 | Docker | Latest | Required for containerized services |
 | Node.js | 20.11.1 | Use nvm or fnm for version management |
+| Yarn | Latest | Required for frontend dependency management and scripts |
 | Java | OpenJDK 25 | Eclipse Temurin recommended |
 | Maven | 3.9+ | Preferably 3.9.12 |
 | Git | Latest | For version control |
 | mkcert | Latest | For local HTTPS certificates |
+| envsubst | Latest | Required by frontend setup scripts/templates |
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
### Prerequisites
Before setting up the development environment, ensure you have:
| Tool | Version | Notes |
|------|---------|-------|
| Docker | Latest | Required for containerized services |
| Node.js | 20.11.1 | Use nvm or fnm for version management |
| Java | OpenJDK 25 | Eclipse Temurin recommended |
| Maven | 3.9+ | Preferably 3.9.12 |
| Git | Latest | For version control |
| mkcert | Latest | For local HTTPS certificates |
### Prerequisites
Before setting up the development environment, ensure you have:
| Tool | Version | Notes |
|------|---------|-------|
| Docker | Latest | Required for containerized services |
| Node.js | 20.11.1 | Use nvm or fnm for version management |
| Yarn | Latest | Required for frontend dependency management and scripts |
| Java | OpenJDK 25 | Eclipse Temurin recommended |
| Maven | 3.9+ | Preferably 3.9.12 |
| Git | Latest | For version control |
| mkcert | Latest | For local HTTPS certificates |
| envsubst | Latest | Required by frontend setup scripts/templates |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CONTRIBUTING.md` around lines 136 - 148, Update the prerequisites table in
CONTRIBUTING.md to include the frontend tools that are referenced later: add a
row for Yarn (e.g., "Yarn | Latest | Required for frontend commands") and a row
for envsubst (e.g., "envsubst | Latest | Required by frontend setup scripts"),
ensuring the table rows match the existing columns and formatting so the `yarn`
commands referenced around lines 169-171 and the frontend setup documented in
contributions/ClientSetup.md (envsubst at line 26) are covered.

### Quick Setup

#### Frontend Only (for UI contributions)

```bash
# Clone your fork
git clone https://github.com/YOUR_USERNAME/appsmith.git
cd appsmith

# Set up local HTTPS certificates
cd app/client/docker && mkcert -install && mkcert "*.appsmith.com" && cd ../../..

# Add dev domain to hosts
echo "127.0.0.1 dev.appsmith.com" | sudo tee -a /etc/hosts

# Copy environment file
cp .env.example .env

# Install dependencies and start
cd app/client
yarn install
./start-https.sh https://release.app.appsmith.com # Use staging backend
yarn start
```

Your frontend will be running at https://dev.appsmith.com

#### Full Stack Setup

1. **Set up MongoDB and Redis** (using Docker):
```bash
# MongoDB
docker run -d -p 127.0.0.1:27017:27017 --name appsmith-mongodb \
-e MONGO_INITDB_DATABASE=appsmith mongo --replSet rs0

# Redis
docker run -d -p 127.0.0.1:6379:6379 --name appsmith-redis redis
```

2. **Build and run the server**:
```bash
cd app/server
mvn clean compile
cp envs/dev.env.example .env
# Edit .env to point to your local MongoDB and Redis
./build.sh -Dmaven.test.skip
./scripts/start-dev-server.sh
```
Comment on lines +188 to +196
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify the canonical env variable names from repo sources

set -euo pipefail

echo "== Server env template keys =="
fd 'dev.env.example$' -t f | xargs -I{} rg -n 'APPSMITH_(DB_URL|REDIS_(URL|URI)|GIT_ROOT)' {}

echo
echo "== Server setup guide references =="
fd 'ServerSetup.md$' -t f | xargs -I{} rg -n 'APPSMITH_(DB_URL|REDIS_(URL|URI)|GIT_ROOT)' {}

echo
echo "== CONTRIBUTING references =="
rg -n 'APPSMITH_(DB_URL|REDIS_(URL|URI)|GIT_ROOT)|\.env' CONTRIBUTING.md

Repository: appsmithorg/appsmith

Length of output: 1729


🏁 Script executed:

#!/bin/bash
# Find the actual dev.env.example file(s)
echo "== Finding dev.env.example files =="
find . -name "*dev.env.example*" -o -name "dev.env*" 2>/dev/null | head -20

echo
echo "== Checking app/server directory structure =="
ls -la app/server/envs/ 2>/dev/null || echo "envs/ directory not found"

echo
echo "== Server code: Redis env variable usage =="
rg 'APPSMITH_REDIS_(URL|URI)' app/server --type java -B2 -A2 | head -40

Repository: appsmithorg/appsmith

Length of output: 5269


🏁 Script executed:

#!/bin/bash
# Verify if these env keys are referenced anywhere in server/pom.xml or application configs
echo "== Checking pom.xml or properties files =="
fd 'pom.xml|application.*properties|application.*yml' app/server -t f | xargs grep -l 'APPSMITH_' 2>/dev/null | head -5

echo
echo "== Looking for environment variable documentation in app/server =="
fd 'README|SETUP|ENV' app/server -t f 2>/dev/null | head -10

echo
echo "== Checking if GIT_ROOT is truly required =="
rg 'APPSMITH_GIT_ROOT' app/server --type java -c

Repository: appsmithorg/appsmith

Length of output: 447


🏁 Script executed:

#!/bin/bash
# Read the dev.env.example file to see what's documented
echo "== Content of dev.env.example =="
cat -n app/server/envs/dev.env.example

echo
echo "== Content of app/server/README.md (first 50 lines) =="
head -50 app/server/README.md

echo
echo "== CONTRIBUTING.md context around the issue (lines 185-200) =="
sed -n '185,200p' CONTRIBUTING.md

Repository: appsmithorg/appsmith

Length of output: 1891


Explicitly document which .env keys require configuration

The instruction at line 193 to "Edit .env to point to your local MongoDB and Redis" is incomplete. After copying envs/dev.env.example .env, contributors should be told which keys require custom values: APPSMITH_DB_URL, APPSMITH_REDIS_URL, and APPSMITH_GIT_ROOT. The example template provides defaults, but contributors may miss that APPSMITH_GIT_ROOT must point to an actual directory on their machine for Git operations to function.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CONTRIBUTING.md` around lines 188 - 196, Update the step that says "Edit .env
to point to your local MongoDB and Redis" to explicitly list the .env keys that
must be configured: APPSMITH_DB_URL, APPSMITH_REDIS_URL, and APPSMITH_GIT_ROOT;
instruct contributors to replace the example defaults with their local MongoDB
and Redis connection strings for APPSMITH_DB_URL and APPSMITH_REDIS_URL, and to
ensure APPSMITH_GIT_ROOT points to an actual directory on their machine (used
for Git operations).


For detailed setup instructions, see:
- [Client Setup Guide](contributions/ClientSetup.md) - Full frontend setup with troubleshooting
- [Server Setup Guide](contributions/ServerSetup.md) - Complete backend setup including IntelliJ configuration

---

## Pull Request Process

### Branch Naming

Use descriptive branch names following these patterns:
- `fix/bug-description` - For bug fixes
- `feature/feature-name` - For new features
- `docs/description` - For documentation changes

### Commit Messages

Write clear, descriptive commit messages:
- Use the present tense ("Add feature" not "Added feature")
- Reference issue numbers when applicable
- Keep the first line under 72 characters

### Before Submitting

- [ ] Code compiles without errors
- [ ] Tests pass locally (Jest for frontend, JUnit for backend)
- [ ] New code includes appropriate tests
- [ ] Code follows the existing style conventions
- [ ] PR description clearly explains the changes

### PR Guidelines

1. **Create PR from your fork** to `appsmithorg/appsmith` `release` branch
2. **Link the issue** in your PR description (e.g., "Fixes #123")
3. **Tag the maintainer** you're collaborating with
4. **Wait for CI** to pass before requesting review
5. **Address review feedback** promptly and push new commits

### What NOT to Do

❌ Work on issues without getting them assigned first
❌ Create PRs without proper description
❌ Request review before CI passes
❌ Submit PRs without tests
❌ Skip reading the contribution guidelines

---

## Community Support

Need help? We're here for you!

| Channel | Best For |
|---------|----------|
| [Discord](https://discord.com/invite/rBTTVJp) | Real-time help, discussions, community |
| [GitHub Discussions](https://github.com/appsmithorg/appsmith/discussions) | Questions, ideas, announcements |
| [GitHub Issues](https://github.com/appsmithorg/appsmith/issues) | Bug reports, feature requests |
| [support@appsmith.com](mailto:support@appsmith.com) | Private inquiries, security issues |

---

## Recognition

#### 📝 Improve the documentation
In the process of shipping features quickly, we may forget to keep our docs up to date. You can help by suggesting improvements to our documentation using the [Documentation templates](https://github.com/appsmithorg/appsmith-docs/issues/new/choose) or dive right into our [Docs Contribution Guide](https://github.com/appsmithorg/appsmith-docs/blob/main/CONTRIBUTING.md)!
We ❤️ our contributors! All contributors are recognized in our [README](README.md#top-contributors). Your contributions help make Appsmith better for everyone.

#### ⚙️ Close a Bug / Feature issue
We welcome contributions that help make appsmith bug free & improve the experience of our users. You can also find issues tagged [Good First Issues](https://github.com/appsmithorg/appsmith/issues?q=is%3Aopen+is%3Aissue+label%3A%22Good+First+Issue%22+bug). Check out our [Code Contribution Guide](contributions/CodeContributionsGuidelines.md) to begin.
Let's build great software together! 🚀
Loading