Skip to content

About

An OCPP 1.6 and 2.1 compliant Charging Station Management System for managing EV charging infrastructure. Handles real-time WebSocket communication with charging stations, OCPI 2.2.1/2.3.0 roaming, ISO 15118 Plug and Charge, a REST API for operators, and two React frontends for operators and drivers.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

32 stars

Watchers

1 watching

Forks

Latest commit

 

History

410 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EVtivity

EVtivity CSMS

Release CI Coverage License: BUSL-1.1 TypeScript Node.js OCPP OCPI

English · Deutsch · Español · 한국어 · 简体中文 · 繁體中文

An OCPP 1.6 and 2.1 compliant Charging Station Management System for managing EV charging infrastructure. Handles real-time WebSocket communication with charging stations, OCPI 2.2.1/2.3.0 roaming, ISO 15118 Plug and Charge, a REST API for operators, and two React frontends for operators and drivers.

EVtivity integrates AI across the operator experience. A chatbot assistant answers natural-language questions about stations, sessions, revenue, and operations by calling API endpoints as tools. A support AI assistant drafts replies for customer support cases by gathering full case context. Both support multiple LLM providers (Anthropic, OpenAI, Gemini) with configurable parameters at system and per-user levels, respond in the operator's preferred language, and enforce security guardrails that prevent leaking sensitive data.

Architecture

graph TB
    subgraph Frontends
        CSMS[CSMS]
        Portal[Driver and Guest Charging Portal]
    end

    subgraph Backend Services
        API[REST API]
        OCPP[OCPP Server]
        OCPI[OCPI Server]
        Worker[Worker]
    end

    subgraph Data
        DB[(PostgreSQL)]
        Redis[(Redis)]
    end

    subgraph External
        Stations[Charging Stations]
        Partners[OCPI Partners]
    end

    CSMS -->|REST| API
    Portal -->|REST| API
    API <-->|pub/sub| Redis
    OCPP <-->|pub/sub| Redis
    OCPI <-->|pub/sub| Redis
    Worker --> DB
    Worker --> Redis
    API --> DB
    OCPP --> DB
    OCPI --> DB
    Stations -->|OCPP 1.6/2.1| OCPP
    Partners <-->|OCPI 2.2.1/2.3.0| OCPI
Loading

Feature Overview

OCPP Compliance

Feature Description
Protocol Support OCPP 1.6 and 2.1 with simultaneous multi-version operation
Security Profiles SP0 through SP3, including mTLS client certificate authentication
Remote Control Start/stop sessions, reset, unlock connector, set charging profile
Local Authorization Per-station authorization lists with operator-managed push sync
Reservations EVSE-level reservation with expiry monitoring and driver notification
Station Messages Eight state-specific templates (available, occupied, reserved, charging, suspended, discharging, faulted, unavailable) rendered to station displays via SetDisplayMessage
Plug and Charge ISO 15118 PKI with Hubject OPCP and manual certificate provider support

Station Management

Feature Description
Multi-site Hierarchy Sites, stations, EVSEs, and connectors with per-operator site access control
Real-time Monitoring Live connector status, session activity, and meter values via server-sent events
Station Images Upload, tag, and publish images per station with driver-visible flag
Firmware Management Network-wide firmware campaigns with per-station scheduling and status tracking
Configuration Configuration templates with station drift detection and bulk apply
Station Metrics NEVI uptime compliance, ChargeX KPIs, utilization rate, and fault rate reporting
Popular Times Session frequency heatmap by day and hour per station
Remote Diagnostics Trigger status notifications, retrieve diagnostics, clear fault states
Per-site Maintenance Schedule one-off or immediate maintenance windows that take stations offline, cancel overlapping reservations, optionally stop active sessions with driver notification, and surface a Maintenance badge on the sites list

Smart Charging

