American farmers bet on solar. Then Trump changed the rules.

Like
Liked

Date:

Over the past few years, Kentucky sheep farmer Daniel Bell has been expanding his flock, and that meant he needed to build a new barn. His land is far from the power lines he’d need to heat it, so he figured rooftop solar would be ideal.

To help pay for it, he wanted to apply for a renewable-energy grant through the US Department of Agriculture’s Rural Energy for America Program, or REAP — only to find that the Trump administration had effectively halted grants through the program. Bell said that made it impossible to proceed with the idea on his land.

“For me, it’s just been about freedom. Freedom to lower bills, freedom to control my own assets,” he said.

Daniel Bell, wearing a cap and green jacket, walks across a field alongside a row of solar panels.
Daniel Bell watches his sheep graze at his farm in Lancaster, Kentucky.
Joshua A. Bickel / AP Photo

Many farmers work on the thinnest margins, fighting to stay profitable. Some, looking to cut costs on electricity, turn to the federal government for a little extra cash to help them install solar panels on top of barns, grain elevators, or offices. Others turn to commercial renewable energy leases as both an alternative income stream and a way to put fallow land to work.

Within the first year of President Trump’s second term, two federal programs critical to the growth of solar energy production — REAP and the clean energy tax credit — have been rolled back. To document how those policy changes are affecting farmers, The Associated Press and Grist analyzed data on both commercial-scale solar projects and small-scale rural energy development across the country. They found that, so far this fiscal year, the U.S. Department of Agriculture hasn’t awarded a dollar in rural energy grants or loan guarantees. Reporters contacted roughly a quarter of the nearly 300 developers that have proposed projects on agricultural land in the last two years, and found that they are either preparing their businesses to do future projects without federal support, or have already lost millions in investment because of the administration’s new tax credit policies.

.reap-ira-breakdown {
–color-primary: #3c3830;
–color-secondary: #777;
–color-orange: #F79945;
–color-turquoise: #12A07F;
–color-fuchsia: #AC00E8;
–color-bluey: #3977F3;
–color-earth: #3c3830;
–typography-primary: “PolySans”, Arial, sans-serif;
–typography-secondary: “Basis Grotesque Pro”, Arial, sans-serif;
–spacing-base: 10px;

box-sizing: border-box;
font-family: var(–typography-secondary);
margin: 1.5rem auto;
padding: 0;
position: relative;
width: 100%;
}

.reap-ira-breakdown * { box-sizing: border-box; }
.reap-ira-breakdown svg text { font-family: var(–typography-secondary); }

.reap-ira-breakdown__title {
font-family: var(–typography-primary);
font-size: 24px;
margin: var(–spacing-base) 0;
text-align: left;
}

.reap-ira-breakdown__subtitle {
font-family: var(–typography-secondary);
color: var(–color-primary);
font-size: 18px;
margin: 0 0 var(–spacing-base);
text-align: left;
}

.reap-ira-breakdown__axis-label {
color: var(–color-primary);
font-size: 14px;
}

