Thank you for your interest in contributing to OpenMAIC! This guide will help you get started and ensure a smooth collaboration.
| Contribution type | What to do |
|---|---|
| Bug fix | Open a PR directly (link the issue if one exists) |
| Extending existing features (e.g. adding a new model provider, new TTS engine) | Open a PR directly |
| New feature or architecture change | Start a GitHub Discussion or ask in Discord before opening a PR |
| Design / UI change | Discuss in a GitHub Discussion or Discord first — include mockups or screenshots |
| Refactor-only PR | Not accepted unless a maintainer explicitly requests it |
| Documentation | Open a PR directly |
| Question | Ask in Discord |
To avoid duplicate effort, please comment on an issue to claim it before you start working. A maintainer will assign you.
.env.local — see .env.example for reference# Clone the repository
git clone https://github.com/THU-MAIC/OpenMAIC.git
cd OpenMAIC
# Install dependencies
pnpm install
# Set up environment variables
cp .env.example .env.local
# Edit .env.local with your API keys
# Start the development server
pnpm dev
Fork the repository and create a branch from main:
git checkout -b feat/your-feature main
Branch naming convention:
feat/ — new features or enhancementsfix/ — bug fixesdocs/ — documentation changesMake your changes and test locally.
Run all CI checks before committing (see below).
Open a Pull Request against main.
Run the following checks locally — CI will run them too, but catching issues early saves everyone time:
# 1. Format code
pnpm format
# 2. Lint (with auto-fix)
pnpm lint --fix
# 3. TypeScript type checking
npx tsc --noEmit
If formatting or lint auto-fixes produce changes, include them in your commit.
Before marking a PR as Ready for Review, you must:
If you have not completed local verification, keep your PR in Draft status. Only move it to Ready for Review once you are confident it works and does not regress other features.
Closes #123 or Fixes #456 in the PR description. If no issue exists yet, create one first. PRs without a linked issue will not be reviewed.We follow Conventional Commits:
<type>(<scope>): <short description>
[optional body]
[optional footer]
Types: feat, fix, docs, refactor, test, chore, ci, perf, style
Examples:
feat(tts): add Azure TTS provider
fix(whiteboard): prevent canvas from resetting on window resize
docs: add CONTRIBUTING.md
PRs built with AI tools (Codex, Claude, Cursor, etc.) are welcome! We just ask for transparency and self-review:
AI-assisted PRs are held to the same quality standard as any other PR. Community members are also encouraged to leave constructive feedback on any PR — peer review helps everyone improve.
OpenMAIC/
├── app/ # Next.js app router pages and API routes
├── components/ # React components
├── lib/ # Shared utilities and core logic
├── packages/ # Internal packages (mathml2omml, pptxgenjs)
├── public/ # Static assets
├── messages/ # i18n translation files
└── .github/ # Issue templates, PR template, CI workflows
Use the Bug Report issue template. Include:
Use the Feature Request issue template. For larger features, please open a Discussion first.
Please report security vulnerabilities through GitHub Security Advisories. Do not open a public issue for security vulnerabilities.
By contributing to OpenMAIC, you agree that your contributions will be licensed under the AGPL-3.0 License.