Open-source, AI-native form builder.
The privacy-first alternative to Typeform.
Quick Start · Features · Self-Host · API · Contributing · Website
| Typeform | Google Forms | Tideform | |
|---|---|---|---|
| Price | $30-100/mo | Free | Free forever |
| AI Generation | ❌ | ❌ | ✅ Describe → Build |
| Data Privacy | Their servers | Google's servers | Your servers |
| Self-Hosted | ❌ | ❌ | ✅ Docker one-liner |
| Open Source | ❌ | ❌ | ✅ MIT License |
| Beautiful UX | ✅ | ❌ | ✅ Conversational |
| RTL Support | Partial | Partial | ✅ Full |
| API | Paid tier | Limited | ✅ Full REST API |
docker run -p 3000:3000 tideform/tideformOpen http://localhost:3000 and create your first form.
curl -O https://raw.githubusercontent.com/tideform/tideform/main/docker-compose.yml
docker compose up -dgit clone https://github.com/tideform/tideform.git
cd tideform
cp .env.example .env
npm install
npx prisma db push
npm run devDescribe your form in plain English. Tideform generates the fields, labels, validation, and conditional logic. Powered by Claude (or works offline with smart templates).
"Create a customer feedback survey for a SaaS product with NPS score"
→ 6 fields generated in 2 seconds
Your data never leaves your infrastructure. Self-host on any server, VPS, or Raspberry Pi. No telemetry. No tracking. No data harvesting. GDPR-compliant by architecture.
One-question-at-a-time experience with smooth transitions, keyboard navigation, and progress tracking. 6 built-in themes including dark mode and a light "Paper" theme.
Response dashboard with completion rates, field-level statistics, NPS tracking, submission timelines, and CSV export. No third-party analytics needed.
Full REST API for everything — create forms, submit responses, fetch analytics. Webhook support for real-time integrations with Slack, Zapier, n8n, and more.
Full right-to-left layout support for Arabic, Farsi, and Urdu. Interface translations welcome via PR.
tideform/
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── api/ # REST API routes
│ │ │ ├── forms/ # Form CRUD
│ │ │ ├── submissions/ # Response collection
│ │ │ ├── ai/ # AI generation endpoint
│ │ │ └── auth/ # Authentication
│ │ ├── (dashboard)/ # Authenticated pages
│ │ └── (public)/ # Public form renderer
│ ├── components/ # React components
│ │ ├── builder/ # Form builder UI
│ │ ├── preview/ # Form renderer
│ │ ├── dashboard/ # Analytics & management
│ │ └── ui/ # Shared UI primitives
│ └── lib/ # Core logic
│ ├── db.ts # Prisma client
│ ├── auth.ts # NextAuth config
│ ├── ai.ts # AI generation service
│ ├── types.ts # TypeScript definitions
│ ├── validations.ts # Zod schemas
│ └── utils.ts # Helpers
├── prisma/
│ └── schema.prisma # Database schema
├── docker/ # Docker configuration
├── Dockerfile # Multi-stage production build
└── docker-compose.yml # One-command deployment
- Framework: Next.js 14 (App Router)
- Database: SQLite (dev) / PostgreSQL (production) via Prisma
- Auth: NextAuth.js (credentials + OAuth)
- Styling: Tailwind CSS
- AI: Anthropic Claude (optional, works without it)
- Validation: Zod
- Charts: Recharts
- Deployment: Docker, Vercel, any Node.js host
curl -X POST http://localhost:3000/api/forms \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{
"title": "Feedback Form",
"fields": [
{ "type": "rating", "label": "How was your experience?", "required": true },
{ "type": "long_text", "label": "Any comments?" }
]
}'curl -X POST http://localhost:3000/api/submissions \
-H "Content-Type: application/json" \
-d '{
"formSlug": "feedback-form-abc123",
"data": {
"f_rating": 5,
"f_comments": "Love it!"
}
}'curl -X POST http://localhost:3000/api/ai/generate \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{ "prompt": "job application for a startup" }'Full API documentation: docs.tideform.dev (coming soon)
- 1 CPU core, 512MB RAM
- Docker 20+ or Node.js 18+
- 100MB disk space (+ data)
| Variable | Required | Default | Description |
|---|---|---|---|
DATABASE_URL |
Yes | file:./dev.db |
Database connection string |
NEXTAUTH_SECRET |
Yes (prod) | Auto-generated | Session encryption key |
NEXTAUTH_URL |
Yes (prod) | http://localhost:3000 |
Your app's public URL |
ANTHROPIC_API_KEY |
No | — | Enables AI form generation |
GITHUB_CLIENT_ID |
No | — | GitHub OAuth login |
GOOGLE_CLIENT_ID |
No | — | Google OAuth login |
# docker-compose.yml
services:
tideform:
image: tideform/tideform:latest
environment:
- DATABASE_PROVIDER=postgresql
- DATABASE_URL=postgresql://tideform:secret@postgres:5432/tideform
depends_on:
- postgres
postgres:
image: postgres:16-alpine
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_DB: tideform
POSTGRES_USER: tideform
POSTGRES_PASSWORD: secret
volumes:
pgdata:- Core form builder with drag-and-drop
- AI-powered form generation
- Conversational form renderer
- Response collection & analytics
- Docker deployment
- Email/password + OAuth authentication
- Embed widget (
<script>tag + iframe) - Conditional logic / field branching
- File upload support
- CSV/Excel export
- Webhook integrations
- Email notifications on submission
- Custom thank-you pages
- Team collaboration
- Form templates gallery
- Stripe payment fields
- Multi-language form UI
- Accessibility audit (WCAG 2.1 AA)
We love contributions! See CONTRIBUTING.md for guidelines.
# Fork and clone
git clone https://github.com/YOUR_USERNAME/tideform.git
cd tideform
# Install and setup
cp .env.example .env
npm install
npx prisma db push
# Start development
npm run dev
# Open http://localhost:3000- 🐛 Bug reports — Found something broken? Open an issue
- 💡 Feature requests — Have an idea? Start a discussion
- 🌍 Translations — Help us reach more people
- 📖 Documentation — Improve guides, fix typos
- 🎨 Themes — Design new form themes
- 🧪 Tests — Increase coverage
MIT — free for personal and commercial use. See LICENSE.
If Tideform helps you, consider giving it a ⭐ on GitHub.
It helps others discover the project.