The San Francisco 49ers held their 12th training camp practice on Thursday, a joint practice with the Denver Broncos as both teams gear up for Saturday's preseason opener.
Before practice, the 49ers announced two roster moves. They signed defensive tackle Michael Dwumfour to a one-year deal. To make room on the roster, the team released cornerback Eli Apple.
Here are some key highlights from the 10:25 a.m. PT practice at the SAP Performance Facility, compiled from multiple media reports.
Noteworthy non-participants
- DT Evan Anderson (knee bruise)
- S Ji'Ayir Brown (ankle)
- WR Jacob Cowing (hamstring)
- DT Jordan Elliott (back)
- DT Kevin Givens (pectoral)
- CB Renardo Green (hamstring)
- RB Isaac Guerendo (shoulder)
- RB Jordan James (broken finger)
- WR Jauan Jennings (calf)
- CB Fabian Moreau
- DE Sam Okuayinonu (groin)
- LB Chazz Surratt
FB Kyle Juszczyk returned after missing time with a cut on his heel.
Unavailable players
Physically unable to perform (PUP)- WR Brandon Aiyuk (ACL/MCL)
- OL Andre Dillard (ankle)
- DE Yetur Gross-Matos (knee)
- S Malik Mustapha (ACL)
Non-football injury (NFI)
- QB Kurtis Rourke (ACL)
- DE Tarron Jackson (neck)
- WR Trent Taylor (back)
- CB Tre Tomlinson (undisclosed)
Injury updates
Rookie DL Mykel Williams was shaken up during red-zone drills, favoring his left knee. Medical staff examined him. Williams was able to walk to the sideline and eventually left the practice area. After practice, head coach Kyle Shanahan told reporters Williams underwent a "good exam."
"Hopefully, just hyperextended his knee," Shanahan said. "So, we're gonna get a further evaluation now, but looked good when we examined him."
CB Darrell Luter Jr. and rookie S Marques Sigle were evaluated for concussions but cleared.
Quick notes
DE Nick Bosa returned to practice after missing the last three sessions due to soreness. ESPN's Nick Wagoner logged at least three would-be sacks for the veteran pass rusher during team drills.
"Bosa usually is pretty good, but I think he's still working to get to his top self," Shanahan said after practice. "He was a little sore earlier in the week. We took Monday off. I think he just did individual on Tuesday. So, this was the first day for him to get back there in about six days and really compete."
#49ers Nick Bosa is back in uniform after 3-practice hiatus and warming up for joint session with Broncos pic.twitter.com/IVfYtr2Ohw
— Cam Inman (@CamInman) August 7, 2025
CB Upton Stout continued to shine during one-on-ones, this time, against a different team. He even came away with an interception.
The rookie Upton Stout showing out 😤 pic.twitter.com/rsFODcjCcr
— San Francisco 49ers (@49ers) August 7, 2025
DE Robert Beal Jr. and rookie DT Alfred Collins had some successful reps during one-on-one drills. Rookie DT Sebastian Valdez, nicknamed "The Hulk" by teammates, continues to impress, winning three of his four one-on-one reps.
Rookie DL Mykel Williams impressed before his injury, continuing to display solid pass-rushing skills as an interior lineman. He also recorded a would-be sack during team drills.
LT Trent Williams did not participate in team drills. Spencer Burford started in his place.
LB Dee Winters continues to showcase his versatility. He has been impressive in coverage and, against the Broncos, showed he can also be a threat as a pass rusher—blitzing to force an incompletion by QB Bo Nix. Winters nearly had an interception during two-minute drills.
Nix found success when targeting CB Darrell Luter Jr., and the 49ers' defensive backfield drew a fair number of flags during practice.
The Broncos' defense stymied the 49ers' offense during team drills. QB Brock Purdy and his playmakers struggled to get anything going. Purdy tossed two interceptions during seven-on-seven work—both while targeting Pearsall. Denver's pass rush racked up several would-be sacks against 49ers quarterbacks and tackles for loss against RB Christian McCaffrey and others.
"I think they came out ready to roll, to compete," Purdy said. "You could feel them. They were in the backfield a couple of times, and had a couple of sacks, and obviously, some TFLs (tackles for a loss), it looked like. So, they were ready to roll."
While most of the 49ers' offense struggled during the early periods of practice, rookie WR Jordan Watkins stood out as a bright spot, making several catches.
The first-team offense fared better during red-zone drills. Purdy connected with McCaffrey over the middle for a touchdown in this session, and later found Watkins for another score.
Jordan Watkins house call 🏡 pic.twitter.com/pSqQZ3QeR4
— San Francisco 49ers (@49ers) August 7, 2025
Later in red-zone work, Purdy hit WR Ricky Pearsall, who was matched against Broncos rookie CB Jahdae Barron, for a 30-plus-yard touchdown to the right corner of the end zone. That came after Pearsall made a first-down catch against CB Patrick Surtain earlier in the drive. However, the 49ers had little success targeting Surtain overall.
Purdy capped off his day by hitting WR Demarcus Robinson for a 14-yard touchdown against CB Riley Moss.
Cam Inman of Bay Area News Group charted Purdy as completing 19 of his 26 pass attempts during full-team drills, including touchdowns to McCaffrey, Robinson, Pearsall, and Watkins.
"I thought Brock had a really good day," Shanahan said. "I never know for sure until I watch the tape, but we put him in a lot of challenging positions and I thought he handled most of them pretty well."
K Jake Moody connected on all seven of his field-goal attempts—though some were close—hitting from 28, 33, 36, 40, 46, 51, and 54 yards out during special teams drills. He also drilled a 52-yarder to cap a two-minute drive at the end of practice.
Moody's 52-yarder was set up by a pass from QB Mac Jones to TE Brayden Willis. Jones also connected with rookie WRs Junior Bergen and Jordan Watkins on the drive.
Next practice
The 49ers will not practice again until after Saturday's game against the Broncos. Dates for the following week's practices have not yet been released. The team is scheduled to practice with the Las Vegas Raiders in Henderson, Nevada, next week.
Social media: 49ers-Broncos practice updates
Old friend alert: DJ Jones pic.twitter.com/6Lnn0idkwy
— ???????????????????????????????????????????? (@TheSFNiners) August 7, 2025
Old friend alert: Talanoa Hufanga pic.twitter.com/2jxORUxOUR
— ???????????????????????????????????????????? (@TheSFNiners) August 7, 2025
Old friend alert: 49ers Mike McGlinchey pic.twitter.com/Wl72SeRsjD
— ???????????????????????????????????????????? (@TheSFNiners) August 7, 2025
Talanoa Hufanga back on the 49ers practice field as a member of the Broncos pic.twitter.com/T6STcQnALT
— OurSF49ers (@OurSf49ers) August 7, 2025
Old friend alert: Dre Greenlaw
Does not appear to be practicing today pic.twitter.com/gQ4qx0YuAn
— ???????????????????????????????????????????? (@TheSFNiners) August 7, 2025
#49ers Nick Bosa is ready for practice today 👀 pic.twitter.com/7dvHqyQbHB
— ???????????????????????????????????????????? (@TheSFNiners) August 7, 2025
#49ers Nick Bosa back at practice and shows love to Talanoa Hufanga 🤝 pic.twitter.com/sTr060g3Yf
— OurSF49ers (@OurSf49ers) August 7, 2025
George Kittle 🤝 DJ Jones pic.twitter.com/LvdAL01HYB
— OurSF49ers (@OurSf49ers) August 7, 2025
Good to see some familiar faces. pic.twitter.com/ymoaVHwN82
— San Francisco 49ers (@49ers) August 7, 2025
#49ers Nick Bosa and Kyle Juszczyk are back at practice to scrimmage against the Broncos
Talanoa Hufanga, Mike McGlinchey are practicing but not Dre Greenlaw
— Jennifer Lee Chan - also bluesky @jenniferleechan (@jenniferleechan) August 7, 2025
#49ers Brandon Aiyuk waiting for his chance to get back ⏳ pic.twitter.com/Pf7dAAIqOP
— ???????????????????????????????????????????? (@TheSFNiners) August 7, 2025
Most entertaining period of #49ers-Broncos joint practice so far? The special teams period … a bunch of guys fighting for roster spots talking trash. Love it.
— Noah Furtado (@_noahfurtado) August 7, 2025
#49ers offense struggled to string positive plays together against Broncos defense in first team period of the day. Multiple would-be sacks on Purdy and several TFLs against McCaffrey, Taylor.
— Noah Furtado (@_noahfurtado) August 7, 2025
#49ers rookie DL Mykel Williams shaken up during team drills, limped off favoring his left knee/leg.
— Nick Wagoner (@nwagoner) August 7, 2025
Broncos-49ers scrimmage: Broncos defense gave Brock Purdy, Ricky PeArsall and co fits early, but 49ers looked better in the move-the-ball periods, including a long TD pass from Purdy to Pearsall
— Matt Barrows (@mattbarrows) August 7, 2025
Pocket collapsed on Bo Nix quickly with Nick Bosa and Bryce Huff rushing from both ends. Bosa sped past LT Garett Bolles. Huff beat former #49ers RT Mike McGlinchey.
Those matchups have been competitive today, would not say either side dominated.
— Noah Furtado (@_noahfurtado) August 7, 2025
49ersO-BroncosD
— Cam Inman (@CamInman) August 7, 2025
*Purdy INT 2x on targets to Pearsall in 7v7 but connected for red zone TD
*Purdy to Robinson in 2-min drill resulted in PBU by Surtain on fade but Robinson TD next play
*McCaffrey solid day
*Broncos D hyped
*Moody bank in 1st FG, last was good 53
No fights pic.twitter.com/uw44dTbfpN
#49ers I did not see participating that weren't previously out of practice: DT Jordan Elliott, RB Jordan James, CB Fabian Moreau, LB Chazz Surratt.
Kyle Juszczyk and Nick Bosa were back and participating in the session
— Nick Wagoner (@nwagoner) August 7, 2025
Alfred Collins is out there moving 😮?💨 pic.twitter.com/fIZDO0XrDI
— San Francisco 49ers (@49ers) August 7, 2025
Notes and observations from #49ers practice No. 12 (against the Denver Broncos):
WARNING: This is very long. Like, longer than usual.
- As expected, DE Nick Bosa was back after missing the past three practices with some soreness. He was back at full strength too. Had him down…
— Nick Wagoner (@nwagoner) August 7, 2025