Toplines
Ukrainian President Volodymyr Zelensky dismissed Ukrainian Armed Forces Commander-in-Chief General Oleksandr Syrskyi and appointed the Ukrainian Joint Forces Task Force Commander Major General Mykhailo Drapatyi as his replacement late on July 21.[1] Drapatyi served as the Joint Forces Task Force commander since June 3, 2025, and was the Ukrainian Ground Forces commander from November 2024 to June 2025.[2]
Russian authorities continue costly efforts to mitigate the loss of Russian oil refining capacity due to Ukrainian long-range strikes by subsidizing diesel imports. The Russian State Duma unanimously adopted a bill in its third reading on July 21 that amends the Russian Tax Code and expands the fuel price damping mechanism to diesel exports during active diesel export bans.[3] The bill authorizes the Russian government to compensate Russian oil companies from the federal budget for selling diesel domestically below export prices — a mechanism similar to the one that Russian authorities implemented for imported gasoline on June 23.[4] The July 21 bill increases the compensation coefficient for Belarusian diesel imports to 0.9 and allows vertically-owned Russian oil companies to sell less diesel on the public exchange than otherwise required by law, incentivizing domestic sales. The bill also clarifies the excise tax mechanism for blending gasoline with other components. Russian State Duma Speaker Vyacheslav Volodin stated on July 21 that the bill will ensure uninterrupted domestic diesel supplies and claimed that the Russian fuel market will stabilize soon.[5] Russian Deputy Prime Minister and Economy Minister Alexander Novak claimed on July 21 that the Kremlin’s measures to stabilize the fuel market are yielding results as many Russian federal subjects are lifting fuel restrictions, the number of gas stations selling fuel is increasing, and the lines at gas stations are shrinking.[6] Russian officials continue to project a facade of stability and control over domestic fuel supplies despite the fact that Ukraine’s long-range strike campaign has substantially reduced Russia’s oil refining capacity.[7] The Russian State Duma appears to be using the Russian federal budget to alleviate the burden on Russian oil companies. It remains unclear how effective such measures will be in the near future.
The Russian government continues exerting legal pressure on Russian migrants likely to coerce migrants into military service under threat of deportation. The Russian State Duma passed a bill on July 21 that expands the list of offenses for which Russian authorities can deport migrants, including discrediting the Russian Armed Forces; participating in unauthorized protests; publicly calling for actions that violate Russian territorial integrity; violating the state of emergency, counter-terrorist operation regime, or martial law; and disobeying Russian law enforcement.[8] Russian authorities will likely seek to detain large numbers of migrants for any disobedience or criticism to coerce them into signing military service contracts amid Russia’s declining recruitment rate.[9]
Polish authorities continue warning of a possible Russian provocation against NATO’s eastern flank. Polish Deputy Prime Minister and Defense Minister Wladyslaw Kosiniak-Kamysz stated on July 21 during a press conference that Russia may use seized Ukrainian drones to conduct a false flag operation against Poland, the Baltic states, Finland, or Romania.[10] Kosiniak-Kamysz’s remarks follow recent warnings that Russia is considering provocations and sabotage attempts from Western officials, including Polish Foreign Minister Radoslaw Sikorski, German Chancellor Friedrich Merz, Lithuanian President Gitanas Nauseda, and Latvian President Edgars Rinkevics.[11] ISW continues to assess that Russia is conducting a “Phase Zero” campaign that aims to set informational and psychological conditions for potential future provocations against NATO and that Russian false flag provocations, along with drone incursions, sabotage, electronic warfare (EW) interference, and overflights, are part of this campaign.[12]
Key Takeaways
Ukrainian President Volodymyr Zelensky dismissed Ukrainian Armed Forces Commander-in-Chief General Oleksandr Syrskyi and appointed the Ukrainian Joint Forces Task Force Commander Major General Mykhailo Drapatyi as his replacement late on July 21.
Russian authorities continue costly efforts to mitigate the loss of Russian oil refining capacity due to Ukrainian long-range strikes by subsidizing diesel imports.
The Russian government continues exerting legal pressure on Russian migrants likely to coerce migrants into military service under threat of deportation.
Polish authorities continue warning of a possible Russian provocation against NATO’s eastern flank.
Ukrainian forces struck Russian manufacturing infrastructure and military assets overnight on July 20 and 21. Russia launched 58 drones against Ukraine overnight.
Ukrainian forces recently advanced in the Oleksandrivka direction and in northern Kharkiv Oblast.

