# Haven: A Self-Hosted Private Blog with Invite-Only Access and Built-In RSS

> Haven is a Ruby on Rails application for private blogging with people you choose. It enforces invite-only access, ships with a built-in RSS reader, downscales images automatically, and runs without any JavaScript framework or ad tracker.

**havenweb/haven** — Self-hostable private blogging

- Repository: https://github.com/havenweb/haven
- Website: https://havenweb.org
- Stars: 805 · Forks: 48
- Language: Ruby
- License: MIT
- Published: 2026-09-10 · Updated: 2026-09-10 · Language: en
- Canonical page: https://hysenlabs.com/projects/havenweb-haven

## What Haven Is and Who Should Use It

Haven is a private blog application built on Ruby on Rails. The README describes its philosophy as privacy-first and designed for sharing with friends and family rather than commercial use. The access model is invite-only: the administrator creates accounts for specific people, and there is no self-signup path. This is a deliberate anti-spam and access-control design: only people the owner explicitly invites can read or contribute.

The README directly names the cases where Haven is not the right choice: if you want a blog for your company, it suggests WordPress or Ghost instead. Haven targets personal use, not content marketing, not monetized publishing, and not team-operated news sites. The live demo at havenweb.org/demo.html gives a hands-on preview of the interface before committing to a deployment.

Haven supports Markdown editing with live preview, images, videos, and audio. Images are automatically downscaled to reduce page load times. There are no JavaScript frameworks in the frontend and no advertising or tracking scripts.

## Getting Haven Running with Docker

The README describes Docker as the preferred installation method for Raspberry Pi and other Linux systems. The steps are:

```bash
git clone https://github.com/havenweb/haven.git
```

Then enter the directory and start the stack:

```bash
docker compose up
```

Haven listens on port 3000. The docker-compose.yml file in the repository configures two services: the Haven Rails application and a PostgreSQL 13.2 database. The environment variables HAVEN_USER_EMAIL and HAVEN_USER_PASS in the docker-compose.yml create the initial administrator account on startup. The README explicitly says to change those values before running.

The PostgreSQL service in the compose file is configured with non-default performance flags: synchronous_commit off, fsync off, and full_page_writes off. These settings favor write speed over crash safety, which is appropriate for a personal blog where the risk of data loss from a power interruption is acceptable. For a deployment where data durability is important, those flags should be reviewed.

Docker images are published to the GitHub Container Registry at ghcr.io/havenweb/haven. If you prefer a pre-built image rather than building from source, the deploymentscripts/ directory contains a standalone docker-compose.yml that pulls the pre-built image.

## Other Deployment Paths: PikaPods, AWS, and Heroku

PikaPods is the managed hosting option the README highlights first. The README states it costs as little as $2.40 per month to run Haven on PikaPods and that new members receive a $5 credit without needing a credit card, making it a low-barrier trial option.

Caliber Node is a second managed hosting option listed at $4 per month with a $5 sign-up credit. The README describes it as providing one-click self-hosted apps with real logs, SFTP access, and exportable data.

Fully managed hosting from the project's own author is also available at havenweb.org/order.html.

The AWS path uses a deployment script in the deploymentscripts/ folder. You need an AWS account, a domain purchased through Route 53, and AWS credentials configured locally. Running the script:

```bash
ruby deploy-aws.rb <domain> "<email>"
```

Deploys to an EC2 instance and configures HTTPS. The README says deployment can take 20 minutes. A cleanup script undoes the deployment:

```bash
ruby cleanup-aws.rb <domain>
```

The Heroku path uses a one-click deploy template but comes with an important limitation documented in the README: images uploaded to a Heroku Haven instance typically disappear within 24 hours because Heroku does not provide persistent local storage. The README also notes that Heroku eliminated its free tier, making a Heroku Haven approximately $16 per month.

## Private RSS Feeds and the Built-In Reader

