Any memory expansion, from TI's stock thing in the expansion box to a home-made inside the console (I have both). Then some command module which can allow you to load memory image files from cassette. Editor/Assembler will do. But you still have to get the program you'd like to load to the tape in the first place.
I was once involved in developing a simple word processor for a very specific hardware:
32 K RAM expansion
The word processor was written in BASIC, but with assembly language support. Normally Extended BASIC can't load assembly programs from tape, but either you have to include the code in the BASIC program and poke it into memory, or you load it from disk. So I wrote a program which was the simplest possible file loader, and the BASIC program poked that into memory. Once you loaded the BASIC program (OLD CS1) and typed RUN, this assembly program was created and run. It would immediately load another file from the tape, and this file contained the whole support routine for the word processor.
The actual assembly support could then load and save the word processor files to both disk and cassette as memory image files.
To create a program, you first had to do a SAVE CS1 for the BASIC program, then load (from disk) and run a program which created and saved the assembly support file immediately after the BASIC program on the tape. After that, you could take the tape to a system which had no disk, just a tape recorder, and run it there.