We do not report in detail on Russian war crimes because these activities are well-covered in Western media and do not directly affect the military operations we are assessing and forecasting. We will continue to evaluate and report on the effects of these criminal activities on the Ukrainian military and the Ukrainian population and specifically on combat in Ukrainian urban areas. We utterly condemn Russian violations of the laws of armed conflict and the Geneva Conventions and crimes against humanity even though we do not describe them in these reports.
Ukrainian Operations in the Russian Federation
Ukrainian forces continued their long-range strike campaign against Russian industrial and military assets in Russia. The Ukrainian General Staff reported on July 21 that Ukrainian forces struck the Khalino airfield in Khalino, Kursk Oblast (roughly 100 kilometers from the frontline) and damaged a MiG-29 fighter jet and a Pantsir-S1 air-defense system.[13] Geolocated footage published on July 21 shows Ukrainian forces striking a Russian MiG-29 fighter jet and a Pantsir-S1 air-defense system at the Khalino airfield.[14] Geolocated imagery published on July 20 shows a fire at a factory in Lipetsk City (roughly 280 kilometers from the international border) following a reported Ukrainian missile strike.[15] Lipetsk Oblast Governor Igor Artamonov acknowledged on July 21 that a 2,500 square meter fire broke out at an industrial facility in Lipetsk City.[16] Russian opposition outlet Astra reported on July 21 that Ukrainian strikes caused a fire between the Novolipetsk Steel Plant and Thermal Power Plant No. 2 in Lipetsk City.[17] Astra noted that the Novolipetsk Steel Plant is the largest steel mill in Russia and produces approximately 20 percent of all Russian steel.
Satellite imagery published on July 21 shows damage to a Wildberries warehouse in the Yuzhnye Vrata logistics park near Domodedovo following a Ukrainian drone strike on July 20.[18]
Russian Supporting Effort: Northern Axis
Russian objective: Create defensible buffer zones in Sumy Oblast along the international border
Russian forces continued limited offensive operations in northern Sumy Oblast on July 20 and 21 but did not advance, as Ukrainian forces counterattacked in the area.[19] A Russian milblogger claimed that Ukrainian forces counterattacked near Yunakivka (northeast of Sumy City).[20]
Russian forces have intensified KAB guided bomb strikes against Sumy City since June 2026. Sumy Oblast Military Administration Head Oleh Hryhoriv stated on July 21 that Russian forces intensified KAB guided bomb strikes against Sumy City and have launched 70 KAB guided bombs since the beginning of June 2026, compared to four KABs between February and May 2026.[21]
Ukrainian forces continued their drone strike campaign against Russian water infrastructure and military assets in Belgorod, Kursk, and Bryansk oblasts. Belgorod Oblast-based outlet Pepel reported on July 20 that unspecified but reportedly Ukrainian drone and missile strikes destroyed the Belgorod Reservoir dam near Bezlyudovka and Grafovka (both southeast of Sumy City and roughly 10 and 11 kilometers from the international border respectively), causing rapid water discharging and flooding in nearby areas.[22] Satellite imagery taken on July 1, July 18 and 20 shows flooding west of Bezlyudovka. The Belgorod Oblast Operational Headquarters claimed on July 21 that Ukrainian strikes damaged hydraulic equipment at the Belgorod Reservoir.[23] The Ukrainian General Staff reported on July 20 that Ukrainian forces struck a Russian drone control point near Naumovka, Belgorod Oblast (north of Kharkiv City and roughly three kilometers from the international border).[24] The Ukrainian General Staff reported on July 21 that Ukrainian forces struck a Russian material and technical support warehouse near Popovo-Lezhach, Kursk Oblast (northwest of Sumy City and roughly five kilometers from the international border).[25] Geolocated footage published on July 20 shows Ukrainian forces striking Russian Multiple Launch Rocket Systems (MLRSs) near Kozacha Lokhnya and north of Zaoleshenka, both in Kozacha Lopan (both northeast of Sumy City and roughly eight and nine kilometers from the international border respectively).[26] The Ukrainian General Staff reported on July 20 that Ukrainian forces struck a Russian drone control point near Belaya Berezka, Bryansk Oblast (northwest of Sumy City and roughly two kilometers from the international border).[27]
Russian Main Effort: Eastern Ukraine
Russian Subordinate Main Effort #1 – Kharkiv Oblast
Russian objective: Push Ukrainian forces back from the international border to create a defensible buffer zone with Belgorod Oblast and approach to within tube artillery range of Kharkiv City
Russian forces continued offensive operations in northern Kharkiv Oblast on July 20 and 21 but did not make confirmed advances. The Russian Ministry of Defense claimed on July 21 that Russian forces seized Volokhivske (northeast of Kharkiv).[28] A Russian milblogger claimed on July 21 that Russian forces advanced west of Yurchenkove and in northern Bilyi Kolodyaz (both northeast of Kharkiv City).[29] Ukrainian Joint Forces Task Force Spokesperson Colonel Viktor Trehubov stated on July 21 that Russian forces are attempting to gain a foothold in Kozacha Lopan (north of Kharkiv City) to enable drone strikes against northern Kharkiv Oblast.[30]

