Closing prices at the end of each trading day, from 30 Oct 2018. Not a live quote. Adjusted for share splits, so the line has no step at a split; dividends are not added back. P/E and P/FCF are the market value over the last full fiscal year's net income or free cash flow, as public on each day, so they step once a year when the annual report comes out. A hatched band marks a stretch with none: a year of net loss, or of cash burnt.
| FY2018 | FY2019 | FY2020 | FY2021 | FY2022 | FY2023 | FY2024 | FY2025 | |
|---|---|---|---|---|---|---|---|---|
| Revenue | 91.9 | 118.3 | 111.3 | 211.3 | 310.5 | 312.9 | 350.6 | 411.8 |
| Growth | +28.8% | −6.0% | +89.9% | +47.0% | +0.8% | +12.0% | +17.5% | |
| Operating income | 13.8 | 15.6 | −15.4 | 0.1 | −21.0 | −5.6 | −2.1 | −1.9 |
| Net income | 9.2 | 10.8 | −12.6 | −7.7 | −29.2 | −1.8 | 4.0 | 9.7 |
| Growth | +17.1% | −216.6% | +139.2% | |||||
| EPS, diluted | 0.46 | 0.49 | −0.28 | −0.13 | −0.42 | −0.02 | 0.05 | 0.11 |
| FY2018 | FY2019 | FY2020 | FY2021 | FY2022 | FY2023 | FY2024 | FY2025 | |
|---|---|---|---|---|---|---|---|---|
| Gross margin | 42.8% | 40.8% | 37.4% | 41.5% | 38.8% | 36.2% | 36.2% | 34.6% |
| Operating margin | 15.1% | 13.2% | −13.9% | 0.0% | −6.8% | −1.8% | −0.6% | −0.5% |
| Net margin | 10.0% | 9.1% | −11.3% | −3.6% | −9.4% | −0.6% | 1.2% | 2.3% |
| Free cash flow margin | 8.2% | 8.2% | 3.3% | 6.3% | 8.2% | 10.6% | 5.3% | 6.1% |
| FY2018 | FY2019 | FY2020 | FY2021 | FY2022 | FY2023 | FY2024 | FY2025 | |
|---|---|---|---|---|---|---|---|---|
| Operating cash flow | 10.6 | 12.5 | 5.9 | 18.0 | 31.7 | 41.1 | 30.2 | 40.6 |
| Capital expenditure | −3.1 | −2.8 | −2.3 | −4.7 | −6.1 | −7.9 | −11.8 | −15.3 |
| Free cash flow | 7.5 | 9.7 | 3.7 | 13.3 | 25.6 | 33.2 | 18.4 | 25.3 |
| Growth | +29.6% | −62.2% | +260.2% | +93.0% | +29.9% | −44.5% | +37.1% | |
| Buybacks | n/a | 0.0 | −123.9 | 0.0 | 0.0 | 0.0 | 0.0 | −2.0 |
| Dividends paid | n/a | −2.0 | 0.0 | 0.0 | n/a | n/a | n/a | n/a |
| FY2018 | FY2019 | FY2020 | FY2021 | FY2022 | FY2023 | FY2024 | FY2025 | |
|---|---|---|---|---|---|---|---|---|
| Cash | 1.0 | 42.2 | 112.7 | 144.4 | 256.7 | 257.2 | 334.7 | 342.1 |
| Total debt | n/a | n/a | n/a | 0.0 | n/a | n/a | n/a | n/a |
| Net cash (debt) | n/a | n/a | n/a | 144.4 | n/a | n/a | n/a | n/a |
| Shareholders’ equity | 33.4 | 54.0 | 151.7 | 227.1 | 363.0 | 382.9 | 517.8 | 542.1 |
| Debt to equity | n/a | n/a | n/a | 0.00 | n/a | n/a | n/a | n/a |
In millions of USD, except per-share figures and ratios. Fiscal years, as last filed with the SEC.
| Fiscal year | FY2018 31 Dec 2018 | FY2019† 31 Dec 2019 | FY2020† 31 Dec 2020 | FY2021 31 Dec 2021 | FY2022 31 Dec 2022 | FY2023 31 Dec 2023 | FY2024 31 Dec 2024 | FY2025 31 Dec 2025 |
|---|---|---|---|---|---|---|---|---|
| Revenue and profit | ||||||||
| 91.9 | 118.3 | 111.3 | 211.3 | 310.5 | 312.9 | 350.6 | 411.8 | |
| Growth | +28.8% | −6.0% | +89.9% | +47.0% | +0.8% | +12.0% | +17.5% | |
| 52.6 | 70.1 | 69.7 | 123.6 | 189.9 | 199.8 | 223.6 | 269.5 | |
| 39.3 | 48.2 | 41.6 | 87.7 | 120.6 | 113.1 | 127.0 | 142.3 | |
| Growth | +22.7% | −13.7% | +110.8% | +37.5% | −6.2% | +12.2% | +12.1% | |
| 2.6 | 4.3 | 9.3 | 8.5 | 15.8 | 14.7 | 18.3 | 23.7 | |
| 17.6 | 21.3 | 37.7 | 64.8 | 106.0 | 79.8 | 82.1 | 90.5 | |
| 13.8 | 15.6 | −15.4 | 0.1 | −21.0 | −5.6 | −2.1 | −1.9 | |
| Growth | +13.0% | −198.9% | −42,116.0% | |||||
| 13.1 | 15.4 | −15.2 | −2.5 | −20.5 | 4.8 | 11.1 | 15.7 | |
| 3.9 | 4.6 | −2.6 | 5.2 | 8.8 | 6.6 | 7.0 | 6.0 | |
| 9.2 | 10.8 | −12.6 | −7.7 | −29.2 | −1.8 | 4.0 | 9.7 | |
| Growth | +17.1% | −216.6% | +139.2% | |||||
| Per share | ||||||||
| 0.46 | 0.49 | −0.28 | −0.13 | −0.42 | −0.02 | 0.05 | 0.11 | |
| 0.46 | 0.49 | −0.28 | −0.13 | −0.42 | −0.02 | 0.05 | 0.11 | |
| Growth | +6.5% | −157.1% | +120.0% | |||||
| 0.0 | 21.1 | 44.7 | 58.7 | 69.2 | 75.2 | 77.5 | 84.5 | |
| 0.0 | 21.1 | 44.7 | 58.7 | 69.2 | 75.2 | 80.0 | 86.9 | |
| Growth | +104,376.4% | +111.8% | +31.1% | +18.0% | +8.7% | +6.4% | +8.7% | |
† The diluted share count jumps at 2019 and 2020, so per-share figures either side of that column are not comparable. Usually a split, but the break lands on the restatement boundary rather than on the split date, because every column is that period’s latest filing.