





FS25 Fresh / Perishable products V1.1.0.0
Fresh adds shelf life to your products. Crops age over time and will spoil if not sold or used.
Your harvested crops, processed goods, and baled forage have realistic shelf lives. Leafy vegetables spoil quickly, while grains and canned products last much longer. Products left too long will expire and be lost. Shelf lives can be customized via the Fresh Menu.
Usage:
Install the mod and play normally. Open Fresh Menu with Right Shift+F to view inventory, stats, and settings. Check expiry by looking at any vehicle, bale, or storage. Customize shelf lives in Settings if the defaults do not suit your playstyle.
User guide: https://rittermod.github.io/FS25_Fresh/
Found a bug? Open an issue at https://github.com/RitterMod/FS25_Fresh/issues
Features
- Fresh Menu, opened with Right Shift+F
- Inventory Overview: see all perishables at a glance with their oldest ages
- Product Details: per-storage age breakdown with freshness buckets
- Storage Details: per-product breakdown with age distribution and category filter
- Loss Statistics: track what you have lost and when
- Shelf Life: effective shelf life per storage class
- Settings: customize shelf lives and storage class benefits
- Storages are automatically classified as Exposed, Sheltered, Indoor, Cooled, Frozen, or Disabled
- Each class applies an aging speed multiplier. Better storage means slower spoilage
- Bales, pallets, big bags, and parked vehicles under a building roof age as Sheltered
- Vehicle loads follow their cover: Sheltered while the tarp is closed, Exposed while it is open. Tankers and closed hoppers age as Sheltered
- Override storage class per storage via Settings. The Loose Items setting sets the minimum class for bales and pallets outside a storage
- Set a per-product max benefit class to cap how much a storage class can help
- Age distribution bars appear near placeables, vehicles, and bales, with color-coded freshness
- Storage class icons appear in the HUD, expiring soon table, and loss log
- Expiry countdown on vehicles and bales
- Expiring amount and time remaining per fill type on placeables and husbandries
- Warning highlight when products are near expiration, with a configurable threshold
- Notification when products expire and are removed
- 100+ products with realistic shelf lives: perishable produce spoils in days, grains last months, and canned products up to 3 years
- 130+ non-expiring products pre-configured
- 4 bale types: Fresh Grass (days), Hay (18 months), Straw (24 months), Silage (12 months)
- Wrapped grass bales begin aging after fermentation completes
- Difficulty presets: Very Easy, Easy, Normal, Hard, or Custom for individual control
- Configure shelf life for any product, including basegame, DLCs, maps, and mods
- Enable or disable expiration globally or per product
- Configurable warning threshold: 6h, 12h, 24h, 48h, or 72h
- Reset all settings to defaults with one click
- Optional external config file,
customDefaults.xml, to add or override shelf life, storage class, and aging for any crop, including custom map or mod crops, without editing the mod. It is update-safe and server-side in multiplayer - Per-savegame settings
- In multiplayer, the host or admin controls settings for all players
- All expirations are recorded in the loss log
- Daily notifications summarize your farm’s losses
- View loss history in the menu
- Vehicles: trailers, tankers, combine tanks, etc.
- Bales and pallets: on the ground and in storage buildings
- Placeables: silos, productions, husbandries, and object storage
- Each harvest or production run is tracked as a separate batch with its own age
- Oldest items are retrieved first from storage (FIFO)
- Expired products are automatically removed
- Batch ages are preserved during transfers between containers
- Multiplayer support, server-authoritative
- Ages are saved with your game
- No loose item tracking for loose grass, grains, etc. on the ground
- Silo extensions are tracked separately rather than as a shared pool
Limitations and known issues: There is no loose item tracking for loose grass, grains, etc. on the ground. Silo extensions are tracked separately rather than as a shared pool.
Changelog
- V1.1.0.0
Fresh now checks for roofs too. Bales, pallets, and big bags set down under a shed, carport, or barn roof age as Sheltered, and so do trailers parked under one. A covered trailer load ages as Sheltered while its tarp is closed. Expiry times in the menus and info boxes now follow the batch that runs out first and respect your aging settings.- Added roof detection for loose bales, pallets and big bags. One set down under a shed, carport or barn roof now ages as Sheltered instead of Exposed
- Added covered vehicle loads. A compartment with a load heap ages as Sheltered while the tarp or cover over it is closed and Exposed while it is open, including compartments that share one tarp with the covered ones
- Added roof detection for parked vehicles. A trailer parked under a shed roof, with nobody in it or its tractor, ages as Sheltered
- Changed the Loose Items storage setting to a minimum class. A bale or pallet under a roof stays Sheltered even when the setting is Exposed
- Removed the admin console commands that edit stock, ages, expiry and storage classes from release builds. Set storage classes in the Fresh settings menu instead
- Fixed pallets and big bags on multiplayer clients showing a storage class that ignored the Loose Items setting. Aging on the server was already correct
- Fixed tankers, sprayers, and closed hoppers aging as Exposed. A load with no open heap now ages as Sheltered
- Fixed the Overview’s Next Expiry showing the oldest batch’s time when a newer batch in faster-spoiling storage runs out first
- Fixed the Product Details and Storage Details tabs showing a vehicle’s oldest batch time instead of the batch that runs out first
- Fixed expiry times ignoring the Storage aging setting when it is off, and the Expires in lines and age bars still showing when expiration is off
- Updated the storage classes guide and FAQ to explain which buildings count as a roof
- V1.0.1.0
- Added optional external config,
modSettings/FS25_Fresh/customDefaults.xml, to add or override shelf life, storage class and aging multipliers for any crop, including custom map or mod crops, without editing the mod. It is update-safe, re-read each launch, and server-side in multiplayer - Added user guide documentation for the custom defaults config file, including setup, precedence, schema, and multiplayer
- Added Ukrainian localization
- Improved stability: a rare error while aging or expiring one item no longer interrupts the rest of the hourly/daily update
- Fixed near-empty containers under 1 L, such as a combine grain-tank leftover, showing as “0 L” rows in the inventory menus and skewing the displayed expiry
- Fixed inventory and loss-statistics amounts ignoring locale number formatting. Thousands separators now display correctly for non-English languages, such as 1.234 L
- Added optional external config,
- V1.0.0.0
- Added Storage Details tab, with per-product breakdown, age distribution, storage class, expiry times, and 4-category filter with shop icons
- Added Product Details tab, with per-storage breakdown and age distribution across Fresh/Good/Warning/Critical buckets
- Added storage class icons to HUD, expiring soon table, and loss log with thick stroke variants for small-size legibility
- Added custom menu icons for all 6 tabs, using Lucide icons
- Added German localization
- Updated all translations, French, Italian, Swedish, and German, to cover new detail tabs and storage features
- Improved settings UX: the master Enable switch greys out all other settings, and dependency toggles hide or show related controls and sub-tabs
- Improved menu polish: keyboard/controller navigation, table spacing, naming consistency, and removed “(preview)” labels
- Localized all remaining hardcoded English strings
- Rebalanced frozen multiplier from 0.05 to 0.10, changing the life extension from 20x to 10x
- Adjusted shelf lives and storage class limits for 15+ products to better reflect real-world storage behavior
- Fixed incorrect maxBenefitClass for Lettuce, Potatoes, Sugarcane, Salmon/Trout Fry, and Butter
- Fixed storage list showing empty product entries for containers with zero fill level
- Fixed dedicated server not recognizing third-party mod products on startup
- Fixed client HUD not showing freshness for products configured only via user settings
User guide: https://rittermod.github.io/FS25_Fresh/
Source code and issue tracker: https://github.com/rittermod/FS25_Fresh







