Thank you for your interest in contributing to Atlas! This guide will help you get started.
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/atlas.git - Create a feature branch:
git checkout -b feat/your-feature - Make your changes
- Run tests:
cargo test --workspace - Run lints:
cargo clippy --workspace && cargo fmt --workspace -- --check - Commit and push
- Open a pull request
- Rust 1.75+ (install via rustup)
- Node.js 20+ (for frontend development)
- pmtiles CLI (for test data)
# Build everything
cargo build --workspace
# Download test data (Ghana OSM + Accra tiles)
./scripts/download-test-data.sh
# Build geocoding indices
cargo run -p atlas-ingest -- --osm-dir ./data/osm --output-dir ./test-data
cargo run -p atlas-ingest -- --osm-dir ./data/osm --output-dir ./test-data --build-search-index
# Run tests
cargo test --workspace
# Start the server
cargo run -p atlas-server
# Start the frontend (separate terminal)
cd sdk/atlas-js && npm install && npm run dev- Run
cargo fmtbefore committing - Run
cargo clippyand fix all warnings - No inline comments unless the logic is non-obvious
- Prefer small, focused functions
- Use
thiserrorfor error types - Propagate errors with
?, don'tunwrap()on fallible operations
- Write tests for new functionality
- Run the full test suite before submitting a PR:
cargo test --workspace - Integration tests for HTTP endpoints go in
crates/atlas-server/tests/ - Unit tests go in the same file as the code they test (Rust convention)
Use the format: type(scope): description
Types: feat, fix, refactor, test, docs, chore, perf
Examples:
feat(atlas-geocode): add Hausa language supportfix(atlas-route): handle disconnected road segmentsperf(atlas-tiles): reduce tile cache memory usage
- Keep PRs focused on a single change
- Include tests for new functionality
- Update documentation if behavior changes
- Ensure CI passes (build, test, clippy, fmt)
- Language support — Add tokenizer rules for more African languages
- Road profiles — Improve routing profiles for African road conditions
- Data sources — Integrate additional African map data sources
- Performance — Optimize CH preprocessing, tile serving, geocoding
- Frontend — Improve the MapLibre UI, add mobile responsiveness
- Documentation — Improve API docs, add examples, translate docs
Open an issue on GitHub for questions, bug reports, or feature requests.