Apostol CSMS
A charging station management system you can own. Running in production: three brands on two markets - Europe and Russia - including a retail service where real station owners take real payments from real drivers.
What this is about
There are more electric vehicles on the road every year, and every one of them needs charging. A charging station by itself, though, is just a cabinet with a plug: something has to show it to drivers on a map, start and stop charging, calculate the cost, take payment, issue a receipt and watch its health. All of that is done by a management system - the industry calls it a CSMS, a Charging Station Management System. Without one, a charging business is impossible, whichever side you enter it from.
Anyone entering this market usually has two options
Rent someone else's system
A monthly fee to a cloud provider, someone else's brand under the hood, and dependence on their pricing, priorities and right to refuse - for years ahead.
Build your own
Years of engineering work. For scale: the implemented volume of just one station protocol here is industry-estimated at 10-16 person-months, and a charging platform has some fifteen subsystems of that kind.
The third way - ownership
Apostol CSMS is a finished, production-proven system that can be purchased or licensed and launched under your own brand. Deploying a new brand takes minutes, not years.
Brand deployment template on GitHub ↗What you get
A complete software suite - everything needed to launch a charging business.
Station management center
Connect charging stations from major manufacturers over industry standards, observe and control them in real time - from a station's first handshake to decommissioning.
Driver application
Station map, charging start, payment, history, a wallet with auto top-up - in a dozen languages. Installs on a phone like a regular app and works on weak connections. Open demo: driver.ocpp-css.com, sign in with driver / driver.
Payments
Three payment providers covering two markets, including QR payment without registration - a mandatory requirement of European law.
Business management panel
Tariffs, clients, partners, invoices, reports, staff permissions. The buyer administers the system independently, with no developer involved.
Roaming
Exchange stations, tariffs and sessions with other charging networks over the international OCPI standard - ready for alliances of the Hubject and Gireve level.
White label
The same platform deploys under a new brand - with its own look, legal entity and payment credentials - in 5-10 minutes.
How money is made here
Three typical scenarios - one per reader of this page.
Your own charging brand
Instead of two-three years of development and an in-house engineering team - a launch on a ready platform within weeks: the time goes into legal formalities and hardware, not software. Revenue sources: a fee on every charging transaction, subscription fees from station operators, roaming settlements with other networks.
Owning the core instead of renting
You acquire the software asset itself, not a subscription to someone else's service. That removes the main strategic risk of the charging business - dependence on a cloud vendor over a 5-10 year horizon. The platform owner also becomes a vendor: the white label lets you license the system to other operators and build your own ecosystem of brands.
Monetizing your hardware
On the live OCPP CSS service an owner connects a station independently, in about 15 minutes. Drivers' money lands directly on the owner's bank account, the fiscal receipt is issued with the owner's tax credentials automatically, and the platform withholds a fixed percentage per transaction. No software rent, no in-house development.
Capabilities, end to end
The full loop of a charging business: stations, drivers, money, roaming, operations. Everything listed runs in live deployments - this is the delivery, not a roadmap.
Stations
The full lifecycle: from automatic registration at first handshake to decommissioning.
- •Three versions of the OCPP standard at once - 1.5, 1.6 and 2.0.1. The version is detected automatically and commands are translated between formats: a mixed fleet is served without restrictions
- •Confirmed operation with hardware from dozens of manufacturers - ABB, Schneider Electric, Wallbox and others; all major connectors, including Type 2, CCS2, CHAdeMO, GB/T and GOST
- •Remote firmware updates with a firmware library and visible installation progress; a station security event log classified by severity
- •A software station simulator ships with the platform - staff training and scenario testing require no real hardware
Drivers
Drivers use a web application that installs on a phone like a regular one - no app stores involved.
- •Station map with filters, start and stop of charging, wallet with auto top-up, reservations, session history - interface in a dozen languages
- •QR payment without registration: the driver scans a code on the station, sees the tariff, pays by card and charges. The flow satisfies the mandatory EU AFIR requirement and works on both markets
- •An open demo login for the app: driver.ocpp-css.com, login driver, password driver - see it through a driver's eyes before any conversation
Money
The full financial cycle inside one transactional system: the calculation, the invoice and the payment cannot drift apart.
- •Stripe for Europe and YooKassa for Russia: pre-authorization, captures, partial and full refunds, partner payouts
- •The YooKassa partner model: revenue goes directly to the station operator, the 54-FZ fiscal receipt is issued with the operator's tax credentials
- •All money movements use double-entry accounting: every operation debits one account and credits another simultaneously - balance consistency is guaranteed by construction
- •Charging cost is computed in real time from the station meter; tariffs by energy, time and idle, with hourly schedules and individual discounts
Roaming
The OCPI standard defines how charging networks exchange stations, tariffs and sessions - it is what lets a driver of one network charge on another.
- •Both active versions of the standard - 2.2.1 and 2.3.0 - simultaneously, in both roles: charge point operator and e-mobility service provider
- •Most of the standard's modules - enough to join Hubject and Gireve without additional development
- •Outgoing update queues with retries and a complete exchange journal
Operations and security
The management panel, monitoring and access control are designed for self-sufficient operation by the buyer.
- •Summary dashboards: stations by state, delivered power, active sessions, revenue and energy in breakdowns; an incident console with a cross-view of any object and a live event feed
- •Several independent operators on one instance with full data isolation: operator ownership is built into the system core, not glued on top
- •OAuth2 authentication, three independent levels of access control, seven audit journals - any history is recoverable, a regulatory review is feasible
White label - the key difference
Competitors follow the cloud-rental model: the client gets a page of somebody else's system where changing the logo and colors is permitted. This works differently: one software build deploys at a new brand operator in 5-10 minutes - with its own domain, legal entity, payment provider and look.
License
A cryptographically signed document: brand name, legal entity, market, domain, tax credentials. Forging it or reissuing it without the platform owner is impossible - control over who runs on the core stays with the owner.
Brand manifest
The look - logos, colors, dark theme, payment provider, language, currency, maps - is edited in the management panel and applies immediately, with no recompilation or restarts.
Updates
Updating the platform at a brand is one command, with health checks and a rollback to the previous version using the same mechanics.
Ready for resale
The platform owner can license it to other operators - a one-time acquisition turns into recurring revenue and an ecosystem of brands.
Verify it yourself - in one evening
No NDAs and no long sales cycle. Everything written above can be checked before the first conversation with us.
Open access to the management panel and the driver app: virtual stations, tariffs, journals, clients, invoices. The logins and passwords are right here - no registration needed.
OCPP CSS
ocpp-css.com ↗
A retail service in production: station owners connect on their own, drivers' money goes directly to their accounts. A live, public example of the platform's monetization.
ChargeMeCar
chargemecar.com ↗
The platform's European circuit: Stripe settlements, AFIR flows, roaming readiness.
PlugMe
plugme.ru ↗
The platform's Russian circuit: YooKassa and CloudKassir in one system.
Open core
github.com/apostoldevel ↗
The platform core is open: code style, commit discipline and documentation in two languages are in plain sight - not behind an NDA.
An honest comparison
The platform's market position is the middle segment between enterprise systems and small-business products - with an offer neither of them makes.
| Capability | Apostol CSMS | AMPECO | Driivz | Virta |
|---|---|---|---|---|
| OCPP 1.6 | Yes | Yes | Yes | Yes |
| OCPP 2.0.1 - core volume | Yes | Yes | Yes | Yes |
| OCPP 1.5 - legacy station fleets | Yes | No | No | No |
| Station firmware updates | Yes | Yes | Yes | Yes |
| ISO 15118 Plug & Charge | Not yet | Yes | Yes | Partial |
| OCPI 2.2.1 and 2.3.0 roaming | Yes - most modules | Yes | Yes | Yes |
| QR payment without registration (AFIR) | Yes - Stripe and YooKassa | Yes | Yes | Yes |
| Russian payment providers | Yes | No | No | No |
| Multiple operators with data isolation | Yes | Yes | Yes | Yes |
| Partner B2B circuit | Yes | Yes | Yes | Partial |
| Native mobile apps | Not yet - web app | Yes | Yes | Yes |
| Site-level load balancing | Basic | Advanced | Advanced | Advanced |
| Verified hardware catalog | Dozens | Hundreds | Hundreds | Many |
| Brand deployment in minutes | Yes | No | No | No |
| Core ownership, not cloud rent | Yes | No | No | No |
The enterprise leaders' strengths are analytics depth and catalog size; their price is a long sales cycle and rent instead of ownership. Our "not yet" rows are the roadmap below. The last two rows of the table are offered by none of them.
Where the platform is heading
We know where we trail the enterprise leaders and say so plainly. None of these items prevents operating and earning today - all of them are planned work.
ISO 15118 Plug & Charge
The car authorizes itself, with no card or app. Relevant for premium hardware fleets and part of the European subsidies.
Native mobile apps
Today drivers use a web app that installs on a phone in one tap; presence in the App Store and Google Play is the next step.
Site-level load balancing
Power control of an individual station is implemented; distributing power between stations of one substation and reacting to grid peaks is planned.
Advanced business analytics
Operational dashboards and summary metrics exist; revenue forecasts, tariff recommendations and a report builder are ahead.
External monitoring
Internal observability tools are well developed; Prometheus and Grafana integration will come for operators with their own operations teams.
For the CTO
A short account of how it is built - for a reader with a background in backend development, databases and operations.
The platform is a three-layer construction kit: a C++20 transport layer - a single epoll event loop, HTTP, WebSocket, TLS, OCPP; a platform layer in PostgreSQL - two dozen modules, open source; and the charging-domain business logic - about 120 thousand lines of PL/pgSQL. The main architectural choice is a thin transport with business logic in the database. It is a deliberate engineering decision, and here are its arguments.
One event loop for HTTP and PostgreSQL
Database connections are registered in the same event loop as HTTP connections: a whole request is one round-trip to the database, one transaction. Sub-millisecond response times, tens of thousands of requests per second on real database-backed requests.
Money integrity as an architectural property
Cost calculation, balance checks, double-spend protection and invoicing run inside one database transaction - atomicity is guaranteed by PostgreSQL itself, not by application code. Distributed-system failure classes - a finished session with a lost invoice, double charges on concurrent requests - are excluded by construction.
A fit for the OCPP load profile
Charging stations hold persistent WebSocket connections for years. The epoll architecture spends about 1 KB of memory per connection and has no garbage-collector pauses - tens of thousands of stations are served by a single node with stable latency.
The cost of this choice is stated honestly: the market of C++ and PL/pgSQL specialists is narrower than for mainstream stacks. The architecture itself softens it: a hired team works in the top layer - business logic following detailed reference patterns - and in the frontend on mainstream React and Vue, never touching the core; the core is open and documented.
More on the platform architecture →Composition and metrics
| Component | Technology and size |
|---|---|
| Server transport | C++20, about 30,000 lines |
| OCPP server (separate service) | C++20, about 30,000 lines |
| Business logic | PL/pgSQL, about 120,000 lines |
| Management panel | a modern React stack, dozens of pages |
| REST API | hundreds of paths (OpenAPI) |
| Automated tests | hundreds of checks (pytest) |
| Interface languages | a dozen, driven by a single translation mechanism |
Testing
Automated tests cover the database level, REST, OCPP protocol scenarios of both versions - including firmware updates and security events - and an end-to-end payment scenario against real Stripe. A marker system runs the relevant subset in seconds.
Release cycle
A release is a coordinated version tag across five source repositories; the pipeline builds public container images and records checksums. A brand operator applies a version with three commands: a clean install in about 5 minutes, a zero-downtime update, ten health checks. Rollback uses the same mechanics.
Frequently asked questions
Specifics on how the platform works. If your question is missing, write to us - we answer to the point.
What does it take to connect a station?+
A station supporting OCPP 1.5, 1.6 or 2.0.1, and internet access. The station registers automatically at first handshake. Onboarding a model we have not worked with before usually takes one to three days - an operational task, not a software one.
Can I get the platform under my own brand?+
Yes - that is the primary delivery scenario. A new brand deploys in 5-10 minutes on a prepared server: your domain, legal entity, payment provider and look. The brand runs on a cryptographically signed license - replication without the platform owner's knowledge is impossible.
Can the system run in my own infrastructure?+
Yes. Delivery is Docker Compose on your server: services in isolated networks, with the database physically unreachable from the outer segment. Full data sovereignty and compliance control - including for companies with their own security policies.
What about roaming via Hubject or Gireve?+
OCPI 2.2.1 and 2.3.0 are supported simultaneously, in both the charge point operator and e-mobility service provider roles, with most of the standard's modules - enough to join international roaming alliances without additional development.
How does one codebase serve two markets this different?+
The European circuit - Stripe, AFIR flows, GDPR - and the Russian one - YooKassa, CloudKassir, 54-FZ fiscalization - were built into one system from the start, not ported after the fact. Entering the second market needs no new development: it is a matter of the license and payment credentials.
How much does it cost?+
It depends on the scenario: partnership on the live service, a cloud subscription, a license for your infrastructure, or acquiring the platform. There is no universal price list, and inventing one would be dishonest: tell us about your task - we will propose a model and numbers for it.
How can I verify the system before any talks?+
In one evening: the open demo of the management panel (cloud.ocpp-css.com, login operator, password operator) and of the driver app (driver.ocpp-css.com, login driver, password driver), the live retail service ocpp-css.com, and the open platform core on GitHub. None of these steps requires agreements or calls.
Tell us about your task
Your own brand, a license for your infrastructure, a partnership - or simply stations that need a system. Write to us and we will discuss your scenario and propose a model for it.