XACT is an industrial IoT platform designed for real-time monitoring, data acquisition, and process automation. XACT handles everything from hobby projects to lab deployments to installations with hundreds or even thousands of devices. Its self-hosted Android mobile app gives operators secure access to devices, events, dashboards, reports, and push notifications away from the web console.
Note: While XACT has many features, installation is as easy as unzipping the release file and executing the run script. Thereafter simply use the sub-set of features applicable to your project.
- 1. Preview
- 2. Installation
- 3. Core Platform
- 4. Data & Processing
- 5. Alerting & Reports
- 6. Extensibility
- 7. Deployment Options
- 8. Roadmap
- 9. Learn More
- Screen shots: View screenshots
- Demo Website: XACT demo
XACT does not have a separate installer. The deployment archive is copied to a suitable directory, unpacked, configured through the .env file, and started with the included startup script. The packaged .env uses evaluation-friendly defaults with generated secrets, direct HTTP serving, unsafe scheduler tasks disabled, browser command publishing disabled, and internal NATS credentials hidden.
Download the platform archive, replacing <os>, <arch>, and <version> with the release you need. Valid <os> values are linux and darwin. Use amd64, arm64, or arm for Linux <arch>; use amd64 or arm64 for Darwin <arch>.
mkdir -p ~/xact
cp xact-<os>-<arch>-<version>.tar.gz ~/xact/
cd ~/xact
tar -xzf xact-<os>-<arch>-<version>.tar.gzReview .env before first start. For a local evaluation, the packaged defaults are enough:
./start.shOpen the system at http://localhost:8080/xact/, or from another browser on the same trusted local network at http://<server-host>:8080/xact/.
Use the platform service manager to run start.sh from the XACT directory after boot.
Systemd based distributions usually use a unit that sets WorkingDirectory to the XACT install directory and runs ./start.sh.
init.d based systems, Alpine, and custom Linux builds can use an init script that changes to the XACT install directory before starting the script.
See the Next Steps section below.
The default Docker deployment uses Docker Compose with XACT, Caddy, and PostgreSQL/TimescaleDB. For other container managers, such as Kubernetes, adjust the deployment as needed.
To deploy with a published image, download the Docker deploy package for your architecture. The package contains docker-compose.yml and .env.example.
Create a directory for the XACT Docker deployment:
mkdir -p ~/xact
cp xact-docker-<arch>-<version>.tar.gz ~/xact/
cd ~/xact
tar -xzf xact-docker-<arch>-<version>.tar.gzExtract the package as the user who will run Docker Compose, not with sudo, so the writable plugins/ and postgres-data/ directories are owned by that user.
cp .env.example .envEdit .env and replace all change-this... secrets.
Change MQTT_BROKER_URL to mqtt://0.0.0.0:1883
For a public server, also set XACT_SITE_ADDRESS to the public DNS name.
Then start the stack:
docker compose up -dOpen XACT at:
http://localhost/xact/
or, when using a public DNS name and Caddy-managed HTTPS:
https://<your-domain>/xact/
Plugins are loaded from the writable host directory configured by XACT_PLUGIN_DIR in .env, defaulting to ./plugins beside the compose file in the extracted Docker deployment package. XACT creates the standard plugin category subdirectories on first start. Add custom widget, map layer, theme, or authentication plugins there before restarting the xact container.
PostgreSQL data is stored in the host directory configured by POSTGRES_DATA_DIR, defaulting to ./postgres-data beside the compose file. The POSTGRES_PASSWORD value is only applied when PostgreSQL initializes an empty data directory; changing .env later does not change the password inside an existing database.
Download the Windows archive. The Windows package is xact-windows-amd64-.zip. Replace <version> with the release you need.
New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\xact"
Copy-Item .\xact-windows-amd64-<version>.zip "$env:USERPROFILE\xact\"
Set-Location "$env:USERPROFILE\xact"
Expand-Archive .\xact-windows-amd64-<version>.zip -DestinationPath . -Forcestart.batOpen the system at http://localhost:8080/xact/, or from another browser on the same trusted local network at http://<server-host>:8080/xact/.
The bootstrap user is named admin. On a fresh packaged install, no password is set yet; the browser shows a Set Admin Password dialog instead of the normal login form. Set the password there and the first admin session starts immediately.
For production deployment guidance, open the online manual after startup and read Preparing for Production.
There are various ways to send data to the XACT server and these are described in the online manual. But the simplest way to get started is probably to start with the Python program found in the repo under demo/python-example. This skeleton program sends data via the XACT REST API.
- Open the system at
http://localhost:8080/xact/,http://<server-host>:8080/xact/, or your configured proxy URL. - On fresh installs, set the initial
adminpassword in the browser; scripted installs can log in with the configured bootstrap password. - Create named administrator users.
- Review
.envand the Preparing for Production manual page before exposing XACT beyond a trusted local network. - Add device drivers and issue REST ingest API keys only to trusted devices.
XACT supports multiple organizations within a single deployment. Each tenant has isolated workspaces, ensuring complete data separation and independent configuration while sharing underlying infrastructure.
A comprehensive role-based access control system enables fine-grained permissions. Define custom roles with specific capabilities and assign users to appropriate access levels across the platform.
Create customized monitoring views with a rich library of widgets including timeseries charts, gauges, big number displays, sparklines, status tables, and more. Drag-and-drop arrangement makes building dashboards fast and intuitive.
Visualize your entire asset inventory on an interactive geographic map. Pinpoint device locations, view real-time status through color coding, and quickly identify issues across distributed installations.
Simple SCADA like diagrams can be created with the built in editor. Diagram elements can be color animated from real time values and standard dashboard widgets can be placed on the diagram.
Adapt the interface to your preferences with selectable themes including light and dark modes, plus custom theme support for brand consistency.
Online documentation ensures help is always available where you need it.
XACT Mobile is a self-hosted Android companion app for in-house operators. It provides mobile access to permitted devices and live KPIs, recent events, dashboards, PDF reports, organisation switching, and Firebase Cloud Messaging notifications. The Android APK is included in deployment packages and can be downloaded securely from the XACT web interface without publishing the app through the Google Play Store.
Use your favorite AI Agent to configure and monitor the XACT server. Prompt to manage the tags or tag calculations or to generate custom reports.
A purpose-built time-series database optimized for industrial data. Hierarchical organization mirrors your physical asset structure, enabling efficient querying and aggregation across equipment hierarchies.
Reduce configuration overhead with reusable templates. Define standard configurations once and apply them across multiple devices and locations, ensuring consistency while saving time.
Scalable data transformation pipelines handle ingestion, validation, and enrichment. Built-in support for limit checks, smoothing algorithms, and custom transformation plugins ensure data quality before storage.
Define computed values derived from raw sensor data. Create calculated tags that aggregate, derivative, or combine multiple inputs for meaningful metrics and KPIs.
Long-term storage with efficient compression enables trend analysis across months or years of operational data. Query historical ranges for root cause analysis and performance reporting.
Real-time alerting across multiple channels. Configure threshold-based alarms, state transitions, and complex event conditions. Notifications can be delivered through email, Telegram, and Firebase Cloud Messaging to the XACT Android app.
Generate professional PDF reports on-demand or on schedule. Include real-time data, historical trends, charts, and analysis. Automate delivery via email distribution lists.
Automate routine operations including scheduled report generation, database maintenance, backup operations, and shell command execution. Cron-based scheduling ensures reliable task execution.
Extend XACT functionality through a modular plugin system. Add custom authentication providers, specialized dashboard widgets, or proprietary themes - all via standard plugin interfaces.
Connect to diverse data sources with built-in protocol support:
- REST API - Push data from any HTTP-enabled device
- MQTT - Subscribe to broker-based telemetry streams
- NATS - High-performance native NATS ingestion for low latency
Interactive control widgets enable operator actions directly from dashboards. Configure setpoints, send commands, and acknowledge alerts - all with proper permission controls and audit logging.
- Supports 10s of devices
- Single executable with embedded SQLite database
- Quick setup, minimal maintenance
- Handles 10s of users, 100-1000+ devices
- Separate PostgreSQL database with TSDB extension
- Scalable storage with superior query performance
- Docker Compose deployment with Caddy and TimescaleDB is available in
deploy/docker/
- Clustered servers for high availability
- Horizontal scaling architecture
- Multi-node container orchestration
- Documentation: See the online manual.
XACT - Industrial IoT, Simplified.
