We wanted a simple server for sending and receiving messages (in real time per web socket). For this, not many open source projects existed and most of the existing ones were abandoned. Also, a requirement was that it can be self-hosted. We know there are many free and commercial push services out there.
- REST-API for
- sending messages
- receiving messages per websocket
- user management
- client/device & application management
- REST-API Documentation (also available at
Google Play and the Google Play logo are trademarks of Google LLC.
The docker image is available on docker hub at gotify/server.
$ docker run -p 80:80 gotify/server
Also there is a specific docker image for arm-7 processors (raspberry pi), named gotify/server-arm7.
$ docker run -p 80:80 gotify/server-arm7
Visit the releases page and download the zip for your OS.
server: port: 80 # the port for the http server ssl: enabled: false # if https should be enabled redirecttohttps: true # redirect to https if site is accessed by http port: 443 # the https port certfile: # the cert file (leave empty when using letsencrypt) certkey: # the cert key (leave empty when using letsencrypt) letsencrypt: enabled: false # if the certificate should be requested from letsencrypt accepttos: false # if you accept the tos from letsencrypt cache: data/certs # the directory of the cache from letsencrypt hosts: # the hosts for which letsencrypt should request certificates - mydomain.tld - myotherdomain.tld database: # for database see (configure database section) dialect: sqlite3 connection: data/gotify.db defaultuser: # on database creation, gotify creates an admin user name: admin # the username of the default user pass: admin # the password of the default user passstrength: 10 # the bcrypt password strength (higher = better but also slower) uploadedimagesdir: data/images # the directory for storing uploaded images
GOTIFY_SERVER_PORT=80 GOTIFY_SERVER_SSL_ENABLED=false GOTIFY_SERVER_SSL_REDIRECTTOHTTPS=true GOTIFY_SERVER_SSL_PORT=443 GOTIFY_SERVER_SSL_CERTFILE= GOTIFY_SERVER_SSL_CERTKEY= GOTIFY_SERVER_SSL_LETSENCRYPT_ENABLED=false GOTIFY_SERVER_SSL_LETSENCRYPT_ACCEPTTOS=false GOTIFY_SERVER_SSL_LETSENCRYPT_CACHE=certs # lists are a little weird but do-able (: GOTIFY_SERVER_SSL_LETSENCRYPT_HOSTS=- mydomain.tld\n- myotherdomain.tld GOTIFY_DATABASE_DIALECT=sqlite3 GOTIFY_DATABASE_CONNECTION=gotify.db GOTIFY_DEFAULTUSER_NAME=admin GOTIFY_DEFAULTUSER_PASS=admin GOTIFY_PASSSTRENGTH=10 GOTIFY_UPLOADEDIMAGESDIR=images
Add Message Examples
You can obtain an application-token from the apps tab inside the UI or using the REST-API (
NOTE: Assuming Gotify is running on
curl -X POST "http://localhost:8008/message?token=<token-from-application>" -F "title=My Title" -F "message=This is my message"
Setup Dev Environment
Download go dependencies with golang/dep.
$ dep ensure
Run golang server.
$ go run app.go
Commands must be executed inside the ui directory.
Download dependencies with npm.
$ npm install
Star the UI development server.
$ npm start
http://localhost:3000 inside your favorite browser.
The UI requires a Gotify server running on
localhost:80 this can be adjusted inside the ui/src/index.tsx.
$ go build app.go
$ npm run build
The project has a CGO reference (because of sqlite3), therefore a GCO cross compiler is needed for compiling for other platforms. See .travis.yml on how we do that.
The tests can be executed with:
$ make test # or $ go test ./...