.reap-ira-breakdown .axis-grid line {
stroke: #e0e0e0;
stroke-opacity: 0.7;
shape-rendering: crispEdges;
}
.reap-ira-breakdown .axis-grid .domain { stroke: none; }
.reap-ira-breakdown .domain { stroke: #3c3830; }

.reap-ira-breakdown__legend {
display: flex;
flex-wrap: wrap;
gap: 6px 15px;
margin-bottom: 10px;
}

.reap-ira-breakdown__legend-item {
display: flex;
align-items: center;
gap: 6px;
font-size: 14px;
color: var(–color-primary);
}

.reap-ira-breakdown__legend-box {
width: 14px;
height: 14px;
border-radius: 2px;
flex-shrink: 0;
}

.reap-ira-breakdown__footer { display: flex; justify-content: space-between; align-items: flex-end; margin-top: 0px; gap: 16px; }
.reap-ira-breakdown__credits { display: flex; flex-direction: column; }
.reap-ira-breakdown__note { color: var(–color-secondary); font-size: 12px; margin-top: 0; margin-bottom: 4px; display: inline-block; font-style: italic; }
.reap-ira-breakdown__source { color: var(–color-secondary); font-size: 12px; margin-top: 0; display: inline-block; }
.reap-ira-breakdown__credit { color: var(–color-secondary); font-size: 12px; margin-top: 3px; font-style: italic; font-weight: bold; display: inline-block; }
.reap-ira-breakdown__logos { display: flex; align-items: center; gap: 10px; margin-left: auto; padding-right: 20px; }
.reap-ira-breakdown__logo-ap { height: 20px; width: auto; transform: translateY(-2px); }
.reap-ira-breakdown__logo { height: auto; max-width: 62px; min-width: 50px; margin-bottom: 0; transform: translateY(-2px); }

Biden flooded rural energy programs with cash. Then Trump turned off the tap.

Inflation Reduction Act grants supercharged USDA’s REAP program beginning in FY2023. No funding of any kind has been awarded since September 2025.

(function() {
const INIT_KEY = ‘__grist_reap_ira_breakdown_initialized__’;
if (window[INIT_KEY]) { return; }
window[INIT_KEY] = true;

const SERIES_COLORS = [“#F79945″,”#AC00E8″,”#3977F3″];
const BAR_RADIUS = 4;
const svg = d3.select(‘#reap-ira-breakdown-chart’);
const getSvgHeight = () => parseInt(svg.attr(‘height’)) || 450;
const legendContainer = d3.select(‘#reap-ira-breakdown-chart-legend’);

const formatCompactWithB = (n) => d3.format(‘~s’)(n).replace(‘G’, ‘B’);

function calculateYTicks(height, fontSize = 14) {
const minSpacing = fontSize * 2;
return Math.min(4, Math.max(2, Math.floor(height / minSpacing)));
}

function measureYAxisWidth(svg, scale, chartHeight, formatTick) {
const tickCount = calculateYTicks(chartHeight);
const TICK_PADDING = 4;

const tempGroup = svg.append(‘g’)
.attr(‘class’, ‘reap-ira-breakdown__y-axis-measure’)
.style(‘visibility’, ‘hidden’);

const axis = d3.axisLeft(scale)
.ticks(tickCount)
.tickFormat(formatTick)
.tickSize(0)
.tickPadding(TICK_PADDING);

tempGroup.call(axis);

tempGroup.selectAll(‘text’)
.style(‘font-family’, ‘var(–typography-secondary)’)
.style(‘font-size’, ’14px’);

let minX = 0;
tempGroup.selectAll(‘text’).each(function() {
const bbox = this.getBBox();
if (bbox.x {
const entry = { category: ‘u2019’ + d[categoryColumn].slice(2) };
valueColumns.forEach(col => {
entry[col] = +String(d[col]).replace(/,/g, ”) || 0;
});
return entry;
});

function renderLegend() {
legendContainer.selectAll(‘*’).remove();
valueColumns.forEach((col, i) => {
const item = legendContainer.append(‘div’).attr(‘class’, ‘reap-ira-breakdown__legend-item’);
item.append(‘div’)
.attr(‘class’, ‘reap-ira-breakdown__legend-box’)
.style(‘background-color’, SERIES_COLORS[i % SERIES_COLORS.length]);
item.append(‘span’).text(seriesLabels[i] || col);
});
}

function renderChart() {
svg.selectAll(‘*’).remove();

const baseBottomMargin = 40;
const LEFT_PADDING = 8;
const baseMargins = { top: 20, right: 20, bottom: baseBottomMargin, left: 0 };

const node = svg.node();
const styleWidth = parseInt(svg.style(‘width’));
const attrWidth = parseInt(svg.attr(‘width’));
const bboxWidth = node ? node.getBoundingClientRect().width : 0;
const containerWidth = (bboxWidth > 0 ? bboxWidth : 0) || (attrWidth > 0 ? attrWidth : 0) || (!isNaN(styleWidth) ? (styleWidth > 0 ? styleWidth : 600) : 600);
const svgHeight = getSvgHeight();
const height = svgHeight – baseMargins.top – baseMargins.bottom;

if (height d3.min(layer, d => d[0]));
const maxValue = d3.max(stackedData, layer => d3.max(layer, d => d[1]));
const yDomainMin = minValue 0 ? maxValue * 1.1 : 0;
const y = d3.scaleLinear()
.domain([yDomainMin, yDomainMax])
.range([height, 0]);

const formatDollar = d => d === 0 ? ‘$0’ : ‘$’ + formatCompactWithB(d);
const { width: yLabelWidth, tickCount: yTickCount, tickPadding: yTickPadding } = measureYAxisWidth(svg, y, height, formatDollar);
const margin = { …baseMargins, left: yLabelWidth + LEFT_PADDING };

const width = containerWidth – margin.left – margin.right;
if (width d.category))
.range([0, width])
.padding(0.25);

// Color mapping: reversed keys means index 0=Loans(bluey), 1=FarmBill(turquoise), 2=IRA(orange)
const color = d3.scaleOrdinal()
.domain([…valueColumns].reverse())
.range([“#3977F3″,”#AC00E8″,”#F79945″]);

svg.append(‘g’)
.attr(‘class’, ‘axis-grid’)
.attr(‘transform’, `translate(${margin.left},${margin.top})`)
.call(d3.axisLeft(y).ticks(yTickCount).tickSize(-width).tickFormat(”));

const xAxis = g => {
g.attr(‘transform’, `translate(${margin.left},${height + margin.top})`)
.call(d3.axisBottom(x));

g.selectAll(‘.tick text’)
.attr(‘class’, ‘reap-ira-breakdown__axis-label’)
.style(‘fill’, ‘var(–color-primary)’)
.style(‘text-anchor’, ‘middle’);
};

const yAxisGenerator = d3.axisLeft(y)
.ticks(yTickCount)
.tickFormat(formatDollar)
.tickPadding(yTickPadding);

const yAxis = g => g
.attr(‘transform’, `translate(${margin.left},${margin.top})`)
.call(yAxisGenerator)
.selectAll(‘text’)
.attr(‘class’, ‘reap-ira-breakdown__axis-label’)
.style(‘fill’, ‘var(–color-primary)’);

svg.append(‘g’).call(xAxis);
svg.append(‘g’).call(yAxis);

const chart = svg.append(‘g’).attr(‘transform’, `translate(${margin.left},${margin.top})`);
const defs = chart.append(‘defs’);
const lastLayerIndex = stackedData.length – 1;

// Pre-compute topmost visible layer for each data point
const topLayerForBar = {};
chartData.forEach((d, i) => {
for (let li = lastLayerIndex; li >= 0; li–) {
const seg = stackedData[li][i];
if (Math.abs(y(seg[0]) – y(seg[1])) >= 0.5) {
topLayerForBar[i] = li;
break;
}
}
});

if (imageUrl) {
const grayFilter = defs.append(‘filter’).attr(‘id’, ‘reap-ira-breakdown-greyscale’);
grayFilter.append(‘feColorMatrix’).attr(‘type’, ‘saturate’).attr(‘values’, ‘0’);
const barsMask = defs.append(‘mask’).attr(‘id’, ‘reap-ira-breakdown-bars-mask’);

stackedData.forEach((layer, layerIndex) => {
layer.forEach((d, i) => {
const barX = x(d.data.category);
const barY = Math.min(y(d[0]), y(d[1]));
const barHeight = Math.abs(y(d[0]) – y(d[1]));
const barWidth = x.bandwidth();
const isTopSegment = topLayerForBar[i] === layerIndex;

if (barHeight {
layer.forEach((d, i) => {
const barX = x(d.data.category);
const barY = Math.min(y(d[0]), y(d[1]));
const barHeight = Math.abs(y(d[0]) – y(d[1]));
const barWidth = x.bandwidth();
const isTopSegment = topLayerForBar[i] === layerIndex;

if (barHeight {
layer.forEach((d, i) => {
const barX = x(d.data.category);
const barY = Math.min(y(d[0]), y(d[1]));
const barHeight = Math.abs(y(d[0]) – y(d[1]));
const barWidth = x.bandwidth();
const isTopSegment = topLayerForBar[i] === layerIndex;

if (barHeight < 0.5) return;

if (isTopSegment) {
chart.append('path')
.attr('class', 'bar')
.attr('d', roundedTopRect(barX, barY, barWidth, barHeight, BAR_RADIUS))
.style('fill', color(layer.key));
} else {
chart.append('rect')
.attr('class', 'bar')
.attr('x', barX)
.attr('y', barY)
.attr('width', barWidth)
.attr('height', barHeight)
.style('fill', color(layer.key));
}
});
});
}

// IRA annotation line at FY23
const iraX = x('u201923');
if (iraX !== undefined) {
const lineX = iraX – x.step() * x.padding() / 2;
chart.append('line')
.attr('x1', lineX)
.attr('x2', lineX)
.attr('y1', 0)
.attr('y2', height)
.attr('stroke', '#3c3830')
.attr('stroke-width', 1.25)
.attr('stroke-dasharray', '5,4');

chart.append('text')
.attr('x', lineX – 5)
.attr('y', 14)
.attr('text-anchor', 'end')
.attr('fill', '#3c3830')
.style('font-family', 'var(–typography-secondary)')
.style('font-size', '12px')
.text('IRA funding begins flowing');

chart.append('text')
.attr('x', lineX + 5)
.attr('y', 14)
.attr('text-anchor', 'start')
.attr('fill', '#3c3830')
.style('font-family', 'var(–typography-secondary)')
.style('font-size', '12px')
.text('u2192');
}

// $0 label on FY26
const fy26X = x('u201926');
if (fy26X !== undefined) {
chart.append('text')
.attr('x', fy26X + x.bandwidth() / 2)
.attr('y', y(0) – 8)
.attr('text-anchor', 'middle')
.attr('fill', '#3c3830')
.style('font-family', 'var(–typography-secondary)')
.style('font-size', '13px')
.style('font-weight', 'bold')
.text('$0');
}
}

function roundedTopRect(x, y, width, height, radius) {
const r = Math.min(radius, height / 2, width / 2);
return `M${x},${y + height}
V${y + r}
Q${x},${y} ${x + r},${y}
H${x + width – r}
Q${x + width},${y} ${x + width},${y + r}
V${y + height}
Z`;
}

renderLegend();

if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', renderChart);
} else {
renderChart();
}
window.addEventListener('resize', renderChart);
})();

Bell, for his part, decided to go a different route: instead of building on his own property, he’s asked to build two new temporary barns on land owned by a commercial solar operation where he’s paid to graze his sheep beneath solar panels to keep the grass down. If the business approves his request, the barns could draw cheaper power from their operation. But not every farmer has that opportunity.

The effects of these policy shifts are uneven. Some solar projects are stalled because of permitting hangups. Some are right on schedule. And some are moving faster than anticipated, as developers race to break ground before tax credits expire. But, taken together, the findings reveal how the collapse of federal support for solar has spread across American agriculture from major corporations to family farms. 

The abandoned solar projects

The Energy Policy Act of 2005, signed by President George W. Bush, enacted a 30% investment tax credit for large-scale clean energy projects, boosting the solar industry. The tax credit was extended for eight years under President Obama and later extended under President Trump in 2020.

When President Joe Biden signed the 2022 landmark climate bill, the tax credit was extended again through 2032 or when specific emissions targets were reached. Last July, when Congress passed President Trump’s tax bill, the timeline for the clean energy tax credits were again reset — in reverse. Now commercial solar projects must be under construction by July 2026 and placed in service by the end of 2027 to remain eligible for the credit. 

An aerial photograph of a large array of solar panels surrounded by farmland.
Solar panels operate at a farm in Lancaster, Kentucky.
Joshua A. Bickel / AP Photo

At least 126 solar projects proposed since the beginning of 2024 are awaiting regulatory approval, according to a Grist and Associated Press analysis of the latest information developers supplied to the Energy Information Administration. Each is located near or on agricultural land, with at least one-fifth of the surrounding area used for grazing fields or crops, and would together supply about 20 gigawatts of electricity if built. That’s enough renewable energy to power about 4.5 million homes, according to the Solar Energy Industries Association.

The new timeline, though, has prompted some developers to abandon projects after concluding they couldn’t move fast enough to meet the new tax credit cutoff.

Bogdan Micu, CEO of the German solar developer Alpin Sun, said it had to abandon projects representing about $6 million in investments in about 1,000 megawatts in the U.S. Northeast. “Well. We lost our projects,” Micu said. The company simply couldn’t speed up its projects to meet the deadlines, he said.

“There was no way for us to speed up that process” to meet deadlines, he said.

A longstanding renewable energy program is gutted

Through REAP, the USDA issues grants and loans to farmers, ranchers, and rural businesses interested in renewable energy — like installing solar to lower utility costs. According to Richa Patel, a policy specialist at the National Sustainable Agriculture Coalition, REAP has funded more than 19,000 grants totalling more than $1.8 billion since its inception nearly two decades ago, and backed tens of thousands of renewable energy and energy efficiency projects across the country in that time. The program was supercharged by funding from the Inflation Reduction Act in 2022, and up until then, when some congressional Republicans began to question the grant structure of the program, was largely supported by both parties. But for many of the farmers whose awards or applications were affected as Trump took office again, the past year has made farm country’s already-dire economic landscape even more difficult to weather.

Elisa Lane, a flower and fruit farmer in Hampstead, Maryland, will never forget the anxiety she felt last February when she heard the Trump administration had frozen the $30,576 REAP grant she’d been awarded in 2024 to install solar panels — with no explanation. 

“Man, was that so stressful,” said Lane, who spent months worried she’d be “on the hook” for the amount that she’d already contracted a solar company to install. It was supposed to alleviate the stress of her energy bills, which she says ran around $500 a month before getting solar.

In March 2025, the agency announced it would release already-awarded grants and loans — but there appeared to be some fine print. The USDA invited recipients to voluntarily revise their proposals to align with Trump’s executive order by “eliminating Biden-era DEIA and climate mandates embedded in previous proposals.” 

Although she was anxiously waiting on the funds, Lane decided not to revise her proposal after a local USDA representative advised her to proceed with her project without revising. (The representative assured her she would receive the payment, according to emails seen by Grist and the AP.) Later that spring, she heard from the USDA that the payment would be released and she could move forward with construction. So she did, putting up the full $70,000 it cost to install the panels. By August, they were up and running on her land. By September, she received her reimbursement check covering about half of the project fee from USDA — more than half a year after the funding was first frozen.

In the span of roughly seven months, the USDA froze the program’s grant funding, invited grantees to reapply without climate and DEI language, imposed sweeping new restrictions on solar on farmland, and closed future application cycles. 

“It was so disruptive,” she said. “I just want to have a farm and be able to focus on my business.” 

Now, she’s doing just that. The panels, to Lane, represent a long-term investment into bringing down her farm’s enormous energy bill. 

Although things eventually worked out for Lane and other recent REAP grantees, the Grist and Associated Press analysis of USDA Rural Development data found the program has not committed a single dollar in renewable energy development since September. Even though the agency said it anticipated it would do so last October, USDA never reopened REAP’s grant application cycle. Its loan guarantee program — geared toward larger farm and rural business projects — has remained open, though the analysis found that the agency has awarded no new agreements this fiscal year. 

.reap-ira-cliff {
–color-primary: #3c3830;
–color-secondary: #777;
–color-orange: #F79945;
–color-turquoise: #12A07F;
–color-fuchsia: #AC00E8;
–color-bluey: #3977F3;
–color-earth: #3c3830;
–typography-primary: “PolySans”, Arial, sans-serif;
–typography-secondary: “Basis Grotesque Pro”, Arial, sans-serif;
–spacing-base: 10px;

box-sizing: border-box;
font-family: var(–typography-secondary);
margin: 1.5rem auto;
padding: 0;
position: relative;
width: 100%;
}

.reap-ira-cliff * { box-sizing: border-box; }
.reap-ira-cliff svg text { font-family: var(–typography-secondary); }

.reap-ira-cliff__title {
font-family: var(–typography-primary);
font-size: 24px;
margin: var(–spacing-base) 0;
text-align: left;
}

.reap-ira-cliff__subtitle {
font-family: var(–typography-secondary);
color: var(–color-primary);
font-size: 18px;
margin: 0 0 var(–spacing-base);
text-align: left;
}

.reap-ira-cliff__axis-label {
color: var(–color-primary);
font-size: 14px;
}

.reap-ira-cliff .axis-grid line {
stroke: #e0e0e0;
stroke-opacity: 0.7;
shape-rendering: crispEdges;
}
.reap-ira-cliff .axis-grid .domain { stroke: none; }
.reap-ira-cliff .domain { stroke: #3c3830; }

.reap-ira-cliff__legend {
display: flex;
flex-wrap: wrap;
gap: 6px 15px;
margin-bottom: 10px;
}

.reap-ira-cliff__legend-item {
display: flex;
align-items: center;
gap: 6px;
font-size: 14px;
color: var(–color-primary);
}

.reap-ira-cliff__legend-color {
width: 18px;
height: 3px;
border-radius: 1.5px;
flex-shrink: 0;
}

.reap-ira-cliff__footer { display: flex; justify-content: space-between; align-items: flex-end; margin-top: 0px; gap: 16px; }
.reap-ira-cliff__credits { display: flex; flex-direction: column; }
.reap-ira-cliff__note { color: var(–color-secondary); font-size: 12px; margin-top: 0; margin-bottom: 4px; display: inline-block; font-style: italic; }
.reap-ira-cliff__source { color: var(–color-secondary); font-size: 12px; margin-top: 0; display: inline-block; }
.reap-ira-cliff__credit { color: var(–color-secondary); font-size: 12px; margin-top: 3px; font-style: italic; font-weight: bold; display: inline-block; }
.reap-ira-cliff__logos { display: flex; align-items: center; gap: 10px; margin-left: auto; padding-right: 20px; }
.reap-ira-cliff__logo-ap { height: 20px; width: auto; transform: translateY(-2px); }
.reap-ira-cliff__logo { height: auto; max-width: 62px; min-width: 50px; margin-bottom: 0; transform: translateY(-2px); }

The Inflation Reduction Act: a brief cash infusion for rural clean energy

Cumulative REAP funding since FY2023, by source. IRA grants stopped abruptly after January 2025.

(function() {
const INIT_KEY = ‘__grist_reap_ira_cliff_initialized__’;
if (window[INIT_KEY]) { return; }
window[INIT_KEY] = true;

const svg = d3.select(‘#reap-ira-cliff-chart’);
const getSvgHeight = () => parseInt(svg.attr(‘height’)) || 450;
const legendContainer = d3.select(‘#reap-ira-cliff-chart-legend’);

const formatCompactWithB = (n) => d3.format(‘~s’)(n).replace(‘G’, ‘B’);

function calculateYTicks(height, fontSize = 14) {
const minSpacing = fontSize * 2;
return Math.min(4, Math.max(2, Math.floor(height / minSpacing)));
}

function measureYAxisWidth(svg, scale, chartHeight, formatTick) {
const tickCount = calculateYTicks(chartHeight);
const TICK_PADDING = 4;
const tempGroup = svg.append(‘g’).style(‘visibility’, ‘hidden’);
const axis = d3.axisLeft(scale).ticks(tickCount).tickFormat(formatTick).tickSize(0).tickPadding(TICK_PADDING);
tempGroup.call(axis);
tempGroup.selectAll(‘text’).style(‘font-family’, ‘var(–typography-secondary)’).style(‘font-size’, ’14px’);
let minX = 0;
tempGroup.selectAll(‘text’).each(function() { const b = this.getBBox(); if (b.x {
const item = legendContainer.append(‘div’).attr(‘class’, ‘reap-ira-cliff__legend-item’);
item.append(‘div’)
.attr(‘class’, ‘reap-ira-cliff__legend-color’)
.style(‘background-color’, s.color)
.style(‘width’, ’18px’)
.style(‘height’, s.width + ‘px’)
.style(‘border-radius’, (s.width / 2) + ‘px’);
item.append(‘span’).text(s.label);
});
}

function renderChart() {
svg.selectAll(‘*’).remove();

const LEFT_PADDING = 8;
const baseMargins = { top: 20, right: 55, bottom: 40, left: 0 };

const node = svg.node();
const bboxWidth = node ? node.getBoundingClientRect().width : 0;
const containerWidth = bboxWidth > 0 ? bboxWidth : 600;
const svgHeight = getSvgHeight();
const height = svgHeight – baseMargins.top – baseMargins.bottom;
if (height Math.max(d.IRA, d.FarmBill, d.Loans));
const y = d3.scaleLinear().domain([0, maxValue * 1.08]).range([height, 0]);

const formatDollar = d => d === 0 ? ‘$0’ : ‘$’ + formatCompactWithB(d);
const { width: yLabelWidth, tickCount: yTickCount, tickPadding: yTickPadding } = measureYAxisWidth(svg, y, height, formatDollar);
const margin = { …baseMargins, left: yLabelWidth + LEFT_PADDING };
const width = containerWidth – margin.left – margin.right;
if (width d.m))
.range([0, width])
.padding(0.2);

svg.append(‘g’)
.attr(‘class’, ‘axis-grid’)
.attr(‘transform’, `translate(${margin.left},${margin.top})`)
.call(d3.axisLeft(y).ticks(yTickCount).tickSize(-width).tickFormat(”));

// X axis: show FY labels at October ticks
const fyStarts = rawData.map(d => d.m).filter(m => m.endsWith(‘-10’));
svg.append(‘g’)
.attr(‘transform’, `translate(${margin.left},${height + margin.top})`)
.call(
d3.axisBottom(x)
.tickValues(fyStarts)
.tickFormat(d => ‘FYu2019’ + String(parseInt(d.slice(0, 4)) + 1).slice(2))
)
.selectAll(‘.tick text’)
.attr(‘class’, ‘reap-ira-cliff__axis-label’)
.style(‘fill’, ‘var(–color-primary)’);

svg.append(‘g’)
.attr(‘transform’, `translate(${margin.left},${margin.top})`)
.call(d3.axisLeft(y).ticks(yTickCount).tickFormat(formatDollar).tickPadding(yTickPadding))
.selectAll(‘text’)
.attr(‘class’, ‘reap-ira-cliff__axis-label’)
.style(‘fill’, ‘var(–color-primary)’);

const chart = svg.append(‘g’).attr(‘transform’, `translate(${margin.left},${margin.top})`);

// Draw lines
SERIES.forEach(s => {
const line = d3.line()
.x(d => x(d.m))
.y(d => y(d[s.key]))
.curve(d3.curveMonotoneX);

chart.append(‘path’)
.datum(rawData)
.attr(‘d’, line)
.style(‘fill’, ‘none’)
.style(‘stroke’, s.color)
.style(‘stroke-width’, s.width);
});

// January 2025 annotation
const janX = x(‘2025-01’);
if (janX !== undefined) {
chart.append(‘line’)
.attr(‘x1’, janX)
.attr(‘x2’, janX)
.attr(‘y1’, 0)
.attr(‘y2’, height)
.attr(‘stroke’, ‘#3c3830’)
.attr(‘stroke-width’, 1.25)
.attr(‘stroke-dasharray’, ‘5,4’);

chart.append(‘text’)
.attr(‘x’, janX – 6)
.attr(‘y’, 14)
.attr(‘text-anchor’, ‘end’)
.attr(‘fill’, ‘#3c3830’)
.style(‘font-family’, ‘var(–typography-secondary)’)
.style(‘font-size’, ’11px’)
.text(‘Jan u201925’);

// Dot on IRA line at Jan 2025
chart.append(‘circle’)
.attr(‘cx’, janX)
.attr(‘cy’, y(1236577563))
.attr(‘r’, 4)
.style(‘fill’, ‘#F79945’)
.style(‘stroke’, ‘#fff’)
.style(‘stroke-width’, 1.5);
}

// End labels
const lastData = rawData[rawData.length – 1];
const lastX = x(lastData.m);
const endLabels = [
{ key: ‘IRA’, color: ‘#F79945’, text: ‘$1.2B’ },
{ key: ‘Loans’, color: ‘#3977F3’, text: ‘$1.0B’ },
{ key: ‘FarmBill’, color: ‘#AC00E8’, text: ‘$338M’ }
];

// Sort by y position (highest value first = lowest y)
endLabels.sort((a, b) => lastData[b.key] – lastData[a.key]);

// Place labels with collision avoidance
const labelHeight = 14;
const placedYs = [];
endLabels.forEach(lbl => {
let targetY = y(lastData[lbl.key]);
// Push down if overlapping a previously placed label
for (const py of placedYs) {
if (Math.abs(targetY – py) < labelHeight) {
targetY = py + labelHeight;
}
}
placedYs.push(targetY);
chart.append('text')
.attr('x', lastX + 6)
.attr('y', targetY)
.attr('dy', '0.35em')
.attr('fill', lbl.color)
.style('font-family', 'var(–typography-secondary)')
.style('font-size', '12px')
.style('font-weight', 'bold')
.text(lbl.text);
});
}

renderLegend();

if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', renderChart);
} else {
renderChart();
}
window.addEventListener('resize', renderChart);
})();

Then, on March 31, the USDA announced a suspension of all REAP grant awards so the agency may update regulations within the program to comply with an executive order issued by the president last July. The agency noted that it “will not be making further grant awards until the new regulations are in effect,” but added that REAP guaranteed loans “will continue to be awarded in this time.” 

In response to a request for comment, a USDA spokesperson said the “suspension of REAP grant awards is temporary” but did not provide further details on how long grants will be paused. When asked why the USDA has not yet issued any loans this fiscal year through the program, the spokesperson said the agency “continues to administer REAP in accordance with current guidance” and is “prioritizing program integrity and alignment with Administration direction as it conducts its review.” 

Robert Bonnie, the former undersecretary for farm production and conservation at the USDA under the Biden administration, said any loss in the program’s funding is going to be felt throughout rural America. Part of the USDA’s role over the long term, he said, has been to channel investment into rural parts of the country while making rural prosperity part of the climate agenda. 

“In places like Iowa and Texas, renewables matter, not just for additional power, and lower power bills, and clean energy, but also matters for farmers’ pocketbooks,” said Bonnie. “Anything you do to pull back on that is hugely problematic.” 

Sheep graze in a field surrounded by solar panels and power lines.
Sheep graze in a field surrounded by power lines and solar panels in Lancaster, Kentucky.
Joshua A. Bickel / AP Photo

Racing to beat the tax-credit deadline

For RIC Energy North America, a renewable energy developer based in New York City, the changes to the solar tax credits triggered an all-out sprint to advance every project in their pipeline, said CEO Jon Rappe. But new projects after that will essentially stop, he said.

The company has about 150 solar projects in its North American portfolio with the bulk of those developments on fallow land, hayfields and former farmland. “Now, some companies are probably going to go out and continue to sign sites, and take some risks, in case there’s an extension of tax credits or something like that,” Rappe said. “But the next generation of projects is not going to happen unless there’s some change at the federal level.”

One of RIC Energy’s projects is to develop 15 acres of solar on Tim Covert’s land in the primarily agricultural town of Sheridan, New York. The community solar project, where small-scale arrays would allow low-income residents to subscribe to get monthly credits on their utility bill, offers a new source of steady revenue for Covert, a former dairy farmer who has been battling cancer over the last year and struggled to work as a result. 

“I’m 100 percent cancer-free, but with the treatments, there’s some side effects that take a little while to get rid of,” he said, which includes brain fog, muscle soreness, and depleted energy. ”So it would be great if they did have it done by fall, and I started getting money.”

Under the agreement, the bigger payout, which Covert says equals roughly a quarter of his income as an electrical contractor, won’t start until the project is completed and online — and Covert isn’t sure when that will happen amid the shifting federal landscape. At the moment, he’s getting a small stipend simply for leasing his land. He’s been told that construction could start as soon as the end of May, though “it seems to be changing a lot.” RIC Energy, for its part, told Grist and the AP that the construction is slated to begin late summer to early fall. 

“I don’t think they’re going to stop now, because they have quite a bit of time and money invested in this thing already,” he said. “So I don’t see them pulling the plug.” 

Even amid the shifting policies, some clean-energy developers say they are winning out. Solar energy is still one of the cheapest forms of energy out there, and energy is in higher demand than ever, partly due to AI data center construction. What’s more, tax equity sometimes made financing projects more complicated, so in some ways losing the tax credit also broke down a barrier to getting things done, said Nick Cohen, president and CEO of Doral LLC, a large-scale solar energy and battery storage developer with about 450 megawatts in operation and about 16,000 more planned or in construction.

It’s “a very exciting time if you’re a large enough developer that was in the right place at the right time doing large projects,” he said. 

“All the new rules really favor the big guys like us.” 

This story was originally published by Grist with the headline American farmers bet on solar. Then Trump changed the rules. on Apr 17, 2026.

ALT-Lab-Ad-1

Recent Articles