https://clipper2web.com/docs/nodejs.mp4
Hello friends,
Today I implemented something that for a long time was considered complex, untypical, or even unrealistic for Harbour β
and it turned out to be surprisingly simple.
What mattered most to me was long-term maintainability, debuggability, and a clear understanding of the interface.
I wanted a solution where the data flow is explicit and transparent, not hidden behind frameworks or abstractions.
Harbour now talks directly to Node.js via WebSocket.
No DLLs.
No frameworks.
No magic.
Just a few hundred lines of clean, explicit code β and suddenly a new door opens.
---
What this enables
A classic Harbour application can now:
- establish a persistent WebSocket connection
- communicate with a modern Node.js service
- access SQL databases through Node.js
- receive results directly back into Harbour
All of this is bidirectional, stateful, and fast.
Harbour does not become a web framework β
but it gains modern interface capability, and that is what really matters.
---
Key integration areas
Modern databases (without DLLs / ODBC)
PostgreSQL, MySQL/MariaDB, SQLite, MongoDB, Redis
β Node.js handles pooling, reconnects, and TLS
β Harbour stays focused on business logic
Cloud & Web APIs
Payments, logistics, CRM/ERP, geo services, messaging
β Harbour only speaks JSON over WebSocket
AI & LLM services
Text analysis, document processing, assistants, translations
β Harbour provides context, Node.js connects to AI providers
Real-time features
Live status, push updates, dashboards, multi-user scenarios
β No polling β Harbour can react instantly
---
Clean separation of responsibilities
- Harbour: business logic, validation, state
- Node.js: APIs, protocols, external services
- Outside world: SQL, cloud, AI
Result:
- less complexity per layer
- better maintainability
- easier debugging
---
Why this matters
- Existing Harbour systems remain intact
- Decades of business logic are preserved
- No rewrite, no βbig bangβ migration
- Modernization becomes incremental and controlled
Harbour is not replaced β it becomes connectable.
Best regards,
Otto
https://clipper2web.com/docs/nodejs.mp4
