Skip to content
A revealed planning poker round in ParleyA revealed planning poker round in Parley

Self-hosted planning poker your team joins with a link

Sprint estimation and standup for engineering teams. One Go binary and a Postgres database — no accounts, no seat count, no credit card.

MIT licensedv0.10.0

Section titled “Most tools want an account. Parley wants a link.”

Same link for planning poker and standup. Two commands and a .env file, no platform team required:

Terminal window
git clone https://github.com/lets-parley/parley && cd parley
cp .env.example .env # set POSTGRES_PASSWORD to anything
docker compose up -d

That is the whole install, and it is on :8080. Compose binds to localhost until you say otherwise. docker compose ps reports healthy once Parley can reach Postgres.

The frontend ships inside the binary, so there is no second service, no Node runtime in production, and no way for the two halves to end up at different versions. Migrations run themselves at boot.

The things it does not do are on one page too, each with its workaround: known limitations.

There is no account step to show, because there isn’t one. Name a space and you are in it; everyone else follows the link you paste into chat.

The Parley landing page: a hand of five cards reading 3, 5, 5, 8 and 5 above a large settled 5, the heading 'Name a table. Share the link. Start the round.', and a single field labelled NAME YOUR SPACE beside an Open a space button.The Parley landing page: a hand of five cards reading 3, 5, 5, 8 and 5 above a large settled 5, the heading 'Name a table. Share the link. Start the round.', and a single field labelled NAME YOUR SPACE beside an Open a space button.
A round resolving, and one field. The cards deal and turn over once when the page loads, then rest on the number the room agreed — the product doing the thing the page is describing.

Everyone votes at once, and nobody sees a number until the round opens. Your teammates don’t install anything and don’t sign up for anything — they open the link and type a name.

Four face-down cards at the table and two empty seats, with the line '4 / 6 voted' above them and the viewer's own 5 raised in their hand.Four face-down cards at the table and two empty seats, with the line '4 / 6 voted' above them and the viewer's own 5 raised in their hand.
Mid-round: the count reads 4 of 6. Everyone else's values are not merely hidden in your browser — the server leaves them out of what it sends you, so the only value on your machine is your own.
A revealed T-shirt round showing a large M under the word MODE, the line 'range S–L · 6 votes · ordinal deck, no average', and counts of S times one, M times four, L times one.A revealed T-shirt round showing a large M under the word MODE, the line 'range S–L · 6 votes · ordinal deck, no average', and counts of S times one, M times four, L times one.
Revealed. A T-shirt round reports mode and range, because averaging sizes gives you a number nobody can act on.

Planning poker

A story queue with real ticket references. Four built-in decks — Fibonacci, modified Fibonacci, T-shirt, powers of two — each carrying ? and a coffee card, plus any deck a space saves of its own.

A poker room with ticket PLAT-412 on the table alongside its note, and a queue of five more items listed to the right.A poker room with ticket PLAT-412 on the table alongside its note, and a queue of five more items listed to the right.

What it does

Daily standup

Round-robin with a 90-second clock, so the quiet people get their turn. Whatever you wrote under “today” is waiting under “yesterday” tomorrow, and blockers collect into a list you can paste into a channel.

A standup in progress: a countdown running down, a rail of six speakers with one struck through, and the current speaker's yesterday, today and blockers fields.A standup in progress: a countdown running down, a rail of six speakers with one struck through, and the current speaker's yesterday, today and blockers fields.

What it does

Spaces

One memorable link per team, /o/acme/s/platform-team, and a six-character room code that throttles wrong guesses per address. The roster shows who is here and which table they are sitting at.

A space page for Platform Team: a sidebar of sessions and six members with presence dots, recent sessions in the middle, and a panel showing the passcode RIVER-8412 with Copy invite, Copy passcode, New passcode and Make open buttons.A space page for Platform Team: a sidebar of sessions and six members with presence dots, recent sessions in the middle, and a panel showing the passcode RIVER-8412 with Copy invite, Copy passcode, New passcode and Make open buttons.

What it does

Guest links

One URL that seats one person in one room, for 24 hours — no account, no space membership, and nothing else it can reach. Revoke it and whoever redeemed it is out of the room in seconds.

A Guest links dialog over a poker room, with a Create a guest link button and two live links showing 0 of 25 and 3 of 25 redemptions used, each with a Revoke button.A Guest links dialog over a poker room, with a Create a guest link button and two live links showing 0 of 25 and 3 of 25 redemptions used, each with a Revoke button.

What it does

  • No metrics, tracing or access log. JSON logs to stdout are all it emits; probe /readyz and take request metrics from your reverse proxy. LOG_LEVEL=debug adds one line per request with the resolved client address and forwarding chain, for diagnosing a proxy — it is not an access log and is not retained. Releases do ship an SPDX SBOM and digest-bound build provenance; see Supply chain.
  • No roles beyond owner, member, and facilitator. The owner role gates only member management — any member can still rotate the passcode or open the space. Keep membership deliberate, or put an SSO proxy in front of it.
  • Turning on OIDC signs everyone out. Anonymous accounts are not linked to federated ones. Switch on an instance whose history you are willing to leave behind.

All of them are on one page, each with its workaround, because the gaps are the reason to believe the rest.

Known limitations

  • A Postgres blip does not restart the container and drop every socket in the room — the health check never touches the database
  • The container is distroless and non-root, no shell, one static binary — amd64 and arm64
  • CSV exports cannot run formulas in your spreadsheet, and never contain a vote you were not allowed to see

The official Parley project is letsparley.io. The MIT license covers the code, not the name.