Feature Description
Load Management Site-level power budget with equal-share and priority-based allocation
Charging Profiles OCPP charging profile delivery with composite schedule support
Idle Detection Multi-signal idle detection (chargingState, power meter, status) with grace period
V2G Vehicle-to-grid discharging state tracking via OCPP 2.1 chargingState

Billing and Payments

Feature Description
Tariff Engine Flat, time-of-day, day-of-week, seasonal, holiday, and energy-threshold tariffs
Pricing Assignment Tariff group assignment at driver, fleet, station, and site levels with priority resolution
Split Billing Per-segment cost tracking when tariff changes mid-session
Idle and Reservation Fees Per-minute idle fee with grace period and per-minute reservation fee
Multi-currency 10 currencies with Intl.NumberFormat formatting
Payment Processing Stripe pre-authorization, capture, partial and full refunds
Guest Charging Card-on-file payment for unauthenticated drivers via QR code
Invoicing Session receipts, monthly statements, and revenue reconciliation

Roaming

Feature Description
OCPI 2.2.1 / 2.3.0 CPO and eMSP roles with dual-version support
Partner Management Credential exchange, endpoint registration, and connection status monitoring
Location Publishing Per-site publish control with partner-level visibility settings
CDR Generation Automatic charge detail record creation and push to eMSP partners
Token Authorization Real-time and offline authorization of external driver tokens
Remote Commands CPO commands receiver (START_SESSION, STOP_SESSION, RESERVE_NOW, UNLOCK_CONNECTOR)
Roaming Station Search Driver portal browse and search of partner network stations

Driver Experience

Feature Description
Driver Portal Mobile-first web portal with QR code scanning, session management, and history
Nearby Station Search Location-aware station search with map view and real-time availability
Guest Charging No-account charging flow with Stripe payment at the station
Activity Dashboard Monthly charging summary with energy, cost, and estimated miles by vehicle
Monthly Statements Itemized session statements available per calendar month
Favorites Save and quick-access frequently used stations
Fleet Management Fleet grouping with fleet-specific pricing and driver token assignment
Vehicle Management Vehicle profiles for energy-to-miles estimation based on real-world efficiency
RFID Self-service Drivers add and manage their own RFID cards from the portal
In-app Notifications Real-time notification bell with history drawer and per-channel preferences
Support Cases Support tickets with session linking, refund actions, and S3 file attachments
Notifications Email and SMS for session events, payment status, reservations, and support cases

AI-Powered Operations

Feature Description
Chatbot Assistant Natural-language operator assistant with access to all API endpoints via auto-generated tool catalog
Two-tier Tool Selection Category-based tool routing keeps per-request tool count under provider limits (128)
Support Case AI Draft customer replies and internal notes from full case context (messages, sessions, station, driver)
Multi-provider Support Anthropic Claude, OpenAI GPT, and Google Gemini with per-user and system-level configuration
LLM Parameters Configurable temperature, top-p, top-k, system prompt, and tone at system and per-user levels
Language-aware Responses AI responds in the operator's preferred language across all 6 supported locales
Security Guardrails Blocks password and API key leaking, requires confirmation before data modifications
Auto-generated Tools OpenAPI spec codegen produces typed tool definitions for all 500+ operator endpoints
Editable Chat Edit and resend user messages, copy assistant responses, markdown rendering with scrollable tables

Sustainability

Feature Description
Carbon Tracking CO2 avoided per session computed from EPA eGRID and Ember regional grid intensity
Site Carbon Regions Assign a carbon intensity region to each site from 60 pre-loaded regional factors
Dashboard Integration CO2 avoided stat card on the operator dashboard with day-over-day trend
Session Display CO2 column in sessions table and detail pages for both operator and driver views
Sustainability Report Monthly trend chart, site breakdown table, trees equivalent, and CSV export
Portal Integration Carbon impact on session receipts, monthly statements, and activity page

Security and Access

