Collaborate
Open source. Not the LinkedIn kind where people post about giving back and then ghost the repo. The real kind.
The situation
I built popser because I needed toast notifications that don't fight me on styling, leak memory, or require a PhD in CSS specificity. It works. It's tested. It ships at 8.3 KB gzipped.
But one person building a component library is a bottleneck, not a strategy. The code is MIT-licensed, the repo is on GitHub, and I genuinely want people to contribute. Not in a “contributions welcome” badge-on-the-README way. In a “please help me make this thing better” way.
The foundation matters
Popser is built on Base UI — the headless React component library built by the teams behind Radix, Floating UI, and MUI. This is where React component architecture is heading. Proper primitives, proper accessibility, proper CSS transitions. No opinions about your styles.
Contributing to popser means working with Base UI primitives. If you understand createToastManager(), reactive stores, and headless components, you already know the architecture. If you don't, here's why it matters.
What I actually need help with
Not a wishlist. Not a backlog grooming exercise. Real things that would make popser better.
How to get started
git clone https://github.com/vcode-sh/popser.git
cd popser && npm installnpm run dev # watch build
npm run web:dev # docs site
npm run test:watch # testsnpm run type-check && npm run test && npm run lint && npm run buildExplain what changed and why. One thing per PR. Tests included. Read the full contributing guide if you want the details.
Ground rules
No Code of Conduct document. Just common sense. Be decent, be helpful, be honest. If someone's code needs work, say so kindly. If someone's idea is brilliant, say so loudly. If you disagree, explain why with reasoning, not volume.
I review every PR personally. I'll give honest feedback. Sometimes I'll say no. That's not a rejection of you — it's a rejection of that particular approach. Come back with something different. Or tell me why I'm wrong. I've been wrong before.
The project at a glance
| Stack | React, Base UI, TypeScript 5.9, Vitest, Biome |
| Bundle | 8.3 KB gzipped (JS + CSS) |
| Tests | 419 tests, 90% coverage thresholds |
| CI | Node 22 + 24, Bun, Codecov, bundle size tracking |
| Node | >= 22.0.0 |
| License | MIT |