Overview
Discover what makes Framadate powerful
Framadate is a lightweight, self‑hostable polling and event‑planning engine written in **Python** that runs on a standard LAMP/LEMP stack. It exposes a REST‑style JSON API for creating, updating and retrieving polls while also providing an intuitive web UI built with **Flask** and **Bootstrap**. The core of the application is a single‑table SQLite database, but it can be swapped for PostgreSQL or MySQL via SQLAlchemy without code changes. This makes Framadate a great fit for micro‑services or embedded use cases where a full‑blown database server is unnecessary.
Date and Classic Polls
Live Results
Export & Analytics
Security
Overview
Framadate is a lightweight, self‑hostable polling and event‑planning engine written in Python that runs on a standard LAMP/LEMP stack. It exposes a REST‑style JSON API for creating, updating and retrieving polls while also providing an intuitive web UI built with Flask and Bootstrap. The core of the application is a single‑table SQLite database, but it can be swapped for PostgreSQL or MySQL via SQLAlchemy without code changes. This makes Framadate a great fit for micro‑services or embedded use cases where a full‑blown database server is unnecessary.
Key Features
- Date and Classic Polls – Two poll types: date polls for scheduling events and classic polls for quick decision making.
- Live Results – Poll results are streamed to all participants using Server‑Sent Events (SSE) for real‑time updates.
- Export & Analytics – Polls can be exported as CSV, JSON or PDF and visualized with simple charts rendered client‑side via Chart.js.
- Security – Token‑based authentication for poll editors, optional password protection per poll, and CSRF protection in the web form.
Technical Stack
| Layer | Technology |
|---|---|
| Web Framework | Flask (Python 3.11+) |
| ORM | SQLAlchemy (SQLite by default) |
| Frontend | Bootstrap 5, jQuery, Chart.js |
| Real‑time | Server‑Sent Events (Python’s sseclient) |
| Deployment | Docker image available on Docker Hub; can be run via docker-compose or manually with a WSGI server (Gunicorn) |
| CI/CD | GitHub Actions for automated tests and Docker builds |
The codebase follows PEP‑8 conventions, uses type hints (mypy), and is licensed under the AGPLv3, ensuring that any derivative work remains open source.
Core Capabilities & API
- Poll CRUD – Endpoints
/api/pollsfor creating, reading, updating and deleting polls. - Vote Submission –
POST /api/polls/<id>/voteaccepts JSON payloads with selected options. - Webhooks – Optional webhook URLs can be configured per poll; Framadate POSTs a payload when the poll closes.
- Extensibility – The app ships with a plugin hook (
framadate.plugins) that lets developers inject custom validation or rendering logic. - Internationalization – Locale files in
poformat; developers can add new languages by extending the Babel configuration.
Deployment & Infrastructure
Framadate is designed for single‑instance deployment but scales horizontally behind a load balancer because the application is stateless except for the database. Docker images expose ports 80/443 and can be run in Kubernetes pods with a persistent volume for the SQLite file or an external PostgreSQL service. The lightweight nature (≈ 30 MB Docker image) makes it suitable for edge devices, Raspberry Pi clusters or internal SaaS platforms.
Integration & Extensibility
- OAuth / SSO – The Flask‑Login integration allows for custom authentication backends; developers can plug in LDAP, OAuth2 or SAML.
- RESTful API – All core operations are exposed via JSON, enabling integration with CI/CD pipelines or custom front‑ends.
- Webhooks & Callbacks – External services (Slack, Teams, email) can react to poll completions.
- Custom Widgets – The frontend uses a component‑based approach; developers can replace the Chart.js chart with D3 or any other library.
Developer Experience
The project contains comprehensive documentation (docs/), a well‑structured test suite (pytest, coverage > 90 %), and an active community on GitHub. Issues are triaged quickly, and pull requests receive prompt reviews from maintainers who enforce coding standards. The code is modular: core logic lives in framadate/, while templates and static assets are isolated, making it easy to fork and extend.
Use Cases
| Scenario | Why Framadate? |
|---|---|
| Internal meeting scheduler for a distributed team | Zero‑friction date polls, real‑time availability updates |
| Community decision making (e.g., open‑source project release dates) | Open‑source license, no ads, easy self‑hosting |
| Quick surveys for event planning (e.g., hackathon theme) | Classic polls with minimal setup |
| Embedded polling in a larger web application | API‑first design, plugin hooks for custom UI |
Advantages Over Alternatives
- Open Source & AGPL – No hidden fees or vendor lock‑in; all modifications remain free.
- Minimal Dependencies – A single Python package and optional database make it lightweight to ship in containers.
- Real‑time Feedback – SSE support gives a near‑instant user experience without polling.
- Extensible Architecture – Plugin system and webhook support allow developers to tailor Framadate to niche workflows.
- Security‑First – Built‑in CSRF protection, token authentication, and optional encryption of sensitive polls.
Framadate offers developers a fully self‑hostable, highly configurable polling engine that balances simplicity with extensibility, making it an attractive choice for teams that need to maintain control over their data while providing a polished user experience.
Open SourceReady to get started?
Join the community and start self-hosting Framadate today
Related Apps in other
Immich
Self‑hosted photo and video manager
Syncthing
Peer‑to‑peer file sync, no central server
Strapi
Open-source headless CMS for modern developers
reveal.js
Create stunning web‑based presentations with HTML, CSS and JavaScript
Stirling-PDF
Local web PDF editor with split, merge, convert and more
MinIO
Fast, S3-compatible object storage for AI and analytics
Weekly Views
Repository Health
Information
Explore More Apps
Frappe HR
Open‑source HR and Payroll solution for modern teams
WildDuck Mail Server
Scalable, Unicode‑first IMAP/POP3 mail server
Miniflux
Minimalist feed reader for privacy and speed
asciinema
Record and share terminal sessions the lightweight way
sish
Self-hosted SSH tunnel for web services
Swetrix
Privacy‑first web analytics without cookies
