What's the deal with shipusercontent.com?

Shipusercontent.com is our file attachment hosting service. When you attach a screenshot or other file in Ship, that's where it goes. GitHub does not provide an attachment hosting service as part of their API, so it is necessary for us to host our own.

We occasionally get emails from users that go like this:

I'm worried about the files I attach to my issue bodies and comments. If you go out of business, I will lose data!

I want to assure people that this isn't going to happen. Even if we went out of business tomorrow, we could still afford to continue hosting all of the attachments at shipusercontent.com for quite some time. In fact, we fully intend to host any uploaded attachment for at least 10 years after its upload date.

How can we guarantee this? I'll let you in on a little secret: shipusercontent.com costs peanuts to run. Here's the breakdown of what it costs us to run shipusercontent.com in one month:

  • shipusercontent.com domain name registration: $1 (billed $12 annually)
  • Bandwidth (AWS Cloudfront): ~$1
  • Storage on disk (S3): $0.38
  • AWS Lambda / API Gateway: $0.02
  • DNS (Route 53): $0.15
  • SSL certificate (managed by AWS): $0

Why is it so cheap? First, attachments aren't really all that common. Second, when people do upload attachments, they're generally small. Third, as you can see in the price list above, the design of the attachment service makes efficient use of Amazon Web Services. When you upload an attachment, Ship.app first makes a request to an AWS Lambda which generates an unguessable URL for the attachment to live at, and then returns a unique pre-signed upload URL for the client to actually do an HTTP PUT to store the attachment bytes. The client does that and the attachment lands straight in Amazon S3. Attachment downloads are done via AWS Cloudfront, which is very cost effective and makes things fast for frequently viewed attachments (imagine an attachment in a widely viewed issue in a popular public repository). Cloudfront also makes it free and easy to handle SSL termination.

TL;DR: Take advantage of attachment uploading in Ship. It's more flexible and convenient than GitHub's web uploader, and it's not going to go anywhere.