Thank you for your interest in contributing to atlantis! This document provides guidelines and instructions for contributing.
- Node.js 18.18+ (match Next.js 16 support)
- npm 10.x or later
- Git
- LaTeX distribution (optional, for LaTeX note compilation)
LaTeX is only required if you want to use the LaTeX note compilation feature during local development. The Docker image includes TeX Live by default.
macOS
# Full TeX Live (recommended, ~4GB)
brew install --cask mactex
# Or minimal installation (~100MB)
brew install --cask basictex
sudo tlmgr update --self
sudo tlmgr install collection-fontsrecommendedWindows
MiKTeX (Recommended): Download from miktex.org - auto-installs missing packages.
TeX Live: Download from tug.org/texlive
Verify installation: pdflatex --version
Debian / Ubuntu
# Minimal
sudo apt install texlive-latex-base
# Recommended
sudo apt install texlive-latex-recommended texlive-fonts-recommended
# Full (~5GB)
sudo apt install texlive-fullFedora / RHEL / CentOS
# Minimal
sudo dnf install texlive-scheme-basic
# Recommended
sudo dnf install texlive-scheme-medium
# Full
sudo dnf install texlive-scheme-fullArch Linux
# Core packages
sudo pacman -S texlive-basic texlive-latex texlive-latexrecommended
# Full
sudo pacman -S texlive-full-
Fork and clone the repository
git clone https://github.com/YOUR_USERNAME/atlantis.git cd atlantis -
Install dependencies
npm install
-
Start the development server
npm run dev
-
Open your browser Navigate to http://localhost:3000
- Framework: Next.js 16 (App Router)
- Styling: Tailwind CSS
- Components: Shadcn UI
- Icons: Lucide React
- Editor: CodeMirror
- Rendering: Mermaid.js
- State: Zustand
Use descriptive branch names:
feature/add-export-png- New featuresfix/diagram-centering- Bug fixesdocs/update-readme- Documentation updatesrefactor/layout-component- Code refactoring
-
Create a new branch from
mastergit checkout -b feature/your-feature-name
-
Make your changes following the code style guidelines
-
Run linting to check for issues
npm run lint
-
Build to verify everything compiles (runs bootstrap + Next build)
npm run build
-
Commit your changes with a descriptive message
git commit -m "feat: add PNG export functionality"
Follow the Conventional Commits specification:
feat:- New featurefix:- Bug fixdocs:- Documentation changesstyle:- Code style changes (formatting, etc.)refactor:- Code refactoringtest:- Adding or updating testschore:- Maintenance tasks
Examples:
feat: add dark mode toggle to canvas
fix: resolve diagram centering issue on load
docs: update installation instructions
refactor: extract date formatting to utils
- Use strict TypeScript - all code must pass strict type checking
- Define interfaces in
src/lib/types.tsfor shared types - Use explicit return types for functions
- Use function components with TypeScript
- Mark client components with
'use client';directive - Use named exports (not default exports)
- Define props interface inline or in types.ts
'use client';
interface MyComponentProps {
title: string;
onSave: () => void;
}
export function MyComponent({ title, onSave }: MyComponentProps) {
return <Button onClick={onSave}>{title}</Button>;
}- Use Tailwind CSS utility classes
- Use
cn()from@/lib/utilsfor conditional classes - Leverage Shadcn UI components from
src/components/ui/
- Use path alias
@/*for imports fromsrc/ - Order: external packages → internal modules → relative imports
import { NextResponse } from 'next/server';
import { getDiagrams } from '@/lib/data';
import { Diagram } from '@/lib/types';src/
├── app/ # Next.js App Router
│ ├── api/ # API routes
│ ├── globals.css # Global styles
│ ├── layout.tsx # Root layout
│ └── page.tsx # Main page
├── components/ # React components
│ ├── ui/ # Shadcn UI components
│ └── *.tsx # Feature components
└── lib/ # Utilities
├── data.ts # Data persistence
├── store.ts # Zustand store
├── types.ts # TypeScript interfaces
└── utils.ts # Utility functions
- Update documentation if you're changing functionality
- Ensure all checks pass (lint, build)
- Write a clear PR description explaining:
- What changes were made
- Why the changes were needed
- Any breaking changes
- Request review from maintainers
- Address feedback promptly
Use the same format as commit messages:
feat: add PNG export functionality
fix: resolve hydration mismatch in header
When reporting issues, please include:
- Description - Clear description of the issue
- Steps to reproduce - How to trigger the issue
- Expected behavior - What should happen
- Actual behavior - What actually happens
- Environment - Browser, OS, Node version
- Screenshots - If applicable
Feature requests are welcome! Please include:
- Use case - Why is this feature needed?
- Proposed solution - How should it work?
- Alternatives considered - Other approaches you've thought about
Atlantis provides two Docker Compose configurations for different use cases:
| File | Description | When to Use |
|---|---|---|
docker-compose.yml |
Full stack with Redis | Production, testing caching behavior |
docker-compose.simple.yml |
Standalone (no Redis) | Quick testing, simpler setups |
Full Stack (with Redis):
# Start services
docker compose up -d
# View logs
docker compose logs -f atlantis
# Rebuild after code changes
docker compose up --build -d
# Stop and remove containers
docker compose down
# Stop and remove containers + volumes (fresh start)
docker compose down -vSimple Stack (without Redis):
# Start without Redis
docker compose -f docker-compose.simple.yml up -d
# Rebuild
docker compose -f docker-compose.simple.yml up --build -dFor testing changes before pushing:
# Build local image
docker build -t atlantis:local .
# Run your local build
docker run -d -p 3000:3000 -v $(pwd)/data:/app/data atlantis:localCustomize your deployment with environment variables:
# Custom port and data directory
PORT=8080 ATLANTIS_DATA_DIR=./my-data docker compose up -d
# Enable API access
ENABLE_API_ACCESS=true docker compose up -dSee Container Startup & Deployment for the full list of configuration options.
Feel free to open an issue for any questions about contributing.
Thank you for contributing to atlantis!