Feature Description
Authentication JWT-based auth with role-based access control for operators and drivers
SAML SSO SAML 2.0 single sign-on with configurable IdP, auto-provisioning, attribute mapping
API Keys Long-lived API keys for programmatic access, inheriting the creator's site access
Multi-factor Auth TOTP authenticator app, email code, and SMS code options
Site Access Control Per-operator site assignment with default-deny enforcement
Email Verification Account verification on driver self-registration before portal access is granted
Bot Protection Google reCAPTCHA v3 on operator and driver login
Audit Logs Access log of operator actions for compliance and security review

Reporting and Analytics

Feature Description
Dashboards Real-time revenue, energy, session count, and connector status charts
Reports 9 report types including energy consumption, revenue, utilization, and faults
NEVI Compliance Station uptime tracking and excluded downtime management per NEVI requirements
Scheduled Delivery Automated report delivery by email or FTP on configurable schedules

Notifications and Messaging

Feature Description
Event-driven Alerts 41 configurable OCPP event types with per-event recipient, channel, and template
Driver Notifications Session, payment, reservation, and support case notifications per driver
Channels Email (SMTP), SMS (Twilio), webhook, and in-app delivery
Template Editor WYSIWYG email editor with drag-and-drop variable insertion and live preview
Email Layout Configurable HTML wrapper template applied to all outgoing emails
Notification History Delivery log with email preview and SMS/push inline expand

Deployment and Operations

Feature Description
Deployment Options Docker Compose, Kubernetes Helm chart (Istio/Envoy Gateway), and AWS CDK (ECS)
Horizontal Scaling Stateless services with Redis-backed OCPP connection registry across pods
Auto-scaling Kubernetes HPA for API and OCPP with WebSocket-aware scale-down stabilization
Rate Limiting Configurable global and per-endpoint rate limiting with separate auth rate limits
Observability Prometheus metrics, Grafana dashboards, Loki log aggregation
Conformance Testing Built-in OCTT 1.6 and 2.1 conformance test runner for CSMS and Charging Station SUT with dashboard reporting and per-module results
Multi-language UI 6 languages: English, German, Spanish, Korean, Simplified and Traditional Chinese
Responsive Filters Filter controls collapse into dropdown on tablet and mobile for all list pages
Server-down Page Friendly error page with retry when API is unreachable, on both CSMS and Portal
Release Management Stable, alpha and beta channels. Each stable release bumps the Helm chart and AWS CDK app to its version

Deployment

Option Use it for Source Guide
Docker Compose Local development and single-host installs docker-compose.yml in this repository Docker Compose
Kubernetes Helm chart Production on Kubernetes (Istio or Envoy Gateway) EVtivity/evtivity-csms-helm Helm chart
AWS CDK Production on AWS (ECS Fargate, Aurora, ElastiCache) EVtivity/evtivity-csms-cdk AWS

The Helm chart and the AWS CDK app track stable releases only. See Helm chart and AWS CDK versions.

Service endpoints

With the Helm chart, each service is exposed on its own subdomain via Gateway API:

Service URL Public Port Internal Port
CSMS dashboard https://csms.your-domain.com 443 80
Driver portal https://portal.your-domain.com 443 80
REST API https://api.your-domain.com 443 3001
OCPP WebSocket wss://ocpp.your-domain.com 443 8080
OCPP WebSocket TLS wss://<load-balancer-ip> 8443 8443
OCPI server https://ocpi.your-domain.com 443 3002
Grafana https://grafana.your-domain.com 443 3000
Prometheus https://prometheus.your-domain.com 443 9090
API Docs https://api.your-domain.com/docs 443 3001

All hostnames share a single load balancer IP. DNS records for each hostname must point to that IP. OCPP TLS (port 8443) is provisioned as a separate LoadBalancer service for direct station connections using Security Profile 3 (mTLS).

Skills

EVtivity Agent Skills teach your AI coding agent to work with EVtivity. They follow the open Agent Skills standard, so the same skills work in Claude Code, Codex, GitHub Copilot, Gemini CLI, Cursor and other agents.

