Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Tow Plugins (35)

Created by Murry Jeong (comchangs) · Supported by neurosam.AI

YAML-based module handler plugins for infrastructure services. Add support for any service without writing Go code.

How It Works

35 plugins are bundled in the tow binary — no separate installation needed. Just set the type:

# tow.yaml
modules:
  my-db:
    type: postgresql
    port: 5432

Community Plugins

Install plugins from GitHub repos or URLs:

# From GitHub repo
tow plugin add someuser/tow-plugin-mssql

# From GitHub repo with specific file path
tow plugin add myorg/infra-plugins/oracle.yaml

# From any URL
tow plugin add https://example.com/my-custom-service.yaml

# Remove
tow plugin remove mssql

# List all installed (bundled + external)
tow plugin list

Plugin Resolution Order

  1. Built-in handlers (Go code: java, springboot, node, python, etc.)
  2. Bundled plugins (embedded in binary: kafka, redis, mysql, etc.)
  3. ./plugins/ (project-level, committed to git)
  4. ~/.tow/plugins/ (global, installed via tow plugin add)

Databases (6)

Plugin Service Default Ver. Port Health Check
mysql MySQL relational database 8.4.3 3306 TCP
postgresql PostgreSQL relational database 16.6 5432 TCP
mariadb MariaDB relational database 11.4.4 3306 TCP
mongodb MongoDB document database 7.0.8 27017 Command
clickhouse ClickHouse analytics database 24.12.3 8123 HTTP /ping
influxdb InfluxDB time-series database 2.7.10 8086 HTTP /health
Example: PostgreSQL + MongoDB
modules:
  main-db:
    type: postgresql
    port: 5432
    data_dirs: [pgdata]
    health_check:
      type: tcp
      timeout: 30

  doc-store:
    type: mongodb
    port: 27017
    data_dirs: [data/db, data/log]

Message Brokers & Streaming (3)

Plugin Service Default Ver. Port Health Check
kafka Apache Kafka event streaming 3.7.0 9092 TCP
rabbitmq RabbitMQ message broker 3.13.1 5672 TCP
zookeeper Apache ZooKeeper coordination 3.9.2 2181 TCP
Example: Kafka + ZooKeeper cluster
modules:
  zookeeper:
    type: zookeeper
    port: 2181
    data_dirs: [data]

  kafka:
    type: kafka
    port: 9092
    data_dirs: [data/kafka-logs]

environments:
  prod:
    servers:
      - number: 1
        host: ${BROKER_1}
        modules: [zookeeper, kafka]
      - number: 2
        host: ${BROKER_2}
        modules: [zookeeper, kafka]
      - number: 3
        host: ${BROKER_3}
        modules: [zookeeper, kafka]

Kafka Ecosystem (3)

Plugin Service Default Ver. Port Health Check
kafka-connect Kafka Connect distributed mode 3.7.0 8083 HTTP /connectors
kafka-lag-exporter Kafka consumer lag monitoring 0.8.2 9999 TCP
kminion KMinion Kafka monitoring 2.2.3 8080 HTTP /ready
cmak Cluster Manager for Apache Kafka 3.0.0.6 9000 HTTP
Example: Full Kafka stack with monitoring
modules:
  kafka:
    type: kafka
    port: 9092
  kafka-connect:
    type: kafka-connect
    port: 8083
  kafka-lag:
    type: kafka-lag-exporter
    port: 9999
  kafka-ui:
    type: cmak
    port: 9000

Caching & Storage (4)

Plugin Service Default Ver. Port Health Check
redis Redis in-memory data store 7.2.4 6379 Command (redis-cli ping)
memcached Memcached distributed caching 1.6.32 11211 TCP
minio MinIO S3-compatible object storage latest 9000 HTTP /minio/health/live
etcd etcd distributed key-value store 3.5.17 2379 HTTP /health
Example: Redis cluster
modules:
  redis:
    type: redis
    port: 6379
    data_dirs: [data]

environments:
  prod:
    servers:
      - number: 1
        host: ${REDIS_1}
        modules: [redis]
      - number: 2
        host: ${REDIS_2}
        modules: [redis]
      - number: 3
        host: ${REDIS_3}
        modules: [redis]

Monitoring & Observability (4)

Plugin Service Default Ver. Port Health Check
prometheus Prometheus metrics collection 2.51.1 9090 HTTP /-/healthy
grafana Grafana visualization dashboard 10.4.1 3000 HTTP /api/health
node-exporter Prometheus node metrics exporter 1.7.0 9100 HTTP /metrics
kibana Kibana Elasticsearch visualization 8.17.0 5601 HTTP /api/status
Example: Full monitoring stack
modules:
  prometheus:
    type: prometheus
    port: 9090
  grafana:
    type: grafana
    port: 3000
    data_dirs: [data]
  node-exporter:
    type: node-exporter
    port: 9100