Haven includes a built-in RSS reader that lets the owner follow other Haven instances and external blogs from within the application. Private RSS feeds mean that readers you invite can follow your Haven posts in any RSS client, not just by visiting the web interface directly. This is a deliberate design choice for low-friction following: a trusted reader does not need to remember to visit the site; they subscribe once and receive updates through their existing RSS workflow.

The built-in reader does not automatically update until you visit the reader page, according to the README documentation for the Heroku deployment. In Docker deployments, the Dockerfile configures a cron job (feed-fetch-cron) to pull feed updates automatically on a schedule, so the update limitation is specific to certain deployment environments rather than inherent to the application.

Haven's combination of private RSS feeds and an integrated reader is the feature that most clearly distinguishes it from a simple private publishing tool. It creates a small network effect: a group of friends who all run Haven instances can follow each other's feeds and stay connected without using any social media platform.

## Customization Options and What They Cover

The README lists custom CSS and custom fonts as supported customization. The admin interface provides controls for writing and editing posts in Markdown with live preview, managing user accounts, and customizing the blog appearance. This all happens through the built-in web interface without editing code.

The application requires no JavaScript frameworks in the frontend. The Dockerfile installs Node.js and npm for asset compilation (via yarn), but the running application serves pages without any client-side JavaScript framework. This keeps pages lightweight and means the application renders correctly even in restricted browser environments.

The Dockerfile sets MALLOC_ARENA_MAX=2, which the comment indicates can greatly reduce memory usage. For a personal blog running on minimal hardware such as a Raspberry Pi or a small VPS, this is a meaningful operational consideration.

## Haven Versus WordPress and Ghost

The README names WordPress and Ghost as the appropriate alternatives for a company blog. WordPress is a content management system that runs on PHP and MySQL, supports plugins and themes extensively, and powers a large share of public websites. It is designed for public access, user registration, and content discovery. Ghost is a Node.js publishing platform aimed at independent writers with subscription monetization built in.

Haven's differences are structural. It enforces invite-only access at the application level, meaning there is no configuration path for opening registration to the public. It does not support plugin systems or themes beyond custom CSS. It is built on Ruby on Rails and uses PostgreSQL, not PHP and MySQL.

For a private group blog where access control is the first requirement and public discoverability is explicitly unwanted, Haven's architecture enforces that requirement without relying on a setting that could be accidentally changed. For a blog intended to grow a public audience, attract subscribers, or integrate with third-party marketing tools, Haven's invite-only model is the wrong starting point.

## Conclusion

Haven is a good fit for individuals who want a private, invite-only space to write for friends and family and are comfortable running a Rails application. It is not appropriate for a public-facing commercial blog: the README explicitly points to WordPress or Ghost for that use case. Before deploying, verify the PostgreSQL credentials in docker-compose.yml, change the default HAVEN_USER_EMAIL and HAVEN_USER_PASS values, and confirm that your hosting environment can run Docker or that you are prepared to follow the AWS deployment script path. The last push was on 2026-09-17.

## FAQ

### Is a live demo of Haven available before self-hosting?

Yes. The README points to a live demo at havenweb.org/demo.html where you can try the application without setting up a server.

### What database does Haven use?

Haven uses PostgreSQL. The docker-compose.yml in the repository configures a PostgreSQL 13.2 service alongside the Rails application. The environment variables for the database host, name, role, and password are set in the compose file.

### Can Haven be used for a public-facing company blog?

No. The README explicitly states that Haven is for sharing with friends and family, not commercial projects, and recommends WordPress or Ghost for company blogs. The invite-only access model means there is no self-registration path for the public.

## Sources

- [havenweb/haven on GitHub](https://github.com/havenweb/haven)
- [Issues](https://github.com/havenweb/haven/issues)
- [License: MIT](https://github.com/havenweb/haven/blob/master/LICENSE)
- [Project website](https://havenweb.org)
- [README](https://github.com/havenweb/haven/blob/master/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/havenweb-haven
