ShellRS
ShellRS is a free, open-source SSH client written in Rust: host management, terminals, WinSCP-style SFTP and port forwarding in one GPU-rendered window, for macOS, Windows and Linux.
Run your own control plane, MQTT data plane, and operator console. Enroll Linux devices, stream status over TLS MQTT, and keep identity and policy on infrastructure you operate.
Developer toolsPython · TypeScriptGitHub @meteor-edgeOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Self-hosted, open-source (Apache 2.0) fleet management for Linux edge devices: deploy, monitor, update, and reach devices via WireGuard and browser SSH.
Loading the full README.
Read the full README ↗Self-hosted fleet platform for Linux devices.
MeteorCloud is the control plane, operator console, MQTT data plane, and device agent for managing edge fleets you own. Enroll devices, organize them by type and group, ship artifacts, run commands over MQTT, and keep operator access multi-tenant and auditable — without sending device data to a third-party SaaS.
Website: meteor-edge.com
| You host it | Docker Compose on a VM/EC2, or Helm on a cluster you already run |
| Multi-tenant | Organizations, memberships, RBAC, and optional device-group scopes |
| Device lifecycle | Registration tokens, device-initiated enrollment, heartbeat, inventory |
| MQTT-ready | TLS broker (EMQX), per-device credentials, ACL, ingest, live telemetry |
| Artifacts | OS images, firmware, compose bundles — metadata in Postgres, blobs in filesystem or S3 |
| Replaceable infra | PostgreSQL required; Redis, MQTT, and object storage selected by config |
MeteorCloud is split into three planes. The console is the operator UI; it talks only to the control plane.
| Plane | Path | Role |
|---|---|---|
| Device plane | src/device-plane/agent/ | meteorcli on the device: enroll, heartbeat, inventory, MQTT client |
| Data plane | src/data-plane/ | Platform MQTT gateway: subscribe/publish via EMQX, forward ingest to the control plane |
| Control plane | src/control-plane/ | Identity, tenancy, device registry, artifacts, MQTT policy, operator API, persistence |
┌─────────────────┐ ┌─────────────────┐ ┌──────────────────────┐
│ Device plane │ │ Data plane │ │ Control plane │
│ (meteorcli) │ │ (MQTT gateway) │ │ (API + Postgres) │
└────────┬────────┘ └────────┬────────┘ └──────────┬───────────┘
│ │ │
│ HTTPS enroll / │ │
│ heartbeat / auth ├────────────────────────►│
│────────────────────────────────────────────────►│
│ │ │
│ MQTT telemetry / │ HTTP ingest │
│ status ──► EMQX ────►│────────────────────────►│
│ │ │
│◄── MQTT commands ◄────│◄── HTTP publish ────────│
│ EMQX │ │
Device → cloud (typical path)
More detail: docs/architecture.md.
Compose on your machine. Not for production.
git clone https://github.com/meteor-edge/meteor-cloud.git
cd meteor-cloud
make dev
make seed # [email protected] / dev-password-123
| Surface | URL |
|---|---|
| Console | http://localhost:5173 |
| Control plane | http://localhost:8000 |
| OpenAPI | http://localhost:8000/docs |
| Data plane health | http://localhost:8081/health |
| MQTT TLS | mqtts://localhost:8883 |
| EMQX dashboard (dev) | http://localhost:18083 |
Choose bundled services with COMPOSE_PROFILES in deploy/compose/.env (postgres, redis, minio, mqtt, emqx). Start one module: make dev-control-plane, make dev-data-plane, make dev-console. Stop: make stop.
Kubernetes (local k3d + Helm):
make k8s-up && make k8s-deploy && make k8s-status
See docs/getting-started.md and docs/development.md.
On the server that will host MeteorCloud (on-prem VM or an existing EC2). Ansible installs Docker and starts production Compose (optional WireGuard).
# Ubuntu / Debian: sudo apt-get update && sudo apt-get install -y git make
# RHEL / Rocky / Alma: sudo dnf install -y git make
git clone https://github.com/meteor-edge/meteor-cloud.git
cd meteor-cloud
make up PLATFORM_DOMAIN=fleet.example.com
Create the printed DNS records (fleet.example.com, *.fleet.example.com,
vpn.fleet.example.com) and open https://fleet.example.com. Login and secrets
are printed at the end (~/.meteorcloud/secrets.env). Stop with make down.
Guide: docs/install-quickstart.md · docs/dns.md.
To create a new AWS EC2 from a laptop: make aws-up (docs/aws-deployment.md). Do not run make aws-up on the VM.
Two independent paths; same images and settings.
| Docker Compose + Ansible | Kubernetes + Helm | |
|---|---|---|
| For | One VM, EC2, or on-prem server | An existing cluster (k3s, GKE, EKS, AKS, …) |
| Files | deploy/compose/, deploy/ansible/ | deploy/kubernetes/helm/meteorcloud/ |
| Install | make up on the VM, or ansible-playbook playbooks/site.yml / make aws-up (new EC2) | helm upgrade --install |
| Guide | docs/deployment.md | docs/kubernetes.md |
MeteorCloud does not provision or manage Kubernetes clusters. The Helm chart installs into a cluster you already have. Ansible only prepares servers and runs Compose; it never deploys to Kubernetes. Terraform (infrastructure/terraform/aws) creates the AWS EC2 host for the Compose path.
On a VM you already have: clone, make up. To create a new AWS EC2 from a laptop, make aws-up (or edge-installer apply) runs Terraform then Ansible. Fresh-instance proof: GitHub Actions → EC2 smoke test (docs/aws-ci.md).
| Dependency | Status | Options |
|---|---|---|
| PostgreSQL | Required | Bundled container, or external |
| Artifact storage | Required | Filesystem volume, AWS S3, or any S3-compatible API |
| MQTT broker | Optional | Bundled or external EMQX; off by default |
| Redis | Optional | Shared rate limits across API replicas; in-memory otherwise |
| Kafka, ClickHouse | Not used | Not deployed |
The smallest install runs PostgreSQL, the API, the console, and a reverse proxy (Traefik with Compose, your ingress with Kubernetes).
├── src/
│ ├── control-plane/ # FastAPI (app.*), Dockerfile
│ ├── data-plane/ # MQTT gateway (data_plane.*), Dockerfile
│ └── device-plane/agent/ # meteorcli
├── console/ # operator UI, Dockerfile (nginx)
├── deploy/
│ ├── compose/ # Docker Compose files, .env.example
│ ├── ansible/ # server preparation + Compose deployment
│ └── kubernetes/helm/ # Helm chart
├── infrastructure/
│ ├── terraform/aws/ # EC2 host for the Compose path
│ └── installer/ # edge-installer (Terraform + Ansible on AWS)
├── contracts/ # HTTP JSON between planes
├── scripts/ # smoke tests, certificates, CI helpers
├── docs/
└── Makefile
Start with Getting started, then the full index: docs/README.md. Contributors: CONTRIBUTING.md. Coding agents: AGENTS.md.
| Doc | Topic |
|---|---|
| Getting started | Laptop: make dev + first device |
| Concepts | Three planes, orgs, devices |
| API overview | Control-plane HTTP map |
| meteorcli | Device CLI |
| Architecture | Planes, contracts, git vs deploy vs artifacts |
| Install quickstart | make up on a VM; make aws-up for a new EC2 |
| Deployment · Kubernetes | Production install |
Website: meteor-edge.com.
Copyright © Meteor Edge contributors.
Licensed under the Apache License, Version 2.0.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.