[TimescaleDB DevRel here]
Citus has been a great product and tool for helping to push the scaling story in Postgres and certainly has it's uses.
That said, the three big differences that come to mind initially when talking about time-series data are:
1. Partitioning:
In TimescaleDB, hypertables manage chunks/partitions automatically and lots of other value is built on top of the chunk architecture. Regardless of whether you insert new, forward moving data, or load historical data from 10 years ago, you don't have to ensure the partitions are ready and waiting for you, TimescaleDB takes care of that.
In Citus, partition management is still a manual process (at some level). Version 10.2 does provide some new APIs[1] for creating the underlying partitions, but it's still a "manual" process (that can be automated with work).
2. Time-series specific features
Managing and querying time-series data is more than having partitions across multiple nodes/shards. Because we manage the chunk architecture, we also focus on automated policies that help you manage every aspect of how time-series data works. Continuous Aggregates[2] for intelligent aggregate query refreshes. Compression[3] that achieves 93%+ in many production cases. Data retention[4] that makes it easy to manage how much data you keep, both raw and aggregate data! Built-in user defined actions that doesn't require a separate extension like pg_cron.
All of these features can be automated with policies so that they run without you having to call specific APIs on your own (although you can do that too).
Citus has focused on scaling but can be used more generically for time-series data if you want to do more of the maintenance yourself (again, at this point).
3. Compression
I mentioned it above, but one thing TimescaleDB does different compression algorithms for different data types. It's not yet configurable, but it generally provides better performance than what Citus because they use ztsd for all column compression.
Everything else they've announced with columnar compression (hybrid columnar/row data store) has been a TimescaleDB feature since compression was introduced in version 1.5.
HTH!
[1]: https://www.citusdata.com/blog/2021/09/17/citus-10-2-extensi...
[2]: https://docs.timescale.com/timescaledb/latest/how-to-guides/...
[3]: https://docs.timescale.com/timescaledb/latest/how-to-guides/...
[4]: https://docs.timescale.com/timescaledb/latest/how-to-guides/...