Russian forces continued offensive operations in the Velykyi Burluk direction on July 20 and 21 but did not advance.[31]
Russian Subordinate Main Effort #2 – Oskil River
Russian objective: Cross the Oskil River in Kharkiv Oblast and push westward into eastern Kharkiv Oblast and northern Donetsk Oblast
Russian forces recently conducted infiltration missions in the area. A source reporting on the Russian Western Grouping of Forces (GoF) claimed on July 21 that Russian forces hold positions in central Kupyansk and south of Kurylivka (southeast of Kupyansk), indicating that Russian forces recently conducted infiltration missions in the area.[32] Geolocated footage published on July 21 shows Russian forces striking Ukrainian positions south of Radkivka (north of Kupyansk), indicating that Ukrainian forces maintain positions in the area contrary to Russian claims.[33]


Russian forces are intensifying their attempts to advance in northern Kupyansk. Ukrainian Joint Forces Task Force Spokesperson Colonel Viktor Trehubov reported on July 21 that Russian forces are fighting in northern Kupyansk and are intensifying their attempts to seize the city.[34] Trehubov stated that Russian forces are deploying their reserves to Kupyansk.
Russian forces continued offensive operations in the Borova direction on July 20 and 21 but did not advance.[35] Geolocated footage published on July 21 shows Russian forces shelling Ukrainian positions in northwestern Shyikivka (east of Borova), indicating that Ukrainian forces maintain positions in the area contrary to Russian claims.[36]

Ukrainian forces continued their intermediate-range strike campaign against Russian military assets and energy infrastructure in occupied Luhansk Oblast. The Ukrainian General Staff reported on July 21 that Ukrainian forces struck a Russian ammunition depot in occupied Kundryuche (roughly 142 kilometers from the frontline).[37] Ukrainian Unmanned Systems Forces Commander Major Robert “Magyar” Brovdi reported on July 20 that Ukrainian forces struck electrical substations in occupied Bila Hora, Denezhnykove, and Bezghynove (roughly either eight or 40, 75 and 77 kilometers from the frontline respectively).[38]
Russian Subordinate Main Effort #3 – Donetsk Oblast
Russian objective: Capture the entirety of Donetsk Oblast, the claimed territory of Russia’s proxies in Donbas, and advance into Dnipropetrovsk Oblast
Russian forces continued offensive operations in the Slovyansk direction on July 20 and 21 but did not advance.[39] A source reporting on the Russian Western Grouping of Forces (GoF) claimed on July 21 that Ukrainian forces maintain positions in southwestern Lyman, contrary to Russian claims.[40]

Russian forces are intensifying their efforts in the Lyman direction. Ukrainian Joint Forces Task Force Spokesperson Colonel Viktor Trehubov reported on July 21 that Russian forces are “going all-in” to advance in the Lyman direction, despite heavy losses.[41]
Ukrainian forces recently maintained positions or advanced northeast of Kostyantynivka as Russian forces continued infiltration missions in the Kostyantynivka-Druzhkivka tactical area. Geolocated footage published on July 21 shows Russian forces shelling a Ukrainian-held trench line north of Holubivka (northeast of Kostyantynivka), indicating that there are likely no Russian positions near the trench line.[42] Additional geolocated footage published on July 21 shows Ukrainian forces striking a Russian position in eastern Mykolaivka (northeast of Kostyantynivka) during a likely Russian infiltration mission.[43] A Ukrainian brigade operating in the area reported on July 21 that Russian forces have been attempting to gain footholds and establish drone launch points in destroyed areas of Chasiv Yar (northeast of Kostyantynivka).[44] A Kremlin-affiliated Russian milblogger claimed on July 21 that Russian forces advanced west of Chasiv Yar, in southwestern Chasiv Yar, and in central Kostyantynivka.[45]

