OliveTin

Give safe and simple access to predefined shell commands from a web interface.

See it in action more with some OliveTin demo videos on YouTube.

Easily turn shell commands into buttons

Define an action in config, refresh the UI, and you get a clickable button — no admin panels required.

actions:
  - title: Restart Media Server
    icon: restart
    shell: echo "Restarting media server..."
OliveTin Actions page showing a restart button generated from YAML

Docs: create your first action

Safe access for less technical people (or AI agents)

Give family or junior admins a short list of approved buttons — not SSH, not a shell.

OliveTin Actions page with a short list of approved buttons for non-admin users
What non-admins see: a few clear actions, nothing else.
  • eg: Give your family a button to systemctl restart media-server
  • eg: Give junior admins a simple web form with dropdowns, to start your custom script. backupScript.sh --folder {{ customerName }}
  • eg: Enable SSH access to the server for the next 20 mins firewall-cmd --add-service ssh --timeout 20m

The same model helps with AI agents: instead of open-ended shell access, an agent only gets the actions you publish. That makes behaviour easier to reason about, and every run is logged — who (or what) started it, with which arguments, and what came back — for transparency and auditability.

Docs: access control lists

See what ran

Every execution has output, status, and history you can open again later.

OliveTin execution results showing completed disk space check output
Command output in the browser — copyable, searchable in logs.

Docs: logs

Control arguments with forms

Typed arguments turn command-line options into dropdowns and validated fields.

OliveTin argument form for Ping host with host dropdown and count field
Users pick a host and count — OliveTin builds the command safely.

Docs: arguments

OliveTin only uses shell or exec

It is deliberately lightweight. This makes it agnostic, and portable across tiny ARM and RISC devices up to Linux VMs and Containers, macOS, Windows, and more. There is no plugin system, no extension marketplace, and no built in support for any automation tool or automation system.

If a program is installed on the host (or reachable over SSH), OliveTin can run it. Your existing scripts, CLIs, and services stay the source of truth — OliveTin is the safe front door, not another stack that reimplements them.

  • No waiting for an official integration or community plugin for the tool you already use
  • No heavyweight platform layer that tries to own every workflow
  • Fewer moving parts: a small binary, YAML config, and the commands you choose

OliveTin stays flexible because it only uses primitives. Anything your shell can run, it can turn into a button, webhook, cron job, event or similar.

Docs: shell vs exec

Login in almost any way

OliveTin supports several login options — from simple local users to OAuth2, JWT, and reverse-proxy trusted headers.

OliveTin login page with local username and password fields
Local login is one option — plug in the auth that already fits your setup.

Docs: security concepts

Same app, different permissions

Access Control Lists decide who can view or run each action.

Guest view of OliveTin showing only a few allowed actions
Guest — only the buttons they are allowed.
Admin view of OliveTin showing many actions including reboot and backups
Admin — the full set of actions.

Docs: access control lists

Generate templated buttons based on lists of things

Entities are lists of things - in YAML or JSON format. You can generate actions from lists of servers, containers, people, folders, days of the week or any other things..

OliveTin Actions page with Ping and Wake buttons generated per host entity
Ping and Wake actions generated for each host in an entity file.

Docs: entities

Organize with dashboards

Group actions into folders and fieldsets so busy setups stay clear.

OliveTin dashboard with Media and Network sections
Media and Network sections instead of one long button grid.

Docs: dashboards

Execution based on…

Actions are not only started by clicking a button. OliveTin can also run them when something else happens.

OliveTin logs showing a nightly backup run on a cron schedule
Cron — scheduled runs show up in logs.
OliveTin logs showing an action triggered by a webhook
Webhooks — external systems can start actions too.

Docs: triggers

Remote commands over SSH

Buttons can run on other hosts — OliveTin stays the simple front door.

OliveTin actions for restarting a remote web server and checking uptime over SSH

Docs: SSH (easy setup)

From a phone or wall tablet

Simplify complex or long-running commands and put them where people already are.

OliveTin mobile layout with home and server actions as large touch buttons
  • eg: Expose complex commands on touchscreen tablets stuck on walls around your house. wake-on-lan aa:bb:cc:11:22:33
  • eg: Run long-lived commands on your servers from your cell phone. apt update && apt upgrade -y
  • eg: Define complex commands with lots of preset arguments, and turn a few arguments into dropdown select boxes.

Docs: action examples

Configuration Example

YAML - Configuration as code, rather than configuration via a million little options in an admin panel :-)

# Listen on all addresses available, port 1337
listenAddressSingleHTTPFrontend: 0.0.0.0:1337

# Choose from INFO (default), WARN and DEBUG
logLevel: "INFO"

# Actions (buttons) to show up on the WebUI:
actions:
  # Docs: https://docs.olivetin.app/solutions/container-control-panel/index.html
- title: Restart Media Server
  icon: restart
  shell: systemctl restart media-server

  # This will send 1 ping
  # Docs: https://docs.olivetin.app/action_examples/ping.html
- title: Ping host
  shell: ping {{ host }} -c {{ count }}
  icon: ping
  arguments:
	- name: host
	  title: host
	  type: ascii_identifier
	  default: example.com

	- name: count
	  title: Count
	  type: int
	  default: 1

  # Restart the web server on host "webserver1"
  # Docs: https://docs.olivetin.app/action_examples/ssh-easy.html
- title: Restart web server
  icon: restart
  shell: ssh root@webserver1 'systemctl restart web-server'

Find out all about how to configure OliveTin in the Configuration section of the documentation.

Installation

Installation instructions can be found on the OliveTin installation documentation page.

OliveTin with a single Say Hello World action after a minimal install
From zero to a working button — start with Hello World, then grow the config.

Open Source & No Nonsense

This project is open source, and feature requests, bugs, security issues and similar can all be raised via the OliveTin new issue page in the OliveTin GitHub repository.

Contributions to documentation, code, and other parts of the project are most welcome. You can find the contribution guidelines in the repository.

  • All code and assets are Open Source (AGPL) and free software.
  • No company is paying for development, donations & sponsorship are not accepted.
  • No separate core and premium, plus or pro version. No paid-for extra features or plugins.
  • No SaaS service or "special cloud version".
  • No "anonymous data collection", usage tracking, user tracking, telemetry or email address collection. (Note: Update checks in versions prior to 2024.06.02 could be considered unwanted tracking. These were completly removed.).
  • No requests for reviews in any "app store" or feedback surveys.
  • No prompts to "upgrade to the latest version".
  • No internet-connection required for any functionality.