Skip to content
Continuous Delivery of static websites to IPFS
Python Dockerfile Shell
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
publish Fixing listening for repo's events only for specific ref Feb 28, 2019
tests Dropping republisher service as IPFS daemon already supports this fea… Feb 8, 2019
.dockerignore Docker support Feb 13, 2019
.editorconfig Basic structure Jan 23, 2019
.gitignore Basic test coverage of the crucial parts Feb 7, 2019
.pyup.yml Basic structure Jan 23, 2019
.travis.yml Basic structure Jan 23, 2019 Basic structure Jan 23, 2019
Dockerfile Fixing Dockerfile Feb 27, 2019
LICENSE Initial commit Jan 22, 2019 Migrating from to Mar 12, 2019 Docker support Feb 13, 2019
docker-compose.yaml Docker support Feb 13, 2019
mkdocs.yml Migrating from to Mar 12, 2019
pytest.ini Basic test coverage of the crucial parts Feb 7, 2019
requirements.txt Updating dependcies versions Feb 13, 2019
setup.cfg Migrating from to Mar 12, 2019 Basic structure Jan 23, 2019 Improving code quality Feb 27, 2019
test-requirements.txt Updating dependcies versions Feb 13, 2019

IPFS Publish


PyPI version PyPI - Python Version PyPI - Downloads Docker Hub - Pulls codecov Codacy Badge Updates

Continuous Delivery of static websites from Git to IPFS


This is a tool that aims to enable automatic publishing of static webpages from Git repositories into IPFS. It consists of two parts: small web server and management CLI.

Web server exposes an endpoint which you use as your Git's webhook. When the hook is invoked, it clones your repo, build it (if needed), add it to the IPFS node (pin it if configured) and publish the new IPFS address under configured IPNS name.

CLI is in place to manage the repos.


  • Ignore files - .ipfs_publish_ignore file specify entries that should be removed before adding the repo to IPFS
  • Publish directory - you can publish only specific sub-directory inside the repo
  • Publish specific branch - you can specify which branch should be published from the repo
  • Build script - before adding to IPFS you can run script/binary inside the cloned repo
  • After publish script - after the publishing to IPFS, this script is run with argument of the created IPFS address

Git providers

Currently the webhook supports generic mode, where the repo's secret is passed through as URL's parameter.

There is also special mode for GitHub, where the secret should be configured as part of the Webhook's configuration.


This tool is not meant as public service and only trusted Git repos should be used with it. It can introduce serious security risk into your system as the runtime environment for the scripts is not isolated from rest of your machine!



  • Python 3.7 and higher
  • Git
  • go-ipfs daemon
  • UNIX-Like machine with public IP


You can install ipfs-publish directly on your machine using pip:

$ pip install ipfs-publish

Then you can use the command ipfs-publish to manage your repos and/or start the webhook's server.


There is official Docker image build with name: auhau/ipfs-publish

Easiest way to run ipfs-publish is with docker-compose. Here is example for its configuration:

version: '3'

    image: ipfs/go-ipfs:v0.4.18
      - /data/ipfs # or you can mount it directly to some directory on your system
    image: auhau/ipfs-publish
      IPFS_PUBLISH_CONFIG: /data/ipfs_publish/config.toml
      - /data/ipfs_publish
      - ipfs
      - 8080:8000

For more information see documentation.


# Add new repo
$ ipfs-publish add
[?] Git URL of the repo:
[?] Name of the new repo: github_com_auhau_auhau_github_io
[?] Do you want to publish to IPNS? (Y/n):
[?] Path to build binary, if you want to do some pre-processing before publishing:
[?] Path to after-publish binary, if you want to do some actions after publishing:
[?] Directory to be published inside the repo. Path related to the root of the repo: /

Successfully added new repo!
Use this URL for you webhook: http://localhost:8080/publish/github_com_auhau_auhau_github_io
Also set this string as your hook's Secret: NIHT4785CVFT358GFE08RDAZG
Your IPNS address: /ipns/QmRTqaW3AJJXmKyiNT7MqqZ4VjGtNNxPyTkgo3Q7pmoCeX/

# List current enabled repos
$ ipfs-publish list

# Show details of repo
$ ipfs-publish show github_com_auhau_auhau_github_io
Git URL:
IPNS key: ipfs_publishg_github_com_auhau_auhau_github_io
IPNS lifetime: 24h
IPNS ttl: 15m
IPNS address: /ipns/QmRTqaW3AJJXmKyiNT7MqqZ4VjGtNNxPyTkgo3Q7pmoCeX/
Last IPFS address: None
Webhook address: http://localhost:8080/publish/github_com_auhau_auhau_github_io

# You can manually publish repo
$ ipfs-publish publish github_com_auhau_auhau_github_io

# Starts HTTP server & IPNS republishing service
$ ipfs-publish server &
Running on http://localhost:8080 (CTRL + C to quit)


Feel free to dive in, contributions are welcomed! Open an issue or submit PRs.

For PRs and tips about development please see contribution guideline.


MIT © Adam Uhlir

You can’t perform that action at this time.