ISW collected in the past 24 hours a large number of geolocations of Russian and Ukrainian positions within Kostyantynivka and the surrounding areas from footage as old as July 7. ISW is still processing this footage and will update its maps accordingly on July 22. Much of the footage shows Ukrainian positions in areas of Kostyantynivka where Russian sources have previously claimed Russian forces maintain a presence. This footage is unlikely to shift ISW’s assessment that control of Kostyantynivka remains contested.
Russian forces continued offensive operations in the Dobropillya tactical area on July 20 and 21 but did not advance.[46] Geolocated footage published on July 21 shows Russian forces conducting four FAB-500 aerial bomb strikes on Ukrainian positions near Dobropillya.[47]
Order of Battle: Elements of the Russian 944th Self-Propelled Artillery Regiment (20th Motorized Rifle Division, 8th Combined Arms Army [CAA], Southern Military District [SMD]) are striking Ukrainian positions in Toretske (east of Dobropillya).[48] This is the first battlefield evidence ISW has observed of the 944th Self-Propelled Artillery Regiment.
Russian forces continued offensive operations in the Pokrovsk and Novopavlivka directions on July 20 and 21 but did not advance.[49]
Ukrainian forces recently advanced or maintained positions east of Oleksandrivka. Geolocated footage published on July 20 shows Russian forces striking Ukrainian servicemembers west of Myrne (east of Oleksandrivka), indicating that Ukrainian forces recently advanced or maintained positions in an area where Russian forces previously infiltrated.[50]

