pgs.sh

A zero-install static site hosting service for hackers


NOTICE: This is a premium pico+ service with a free trial

# Features

# Publish your site with one command

When your site is ready to be published, copy the files to our server with a familiar command:

1rsync -rv public/ pgs.sh:/myproj

That's it! There's no need to formally create a project, we create them on-the-fly. Further, we provide TLS for every project automatically.

# Manage your projects with a remote CLI

Use our CLI to manage projects:

1ssh pgs.sh help

# Instant promotion and rollback

Additionally you can setup a pipeline for promotion and rollbacks, which will instantly update your project.

1ssh pgs.sh link project-prod project-d0131d4

A common way to perform promotions within pgs.sh is to setup CI/CD so every git push to main would trigger a build and create a new project based on the git commit hash (e.g. project-d0131d4).

This command will create a symbolic link from project-prod to project-d0131d4. Want to rollback a release? Just change the link for project-prod to a previous project.

We also built a github action that handles all the logic for uploading to pgs.sh. Here's an example of it in action.

# CLI Reference

The best way to learn about all the commands we support is via an SSH command:

1ssh pgs.sh help

Having said that, we do want to demonstrate the power of pgs.sh by discussing design goals. All of our SSH commands are safe-by-default. Meaning, they never mutate server state by default. This provides users an opportunity to experiment with our commands to see how they work. In order to actually trigger server mutations, every command must be appended with --write.

Further, we want to make sure users are able to manage their static sites exclusively from SSH commands. Below is list of features we support via SSH commands:

 1# storage usage stats
 2ssh pgs.sh stats
 3
 4# list all projects (and their links)
 5ssh pgs.sh ls
 6
 7# list all project dependencies
 8ssh pgs.sh depends project-x
 9
10# link a project (e.g. folder symlink)
11ssh pgs.sh link project-x --to project-y
12
13# unlink a project
14ssh pgs.sh unlink project-x
15
16# delete a project
17ssh pgs.sh rm project-x
18
19# delete all projects matching a prefix
20# (except projects that have linked projects)
21ssh pgs.sh prune prefix
22
23# delete all projects matching a prefix
24# except the last (3) recently updated projects
25ssh pgs.sh retain prefix
26
27# set project to private to only you and matching public keys
28ssh pgs.sh acl project-x --type pubkeys --acl sha256:xxx

# What file types are supported?

html
htm
css
js
jpg
png
gif
webp
svg
ico
pdf
json
txt
otf
ttf
woff
woff2
md
rss
xml
atom
map
webmanifest

# Access Control List

Thanks to SSH tunnels we can provide restricted access to projects.

We have three options:

 1# access to anyone with a public key
 2ssh pgs.sh acl project-x --type pubkeys 
 3
 4# access only to public keys provided
 5ssh pgs.sh acl project-x --type pubkeys --acl sha256:xxx --acl sha256:yyy
 6
 7# access to anyone with a pico account
 8ssh pgs.sh acl project-x --type pico
 9
10# access only to pico users provided
11ssh pgs.sh acl project-x --type pico --acl antonio --acl erock
12
13# access to anyone
14ssh pgs.sh acl project-x --type public

To connect to a private project:

1ssh -L 5000:localhost:80 -N hey-tunnels@pgs.sh

Then open your browser to http://localhost:5000

# Custom Domains

We have a very easy-to-setup guide on custom domains.

# Custom Redirects

We support custom redirects via a special file _redirects.

Read more about it at netflify.

# Custom Headers

We support custom headers via a special file _headers.

Read more about it at netlify.

# Single-Page Applications

We support SPAs! Upload a _redirects file to your project:

/*  /index.html  200

# Reserved username project

If you create a project with the same name as your username, then you can access it at:

1rsync -rv public/ glossy@pgs.sh:/glossy
2# => https://glossy.pgs.sh

# Content security policy

For pico domains we have modestly strict content-security policies.

1Content-Security-Policy "default-src 'self'; img-src * 'unsafe-inline'; style-src * 'unsafe-inline'"

If you need to access sites that are blocked by this CSP, then you can use a custom domain which won't have those security restrictions.

# Ready to join pico?

Create an account using only your SSH key.

Get Started
<< PREV
Custom domains
NEXT >>
tuns.sh
Home
Sitemap
Getting started
How it works
File uploads
Custom domains
pgs.sh
tuns.sh
imgs.sh
prose.sh
pastes.sh
feeds.sh
Images
IRC
API Tokens
FAQ
Lab
Plain text lists
About us
Abuse
Operations
Privacy policy