openHAB Cloud is a companion cloud service for openHAB, the open-source home automation platform. It provides:
- Secure Remote Access - Access your openHAB instance from anywhere
- Push Notifications - Receive notifications on iOS and Android devices
- OAuth2 Provider - Enable third-party applications to access openHAB
- Runtime: Node.js 22+ with TypeScript
- Web Framework: Express.js
- Database: MongoDB 6+
- Cache/Sessions: Redis 7+
- Real-time: Socket.IO
- Reverse Proxy: Nginx (production)
- Node.js 22 or higher
- MongoDB 6+
- Redis 7+
# Clone the repository
git clone https://github.com/openhab/openhab-cloud.git
cd openhab-cloud
# Install dependencies
npm install
# Copy and configure settings
cp config-production.json config.json
# Edit config.json with your settings
# Start the server
npm startThe server will be available at http://localhost:3000.
Edit config.json to configure:
- MongoDB connection settings
- Redis connection settings
- System host, port, and protocol
- Mail SMTP settings for notifications
- Push notifications (Firebase, APNs)
- OAuth2 client settings
See config-production.json for all available options.
openHAB Cloud can expose each user's openHAB UI through two separate hostnames, tuned for two different clients:
system.proxyHost— the hostname used by the openHAB mobile apps (iOS/Android). Unauthenticated requests receive an HTTP401 WWW-Authenticate: Basicchallenge; the app WebViews intercept that challenge and supply stored credentials automatically. Example:home.myopenhab.org.system.browserProxyHost(optional) — a hostname intended for desktop browsers. UnauthenticatedGETrequests are redirected to{system.host}/login?returnTo=…and bounced back to the original URL after sign-in, avoiding the native Basic-auth dialog. Example:connect.myopenhab.org.
Both hostnames proxy to the same underlying openHAB instance — only the unauthenticated behavior differs. In config.json:
{
"system": {
"host": "myopenhab.org",
"proxyHost": "home.myopenhab.org",
"browserProxyHost": "connect.myopenhab.org",
"subDomainCookies": true
}
}For Docker Compose deployments using deployment/docker-compose/, these fields are driven by environment variables via config.json.template expansion at container startup. Set them in your .env file:
DOMAIN_NAME=myopenhab.org
PROXY_HOST=home.myopenhab.org
BROWSER_PROXY_HOST=connect.myopenhab.org
SUBDOMAIN_COOKIES=trueSee deployment/docker-compose/README.md for the full env-var list.
Requirements for the browser flow:
system.host,system.proxyHost, andsystem.browserProxyHostmust share a common parent domain (e.g. all undermyopenhab.org).system.subDomainCookiesmust be enabled (the default) so the session cookie set onsystem.hostis also sent tobrowserProxyHost.- Each hostname needs its own DNS record and TLS SAN entry at the reverse proxy, all routed to the openHAB Cloud backend.
If browserProxyHost is omitted, only proxyHost is active and behavior is unchanged from previous releases.
Official Docker images are available on Docker Hub:
docker pull openhab/openhab-cloudSee openhab/openhab-cloud for available tags and usage instructions.
# Start all services (MongoDB, Redis, App, Nginx)
docker compose up -d
# View logs
docker compose logs -fSee deployment/docker-compose/README.md for detailed instructions.
See DEVELOPMENT.md for the full development guide, including project structure, architecture, all npm scripts, testing, and where to add new code.
GET /api/v1/notifications- Get user notificationsPOST /api/v1/notifications- Send a notificationGET /api/v1/settings/notifications- Get notification settings
openHAB instances connect via Socket.IO and communicate using:
request/response*- HTTP proxy requestsnotification/broadcastnotification- Push notificationscommand- Item commands
- Fork the repository
- Create a feature branch
- Write tests for new functionality
- Ensure all tests pass:
npm test - Submit a pull request
Eclipse Public License 2.0. See LICENSE for details.