Contributing
Contributions are welcome! Samvad is open source and built with the community in mind. Whether you’re fixing a typo, reporting a bug, or building a new feature — all contributions are appreciated.
Ways to Contribute
- 🐛 Bug Reports — Found something broken? Open an issue
- 💡 Feature Requests — Have an idea? Share it in GitHub Discussions
- 📝 Documentation — Improve or expand these docs
- 🔧 Code — Fix a bug or implement a feature
Development Setup
Prerequisites
| Tool | Version |
|---|---|
| Node.js | 18+ |
| Bun | Latest |
| Rust | 1.70+ |
| Xcode CLT (macOS) | Latest |
Setup
# Clone the repo
git clone https://github.com/iamdhakrey/samvad.git
cd samvad
# Install JS dependencies
bun install
# Start in development mode
bun run tauri dev
The app opens automatically after the Vite dev server starts.
Project Structure
samvad/
├── src/ # React frontend
│ ├── components/ # UI components
│ │ ├── RequestEditor/ # URL bar, params, headers, auth, body
│ │ ├── ResponsePanel/ # Status, headers, body viewer
│ │ ├── Sidebar/ # Collections, history
│ │ └── WebSocketPanel/# WS connection UI
│ ├── hooks/ # Custom React hooks
│ ├── services/ # Tauri invoke wrappers
│ ├── store/ # Zustand state management
│ └── types.ts # Shared TypeScript types
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── lib.rs # Tauri app setup
│ │ └── ... # Command handlers
│ └── Cargo.toml # Rust dependencies
└── www/ # This docs site (Astro)
Contribution Guidelines
Branching
# Create a feature branch
git checkout -b feature/my-new-feature
# Or a bugfix branch
git checkout -b fix/issue-123
Commit Style
Use conventional commits:
feat: add timeout configuration to settings panel
fix: resolve crash when sending request with empty URL
docs: add keyboard shortcuts reference
chore: bump reqwest to 0.13.4
Pull Request Process
- Fork the repository
- Create your feature branch from
main - Make your changes with tests/docs as appropriate
- Ensure the app builds successfully:
bun run tauri build - Submit a PR with a clear description of the changes
Frontend Tech Notes
- State management: Use Zustand stores in
src/store/ - Tauri calls: All Rust commands go through
invoke()— wrap them insrc/services/ - Styling: Tailwind CSS 4 utility classes
- Types: All shared types live in
src/types.ts— extend it for new data shapes
Backend Tech Notes
- Rust edition: 2021
- HTTP client:
reqwest0.13 with Tokio async - Serialization:
serde+serde_json - Error handling:
thiserrorfor typed errors
Reporting Bugs
Please include:
- Samvad version
- OS and version
- Steps to reproduce
- Expected vs actual behavior
- Logs (if relevant — check the Tauri dev console)
Code of Conduct
Be respectful and constructive. We’re all here to build something great together.
Author
Hrithik Dhakrey (@iamdhakrey)