@ecobridge.xyz/eco_os

the os to connect your devices to ecobridge.xyz through a standalone PC/VM in your network. Comes with TouchScreen support, to run your scan station or home dashboard.

readme.md for @ecobridge.xyz/eco_os

๐ŸŒ EcoOS

A purpose-built, minimal Linux distribution for kiosk and digital signage deployments.

EcoOS is a streamlined operating system that boots directly into a full-screen Chromium browser, managed by a powerful daemon with a built-in web UI. Perfect for digital signage, interactive kiosks, info displays, and any scenario where you need a locked-down, browser-based interface.

Issue Reporting and Security

For reporting bugs, issues, or security vulnerabilities, please visit community.foss.global/. This is the central community hub for all issue reporting. Developers who sign and comply with our contribution agreement and go through identification can also get a code.foss.global/ account to submit Pull Requests directly.


โœจ Features


๐Ÿ—๏ธ Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      EcoOS ISO                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”‚
โ”‚  โ”‚              eco-daemon (systemd)               โ”‚    โ”‚
โ”‚  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚    โ”‚
โ”‚  โ”‚  โ”‚ Process โ”‚  โ”‚ System  โ”‚  โ”‚    Updater      โ”‚  โ”‚    โ”‚
โ”‚  โ”‚  โ”‚ Manager โ”‚  โ”‚  Info   โ”‚  โ”‚ (auto-upgrade)  โ”‚  โ”‚    โ”‚
โ”‚  โ”‚  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚    โ”‚
โ”‚  โ”‚       โ”‚            โ”‚                โ”‚           โ”‚    โ”‚
โ”‚  โ”‚       โ–ผ            โ–ผ                โ–ผ           โ”‚    โ”‚
โ”‚  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚    โ”‚
โ”‚  โ”‚  โ”‚           UI Server (:3006)             โ”‚   โ”‚    โ”‚
โ”‚  โ”‚  โ”‚   REST API  โ”‚  WebSocket  โ”‚  Dashboard  โ”‚   โ”‚    โ”‚
โ”‚  โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚    โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ”‚
โ”‚                          โ”‚                              โ”‚
โ”‚                          โ–ผ                              โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”‚
โ”‚  โ”‚  Sway Compositor โ”‚โ”€โ”€โ”€โ”‚  Chromium (kiosk mode)  โ”‚    โ”‚
โ”‚  โ”‚    (Wayland)     โ”‚   โ”‚   โ†’ localhost:3006      โ”‚    โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  Ubuntu 24.04 Base  โ”‚  systemd  โ”‚  seatd  โ”‚  pipewire  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ› ๏ธ Development

Prerequisites

Project Structure

eco_os/
โ”œโ”€โ”€ ecoos_daemon/          # Daemon source (Deno/TypeScript)
โ”‚   โ”œโ”€โ”€ mod.ts             # Entry point
โ”‚   โ””โ”€โ”€ ts/
โ”‚       โ”œโ”€โ”€ daemon/        # Core daemon logic
โ”‚       โ”‚   โ”œโ”€โ”€ index.ts       # EcoDaemon class
โ”‚       โ”‚   โ”œโ”€โ”€ process-manager.ts  # Sway/Chromium management
โ”‚       โ”‚   โ”œโ”€โ”€ system-info.ts # Hardware detection
โ”‚       โ”‚   โ””โ”€โ”€ updater.ts     # Auto-update system
โ”‚       โ”œโ”€โ”€ ui/            # Web UI server
โ”‚       โ””โ”€โ”€ utils/         # Utilities
โ”œโ”€โ”€ isobuild/              # ISO build configuration
โ”‚   โ”œโ”€โ”€ Dockerfile         # Build container
โ”‚   โ”œโ”€โ”€ config/            # live-build config
โ”‚   โ””โ”€โ”€ scripts/           # Build scripts
โ”œโ”€โ”€ isotest/               # QEMU test scripts
โ””โ”€โ”€ .nogit/                # Generated artifacts (not in git)
    โ”œโ”€โ”€ iso/               # Built ISO
    โ”œโ”€โ”€ vm/                # QEMU files
    โ””โ”€โ”€ screenshots/       # VM screenshots

Commands

# Build the full ISO (auto-rebuilds daemon first)
pnpm run build

# Test ISO in QEMU virtual machine
pnpm run test

# Take screenshot of running VM
pnpm run test:screenshot

# Stop the QEMU VM
pnpm run test:stop

# Clean all build artifacts
pnpm run clean

# Daemon development (watch mode)
pnpm run daemon:dev

# Bundle daemon to standalone binary
pnpm run daemon:bundle

# Type-check daemon code
pnpm run daemon:typecheck

๐Ÿ–ฅ๏ธ Management UI

The daemon exposes a management interface at http://localhost:3006 (or the device's IP on port 3006).

Dashboard Features

