# Heyform

Form builder for surveys and data collection that you host yourself.

- Replaces: [Typeform](https://openlogs.fyi/alternatives/typeform)
- Summary: Paid online form services, such as Typeform.
- Stack: TypeScript (language)
- Deployment: docker_compose
- License: AGPL-3.0 (osi) [source](https://github.com/heyform/heyform/blob/705c8d6ec5c22d3d98eecb52838134e1f383e19e/LICENSE)
- Business model: unknown. The README at the pinned commit does not state a business model, so it stays unknown. ([source](https://github.com/heyform/heyform/blob/705c8d6ec5c22d3d98eecb52838134e1f383e19e/README.md), read 2026-10-22)
- Difficulty: medium. 3 services (1 database or broker: keydb), 3 volume mounts, no env values to set, no elevated host access. Heuristic score 3 of 11: medium.
- Requirements: not stated
- Repository: [heyform/heyform](https://github.com/heyform/heyform)

## Install

1. Docker with the Compose plugin ([source](https://github.com/heyform/docs/blob/b9056fb59ff07b4adc73133b384362a6640e1ab3/content/5.open-source/2.self-hosting.md#L69-L112))

   ```text
   A host with Docker and the Docker Compose plugin. This entry runs from a compose file.
   ```

2. Save the code block as docker-compose.yml ([source](https://github.com/heyform/docs/blob/b9056fb59ff07b4adc73133b384362a6640e1ab3/content/5.open-source/2.self-hosting.md))

   ```yaml
   networks:
     keydb:
     mongo:
   
   services:
     heyform:
       image: heyform/community-edition:latest
       restart: always
       volumes:
         # Persist uploaded images
         - ./assets:/app/static/upload
       depends_on:
         - mongo
         - keydb
       ports:
         - '9157:9157'
       environment:
         APP_HOMEPAGE_URL: http://127.0.0.1:9157
         SESSION_KEY: key1
         FORM_ENCRYPTION_KEY: key2
         MONGO_URI: 'mongodb://mongo:27017/heyform'
         REDIS_HOST: keydb
         REDIS_PORT: 6379
   
     mongo:
       image: percona/percona-server-mongodb:4.4
       restart: always
       volumes:
         # Persist MongoDB data
         - mongodb_data:/data/db
   
     keydb:
       image: eqalpha/keydb:x86_64_v6.3.3
       restart: always
       command: keydb-server --appendonly yes --protected-mode no
       volumes:
         # Persist KeyDB data
         - keydb:/data
   
   volumes:
     mongodb_data:
     keydb:
   ```

3. What the compose file check ran with ([source](https://github.com/heyform/docs/blob/b9056fb59ff07b4adc73133b384362a6640e1ab3/content/5.open-source/2.self-hosting.md#L69-L112))

   ```text
   This compose file is copied unchanged from the code block in https://github.com/heyform/docs/blob/b9056fb59ff07b4adc73133b384362a6640e1ab3/content/5.open-source/2.self-hosting.md#L69-L112. The check ran on that block alone. The self-hosting guide shows this docker-compose.yml with all dependencies and environment variables.
   ```

4. Start it ([source](https://github.com/heyform/docs/blob/b9056fb59ff07b4adc73133b384362a6640e1ab3/content/5.open-source/2.self-hosting.md))

   ```bash
   docker compose up -d
   ```

5. Open the app ([source](https://github.com/heyform/docs/blob/b9056fb59ff07b4adc73133b384362a6640e1ab3/content/5.open-source/2.self-hosting.md))

   ```text
   Open http://localhost:9157. The compose file publishes host port 9157 for the heyform service.
   ```

Compose file check: config_ok on 2026-10-22.

## Gotchas and maintenance

### Gotchas

- Some images use the latest tag or no tag: Images without a pinned version: heyform: heyform/community-edition:latest. A later pull can get a different version. ([source](https://github.com/heyform/docs/blob/b9056fb59ff07b4adc73133b384362a6640e1ab3/content/5.open-source/2.self-hosting.md), checked 2026-10-22)
- The compose file publishes host ports: Host ports: 9157 (heyform). A port without a host address listens on all host network interfaces. ([source](https://github.com/heyform/docs/blob/b9056fb59ff07b4adc73133b384362a6640e1ab3/content/5.open-source/2.self-hosting.md), checked 2026-10-22)
- The compose file mounts host folders: Host paths mounted into containers: ./assets at /app/static/upload (heyform). ([source](https://github.com/heyform/docs/blob/b9056fb59ff07b4adc73133b384362a6640e1ab3/content/5.open-source/2.self-hosting.md), checked 2026-10-22)

### Signals

Computed from a GitHub snapshot taken 2026-10-22.

- Open issues and pull requests: 8
- Stars: 9047, forks: 723
- Last push: 2026-10-22 (0 days ago)
- Latest release: v3.0.4 on 2026-10-15 (7 days ago)

## Sources

- [Repository: https://github.com/heyform/heyform](https://github.com/heyform/heyform)
- [License: https://github.com/heyform/heyform/blob/705c8d6ec5c22d3d98eecb52838134e1f383e19e/LICENSE](https://github.com/heyform/heyform/blob/705c8d6ec5c22d3d98eecb52838134e1f383e19e/LICENSE)
- [Business model: https://github.com/heyform/heyform/blob/705c8d6ec5c22d3d98eecb52838134e1f383e19e/README.md](https://github.com/heyform/heyform/blob/705c8d6ec5c22d3d98eecb52838134e1f383e19e/README.md)
- [Compose file: https://github.com/heyform/docs/blob/b9056fb59ff07b4adc73133b384362a6640e1ab3/content/5.open-source/2.self-hosting.md](https://github.com/heyform/docs/blob/b9056fb59ff07b4adc73133b384362a6640e1ab3/content/5.open-source/2.self-hosting.md)
- [Install step: https://github.com/heyform/docs/blob/b9056fb59ff07b4adc73133b384362a6640e1ab3/content/5.open-source/2.self-hosting.md#L69-L112](https://github.com/heyform/docs/blob/b9056fb59ff07b4adc73133b384362a6640e1ab3/content/5.open-source/2.self-hosting.md#L69-L112)

---
Canonical: https://openlogs.fyi/tools/heyform  
Last updated: 2026-10-22
