# newdle

CERN's Doodle-style meeting poll with Exchange free/busy, configured through one Flask config file.

newdle, from the Indico team at CERN, lets an organiser propose candidate slots, see when participants are free from Exchange free/busy, and collect answers on a poll. It is a Flask backend with a React frontend, configured in newdle.cfg (SSO over OIDC, database, SMTP, free/busy providers) and shipped with Docker Compose. The JSON API behind the UI is not documented for agents.

Alternative to: Doodle

- Capabilities: adaptable
- Vertical: scheduling-staffing
- Shape: business-app
- Form factor: web-app
- Execution model: deterministic
- Provenance: human-written (recorded, never ranked)
- Repo: https://github.com/indico/newdle (MIT), 118 stars, last commit 2026-04-24
- Last activity: 2026-04-24
- Page: apps/indico--newdle.html
- JSON: apps/indico--newdle.json

## Use it when

- my organization has SSO and Exchange and I want a when-are-you-free poll that stays inside our network
- I want a Doodle without ads or accounts for participants, backed by a team that runs it at CERN scale

## Gotchas

- No local accounts: login requires an OIDC provider through Flask-Multipass; SKIP_LOGIN is for development only
- Free/busy is Exchange only; Google and CalDAV providers are 'work in progress' per the README
- Creating the final meeting in Indico is still unfinished
- Last push 2026-04-24, near the edge of the six-month window

## Editions

- Free: Free, open source
  - source: https://github.com/indico/newdle
  - container: make docker-run

## Adaptable: make it yours

Effort: config-only (4 things to edit)

Copy newdle/newdle.cfg.example to newdle.cfg and set SECRET_KEY, SQLALCHEMY_DATABASE_URI, the MULTIPASS_AUTH_PROVIDER_LOGIN block with your OIDC metadata URL and client credentials, EMAIL_HOST and friends plus NOREPLY_ADDRESS, and FREE_BUSY_PROVIDERS (exchange, or random for testing) with the Exchange settings. PROXY, TOKEN_LIFETIME and NEWDLE_CODE_LENGTH tune behavior. docker-compose.yml runs the production-like stack.

- Env vars: none
- Config files: newdle/newdle.cfg.example, newdle.cfg, docker-compose.yml, .env
- Prompt files: none
- Accounts you'll need: an OIDC identity provider; Microsoft Exchange (free/busy, optional)

## Code stack

- Languages: Python, JavaScript
- Frameworks: Flask, Flask-Multipass, SQLAlchemy, Alembic, React
- Package manager: pip
- Database: PostgreSQL
- Hosting target: docker

## Evidence and confidence

- formFactor: README: Flask backend and React frontend served together; docker compose targets (confidence 0.95)
- executionModel: no model SDK or AI feature (confidence 0.95)
- operability: no documented API, MCP or CLI; the React app calls Flask JSON routes that are not documented for external use (confidence 0.8)
- effort: newdle/newdle.cfg.example read this run; every setting is commented (confidence 0.95)
- editions: README: MIT with the CERN privileges note; no hosted offering (confidence 0.95)
- active: shortlist pushedAt 2026-04-24
- reach:  (confidence 0)

## Open questions

- Operable fit kept at 1 per triage because the Flask JSON API exists but is undocumented and session-authenticated; no Operable capability claimed. Curator to decide
- Is an OIDC provider a hard requirement, or does Flask-Multipass allow a local provider in production?

## Sources

- https://github.com/indico/newdle (sourcing:scheduling-staffing:github)
- https://github.com/indico/newdle/blob/master/newdle/newdle.cfg.example (analysis:scheduling-staffing)
