Step by step integration solution that shows where substitutions occur without using Wolfram Alpha

I know there is heaps of people’s code around the forum with code that shows step by step solutions for integration. But they don’t specify where certain things happen like substitution (u sub) or recognition by integration and stuff like that. Is there a code (has to work offline) that can show you what is being made (like u sub, simplify, expand, double angle…) for each step?