Contributing to OpenEV Data¶
Thank you for your interest in contributing to OpenEV Data! This project aims to be the single source of truth for electric vehicle specifications, and we welcome contributions from EV enthusiasts, engineers, researchers, and manufacturers worldwide.
Table of Contents¶
- Code of Conduct
- How Can I Contribute?
- Repository Structure
- Contributing to the Dataset
- Contributing to the API
- Contributing to Documentation
- Pull Request Process
- Style Guidelines
- Data Quality Standards
Code of Conduct¶
This project and everyone participating in it is governed by our Code of Conduct. By participating, you are expected to uphold this code.
How Can I Contribute?¶
Reporting Bugs¶
If you find a bug, please create an issue using the bug report template. Include:
- Clear description of the issue
- Steps to reproduce
- Expected vs actual behavior
- Environment details
- Screenshots if applicable
Suggesting Features¶
Feature suggestions are welcome via the feature request template. Please:
- Clearly describe the feature and its use case
- Explain why it would be valuable to the community
- Consider implementation complexity
Correcting Vehicle Data¶
Data accuracy is our top priority. If you find incorrect vehicle specifications:
- Use the data correction issue template
- Provide reliable sources for the correction
- Specify which field(s) are incorrect and the correct values
Adding New Vehicles¶
To add a new vehicle to the dataset:
- Use the new vehicle issue template first to discuss
- Follow the schema structure in
open-ev-data-dataset - Provide multiple reliable sources for all specifications
Repository Structure¶
OpenEV Data consists of four repositories:
| Repository | Purpose | Primary Language |
|---|---|---|
| open-ev-data-dataset | Vehicle data and JSON schemas | JSON |
| open-ev-data-api | API engine and ETL pipeline | Rust |
| open-ev-data.github.io | Documentation website | MkDocs |
| .github | Governance and policies | Markdown |
Contributing to the Dataset¶
Prerequisites¶
- Node.js 18+ installed
- Understanding of JSON Schema
- Familiarity with vehicle specifications
Setup¶
git clone https://github.com/open-ev-data/open-ev-data-dataset.git
cd open-ev-data-dataset
npm install
Adding a Vehicle¶
- Read the Schema Documentation
- Read the Architecture Documentation
- Create the vehicle directory structure:
- Create
base.jsonwith specifications common to all years and trims - Create year-specific files with year-specific changes
- Follow the deep merge architecture
Data Requirements¶
All vehicle entries must include:
- Verified Sources: Minimum of 2 reliable sources per specification
- International Coverage: Include sources from USA, Brazil, EU (Portugal, Germany, France, Italy, UK), China, and Japan where applicable
- Complete Specifications: Battery capacity, range, charging specs, dimensions, performance
- Correct Units: Follow SI units as defined in the schema
- Charging Standards: Accurate connector types and charging curves
Validation¶
Before submitting:
Fix any schema validation errors before creating a pull request.
Source Quality Hierarchy¶
- Official manufacturer specifications
- Regulatory certifications (EPA, WLTP, CLTC)
- Professional automotive publications
- Verified user testing data
Avoid: - Unverified forums or social media - Estimations without clear methodology - Outdated sources
Contributing to the API¶
Prerequisites¶
- Rust 1.75+ installed via rustup
- Understanding of REST APIs
Setup¶
git clone https://github.com/open-ev-data/open-ev-data-api.git
cd open-ev-data-api
cargo build
cargo test
Development Guidelines¶
- Follow Rust idioms and best practices
- Write comprehensive tests for new features
- Ensure zero-panic code in production paths
- Document public APIs with rustdoc
- Run
cargo clippybefore committing - Format code with
cargo fmt
Performance Considerations¶
- API targets <50ms response times globally
- Optimize for production runtime constraints
- Consider SQLite query performance
Contributing to Documentation¶
Prerequisites¶
- Python 3.9+ installed
- MkDocs Material familiarity
Setup¶
Follow the website repository README for complete setup instructions.
Documentation Standards¶
- Use clear, concise language
- Include code examples where applicable
- Test all commands and code snippets
- Follow DRY principles by referencing other docs instead of duplicating
- Maintain consistent formatting
- Update navigation when adding new pages
Pull Request Process¶
Before Submitting¶
- Fork the repository
- Create a branch from
main: - Make your changes following the style guidelines
- Test thoroughly:
- Dataset: Run
npm run validate - API: Run
cargo testandcargo clippy - Docs: Build and preview locally
- Commit with clear messages:
- Push to your fork:
Submitting the PR¶
- Go to the original repository
- Click "New Pull Request"
- Select your branch
- Fill out the pull request template completely
- Link related issues using keywords (Fixes #123, Closes #456)
- Wait for review
Review Process¶
- Maintainers will review within 7 days
- Address requested changes promptly
- Keep discussions focused and professional
- Be open to feedback and suggestions
After Approval¶
- Squash commits if requested
- Maintainers will merge your PR
- Your contribution will be included in the next release
Style Guidelines¶
General¶
- Use English for all code, comments, and documentation
- Follow SOLID principles for code architecture
- Apply DRY principles to avoid duplication
- Avoid unnecessary comments; code should be self-documenting
- Do not use emojis in code or data files
Git Commits¶
Follow conventional commit format:
Types: - Add: New feature or data - Fix: Bug fix - Update: Modification to existing feature/data - Remove: Deletion of feature or data - Docs: Documentation changes - Refactor: Code refactoring - Test: Test additions or modifications - Chore: Maintenance tasks
JSON Formatting (Dataset)¶
- Use 2-space indentation
- Sort keys alphabetically where logical
- Use double quotes for strings
- Include trailing commas in arrays and objects
- Validate against schema before committing
Rust Code (API)¶
- Follow Rust naming conventions
- Use
cargo fmtdefault configuration - Maximum line length: 100 characters
- Prefer explicit types in public APIs
- Use Result types for error handling
Data Quality Standards¶
Accuracy¶
- All specifications must be verified against reliable sources
- When sources conflict, prioritize official manufacturer data
- Document assumptions clearly in source notes
- Update data when new information becomes available
Completeness¶
Each vehicle entry should include: - Battery specifications (capacity, chemistry, voltage) - Range data (WLTP, EPA, CLTC where available) - Charging specifications (AC and DC with curves) - Performance metrics (acceleration, top speed) - Physical dimensions and weight - Market availability by country
International Standards¶
- Include regional variations where specifications differ
- Document charging standards by market
- Provide sources from multiple regions
- Note regulatory differences (EPA vs WLTP)
Versioning¶
- Use manufacturer model years
- Document mid-cycle updates as separate variants
- Track specification changes over time
- Maintain backward compatibility in data structure
Questions?¶
- Check existing issues
- Review documentation
- Start a discussion
License¶
By contributing, you agree that your contributions will be licensed under: - Dataset: CDLA-Permissive-2.0 - API/Code: Apache License 2.0 - Documentation: CC-BY 4.0
See the LICENSE file in each repository for details.
Thank you for helping make OpenEV Data the most accurate and comprehensive EV specification database!