Thanks for your interest in contributing to Archway. This document outlines the process for contributing to this project and what to expect along the way.
Archway is early-stage software. There is a lot of room to make meaningful contributions across the entire codebase — from the component library and rule engine to code generation, documentation, and the canvas UX.
- Getting Started
- Development Setup
- Project Structure
- How to Contribute
- Pull Request Process
- Coding Standards
- Commit Messages
- Reporting Bugs
- Requesting Features
- Where to Help
- Community
- Fork the repository on GitHub.
- Clone your fork locally:
git clone https://github.com/devsethi3/archway.git
cd archway- Add the upstream remote:
git remote add upstream https://github.com/devsethi3/archway.git- Create a branch for your work:
git checkout -b feature/your-feature-name- Node.js 18+
- npm or pnpm
- PostgreSQL (local or hosted)
- OpenRouter API key (optional, only needed for AI features)
npm installcp .env.example .env.localFill in your database URL, auth secret, and optionally your OpenRouter API key. Refer to the README for details on each variable.
npm run db:push
npm run db:seed # optionalnpm run devThe app will be available at http://localhost:3000.
| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Production build |
npm run lint |
Run ESLint |
npm run db:push |
Push Prisma schema to database |
npm run db:studio |
Open Prisma Studio |
npm run db:seed |
Seed the database |
npm run db:generate |
Regenerate Prisma client |
For typo fixes, documentation improvements, or minor bug fixes, feel free to open a pull request directly.
For new features, significant refactors, or architectural changes:
- Open an issue first. Describe what you want to build and why. This lets us discuss the approach before you invest time writing code.
- Wait for a maintainer to respond and confirm the direction.
- Then proceed with implementation.
This avoids wasted effort and ensures your contribution aligns with the project's direction.
- Make sure your branch is up to date with
main:
git fetch upstream
git rebase upstream/main- Run linting and make sure there are no errors:
npm run lint-
Test your changes manually. If you're adding a rule engine rule or a component, verify it works on the canvas.
-
Write a clear PR description:
- What does this PR do?
- Why is this change needed?
- How did you test it?
- Screenshots if applicable (especially for UI changes).
-
Keep PRs focused. One feature or fix per PR. If you find an unrelated issue while working, open a separate PR for it.
-
A maintainer will review your PR. Expect feedback — it's not personal, it's how we keep the codebase consistent.
-
Once approved, a maintainer will merge your PR.
- TypeScript — strict mode is enabled. No
anyunless absolutely necessary, and if so, leave a comment explaining why. - Functional components — use hooks, not class components.
- Small files — if a file is getting long, split it. A component file should ideally do one thing.
- Named exports — prefer named exports over default exports (except for Next.js pages/layouts where required).
- Use Tailwind CSS for all styling.
- Use
cn()(clsx + tailwind-merge) for conditional class names. - Use
class-variance-authorityfor component variants. - Do not write raw CSS unless there is no Tailwind equivalent.
- Zustand for client-side global state.
- React Query for server state and data fetching.
- Keep component-local state in
useStatewhen it doesn't need to be shared. - Use Immer middleware with Zustand for complex state updates.
- Zod for all runtime validation — API inputs, form data, environment variables.
- Define schemas in a central location and reuse them.
- All schema changes go through Prisma. Edit
prisma/schema.prismaand runnpm run db:push. - Never write raw SQL unless Prisma cannot express the query.
- All AI calls go through the OpenRouter provider via the Vercel AI SDK.
- Keep prompts in dedicated files, not inline in route handlers.
- Always handle the case where the AI key is not configured — the app should degrade gracefully.
We follow the Conventional Commits specification.
type(scope): short description
Optional longer description explaining what and why.
| Type | When to use |
|---|---|
feat |
A new feature |
fix |
A bug fix |
docs |
Documentation changes |
style |
Code style changes (formatting, no logic change) |
refactor |
Code restructuring (no feature or fix) |
perf |
Performance improvement |
test |
Adding or updating tests |
chore |
Tooling, dependencies, build config |
feat(canvas): add drag-and-drop for Redis component
fix(analysis): correct false positive on rate limiter check
docs: update setup instructions for PostgreSQL
refactor(store): migrate canvas state to Zustand slices
chore: bump next to 16.1.6
Open a GitHub Issue with the following:
- Title: Clear, concise summary of the bug.
- Environment: OS, browser, Node.js version.
- Steps to reproduce: Exact steps to trigger the bug.
- Expected behavior: What you expected to happen.
- Actual behavior: What actually happened.
- Screenshots / logs: If applicable.
Label the issue with bug.
Open a GitHub Issue with:
- Title: Short description of the feature.
- Problem: What problem does this solve? Why do you need it?
- Proposed solution: How you think it should work.
- Alternatives considered: Other approaches you thought about.
Label the issue with enhancement.
We cannot build everything, but good feature requests with clear rationale are taken seriously.
If you're looking for a place to start, these areas have the most impact:
Add new smart components with accurate metadata. Each component should define:
- Display name, category, and description
- Default ports (inputs/outputs)
- Common connection targets
- Known scaling considerations
- Security notes
Write new analysis rules. Good rules are:
- Specific and actionable (not vague warnings)
- Based on real-world architecture mistakes
- Well-documented with examples of when they trigger
Improve templates or add support for new frameworks and deployment targets.
- Improve the README
- Add inline code comments where logic is non-obvious
- Write guides for common use cases
Check the issues page for bugs labeled good first issue.
- Be respectful. Read the Code of Conduct.
- Ask questions in GitHub Discussions or Issues.
- Don't hesitate to ask for help in a PR — we'd rather help you finish than have a stale PR.
Thanks for contributing. Every improvement matters, whether it's fixing a typo or building a major feature.