A self-hostable form backend that accepts HTML form submissions and routes them to email, Telegram, Discord, webhooks, and automation platforms — without writing any server-side code.
FormBee solves a deceptively common problem: you have a static website or a frontend-only app, and you need contact forms that actually send data somewhere. Traditionally this means standing up a server, dealing with SMTP configuration, and writing backend code just to forward a few fields. FormBee replaces all of that with a single API endpoint you POST to, identified by an API key, and it handles the routing.
The project supports a growing plugin ecosystem for delivery targets — including email via Nodemailer, Telegram bot messages, Discord webhooks, Make.com, n8n, and generic webhooks. Each integration is independently toggleable per account, and a subscription tier system gates how many active plugins a user can run simultaneously. The free Starter tier covers 250 monthly form submissions with one plugin slot; paid Growth and Premium tiers lift those limits.
Self-hosting is the explicit design goal. The repository provides pre-built Docker images with different capability profiles (email-only, email-with-captcha, full webhooks) so you deploy only what you need. On Railway, official templates let you click-deploy the backend in minutes by filling in environment variables. The Angular frontend dashboard gives users control over API keys, allowed domains, return email configuration, and integration toggles.
Security is addressed through domain whitelisting (restricting which origins can POST to your endpoint), Proof-of-Work captcha challenges powered by the Altcha library to block spam bots, AES-256-CBC encryption of sensitive user fields at rest in PostgreSQL, and JWT-based authentication for the dashboard. The GitHub OAuth flow is used as the sole authentication provider, keeping identity management off the project’s plate entirely.
/formbee/:apikey that accepts any JSON body from your HTML forms and immediately routes it to your configured destinationsArchitecture FormBee follows a flat, route-centric monolith pattern with all business logic consolidated inside a single large Express application file. There is no layered separation between routing, business logic, and data access — the main entry point contains route handlers that directly call TypeORM’s entity manager, compose email messages, and fire outbound Axios requests to third-party APIs within the same closure. This structure makes the execution path easy to follow for simple cases but creates substantial coupling: adding a new integration means editing the primary submission handler and duplicating the domain-check and plugin-count enforcement logic that already appears separately for each existing integration. The overall design is a working prototype architecture that has not yet been refactored into the controller/service/repository separation that would be needed for the codebase to scale gracefully.
Tech Stack
The server is built on Node.js with Express 4, written in TypeScript and executed directly with ts-node in development. PostgreSQL serves as the sole datastore, accessed through TypeORM 0.3 with its entity-decorator style and the synchronize: true flag handling schema migrations automatically. Nodemailer handles all outgoing email with support for Gmail OAuth2 and arbitrary SMTP servers. Outbound integration calls (Telegram Bot API, Discord webhooks, Make.com, n8n, generic URLs) are made via Axios. Authentication uses GitHub OAuth as the identity provider, with short-lived JWTs signed via jsonwebtoken for subsequent dashboard API calls. The frontend is an Angular application served separately. Docker images are provided for deployment, with Railway as the promoted hosting target. Stripe is integrated for subscription billing on the hosted tier.
Code Quality
The codebase includes a Jest + Supertest integration test suite that covers the core submission endpoint, invalid API key rejection, captcha challenge endpoint, integration toggle endpoints, and user retrieval — a meaningful set of happy-path tests that establish a basic safety net. TypeScript is used throughout the server, though type safety is partial: several route handler callbacks use implicit any parameter types, and error objects are accessed without type narrowing. Error handling is inconsistent — some catch blocks swallow errors silently with empty bodies, while others return HTTP 500 responses; the Stripe webhook handler in particular contains an empty catch that can allow processing to continue on a malformed event. Sensitive column values are encrypted at rest via TypeORM transformers, which is a solid security practice. There is no linter or formatter configuration present in the repository.
What Makes It Unique
FormBee’s distinctive technical choice is its modular Docker image strategy: rather than shipping one monolithic backend, the docker-images/ directory provides purpose-built variants (email-only, email-with-captcha, webhooks) that self-hosters can pick from to minimize their attack surface and infrastructure footprint. This is an uncommon approach among form backend projects, which typically ship a single configurable binary. The Altcha Proof-of-Work captcha integration is also notable — it provides bot protection without any third-party network call at challenge-issuance time, making it a credible privacy-preserving alternative to reCAPTCHA. Combined with AES-256-CBC column-level encryption and a domain whitelist, FormBee positions itself specifically for operators who need to keep submission data off third-party infrastructure while still getting multi-channel notification delivery.
FormBee is released under the MIT License, which is one of the most permissive open-source licenses available. You are free to use, modify, distribute, and run it commercially without any royalty obligations or copyleft requirements. The license imposes no restrictions on how you deploy it internally or what you build on top of it — the only obligation is retaining the copyright notice in any redistribution of the source code itself.
Running FormBee yourself requires a PostgreSQL database and a Node.js runtime (or Docker). The server is a single Express process with TypeORM managing the schema, including automatic synchronization via synchronize: true — which means schema changes in code are applied to the database on startup, a convenience in development that carries risk in production if schema migrations are not managed carefully. You are responsible for database backups, SSL termination in front of the Express server, and configuring email credentials (Gmail OAuth or an SMTP server). The Railway one-click templates reduce initial friction significantly, but ongoing maintenance of the deployment — updates, secrets rotation, log monitoring — falls entirely on you.
Compared to the hosted formbee.dev service, self-hosting means you manage your own submission limits, integrate Stripe only if you want the tiered billing logic (it can be left unconfigured for personal use), and handle uptime yourself. The hosted tier adds managed infrastructure, support from the maintainer, and a billing portal, but your form data stays on third-party servers. For teams that prioritize data residency or just want to avoid recurring SaaS costs for moderate submission volumes, self-hosting on a small VPS or Railway project is straightforward and cost-effective.
Forms Surveys · Marketing · Analytics
Open-source experience management platform for in-app, website, email, and link surveys — privacy-first and fully self-hostable.
Forms Surveys · No Code Platforms
Open-source conversational form builder with AI generation, conditional logic, and 30+ integrations — self-host with full data ownership.
Forms Surveys · Marketing
Build unlimited, embeddable forms with no code — powered by AI, logic rules, and real-time analytics