Skill Helps you
evtivity-getting-started Install and run EVtivity locally with Docker and sign in
evtivity-deployment Deploy and upgrade with Docker Compose, Helm or AWS CDK
evtivity-configuration Set environment variables, secrets, auth, database and station security
evtivity-csms Operate the dashboard: sites, stations, sessions, drivers, pricing, reports
evtivity-portal Use the driver portal: find a station, charge, pay, manage cards
evtivity-mobile-app Build, brand and release the driver mobile app
evtivity-guides Follow step-by-step guides such as station onboarding and stuck sessions
evtivity-integrations Set up Stripe, Adyen, the test payment provider and payouts
evtivity-api Call the REST API: API keys, error codes, OCPP command routes
evtivity-simulator Run simulated OCPP 1.6 and 2.1 stations and charging sessions
evtivity-conformance Send OCPP commands, read message logs and run OCTT conformance tests
evtivity-troubleshoot Find and fix a failing service, station connection or sign-in
evtivity-report-issue Collect the version and redacted logs and draft a GitHub issue

Install them for any agent:

npx skills add EVtivity/evtivity-skills

Skill releases use the same tags as EVtivity. Install the tag that matches your deployment. Pull requests and discussions for new skills are welcome.

Releases

Versions follow Semantic Versioning: vMAJOR.MINOR.PATCH. Every release is a git tag and a GitHub release with notes.

Channels

Channel Tag example Purpose GitHub release
Stable v0.1.38 Production release Latest
Beta v0.1.38-beta.2 Feature-complete preview of the next stable release Pre-release
Alpha v0.1.39-alpha.1 Early preview while the version's features are still in work Pre-release

Prereleases rank below the stable version they lead to (v0.1.38-beta.2 comes before v0.1.38). Run only stable releases in production.

Once a version's betas start, it is feature-frozen: later betas carry only fixes, and new features go to the next version. The stable release is cut from the same code as the last beta.

Container images

Images are published to ghcr.io/evtivity/evtivity-csms/<service> for linux/amd64 and linux/arm64.

  • Every release has an exact, immutable tag: 0.1.38, 0.1.38-beta.2.
  • Stable releases also move 0.1, 0, latest and stable.
  • Prereleases move the alias of their channel only: beta or alpha.

Aliases always point to the newest image of their channel, and a deployment picks up a new one only when it pulls the image again. Pin an exact tag in production.

Helm chart and AWS CDK versions

The Helm chart and the AWS CDK app follow stable releases only. Each stable release bumps them to its version. To try a prerelease, set the image tag yourself, for example image.tag=0.1.38-beta.2.

Release notes and upgrades

  • Every release note starts with a Breaking changes section: what changed, who is affected, and the action to take. It says "None." when there are none.
  • Upgrade notes give the steps for the upgrade, such as webhook moves, renamed settings, or chart values that changed.
  • Database changes that old and new versions must share during a rolling upgrade ship in two steps: one release adds the new structure while keeping the old one, and a later release removes the old one. When a release note says so, upgrade through each stable version in order instead of skipping one.
  • The dashboard shows an update notice when a newer stable release is available. Prereleases never trigger it.

License

Copyright (c) 2025-2026 EVtivity. All rights reserved.

You may download and run the software for your own operations. You may not copy, redistribute, reverse engineer, or offer the software as a hosted or SaaS product. You may not sell or charge others for access to the software.

See LICENSE.md for full terms. For licensing inquiries, contact evtivity@gmail.com.

About

An OCPP 1.6 and 2.1 compliant Charging Station Management System for managing EV charging infrastructure. Handles real-time WebSocket communication with charging stations, OCPI 2.2.1/2.3.0 roaming, ISO 15118 Plug and Charge, a REST API for operators, and two React frontends for operators and drivers.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

32 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages