Traditional vs Roth 401(k) in 2026: Tax Implications and How to Track Both in Beancount

The Big Decision: Pre-Tax or After-Tax?

As a tax professional and IRS Enrolled Agent, the Traditional vs. Roth 401(k) question is probably the #1 thing my clients ask me about every January. With the 2026 limit now at $24,500, and several new SECURE 2.0 Act rules taking effect, I wanted to lay out the tax implications clearly and show you how to track both types properly in Beancount.

The Fundamental Tax Difference

Let me break this down as simply as I can:

Traditional 401(k) Roth 401(k)
Contributions Pre-tax (reduces taxable income NOW) After-tax (no current tax break)
Growth Tax-deferred Tax-free
Withdrawals Taxed as ordinary income Tax-free (if qualified)
Best if You expect lower tax rate in retirement You expect same or higher tax rate
RMDs Required at age 73 NO longer required (SECURE 2.0)

That last row is a big deal. Starting in 2024, Roth 401(k) accounts are no longer subject to Required Minimum Distributions. This is a game-changer for estate planning and makes Roth even more attractive for people who don’t need the money in early retirement.

2026 Rule Change: Mandatory Roth Catch-Up for High Earners

Here’s the new wrinkle that trips people up: if your FICA wages exceeded $150,000 in the prior year (2025) and you’re age 50 or older, your catch-up contributions in 2026 must be designated as Roth. No more pre-tax catch-up for high earners. The standard catch-up is $8,000, and for ages 60-63 there’s a “super catch-up” of $11,250.

Setting Up Both in Beancount

Here’s my recommended account structure for tracking Traditional and Roth side by side:

; === Traditional 401(k) Accounts ===
2020-01-01 open Assets:Retirement:Traditional401k:Employee
2020-01-01 open Assets:Retirement:Traditional401k:Employer  ; Match always goes here
2020-01-01 open Assets:Retirement:Traditional401k:Investments:VTSAX
2020-01-01 open Assets:Retirement:Traditional401k:Investments:VBTLX

; === Roth 401(k) Accounts ===
2020-01-01 open Assets:Retirement:Roth401k:Employee
2020-01-01 open Assets:Retirement:Roth401k:Investments:VTSAX
2020-01-01 open Assets:Retirement:Roth401k:Investments:VBTLX

; === Tax Impact Tracking ===
2020-01-01 open Expenses:Taxes:Federal:IncomeTax
2020-01-01 open Expenses:Taxes:Federal:IncomeTax:Deferred  ; Traditional defers this
2020-01-01 open Income:Salary:Gross

Recording a Split Contribution

Many people (myself included) recommend splitting contributions between Traditional and Roth to hedge against future tax rate uncertainty. Here’s how to record a 60/40 Traditional/Roth split:

2026-01-31 * "Employer" "January Paycheck - 401k Split"
  Income:Salary:Gross                                -6,250.00 USD
  ; Traditional 401(k) - reduces taxable income
  Assets:Retirement:Traditional401k:Employee            565.38 USD
  ; Roth 401(k) - paid with after-tax dollars
  Assets:Retirement:Roth401k:Employee                   376.93 USD
  ; Combined employee deferral: $942.31/paycheck
  Expenses:Taxes:Federal:IncomeTax                      937.50 USD
  Expenses:Taxes:State:IncomeTax                        312.50 USD
  Expenses:Taxes:FICA:SocialSecurity                    387.50 USD
  Expenses:Taxes:FICA:Medicare                           90.63 USD
  Assets:Bank:Checking                                3,579.56 USD

; Employer match is ALWAYS pre-tax, even if your contributions are Roth
2026-01-31 * "Employer" "401k Employer Match"
  Income:Salary:Match401k                              -312.50 USD
  Assets:Retirement:Traditional401k:Employer             312.50 USD

Note that critical detail: employer match always goes into the Traditional (pre-tax) bucket, regardless of whether your own contributions are Traditional or Roth. This is an IRS rule, not an employer choice.

Tax Savings Analysis with BQL

Here’s a query I run to see the annual tax impact of my Traditional contributions — essentially, how much I’m deferring in federal income tax:

SELECT
  year, sum(position) as traditional_contributions
WHERE
  account = 'Assets:Retirement:Traditional401k:Employee'
GROUP BY year
ORDER BY year DESC

For someone in the 24% federal bracket, a $14,700 Traditional contribution (60% of $24,500) saves roughly $3,528 in federal income tax for the year. That’s real money, though you’ll eventually pay tax on withdrawals.

The Crossover Analysis

The million-dollar question: at what point does Roth “win” over Traditional? The key variables are:

  1. Current marginal tax rate vs. expected retirement tax rate
  2. Years until withdrawal (more years = more tax-free growth advantage for Roth)
  3. State tax situation (retiring to a no-income-tax state tips the scale toward Traditional)

My rule of thumb for clients:

  • Salary under $100k: Lean Roth (you’re in a lower bracket now)
  • Salary $100k-$200k: Split 50/50 or 60/40 Traditional
  • Salary over $200k: Lean Traditional (maximize the tax deduction now)

Tracking the Tax Basis for Future Withdrawals

One thing that many Beancount users forget: you need to track your Roth 401(k) contribution basis separately, because it matters for the 5-year rule on tax-free withdrawals. I add metadata to every Roth contribution:

2026-01-31 * "Employer" "Roth 401k contribution"
  Assets:Retirement:Roth401k:Employee     376.93 USD
    roth-basis: 376.93
    tax-year: 2026
  Income:Salary:Gross                    -376.93 USD

This makes it easy to query total basis when you eventually start withdrawals, and to verify you’ve met the 5-year holding requirement.

Year-End Verification

At tax time, I reconcile against the W-2 Box 12:

  • Code D: Traditional 401(k) deferrals
  • Code AA: Roth 401(k) deferrals
; Verify against W-2 Box 12
2026-12-31 balance Assets:Retirement:Traditional401k:Employee  14,700.00 USD
  ; Should match W-2 Box 12 Code D
2026-12-31 balance Assets:Retirement:Roth401k:Employee          9,800.00 USD
  ; Should match W-2 Box 12 Code AA
; Total: $14,700 + $9,800 = $24,500 (at the limit)

What’s your split strategy? I’m curious how others in this community are thinking about Traditional vs. Roth for 2026, especially with the new catch-up rules.

Excellent breakdown, Tina! The metadata approach for tracking Roth basis is brilliant — I’m stealing that for my own setup.

I want to push back slightly on the salary-based rule of thumb though. As someone deep in the FIRE community, the analysis changes significantly if you plan to retire early. Here’s why:

If you’re aiming to retire at 45 and your spending in early retirement will be, say, $50,000/year drawn from taxable accounts, your effective tax rate during those years could be extremely low (possibly 0% federal on qualified dividends and long-term capital gains). During that period, you can do Roth conversions from your Traditional 401(k)/IRA at a very low tax rate.

So the optimal strategy for many FIRE folks is actually:

  1. Contribute Traditional now (get the 24% deduction)
  2. Retire early and live off taxable savings
  3. Convert Traditional to Roth during low-income early retirement years at 10-12% rates
  4. Access Roth funds tax-free after age 59.5

This means even for someone earning $150k+, going 100% Traditional can be better than a split — IF you have a Roth conversion ladder plan. The tax arbitrage between your current 24% rate and the 10-12% conversion rate is substantial over decades.

That said, tax diversification has real value — nobody knows what Congress will do to tax rates in 20 years. Your 60/40 split is solid advice for anyone who doesn’t want to bet on a specific strategy.

This is a great thread. I have several small business clients who offer 401(k) plans and the Traditional vs. Roth question comes up constantly in our year-end planning meetings.

One thing I want to add from the employer/bookkeeping side: if you’re a small business owner participating in your own company’s 401(k), the distinction matters for your business books too. The employer match is a business expense that reduces your company’s taxable income. I track it like this in the business Beancount file:

; Business side - employer match is a deductible expense
2026-01-31 * "401k Match" "Employee match - January"
  Expenses:Benefits:Retirement:Match    2,500.00 USD
  Assets:Bank:Business:Checking        -2,500.00 USD

And then on the personal side, the employee receives it as we’ve been discussing. Having separate Beancount files for business and personal books keeps things clean, but you need to make sure the numbers reconcile between them.

@tax_tina — quick question: with the 2025 TCJA provisions potentially sunsetting, are you advising clients differently on the Traditional vs. Roth split? If tax rates go up, doesn’t that shift the calculus more toward Roth? I’ve been reading mixed signals about whether Congress will extend the current brackets.

Great discussion all around. I want to add a practical Beancount tip for anyone maintaining both Traditional and Roth 401(k) accounts.

One thing that helped me tremendously was creating a custom Fava dashboard that shows the Traditional vs. Roth breakdown visually. You can do this by putting your accounts in a specific hierarchy and then using Fava’s built-in treemap:

Assets:Retirement:Traditional401k  --> shows up as one color
Assets:Retirement:Roth401k         --> shows up as another color

But more practically, I wrote a small Python script that reads my Beancount file and generates a year-over-year comparison of my Traditional vs. Roth balances. Over the past 4 years, seeing the growth side by side really helped me understand the long-term impact of my split decisions.

@finance_fred raises a great point about the Roth conversion ladder. If anyone’s interested, I actually track my planned conversions as “future transactions” in a separate Beancount file called projections.beancount. I don’t include it in my main file (so it doesn’t affect real reports), but it’s useful for modeling scenarios. The plain text format makes this kind of what-if analysis really straightforward — just duplicate your file and change the numbers.

One thing I’d caution beginners against: don’t overthink the Traditional vs. Roth decision to the point of paralysis. Both are vastly better than not contributing at all. If you can’t decide, a 50/50 split is a perfectly reasonable default. You can always adjust next year.