Metadata-Version: 2.4
Name: gem2browser
Version: 3.1
Summary: A web client for Gemini!
Author-email: Swee <meow@swee.codes>
License: MIT
Project-URL: Homepage, https://swee.codes/apps/gem2browser
Project-URL: Repository, https://git.swee.codes/swee/Gem2Browser
Project-URL: Issues, https://git.swee.codes/swee/Gem2Browser/issues
Project-URL: Changelog, https://git.swee.codes/swee/Gem2Browser/releases
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: flask
Requires-Dist: pyOpenSSL
Dynamic: license-file

![](https://cdn.swee.codes/software/gem2browser.svg)

# Gem2Browser
> "Take the web by storm."

A Gemini relay for HTTP using Python flask

# Features

* Browses all of Gemini Space!
* Includes Titan editor
* Client certificate support
  * In versions 3.0 and newer, it does not store certificates in the server.

# Requirements

* Python 3
  * Flask
  * Gunicorn (or any other flask compatible WSGI)
  * PyOpenSSL

# Installation

## Docker Compose

Use this `docker-compose.yml`

```yml
services:
  gem2browser:
    image: git.swee.codes/swee/gem2browser:latest
    restart: unless-stopped
    ports:
      - 2009:2009/tcp
```

## On your host

```bash
pip install gem2browser gunicorn
```

### Run server

#### WSGI server (recommended)

```bash
guicorn --bind 0.0.0.0:2009 gem2browser:app
```

#### Development server

```bash
python -m gem2browser
```

This listens on 127.0.0.1:2009

#### Service files

<details>
<summary>Systemd</summary>

```desktop
[Unit]
Description=Gem2Browser
After=network.target
Wants=network-online.target

[Service]
Type=simple
# User=g2b
ExecStart=/usr/bin/gunicorn --bind 0.0.0.0:2009 gem2browser:app
Restart=on-failure

[Install]
WantedBy=multi-user.target
```

</details>

<details>
<summary>OpenRC</summary>

```shell
#!/sbin/openrc-run

# command_user="g2b"
command="gunicorn"
command_args="--bind=0.0.0.0:2009 gem2browser:app"
command_background="yes"
pidfile="/run/$RC_SVCNAME.pid"
depend() {
        need net
        use dns
}
```

</details>

<details>
<summary>FreeBSD rc</summary>

```shell
#!/bin/sh

# PROVIDE: gem2browser
# REQUIRE: NETWORKING
# KEYWORD: shutdown

. /etc/rc.subr

name="gem2browser"
rcvar="gem2browser_enable"
start_precmd="gem2browser_precmd"
procname="/usr/local/bin/python3"
pidfile="/var/run/${name}.pid"

load_rc_config $name

: ${gem2browser_enable:="NO"}
# : ${gem2browser_user:="g2b"}

command="/usr/sbin/daemon"
command_args="-f -l daemon -s info -p ${pidfile} gunicorn --bind=0.0.0.0:2009 gem2browser:app"

gem2browser_precmd() {
        if [ ! -e "${pidfile}" ]; then
                install -o "${gem2browser_user}" -g "wheel" "/dev/null" "${pidfile}"
        fi
}

run_rc_command "$1"
```

</details>
