---
title: "Deploy Huly"
description: "All-in-one workspace for issues, documents, chat and planning"
category: "Other"
url: https://railway.com/deploy/huly-workspace
---

# Deploy Huly

All-in-one workspace for issues, documents, chat and planning

**[Deploy Huly on Railway](https://railway.com/template/huly-workspace)**

- **Creator:** A3A
- **Category:** Other

## Template content

### stats https://raw.githubusercontent.com/hcengineering/platform/v0.7.426/dev/prod/public/huly/icon-256.png

- **Image:** hardcoreeng/stats:v0.7.426

### elastic https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/elasticsearch.svg

- **Source:** https://github.com/gridalpha/huly-railway
- **Health check:** /

### account https://raw.githubusercontent.com/hcengineering/platform/v0.7.426/dev/prod/public/huly/icon-256.png

- **Image:** hardcoreeng/account:v0.7.426
- **Start command:** `/bin/sh -c 'SK=$(printf %s "$S3_SECRET_KEY" | sed "s/+/%2B/g"); export STORAGE_CONFIG="s3|$S3_ENDPOINT?accessKey=$S3_ACCESS_KEY&secretKey=$SK&region=auto&rootBucket=$S3_BUCKET"; exec node bundle.js'`

### front https://raw.githubusercontent.com/hcengineering/platform/v0.7.426/dev/prod/public/huly/icon-256.png

- **Image:** hardcoreeng/front:v0.7.426
- **Start command:** `/bin/sh -c 'SK=$(printf %s "$S3_SECRET_KEY" | sed "s/+/%2B/g"); export STORAGE_CONFIG="s3|$S3_ENDPOINT?accessKey=$S3_ACCESS_KEY&secretKey=$SK&region=auto&rootBucket=$S3_BUCKET"; exec node ./bundle.js'`
- **Health check:** /

### proxy https://raw.githubusercontent.com/hcengineering/platform/v0.7.426/dev/prod/public/huly/icon-256.png

- **Source:** https://github.com/gridalpha/huly-railway
- **Health check:** /healthz
- **Public domain:** Yes

### rekoni https://raw.githubusercontent.com/hcengineering/platform/v0.7.426/dev/prod/public/huly/icon-256.png

- **Image:** hardcoreeng/rekoni-service:v0.7.426

### fulltext https://raw.githubusercontent.com/hcengineering/platform/v0.7.426/dev/prod/public/huly/icon-256.png

- **Image:** hardcoreeng/fulltext:v0.7.426
- **Start command:** `/bin/sh -c 'SK=$(printf %s "$S3_SECRET_KEY" | sed "s/+/%2B/g"); export STORAGE_CONFIG="s3|$S3_ENDPOINT?accessKey=$S3_ACCESS_KEY&secretKey=$SK&region=auto&rootBucket=$S3_BUCKET"; exec node --expose-gc bundle.js'`

### transactor https://raw.githubusercontent.com/hcengineering/platform/v0.7.426/dev/prod/public/huly/icon-256.png

- **Image:** hardcoreeng/transactor:v0.7.426
- **Start command:** `/bin/sh -c 'SK=$(printf %s "$S3_SECRET_KEY" | sed "s/+/%2B/g"); export STORAGE_CONFIG="s3|$S3_ENDPOINT?accessKey=$S3_ACCESS_KEY&secretKey=$SK&region=auto&rootBucket=$S3_BUCKET"; exec node ./bundle.js'`

### kvs https://raw.githubusercontent.com/hcengineering/platform/v0.7.426/dev/prod/public/huly/icon-256.png

- **Image:** hardcoreeng/hulykvs:v0.7.426

### kafka https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/kafka-light.svg

- **Image:** apache/kafka:3.9.1

### Postgres https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18

### workspace https://raw.githubusercontent.com/hcengineering/platform/v0.7.426/dev/prod/public/huly/icon-256.png

- **Image:** hardcoreeng/workspace:v0.7.426
- **Start command:** `/bin/sh -c 'SK=$(printf %s "$S3_SECRET_KEY" | sed "s/+/%2B/g"); export STORAGE_CONFIG="s3|$S3_ENDPOINT?accessKey=$S3_ACCESS_KEY&secretKey=$SK&region=auto&rootBucket=$S3_BUCKET"; exec node bundle.js'`

### collaborator https://raw.githubusercontent.com/hcengineering/platform/v0.7.426/dev/prod/public/huly/icon-256.png

- **Image:** hardcoreeng/collaborator:v0.7.426
- **Start command:** `/bin/sh -c 'SK=$(printf %s "$S3_SECRET_KEY" | sed "s/+/%2B/g"); export STORAGE_CONFIG="s3|$S3_ENDPOINT?accessKey=$S3_ACCESS_KEY&secretKey=$SK&region=auto&rootBucket=$S3_BUCKET"; exec node bundle.js'`

## Buckets

- **huly-files**

## Documentation

![Huly logo](https://repository-images.githubusercontent.com/392073243/6d27d5cc-38cd-4d88-affe-bb88b393180c)

# Deploy and Host Huly on Railway

Huly is an open-source all-in-one team workspace that folds issue tracking, collaborative documents, team chat, HR and a personal planner into one application. Teams reach for it when they are tired of paying for Linear, Notion and Slack separately and stitching them together with integrations that half-work. Everything shares one data model, so an issue can be mentioned in a document, discussed in a channel and scheduled in a planner without leaving the product. It is published by Hardcore Engineering under the Eclipse Public License 2.0 at [github.com/hcengineering/platform](https://github.com/hcengineering/platform).

Self-host Huly on Railway and you get the full production topology, not a cut-down single container. Deploy Huly with this template and it provisions thirteen services: a Caddy entrypoint routing every path the browser client calls, `front`, `account`, the `transactor` every open workspace holds a WebSocket to, `collaborator` for live document editing, a `workspace` worker, a `fulltext` indexer, `rekoni` for reading text out of attachments, `stats`, `kvs`, plus PostgreSQL, Kafka and Elasticsearch. Attachments and avatars go to an object-storage bucket, so nothing large lives on a volume.

![Diagram of Huly's thirteen Railway services and three volumes](https://res.cloudinary.com/rroe4rtk/image/upload/v1788053768/huly-architecture.png)

## Getting Started with Huly on Railway

Open the public URL and you land on Huly's sign-in card. There is no seeded administrator and no default password: the first person to use the **Sign Up** tab becomes the owner, so do that immediately rather than leaving the instance idle. The email address is only an identifier — no mail server is wired up, so nothing is sent and nothing needs confirming. Huly then asks for a workspace name; leave *Create sample projects and demo content* on, which seeds two example projects and a set of quick-start documents. Creation takes about 45 seconds.

You arrive in Tracker, Huly's issue board. Press **New issue**, give it a title and description, and create it — if it lands in the Backlog group, the transactor and PostgreSQL are wired correctly. Attach a file with the paperclip: a thumbnail rendering back on the card confirms object storage works end to end. Open the command palette from the magnifier top-right and search a word from your issue title; a hit means Kafka, the indexer and Elasticsearch are working. Then set `DISABLE_SIGNUP` to `true` on `account` and `front` to close registration.

![Huly Tracker listing backlog issues across two projects](https://res.cloudinary.com/rroe4rtk/image/upload/v1788053769/huly-tracker-issues.png)

![Huly issue detail with an uploaded image attachment](https://res.cloudinary.com/rroe4rtk/image/upload/v1788053770/huly-issue-attachment.png)

![Huly collaborative document open in the Documents workspace](https://res.cloudinary.com/rroe4rtk/image/upload/v1788053772/huly-document.png)

![Huly command palette returning a full-text issue match](https://res.cloudinary.com/rroe4rtk/image/upload/v1788053773/huly-search.png)

## About Hosting Huly

Huly is a constellation of services that each own one job, which is why self-hosting it properly means more than one container. `front` serves the client bundle and proxies uploads; `account` owns people, workspaces and tokens. The `transactor` is the heart of it: every open workspace keeps a WebSocket to it and every change flows through it. `collaborator` runs the CRDT layer behind shared editing, so two people typing in one paragraph converge instead of overwriting each other. `workspace` creates and upgrades workspaces, `fulltext` maintains the index and calls `rekoni` to read text out of PDFs, and `stats` collects health metrics.

Key features:

- Issue tracking with projects, components, milestones, sub-issues and templates
- Collaborative documents and teamspaces with live editing and inline comments
- Team chat, threads and an activity feed on every object
- A personal planner for action items created anywhere in the product
- Virtual office, HR, recruiting and CRM modules in the same workspace
- Full-text search across issues, documents and attachment contents

## Why Deploy Huly on Railway

Railway removes the operational work a thirteen-service stack implies.

- Every service, database, queue and bucket provisioned in one deploy
- Private networking wires the services together with no ports exposed
- PostgreSQL, Kafka and Elasticsearch storage on managed persistent volumes
- One public HTTPS domain with an automatic certificate
- Scale any single service independently when a tier gets busy

## Common Use Cases

- **Replacing a Linear plus Notion plus Slack stack** with one bill, one login and one search box.
- **Running project management inside your own perimeter**, where roadmaps cannot sit in third-party SaaS.
- **Engineering teams with a documentation habit** — specs and runbooks beside the issues they describe.
- **Agencies tracking client work** with attachments and searchable notes in one workspace.

## Dependencies for Huly

- `hardcoreeng/front`, `account`, `transactor`, `collaborator`, `workspace`, `fulltext`, `stats`, `rekoni-service` and `hulykvs`, all on the same tag — one release train, and mixed builds are refused.
- **PostgreSQL 18** — accounts, workspaces and every object inside them. Huly detects the flavour at startup and ships a PostgreSQL migration set beside its CockroachDB one.
- **Apache Kafka 3.9 (KRaft)** — the change stream between `transactor`, `workspace` and `fulltext`. Without it, edits save but never reach the index.
- **Elasticsearch 7.14 with `ingest-attachment`** — the index itself.
- **Caddy** — Railway's edge routes by hostname only, while Huly's client calls six paths on one host.
- **Object storage** — every attachment, avatar and embedded image.

### Environment Variables Reference

| Variable | Service | Purpose |
|---|---|---|
| `SERVER_SECRET` | `account` | Signs every platform token; must stay stable |
| `DB_URL` | `account`, `transactor`, `workspace`, `fulltext` | PostgreSQL connection string |
| `QUEUE_CONFIG` | the same four | Kafka broker address |
| `FULLTEXT_DB_URL` | `fulltext` | Elasticsearch endpoint |
| `DISABLE_SIGNUP` | `account`, `front` | Set to `true` to close public registration |
| `TITLE` | `front` | Product name in the browser tab |
| `MAX_UPLOAD_SIZE` | `proxy` | Largest accepted upload, `100MB` by default |

### Deployment Dependencies

- Source: [github.com/hcengineering/platform](https://github.com/hcengineering/platform)
- Self-hosting reference: [github.com/hcengineering/huly-selfhost](https://github.com/hcengineering/huly-selfhost)
- Images: [hub.docker.com/u/hardcoreeng](https://hub.docker.com/u/hardcoreeng)
- Product site: [huly.io](https://huly.io)

## Hardware Requirements for Self-Hosting Huly

| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 2 vCPU | 4+ vCPU |
| RAM | 8 GB across all services | 16 GB |
| Storage | 10 GB of volumes plus object storage | 25 GB plus object storage |
| Runtime | Docker, PostgreSQL, Kafka, Elasticsearch | One of each |

Elasticsearch and Kafka are the hungry components; each gets a 1 GB JVM heap, and both are worth raising first if search feels slow.

## Self-Hosting Huly with Docker

Upstream ships a setup script that renders a Docker Compose file for one host. These shell commands clone it and start the stack:

```
git clone https://github.com/hcengineering/huly-selfhost.git
cd huly-selfhost
./setup.sh
docker compose up -d
```

That layout runs CockroachDB, Redpanda, MinIO and nginx alongside Huly, and upstream notes the single-node CockroachDB and Redpanda may not be production-ready. This template swaps those for managed PostgreSQL, Kafka and object storage. To point Huly at your own backends:

```
DB_URL=postgresql://user:password@postgres.internal:5432/huly
QUEUE_CONFIG=kafka.internal:9092
STORAGE_CONFIG=s3|https://s3.example.com?accessKey=KEY&secretKey=SECRET&region=auto&rootBucket=huly
```

`STORAGE_CONFIG` is parsed as a URL, so a secret key containing `+` must be percent-encoded as `%2B` or it reaches the S3 client with a space in it.

## How Much Does Huly Cost to Self-Host?

Huly is free and open source under the Eclipse Public License 2.0 — no licence fee, no seat count and no feature gate on a self-hosted instance. Hardcore Engineering also sells a hosted cloud with a free tier and paid plans, which is what you opt out of here. On Railway you pay only for the compute, volumes and storage the services consume.

## FAQ

**What is Huly?**
Huly is an open-source all-in-one team workspace combining project management, documents, chat, HR and a planner in one application, positioned against running Linear, Jira, Notion and Slack side by side.

**What does this Railway template deploy?**
Thirteen services: a Caddy path router, Huly's `front`, `account`, `transactor`, `collaborator`, `workspace`, `fulltext`, `rekoni`, `stats` and `kvs`, plus PostgreSQL, Kafka and Elasticsearch, with a bucket for uploads.

**Why does self-hosted Huly need Kafka and Elasticsearch?**
Kafka carries changes from the transactor to the indexer and the workspace worker, so edits propagate without polling. Elasticsearch holds the index the command palette queries, including text pulled out of attachments.

**How do I stop strangers signing up on my self-hosted Huly instance?**
Set `DISABLE_SIGNUP` to `true` on the `account` and `front` services once your own account exists. The account service drops its signup endpoints entirely, so the lock is server-side rather than hidden in the interface.

**Can I upgrade self-hosted Huly to a newer version later?**
Yes, but change the tag on all nine Huly services at once — they are one release train and mixed builds are refused. Read upstream's migration notes first.



## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/huly-workspace
