What This Thing Actually Is
Lith is a battery management and cell-matching utility that most people never hear about until they're trying to build a proper LiFePO4 pack for a home energy wall or an EV conversion. My Very Own Lith Guide walks you through using it without pretending it's beginner-friendly, because it isn't. There are plenty of tutorials online about wiring lithium batteries. There are almost none that explain what to do when your cell voltages are off by 0.05V after the first cycle and your BMS is throwing balance warnings before the pack has even been charged once. I wrote this guide because I spent three weeks debugging a pack that was failing at the most mundane stage — initial formation cycling — and the only person who had written about the exact issue was on a forum thread from 2019 that got locked. The guide covers the workflow I use: cell sorting, initial resting period, BMS calibration, formation cycling, and the specific Lith commands that handle each stage. It also includes the configuration files I use, not the default ones, because the defaults are wrong for anything above a small storage setup.
Getting It Running
Lith runs on Linux. It has a Qt frontend and talks to BMS hardware over CAN bus or UART. If you're on Windows, you'll need a VM or a dual-boot partition. I tried running it under WSL2 once. It saw the USB-CAN adapter but couldn't claim the serial port properly. That cost me about two hours. Just use Linux natively. Download the latest release from the official repository. The source is available under GPL, but honestly, the binaries are fine. The project doesn't move fast — new releases come out maybe twice a year — and the changelog always lists exactly what changed in the CAN parsing layer. I stick to the stable branch. The development branch introduced a regression in 2023 where voltage sampling intervals became inconsistent during active balancing, and I lost a whole cycle of formation data because of it.
The Setup You Actually Need
Most people skip the hardware validation step and go straight into configuration. Don't do that. I've seen it cause problems more than anything else in this space. Verify that your BMS is actually reporting what it claims. Pull the raw CAN frames and check the voltage registers against a multimeter. Your BMS might be averaging cells internally and hiding a single bad cell behind a perfectly fine group average. I had a 16S LiFePO4 pack where the BMS showed all cells within 0.02V of each other, but one cell was sitting at 2.8V and the rest were at 3.35V. The averaging algorithm masked it completely. Multimeter check caught it. Lith wouldn't have flagged that unless I forced individual cell logging. Once you've verified the hardware, the configuration file in the guide is where things get specific. The voltage thresholds, the balancing current limits, the formation rate — these aren't guesswork. They come from the chemistry. LiFePO4 has a very flat discharge curve. A 0.1V difference near the top of charge means something completely different than a 0.1V difference near the middle. The guide explains the hysteresis bands I use and why they're wider than what most online calculators suggest.
Get the Full Details

Formation Cycling — Where Everyone Messes Up
This is the part that matters most. Formation cycling isn't just charging and discharging. It's about controlling the rate, the resting periods between cycles, and when to trigger passive balancing. Most guides tell you to do three cycles at C/5. That's fine for factory-built cells. It's not fine for reclaimed cells or cells you've sorted yourself. I use a longer first cycle at C/10, then step up. The resting period between cycles needs to be at least two hours for the voltage to settle. If you skip it, your capacity measurement will be wrong by anywhere from 3% to 8%, depending on how far the cells were from equilibrium when you started. I ran into a specific edge case during a recent build where the BMS would trigger overvoltage protection during the second formation cycle at exactly 3.65V per cell, even though the pack manager showed no individual cell above 3.63V. The issue was that the BMS's per-cell ADC was sampling at a different point in the cycle than the pack-level voltage sensor. Lith has a command — cell_sync recalibrate — that forces the BMS to re-sample all channels simultaneously. Running that before the next cycle fixed it. The guide covers this exact scenario with the terminal commands and the log output you should expect to see afterward.
Common Pitfalls
The biggest one is assuming Lith will handle cell degradation gracefully. It won't. Lith tracks cell parameters, but it doesn't predict failure. If a cell is going to drop capacity, Lith will show you the trend over time. It won't warn you until the trend is already obvious. I've lost whole packs because I trusted the software to flag issues early. It doesn't. You need to watch the data yourself. Another issue is the CAN bus timing. If your BMS and your Lith interface are on different baud rates, or if there's noise on the bus from a poorly shielded cable run, you'll get intermittent packet loss. The logs will show gaps. Those gaps look normal until you're trying to reconstruct a full cycle profile and realize half your voltage data is missing. Use shielded cable. Keep CAN lines away from high-current paths. This isn't theoretical — I learned it the hard way on a 48V 200Ah pack where the motor controller's PWM was coupling noise directly into the CAN bus.
When Lith Isn't the Right Tool
If you're building a small powerwall with pre-matched cells from a reputable supplier, you probably don't need all of this. A simple charger and a basic BMS will get you through. Lith is overkill for that. It's for when you're doing custom builds, working with reclaimed cells, or need detailed cycle data for warranty claims or forensic analysis after a pack fails. In those cases, the guide saves you from the trial-and-error phase that usually takes a week or two. There's also no GUI for mobile. If you need to monitor your pack while it's running in the field, you'll need to set up SSH access to the running machine or use a separate telemetry solution. Lith logs everything to disk, so you can pull the data later, but real-time monitoring isn't built in and isn't planned. I use a simple Python script that parses the CSV export and sends alerts via a webhook, but that's outside the scope of the guide.

Bottom Line
The guide is a living document. It gets updated when I find a new edge case or when the Lith project ships a change that affects the workflow. I don't promise it'll work for your exact setup. Battery builds are variable. But it covers the situations I've actually encountered, not the ones that look good on paper. If you're serious about lithium pack building and you want data you can trust instead of guessing from forum advice, this is where I'd start.