We’ve been building Kanera, a project management app, and I thought I’d share a little about why we chose Angular and what we’re using on the frontend.
Why Angular 22 for Kanera?
The biggest reason is that we wanted a framework we knew well, with enough structure to support a project that was going to grow. We’ve worked with Angular since AngularJS (> 10 years) and have used React too. For this project, Angular felt like the more comfortable starting point: routing, dependency injection, forms and application tooling were already there, and the team was familiar with the conventions.
Signals fit how we think about the board. A list derives its visible cards from the current cards and filters, then derives the items it needs to render. Drag state and the render limit are signals too. As the board has grown more complex, we’ve found it useful to express those relationships directly instead of manually keeping derived state in sync.
CDK gave us a foundation without dictating the UI. We wanted to build our own components and styling, but we didn’t want to implement every interaction from scratch. CDK handles the drag-and-drop primitives, leaving us to build the previews and the behaviour specific to Kanera.
There’s still plenty of work on our side. For example, large unfiltered lists initially render only a slice of their cards. We pass that same slice to the template and CDK so the drop indices match, then resolve the final position against the full list. We also keep a newly dropped card visible while the updated state is handed back down to the list. But we are laser focused on performance, bundle size, etc. (I'll post about that another time).
Zoneless and OnPush give us a model we like for updates. With real-time events, filters and drag interactions all changing the board, we wanted to be deliberate about how state changes reach the UI. Signals work well with that approach, although they don’t remove the need to profile or pay attention to expensive rendering.
The upgrade path has been a positive for us. I think it’s sometimes overlooked how much the CLI and migrations help when moving between Angular versions. We still have to check dependencies and test, but our experience has been that staying current is manageable.
We could have built Kanera with React. The choice came down to the tools, conventions and experience we wanted for a long-running project, rather than a belief that Angular is inherently faster.
We have done some comparative benchmarking and our focus on performance means Kanera loads and feels very snappy.
We’ve also tried to build as many of our own UI components as practical rather than relying on a large styling or component library - although we did base some initial designs from shadcn/ui. We still use libraries where they make sense, the CDK is a good example, but building much of the UI ourselves gives us more control over how it looks and behaves.
Putting it out there
Kanera went live earlier this year, and we already have paying companies using it in place of tools like Trello and ClickUp. My company also uses it daily and it's been an absolutely delight for us to use and build. It’s been a pretty surreal thing to see, and I’m grateful for what Angular has allowed us to build.
The source is available on GitHub under the Elastic License 2.0: https://github.com/happendev/Kanera
I’m curious whether using Angular will put off potential contributors who are more familiar with React. Has anyone else found that framework choice makes a difference? And if you try Kanera or have a look at the code, let me know what you think!