How about Grbl on an Arduino Mini? Interface is G-code streamed over the UART; outputs up to 30khz step & direction; as well as supporting limit switches, homing, and outputs for coolant pumps & spindles.
https://github.com/gnea/grbl
https://store.arduino.cc/usa/arduino-pro-mini
Note that even though the Pro Mini is listed as retired by Arduino.cc; it's still widely available from the usual sources (Amazon, eBay, BangGood, Sparkfun, Adafruit, etc). Alternatively, if you are making your own PCB; you can just drop an ATMega328 on it to be the pulse generator (note that you will need to provide a 16mhz crystal for the clock; the internal RC oscillator isn't really good enough).
If you would like a setup that has more UI functionality & expandability while remaining an integrated system; I have made a fork of the version of Grbl for the Arduino Mega and added a bunch of functionality to it; including support for common 3D printer character-based LCD control panels, jog wheels, and a keypad for controlling the machine and entering data. I am in the process of building an expansion interface for the software that will allow end-user created code modules to be easily integrated into the Grbl system; and still allow for easy upgrades of the base Grbl software (an early version of this can be found in the grbl_expansion_interface.h & grbl_expansion_interface.c files in my version of Grbl-mega).
My version can be found here:
https://github.com/bdurbrow/grbl-Mega/