Panel Description
Services Status of Sway compositor and Chromium browser
CPU Model, core count, real-time usage
Memory Used/total with visual progress bar
Network Interface names and IP addresses
Disks Mount points, usage, and capacity
System Hostname, uptime, GPU info
Controls Restart browser, reboot system buttons
Updates Version info, available updates, upgrade controls
Input Devices Keyboards, mice, touchscreens
Audio Detected speakers and microphones
Logs Daemon logs and system journal viewer

API Endpoints

Endpoint Method Description
/api/status GET Full system status
/api/logs GET Daemon logs
/api/reboot POST Reboot the system
/api/restart-chromium POST Restart the kiosk browser
/api/updates GET Update information
/api/updates/check POST Check for new updates
/api/upgrade POST Upgrade to specific version
/ws WebSocket Real-time status updates

๐Ÿ”„ Update System

EcoOS features a smart auto-update mechanism:

  1. Hourly Checks โ€” Daemon polls for new releases every hour
  2. Stability Period โ€” New releases wait 24 hours before auto-upgrade (prevents deploying unstable releases)
  3. Seamless Upgrade โ€” Downloads new daemon binary, replaces, and restarts service
  4. Manual Override โ€” Force immediate upgrade via UI or API
  5. Version Tracking โ€” UI auto-reloads when daemon version changes

๐Ÿงช Testing

QEMU Virtual Machine

# Start VM (creates disk, boots ISO)
pnpm run test

# Take screenshots to monitor progress
pnpm run test:screenshot

# Screenshot loop (every 5 seconds)
pnpm run test:screenshot:loop

# Stop VM
pnpm run test:stop

# Clean and restart fresh
pnpm run test:clean && pnpm run test

Serial Console

For debugging without graphics:

socat - UNIX-CONNECT:.nogit/vm/serial.sock
# Login: ecouser / ecouser
# Root: sudo -i

๐Ÿ“ฆ Release Assets

Each release includes:

File Description
ecoos-vX.X.X.iso Full bootable ISO image (~2GB)
eco-daemon-vX.X.X Standalone daemon binary for in-place upgrades
SHA256SUMS.txt Checksums for verification

๐Ÿ”ง Boot Menu Options

  1. Install EcoOS (default, auto-selects in 10s) โ€” Full installation to disk
  2. EcoOS Live โ€” Try without installing (runs from RAM)
  3. EcoOS Live (Safe Mode) โ€” Minimal boot for troubleshooting

โš™๏ธ Technical Details

Daemon

Kiosk Browser

System Stack


This repository contains open-source code licensed under the MIT License. A copy of the license can be found in the LICENSE file.

Please note: The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.

Trademarks

This project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH or third parties, and are not included within the scope of the MIT license granted herein.

Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines or the guidelines of the respective third-party owners, and any usage must be approved in writing. Third-party trademarks used herein are the property of their respective owners and used only in a descriptive manner, e.g. for an implementation of an API or similar.

Company Information

Task Venture Capital GmbH Registered at District Court Bremen HRB 35230 HB, Germany

By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.

changelog.md for @ecobridge.xyz/eco_os

2026-01-10 - 0.5.0 - feat(ui,isotest)

Group disabled displays into a collapsible section and refactor display item rendering; start a background screenshot loop during isotest and improve test-run cleanup

2026-01-10 - 0.4.15 - fix(isotest)

Improve robustness of SPICE display enabler: add logging, wait-for-port and URI parsing, retries and reconnection logic, stabilization delay before configuring, and verification/retry of monitor configuration

2026-01-09 - 0.4.1 - fix(release-upload)

clear progress timer on upload completion/error and add periodic upload progress reporting

2026-01-09 - 0.4.0 - feat(displays)

add display detection and management (sway) with daemon APIs and UI controls

2026-01-09 - 0.3.8 - fix(ci(release-workflow))

use npx tsx to run release-upload.ts in the Gitea release workflow instead of installing tsx globally

2026-01-09 - 0.3.7 - fix(daemon)

Point updater at the correct repository API (code.foss.global ecobridge.xyz/eco_os) and bump project/daemon versions to 0.3.6

2026-01-09 - 0.3.5 - fix(ci)

add Gitea release asset uploader and switch release workflow to use it; bump package and daemon versions to 0.3.4

2026-01-09 - 0.3.2 - fix(release)

bump package and daemon to v0.3.1, add project README, and fix Gitea release upload flag

2026-01-09 - 0.3.0 - feat(daemon)

add automatic update mechanism (Updater), switch to system journal logs, and expose update controls in the UI

2026-01-09 - 0.2.1 - fix(ci)

use GitHub Actions workspace for docker volume and add listing of build output directory for debugging

2026-01-09 - 0.2.0 - feat(daemon)

add serial console reader and UI tab for serial logs; add version propagation and CI/release workflows

2026-01-09 - 0.1.1 - initial project setup & minor update

Consolidated initial project creation and a follow-up update into the initial release (0.1.1).