Contributing to Nixopus
Thank you for your interest in contributing to Nixopus! This guide will help you get started with the development setup and explain the contribution process.
Table of Contents
Specialized Contribution Guides
We provide detailed guides for specific types of contributions:
- Getting Started with contribution - For general contribution guidelines
- Backend Development Guide - For Go backend contributions
- Frontend Development Guide - For Next.js/React frontend contributions
- Documentation Guide - For improving or extending documentation
- Self-Hosting Guide - For improving installation and self-hosting
- Docker Guide - For Docker builds and container optimization
- Development Fixtures Guide - For working with development data and fixtures
Code of Conduct
Before contributing, please review and agree to our Code of Conduct. We're committed to maintaining a welcoming and inclusive community.
Development Setup
If you prefer to set up your development environment manually:
- Clone the repository:
git clone https://github.com/raghavyuva/nixopus.git
cd nixopus
Install Go (version 1.23.6 or newer), and PostgreSQL.
Set up PostgreSQL databases:
createdb postgres -U postgres
createdb nixopus_test -U postgres
- Copy and configure environment variables:
cp .env.sample .env
- Install project dependencies:
cd api
go mod download
cd ../view
yarn install
- Load development fixtures (optional but recommended):
cd ../api
# Load fixtures without affecting existing data
make fixtures-load
# Or for a clean slate (drops and recreates tables)
make fixtures-recreate
# Get help on fixtures commands
make fixtures-help
The fixtures system provides sample data including users, organizations, roles, permissions, and feature flags to help you get started quickly with development.
Running the Application
- Start the API service:
air
- Start the view service:
cd ../view
yarn dev
The view service uses:
- Next.js 15 with App Router
- React 19
- Redux Toolkit for state management
- Tailwind CSS for styling
- Radix UI for accessible components (Shadcn Components)
- TypeScript for type safety
Making Changes
Nixopus follows trunk-based-development conventions.
- Create a new branch:
git checkout -b feature/your-feature-name
Make your changes following the project structure:
- Place new features under
api/internal/features/
- Add tests for new functionality
- Update migrations if needed
- Follow existing patterns for controllers, services, and storage
- For frontend changes, follow the Next.js app directory structure
- Place new features under
Run tests:
cd api
make test
# View linting
cd view
yarn lint
- Commit your changes with clear messages.
Submitting a Pull Request
Push your branch and create a pull request.
Ensure your code:
- Follows the project structure
- Includes tests
- Updates documentation if needed
- Passes all CI checks
Be prepared to address feedback.
Proposing New Features
Check existing issues and pull requests.
Create a new issue with the
Feature request
template.Include:
- Feature description
- Technical implementation details
- Impact on existing code
Extending Documentation
Documentation is located in the docs/
directory. Follow the existing structure and style when adding new content.
Gratitude
Thank you for contributing to Nixopus! Your efforts help make this project better for everyone.