diff --git a/roles/gitea/tasks/Linux.yaml b/roles/gitea/tasks/Linux.yaml
new file mode 100644
index 0000000..c272511
--- /dev/null
+++ b/roles/gitea/tasks/Linux.yaml
@@ -0,0 +1,49 @@
+---
+- name: stat tea executable
+  stat:
+    path: '{{tea_package_exe}}'
+  register: tea
+
+- name: get installed version
+  when: tea.stat.exists
+  command: '{{tea_package_exe}} --version'
+  register: tea_version_string
+
+- name: extract version number
+  when: tea.stat.exists
+  set_fact:
+    installed_version: "{{tea_version_string.stdout |
+      regex_search('^.*(\\d+\\.\\d+\\.\\d+).*golang.*$', '\\1') }}"
+
+- name: get latest release json
+  uri:
+    url: https://gitea.com/api/v1/repos/gitea/tea//releases/latest
+  register: latest
+
+- name: check installed version
+  set_fact:
+    install_required: >
+      {{not tea.stat.exists or latest.json.name != 'v' + installed_version[0]}}
+    asset: '{{latest.json.assets | json_query(tea_asset_query)}}'
+
+- name: create package directory
+  when: install_required
+  become: true
+  file:
+    state: directory
+    path: '{{tea_package_dir}}/bin'
+
+- name: download package
+  when: install_required
+  become: true
+  get_url:
+    url: '{{asset.browser_download_url}}'
+    dest: '{{tea_package_exe}}'
+    mode: '0755'
+
+- name: install package
+  when: install_required
+  become: true
+  command:
+    cmd: 'stow --target /usr/local .'
+    chdir: '{{tea_package_dir}}'
diff --git a/roles/gitea/tasks/main.yaml b/roles/gitea/tasks/main.yaml
new file mode 100644
index 0000000..f52a6ae
--- /dev/null
+++ b/roles/gitea/tasks/main.yaml
@@ -0,0 +1,12 @@
+---
+- when: ansible_os_family != 'Darwin' and ansible_os_family != 'Windows'
+  include_tasks: Linux.yaml
+
+- when: ansible_os_family == 'Windows'
+  include_tasks: Windows.yaml
+
+- name: install homebrew package
+  when: ansible_os_family == 'Darwin'
+  homebrew:
+    name: tea
+    state: latest
diff --git a/roles/gitea/vars/main.yaml b/roles/gitea/vars/main.yaml
new file mode 100644
index 0000000..96dc73f
--- /dev/null
+++ b/roles/gitea/vars/main.yaml
@@ -0,0 +1,4 @@
+---
+tea_package_dir: /usr/local/stow/tea
+tea_package_exe: '{{tea_package_dir}}/bin/tea'
+tea_asset_query: '[?contains(name, `tea-`)] | [?contains(name, `linux-amd64`)] | [0]'