4 Surprising uses for GitHub as a cloud datastore
Tags: github, webdev
Published: 2022-10-13 21:17:49

---
title: 4 Surprising uses for GitHub as a cloud datastore
published: true
date: 2022-10-14 17:12:33 UTC
tags: #github #webdev
canonical_url: https://www.darraghoriordan.com/2022/10/14/surprising-uses-for-github-as-a-datastore/
---

GitHub is a great place to store code. But it’s also a great place to store any data that you need backed up, versioned, accessible from anywhere and easy to use.

In this post I’ll show you some surprising uses for GitHub as a datastore like…

- as a comments system for a website
- as an operating system configuration management tool
- as a datastore for personal data management
- as a software update delivery platform
<!-- end excerpt -->
## Is it a good idea to use GitHub as a datastore?

The tools I’m going to show you are all free and are built in a way to use Guthub as their primary datastore.

This is a “parasitic” use of Github and the usage could be banned in the future but they seem to be supportive of these kinds of uses as long as you don’t abuse them too much.

There are examples of accounts that have heavily used the github apis but because they provide utility to the tech community they are generally left alone.

Check out this post about how Github worked with CocoaPods when they were maxing out 5 CPUs on a server and using terabytes of Github’s data: [https://github.com/CocoaPods/CocoaPods/issues/4989#issuecomment-193772935](https://github.com/CocoaPods/CocoaPods/issues/4989#issuecomment-193772935) - the Github team went out of their way to help them!

## Limitations of GitHub as a datastore

One of the only limitations in using GitHub as a datastore is the file size limitation. The maximum file size is 100MB. This is fine for most use cases. But if you need to store large files you can use a service like S3 or Azure Blob Storage.

The seconds major limitation is the api request limit. On Github you’re limited to 1,000 requests per hour per repository. Personal tools are unlikely to hit this limit. But if you’re building a tool that is used by thousands of people Github may not be suitable.

## Github as a comments system for a website

This blog uses utterences as a comments system. You can see it if you scroll right down to the bottom of the page (I prefer if people use twitter so I hide it).

[![Showing comments on my blog](https://www.darraghoriordan.com/static/b076001dce9c85a381b625d3daa49cbb/ec3e2/comments-on-blog.png "Showing comments on my blog")](/static/b076001dce9c85a381b625d3daa49cbb/ec3e2/comments-on-blog.png)
_Showing comments on my blog_

[Utterences](https://utteranc.es/) is a free and open source comments system that uses GitHub issues as its backend. That’s right, Github issues! Quite clever use of that api and you don’t have to pay for a service like Disqus.

[![Showing comments on github](https://www.darraghoriordan.com/static/ce31d7e06b27e73c6490267884b86601/d2c2a/comments-on-github.png "Showing comments on github")](/static/ce31d7e06b27e73c6490267884b86601/d2c2a/comments-on-github.png)
_Showing comments on github_

You can see exactly how I set utterences and github up on my Gatsby blog in this post: [How to add utterences to your gatsby blog](https://www.darraghoriordan.com/2022/10/01/how-to-add-utterances-comments-gatsby-typescript/)

In the time since utterences was built, Github added a community product called “Discussions” with a full api. So someone took utterences and made it work on the discussions API.

This is probably a much better api to use for comments on a blog. So if you’re thinking about using Github as a blog comments system today, use Giscus.

Get Giscus [here](https://github.com/giscus/giscus).

## Github as an operating system configuration management tool

If you’re a mac or linux user you have “dotfiles” that are used to configure how your operating system works for you. The dotfiles live in your home directory and they’re called dotfiles because they usually start with a `.`.

A file or folder that starts with a `.` is usually hidden by default in apps like Finder on Mac or `ls` in a terminal. This is handy because you don’t want to see all the files that are used to configure your operating system. They don’t change very often and would clutter up your view.

Use `Command + Shift + .` to show hidden files in Finder on Mac or `ls -a` on cli.

[![Showing hidden files](https://www.darraghoriordan.com/static/e463939c623492e013d96e9108d2314e/bde6a/dotfiles-cli.png "Showing hidden files")](/static/e463939c623492e013d96e9108d2314e/bde6a/dotfiles-cli.png)
_Showing hidden files_

Now if all of your configuration for how the computer works, looks and feels to use are stored in files - what happens if you need to reinstall your operating system? Or if you have 2 computers and you want to sync your configuration between them? You’ll lose all your configuration and have to start from scratch. 

This is where dotfiles come in. You can store your configuration in a git repository and then you can sync it between computers. You can also use it to backup your configuration and restore it if you need to reinstall your operating system.

Homeshick is a tool that uses Github as a datastore for your dotfiles. You can make a change to dotfiles on one system, commit it to Github and then homeshick will periodically check for changes and sync them to your other systems.

[![Showing homeshick in action](https://www.darraghoriordan.com/static/26028c10dd2d3483278e357aabf66368/fa5c1/homeshick.png "Showing homeshick in action")](/static/26028c10dd2d3483278e357aabf66368/fa5c1/homeshick.png)
_Showing homeshick in action_

You can see how I configure homeshick and github in this post: [Consistent modern shell tooling on MacOS and Windows WSL](https://www.darraghoriordan.com/2022/01/28/developer-shell-modern-bat-fzf-antigen-zsh-wsl-mac/)

## Github as a datastore for personal data management

If you’re a developer and you take notes you might be interested in Obsidian - It’s like OneNote or Evernote but it’s based on markdown files. Obsidian has really nice tagging and linking between notes built in.

[![Showing obsidian](https://www.darraghoriordan.com/static/3e2378304315896e5dbdd0f4f57eca11/0012b/obsidian-md.png "Showing obsidian")](/static/3e2378304315896e5dbdd0f4f57eca11/0012b/obsidian-md.png)
_Showing obsidian_

Obsidian has a healthy plugin ecosystem and heaps of functionality like automatic importing of kindle notes, a trello board replacement, daily journaling helpers and more.

[![Showing obsidian](https://www.darraghoriordan.com/static/ee79983428b4e7604efd8ec18e45114f/58bb7/obsidian-trello.png "Showing obsidian")](/static/ee79983428b4e7604efd8ec18e45114f/58bb7/obsidian-trello.png)
_Showing obsidian_

Obsidian is available for Mac, iOS, Windows and Android. To keep your markdown notes synchronised across all of your devices you need a service. Obsidian themselves provide a paid synch-service but there is an Obsidian Git plugin that uses Github as a datastore!

You can read more details about how I configure and use Obsidian on Github in this post: [Obsidian - A free personal data management system on windows, mac and mobile](https://www.darraghoriordan.com/2022/10/13/how-to-use-obsidian-as-personal-database-mobile-pc/)

## Github as a software update delivery platform

I’ve recently created a tool called Local Dev Tools. The application is a toolkit for developers so they don’t have to paste things like JWTs or JSON into random websites to convert or decode them.

Local Dev Tools my first native application in maybe 10 years and expectations for applications have changed quite a bit since the last time I compiled a native app.

Customers expect automatic updates to be applied when they run the app. The infrastructure required to host and deliver updates is a lot of work!

Update functionality is provided by the app stores for android, windows and mac but if you’re in the stores then you’re limited in monetization strategies, you have to adhere to their policies and have to use their store fronts.

While I’m also deploying the apps to the various app stores, I decided to use Github as a datastore for my updates for anyone who purchases the application from [Gumroad](https://devshell.darraghoriordan.com/l/localtools).

If you use Github actions you can create a workflow that will build your application and upload it to Github as a release. Then you can use the Github API to check for new releases and download them.

Nuts is a simple tool that monitors a Github release stream for updates and turns it into an RSS file that’s compatible with electron updater (and `squirrel` delivery).

[![Showing nuts in action](https://www.darraghoriordan.com/static/eb16095102540f7b5bb5c662be573d4a/cecac/nuts.png "Showing nuts in action")](/static/eb16095102540f7b5bb5c662be573d4a/cecac/nuts.png)
_Showing nuts in action_

So once you have semantic releases publishing your assets on Github you can run a nuts server and use it to deliver updates to your application.

You can get nuts at [https://github.com/GitbookIO/nuts](https://github.com/GitbookIO/nuts)

## Not surprising but worth mentioning - Github as a host for your personal website

Just in case you haven’t heard of it. Github pages is a product provided by Github that allows you to host a static website for free as an alternative to Netlify. You can use it to host a blog, a portfolio or a landing page for your business.

The benefits are a very close integration with Github and the ability to use Github actions to build and deploy your website.

Check out their product page here: [https://pages.github.com/](https://pages.github.com/)

You can deploy Gatsby sites to github pages

[https://www.gatsbyjs.com/docs/how-to/previews-deploys-hosting/how-gatsby-works-with-github-pages/](https://www.gatsbyjs.com/docs/how-to/previews-deploys-hosting/how-gatsby-works-with-github-pages/)