public void refreshRecent() {
		menuRecent.getItems().clear();
		List<RecentFilesConfig.WorkspaceModel> recentWorkspaces = recentFilesConfig.getRecentWorkspaces().getValue();
		for (RecentFilesConfig.WorkspaceModel model : recentWorkspaces) {
			int libraryCount = model.libraries().size();
			String title;
			if (libraryCount > 0) {
				title = model.primary().getSimpleName() + " + " + libraryCount;
			} else {
				title = model.primary().getSimpleName();
			}

			Runnable remove = () -> recentWorkspaces.remove(model);
			if (model.canLoadWorkspace()) {
				// Workspace can be loaded
				String extension = IOUtil.getExtension(model.primary().path());
				Node graphic = Icons.getIconView(Icons.getIconPathForFileExtension(extension));
				menuRecent.getItems().add(new ClosableActionMenuItem(title, graphic, () -> {
					// Get paths from model
					Path primaryPath = Paths.get(model.primary().path());
					List<Path> supportingPaths = model.libraries().stream()
							.map(resource -> Paths.get(resource.path()))
							.toList();

					// Pass to loader
					pathLoadingManager.asyncNewWorkspace(primaryPath, supportingPaths, ex -> {
						Toolkit.getDefaultToolkit().beep();
						recentWorkspaces.remove(model);
						logger.error("Failed to open recent workspace for '{}'", title, ex);
						ErrorDialogs.show(
								getBinding("dialog.error.loadworkspace.title"),
								getBinding("dialog.error.loadworkspace.header"),
								getBinding("dialog.error.loadworkspace.content"),
								ex
						);
					});
				}, remove));
			} else {
				// Workspace cannot be loaded (missing data), keep in list in-case user can restore file,
				// but allow user to remove it on their own too.
				Node graphic = new FontIconView(CarbonIcons.UNKNOWN);
				menuRecent.getItems().add(new ClosableActionMenuItem(title, graphic, remove, remove));
			}
		}
	}
Update the items in the recent workspace menu.
recaf-ui/src/main/java/software/coley/recaf/ui/menubar/FileMenu.java