Log Management (5)

Plugin Service Default Ver. Port Health Check
elasticsearch Elasticsearch search engine 8.13.0 9200 HTTP /_cluster/health
logstash Logstash log pipeline 8.17.0 9600 HTTP
fluentd Fluentd log collector 1.17.1 24224 TCP
loki Grafana Loki log aggregation 2.9.4 3100 HTTP /ready
promtail Grafana Promtail log shipper 2.9.4 9080 HTTP /ready
Example: ELK vs Loki stack
# Option A: ELK stack
modules:
  elasticsearch:
    type: elasticsearch
    port: 9200
    data_dirs: [es-data]
  logstash:
    type: logstash
    port: 9600
  kibana:
    type: kibana
    port: 5601

# Option B: Grafana Loki stack
modules:
  loki:
    type: loki
    port: 3100
    data_dirs: [loki-data]
  promtail:
    type: promtail
    port: 9080
  grafana:
    type: grafana
    port: 3000

Web & Proxy (2)

Plugin Service Default Ver. Port Health Check
nginx Nginx web server / reverse proxy 1.25.4 80 HTTP
haproxy HAProxy load balancer 3.0.7 80 TCP

Security & Identity (3)

Plugin Service Default Ver. Port Health Check
vault HashiCorp Vault secrets management 1.18.3 8200 HTTP /v1/sys/health
consul HashiCorp Consul service mesh 1.20.2 8500 HTTP /v1/status/leader
keycloak Keycloak identity / SSO 26.0.7 8080 HTTP /health/ready
Example: Vault + Consul
modules:
  vault:
    type: vault
    port: 8200
    data_dirs: [vault-data]
  consul:
    type: consul
    port: 8500
    data_dirs: [consul-data]

CI/CD & DevOps (2)

Plugin Service Default Ver. Port Health Check
jenkins Jenkins CI/CD server 2.492 8080 HTTP /login
sonarqube SonarQube code quality 10.7.0 9000 HTTP /api/system/status

Data & Workflow (2)

Plugin Service Default Ver. Port Health Check
airflow Apache Airflow workflow orchestration 2.10.4 8080 HTTP /health
superset Apache Superset data visualization 4.1.1 8088 HTTP /health

Writing a Plugin

name: myservice
description: My custom service
version: "1.0.0"
author: Your Name

package:
  default_version: "2.0.0"
  url_template: "https://example.com/releases/{{VERSION}}/myservice-{{VERSION}}.tar.gz"
  versions:
    # Simple: just a URL (uses plugin-level commands)
    "2.0.0": "https://example.com/releases/2.0.0/myservice-2.0.0.tar.gz"

    # Full override: version-specific commands, provision, health check
    "1.8.0":
      url: "https://example.com/releases/1.8.0/myservice-1.8.0.tar.gz"
      start_cmd: "{{BASE_DIR}}/current/myservice-1.8.0/bin/start --port {{PORT}}"
      stop_cmd: "{{BASE_DIR}}/current/myservice-1.8.0/bin/stop"
      provision:
        packages: [libssl1.1]    # older version needs older lib
      health_check:
        type: tcp                 # v1.x had no HTTP health endpoint
        timeout: 30

# Fallback commands (used when version has no override)
start_cmd: "{{BASE_DIR}}/current/bin/myservice --port {{PORT}}"
stop_cmd: "kill $(cat {{BASE_DIR}}/myservice.pid) 2>/dev/null || true"
status_cmd: "curl -sf http://localhost:{{PORT}}/health"

artifact_path: "external-package/myservice.tar.gz"
package_includes: [bin/, config/, lib/]

health_check:
  type: http
  target: "http://localhost:{{PORT}}/health"
  timeout: 60

provision:
  packages: [libssl-dev]
  directories: ["{{BASE_DIR}}/data"]
  commands: ["sysctl -w vm.max_map_count=262144 2>/dev/null || true"]

data_dirs: [data]
log_file: "myservice.log"

Publishing Your Own Plugin

Option A: GitHub Repository (recommended)

  1. Create a repo (e.g., myuser/tow-plugin-oracle)
  2. Add oracle.yaml following the schema above
  3. Users install with: tow plugin add myuser/tow-plugin-oracle

Convention: name the repo tow-plugin-{service} — tow will automatically look for {service}.yaml in the repo root.

Option B: Submit to bundled collection

  1. Create a YAML file following the schema above
  2. Test: tow validate && tow provision && tow deploy
  3. Submit a PR to neurosamAI/tow-cli

Accepted plugins are bundled in the next release and available to all users without installation.