A electronic programmer (820A-N, 1000), comprising: a user interface (840, 1010) configured to receive an input from a user and communicate an output to the user; an electronic memory storage configured to store programming instructions; and one or more processors configured to execute the programming instructions to perform the following steps: informing a user that a user-supplied electrical stimulation waveform (1020A-1020D) can be entered into the electronic programmer (820A-N, 1000); detecting, at least in part via the user interface of the electronic programmer, that the user-supplied electrical stimulation waveform (1020A-1020D) has been received by the electronic programmer (820A-N, 1000), the detecting comprising detecting a waveform (1020A-1020D) manually drawn on the user interface by a stylus or a finger of the user; determining whether the user-supplied electrical stimulation waveform is compliant with a set of predetermined restrictions; and instructing, in response to a determination that the user-supplied electrical stimulation waveform (1020A-1020D) is compliant with the set of predetermined restrictions, a pulse generator to generate electrical stimulation pulses based on the user-supplied electrical stimulation waveform. a user interface (840, 1010) configured to receive an input from a user and communicate an output to the user; an electronic memory storage configured to store programming instructions; and one or more processors configured to execute the programming instructions to perform the following steps: informing a user that a user-supplied electrical stimulation waveform (1020A-1020D) can be entered into the electronic programmer (820A-N, 1000); detecting, at least in part via the user interface of the electronic programmer, that the user-supplied electrical stimulation waveform (1020A-1020D) has been received by the electronic programmer (820A-N, 1000), the detecting comprising detecting a waveform (1020A-1020D) manually drawn on the user interface by a stylus or a finger of the user; determining whether the user-supplied electrical stimulation waveform is compliant with a set of predetermined restrictions; and instructing, in response to a determination that the user-supplied electrical stimulation waveform (1020A-1020D) is compliant with the set of predetermined restrictions, a pulse generator to generate electrical stimulation pulses based on the user-supplied electrical stimulation waveform. informing a user that a user-supplied electrical stimulation waveform (1020A-1020D) can be entered into the electronic programmer (820A-N, 1000); detecting, at least in part via the user interface of the electronic programmer, that the user-supplied electrical stimulation waveform (1020A-1020D) has been received by the electronic programmer (820A-N, 1000), the detecting comprising detecting a waveform (1020A-1020D) manually drawn on the user interface by a stylus or a finger of the user; determining whether the user-supplied electrical stimulation waveform is compliant with a set of predetermined restrictions; and instructing, in response to a determination that the user-supplied electrical stimulation waveform (1020A-1020D) is compliant with the set of predetermined restrictions, a pulse generator to generate electrical stimulation pulses based on the user-supplied electrical stimulation waveform.