Consolidated Statements of Stockholders' Equity - USD ($) $ in Thousands | Total | IPO | Preferred stock | Preferred stockConvertible preferred stock | Common stock | Common stockIPO | Additional paid-in capital | Additional paid-in capitalIPO | Accumulated other comprehensive income (loss) | Accumulated deficit |
Stock outstanding, beginning balance (in shares) at Dec. 31, 2017 | | | | 24,642,000 | | | | | | |
Stock, beginning balance at Dec. 31, 2017 | | | | $ 12 | | | | | | |
Common stock, shares outstanding, beginning balance (in shares) at Dec. 31, 2017 | | | | | 2,979,000 | | | | | |
Common stock, beginning balance at Dec. 31, 2017 | $ 61,283 | | | | $ 2 | | $ 180,657 | | $ (719) | $ (118,669) |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | | | | | |
Net income (loss) | 7,569 | | | | | | | | | 7,569 |
Proceeds from initial public offering (in shares) | | | | | | 6,900,000 | | | | |
Proceeds from initial public offering | | $ 110,400 | | | | $ 1 | | $ 110,399 | | |
Conversion of convertible preferred stock to common stock (in shares) | | | | (24,642,000) | 24,642,000 | | | | | |
Conversion of convertible preferred stock to common stock | 0 | | | $ (12) | $ 12 | | | | | |
Exercise of warrants for common stock (in shares) | | | | | 15,000 | | | | | |
Exercise of warrants for common stock | 0 | | | | | | | | | |
Exercise of stock options (in shares) | | | | | 256,000 | | | | | |
Exercise of stock options | 123 | | | | | | 123 | | | |
Stock-based compensation | 968 | | | | | | 968 | | | |
Deferred offering costs | (9,469) | | | | | | (9,469) | | | |
Cumulative translation adjustment | (638) | | | | | | | | (638) | |
Stock outstanding, ending balance (in shares) at Jun. 30, 2018 | | | | 0 | | | | | | |
Stock, ending balance at Jun. 30, 2018 | | | | $ 0 | | | | | | |
Common stock, shares outstanding, ending balance (in shares) at Jun. 30, 2018 | | | | | 34,792,000 | | | | | |
Common stock, ending balance at Jun. 30, 2018 | 170,236 | | | | $ 15 | | 282,678 | | (1,357) | (111,100) |
Stock outstanding, beginning balance (in shares) at Mar. 31, 2018 | | | | 24,642,000 | | | | | | |
Stock, beginning balance at Mar. 31, 2018 | | | | $ 12 | | | | | | |
Common stock, shares outstanding, beginning balance (in shares) at Mar. 31, 2018 | | | | | 3,056,000 | | | | | |
Common stock, beginning balance at Mar. 31, 2018 | 64,585 | | | | $ 2 | | 180,093 | | 231 | (115,753) |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | | | | | |
Net income (loss) | 4,653 | | | | | | | | | 4,653 |
Proceeds from initial public offering (in shares) | | | | | | 6,900,000 | | | | |
Proceeds from initial public offering | | $ 110,400 | | | | $ 1 | | $ 110,399 | | |
Conversion of convertible preferred stock to common stock (in shares) | | | | (24,642,000) | 24,642,000 | | | | | |
Conversion of convertible preferred stock to common stock | 0 | | | $ (12) | $ 12 | | | | | |
Exercise of warrants for common stock (in shares) | | | | | 15,000 | | | | | |
Exercise of warrants for common stock | 0 | | | | | | | | | |
Exercise of stock options (in shares) | | | | | 179,000 | | | | | |
Exercise of stock options | 62 | | | | | | 62 | | | |
Stock-based compensation | 806 | | | | | | 806 | | | |
Deferred offering costs | (8,682) | | | | | | (8,682) | | | |
Cumulative translation adjustment | (1,588) | | | | | | | | (1,588) | |
Stock outstanding, ending balance (in shares) at Jun. 30, 2018 | | | | 0 | | | | | | |
Stock, ending balance at Jun. 30, 2018 | | | | $ 0 | | | | | | |
Common stock, shares outstanding, ending balance (in shares) at Jun. 30, 2018 | | | | | 34,792,000 | | | | | |
Common stock, ending balance at Jun. 30, 2018 | $ 170,236 | | | | $ 15 | | 282,678 | | (1,357) | (111,100) |
Stock outstanding, beginning balance (in shares) at Dec. 31, 2018 | 0 | | 0 | | | | | | | |
Stock, beginning balance at Dec. 31, 2018 | | | $ 0 | | | | | | | |
Common stock, shares outstanding, beginning balance (in shares) at Dec. 31, 2018 | 36,705,000 | | | | 36,705,000 | | | | | |
Common stock, beginning balance at Dec. 31, 2018 | $ 217,783 | | | | $ 15 | | 324,656 | | (2,157) | (104,731) |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | | | | | |
Net income (loss) | $ (1,390) | | | | | | | | | (1,390) |
Exercise of stock options (in shares) | 518,000 | | | | 518,000 | | | | | |
Exercise of stock options | $ 915 | | | | | | 915 | | | |
Issuance of common stock pursuant to vesting of restricted stock awards and units, net of stock withheld for tax (in shares) | | | | | 399,000 | | | | | |
Issuance of common stock pursuant to vesting of restricted stock awards and units, net of stock withheld for tax | $ (480) | | | | | | (480) | | | |
Issuance of common stock under the Employee Stock Purchase Plan (in shares) | 43,000 | | | | 43,000 | | | | | |
Issuance of common stock under the Employee Stock Purchase Plan | $ 762 | | | | | | 762 | | | |
Stock-based compensation | 4,290 | | | | | | 4,129 | | | 161 |
Cumulative translation adjustment | $ 57 | | | | | | | | 57 | |
Stock outstanding, ending balance (in shares) at Jun. 30, 2019 | 0 | | 0 | | | | | | | |
Stock, ending balance at Jun. 30, 2019 | | | $ 0 | | | | | | | |
Common stock, shares outstanding, ending balance (in shares) at Jun. 30, 2019 | 37,665,000 | | | | 37,665,000 | | | | | |
Common stock, ending balance at Jun. 30, 2019 | $ 221,937 | | | | $ 15 | | 329,982 | | (2,100) | (105,960) |
Stock outstanding, beginning balance (in shares) at Mar. 31, 2019 | | | 0 | | | | | | | |
Stock, beginning balance at Mar. 31, 2019 | | | $ 0 | | | | | | | |
Common stock, shares outstanding, beginning balance (in shares) at Mar. 31, 2019 | | | | | 36,906,000 | | | | | |
Common stock, beginning balance at Mar. 31, 2019 | 218,663 | | | | $ 15 | | 326,870 | | (2,417) | (105,805) |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | | | | | |
Net income (loss) | (155) | | | | | | | | | (155) |
Exercise of stock options (in shares) | | | | | 317,000 | | | | | |
Exercise of stock options | 449 | | | | | | 449 | | | |
Issuance of common stock pursuant to vesting of restricted stock awards and units, net of stock withheld for tax (in shares) | | | | | 399,000 | | | | | |
Issuance of common stock pursuant to vesting of restricted stock awards and units, net of stock withheld for tax | (480) | | | | | | (480) | | | |
Issuance of common stock under the Employee Stock Purchase Plan (in shares) | | | | | 43,000 | | | | | |
Issuance of common stock under the Employee Stock Purchase Plan | 762 | | | | | | 762 | | | |
Stock-based compensation | 2,381 | | | | | | 2,381 | | | 0 |
Cumulative translation adjustment | $ 317 | | | | | | | | 317 | |
Stock outstanding, ending balance (in shares) at Jun. 30, 2019 | 0 | | 0 | | | | | | | |
Stock, ending balance at Jun. 30, 2019 | | | $ 0 | | | | | | | |
Common stock, shares outstanding, ending balance (in shares) at Jun. 30, 2019 | 37,665,000 | | | | 37,665,000 | | | | | |
Common stock, ending balance at Jun. 30, 2019 | $ 221,937 | | | | $ 15 | | $ 329,982 | | $ (2,100) | $ (105,960) |