The spokesperson for a Ukrainian brigade operating in the Oleksandrivka direction reported on July 21 that Russian forces are attempting to make tactical gains in the Oleksandrivka direction but are not concentrating larger forces or moving military equipment in a way that indicates they are preparing for a large-scale offensive.[51]
Ukrainian forces continued their intermediate-range strike campaign against Russian energy, gasoline, logistics, bridge, and military infrastructure in occupied Donetsk Oblast. Ukrainian Unmanned Systems Forces (USF) Commander Major Robert “Magyar” Brovdi reported on July 20 that Ukrainian forces struck electrical substations in occupied Zemlianky and occupied Makiivka (roughly 42 and 52 kilometers from the frontline, respectively).[52] The Ukrainian General Staff reported on July 21 that Ukrainian forces struck a materiel and logistics warehouse in occupied Davydovske (roughly 50 kilometers from the frontline) on the night of July 20 to 21.[53] The Ukrainian General Staff reported on July 20 that Ukrainian forces struck the railway bridge over the Kalmius River in occupied Staromarivka (roughly 105 kilometers from the frontline) that Russian forces use for logistics.[54] Geolocated footage published on July 21 shows smoke rising after a Ukrainian strike on a fuel truck in occupied Mariupol (roughly 115 kilometers from the frontline).[55]
Russian Supporting Effort: Southern Axis
Russian objective: Maintain frontline positions, secure rear areas against Ukrainian strikes, and advance within tube artillery range of Zaporizhzhia City
Russian forces continued offensive operations in the Hulyaipole direction on July 20 and 21 but did not advance.[56]
Russian forces continued offensive operations in western Zaporizhia Oblast on July 20 and 21 but did not advance as Ukrainian forces counterattacked.[57]
Russian forces’ July 17 motorized assault in the Orikhiv direction was the first motorized assault in this direction since February 2026. Russian forces conducted a motorized assault involving at least eight Russian servicemembers and four all-terrain vehicles (ATVs) on July 17, 2026.[58] A spokesperson for a Ukrainian brigade operating in the Orikhiv direction reported on July 21 that this motorized assault was the first that the brigade had observed in its area of responsibility (AoR) since February 2026.[59] The spokesperson reported that Russian forces are able to strike Ukrainian military assets within 30 kilometers of the frontline while Ukrainian forces are able to strike Russian military assets 50 kilometers from the frontline. The spokesperson reported that Russian military command has transferred drone crews from the Rubikon Center for Advanced Unmanned Technologies to the brigade’s AoR.
Ukrainian forces continued their intermediate-range strike campaign against Russian energy infrastructure and air-defense assets in occupied Zaporizhia Oblast. Ukrainian Unmanned Systems Forces (USF) Commander Major Robert “Magyar” Brovdi reported on July 20 that Ukrainian forces struck an electrical substation near Hannivka (roughly 95 kilometers from the frontline).[60] The Ukrainian General Staff reported on July 21 that Ukrainian forces struck a Russian drone control point near occupied Kamyanske (either three or 50 kilometers from the frontline) on July 20 or the night of July 20 to 21.[61]
Neither Ukrainian nor Russian sources reported ground activity in the Kherson direction on July 21.
Ukrainian forces continued their intermediate and frontline strike campaigns against Russian military assets in occupied Kherson Oblast. The Ukrainian General Staff reported on July 20 that Ukrainian forces struck a Russian Bussol-S radar station near occupied Khorly (roughly 75 kilometers from the frontline).[62] The Ukrainian General Staff noted that the system detects, tracks, and provides coordinates for maritime surface targets to support Russian coastal and naval surveillance. Geolocated footage published on July 20 shows damage to a building in Hornostaivka (northeast of Kherson City and on the Dnipro River) after a Ukrainian drone strike.[63]
Occupied Kherson continues to experience power outages. The Kherson Oblast Occupation Administration claimed on July 21 that the primary energy and electricity provider for occupied Kherson Oblast, Khersonenergo, partially suspended power supply in occupied Velyka Lepetykha and Hornostaivka raions and completely suspended power supply in occupied Nova Kakhovka Raion.[64] Khersonenergo later reported that all districts of occupied Kherson Oblast were without power due to a technical failure in the power grid.[65]
Ukrainian strikes against energy infrastructure in occupied Crimea continue to cause power outages. Ukrainian Unmanned Systems Forces (USF) Commander Major Robert “Magyar” Brovdi reported on July 20 that Ukrainian forces struck the 220 kV Azovska electrical substation in occupied Staryi Krym, the 110 kV Soliana electrical substation in occupied Kerch, the 110 kV Zoria electrical substation in occupied Ponyzivka, the 110 kV Kapsel electrical substation in occupied Sudak, the 110 kV Koktebel electrical substation in occupied Shchebetovka, the 110 kV Lenino electrical substation in Yedi-Kuiu (all about 235 to 260 kilometers from the frontline), the 150 kV Berdyanska electrical substation in occupied Berdyansk (roughly 100 kilometers from the frontline), and the 220 kV Nansosna-3 electrical substation in Zelenyi Yar (roughly 120 kilometers from the frontline) on July 20.[66] A Crimea-based Telegram channel claimed on July 21 that Ukrainian forces struck the 110 kV Haspra electrical substation in Haspra on the night of July 20 to 21.[67] Crimea occupation head Sergei Aksyonov claimed on July 21 that he reached an agreement with Russian President Vladimir Putin for the Russian Finance Ministry to allocate an additional five billion rubles (roughly 63.8 million dollars) to compensate residents of occupied Crimea who go without power for more than two days.[68] The Russian Federal Government previously allocated 4.2 billion rubles (about 55.9 million dollars) to support struggling tourism companies in occupied Crimea.[69]
A Russian insider source claimed on June 21 that Russian authorities began deploying volunteer patrols to maintain order at gas stations in Krasnodar Krai and occupied Crimea.[70]
Russian Air, Missile, and Drone Campaign
Russian Objective: Target Ukrainian military and civilian infrastructure in the rear and on the front line
Russian forces conducted a series of drone and missile strikes against Ukraine on the night of July 20 to 21. The Ukrainian Air Force reported that Russian forces launched 58 Shahed-, Gerbera-, and Italmas-type strike drones, Banderol loitering munitions, and Parodiya-type decoy drones from the directions of Kursk and Oryol cities, occupied Donetsk City, and occupied Hvardiiske, Crimea.[71] The Ukrainian Air Force reported that Ukrainian forces downed 46 drones and that eight drones struck seven locations. Ukrainian officials reported that Russian forces struck residential infrastructure in Zaporizhia, Odesa, Kharkiv, and Sumy oblasts.[72]
Likely Russian forces struck a Liberian-flagged vessel in international waters near the Romanian coast. Romanian President Nicusor Dan stated on July 21 that an unspecified actor struck the Liberian-flagged LPG Gas Libson vessel roughly 20 nautical miles off the Romanian coast, outside of Romania’s territorial waters.[73] The vessel departed from the port of Alexandria, Egypt, and was en route to the Ukrainian port of Reni, Odesa Oblast. Dan stated that the incident is likely a part of Russia’s war against Ukraine. Russian forces have notably targeted international vessels at and near Ukrainian ports in Odesa Oblast in recent days.[74]
Significant Activity in Belarus
Russian efforts to increase its military presence in Belarus and further integrate Belarus into Russian-favorable frameworks
Nothing significant to report.
Note: ISW does not receive any classified material from any source, uses only publicly available information, and draws extensively on Russian, Ukrainian, and Western reporting and social media as well as commercially available satellite imagery and other geospatial data as the basis for these reports. References to all sources used are provided in the endnotes of each update.
Eurasia Press & News