All documentation
Canvas and boards/06

Board files

Free

Save and reopen full visual workspaces.

A FenSight board file is a portable JSON document saved as .fns by default. It stores the visual workspace, source paths, item metadata, layout state, palettes, presentation views, team-path metadata, and an embedded PNG preview so boards can be reopened later or imported as board-preview items inside another board.

Screenshot coming soon

FenSight File menu showing New, Load, Save, Save As, Resync board, Locate missing files, Recent, and Rebuild Thumbnails

Screenshot placeholder. Expected production asset: /docs/screenshots/board-files.png.

Board file access paths

Menu

File -> New

Prompts to save the current board when items exist, then starts a fresh board.

Menu

File -> Load

Opens a FenSight Boards (*.fns;*.json) file picker and loads the selected board.

Menu

File -> Save

Saves back to the current board path when one exists; otherwise prompts for a .fns or .json path.

Menu

File -> Save As...

Ctrl+Shift+S. Prompts for a new FenSight Boards (*.fns) or JSON (*.json) path.

Menu

File -> Recent

Shows the five most recent board paths and a Clear history command.

Menu

File -> Resync board

Removes missing file-backed items from the current board.

Menu

File -> Locate missing files...

Attempts to relink missing file-backed items from the index first, then from a folder chosen by the user.

Drag/drop

Explorer -> drag a .fns file onto the canvas

Imports the board file as a BoardPreviewItem. Loading that board still uses File -> Load or Open board file.

Context menu

Board preview item -> Open board file

Opens the referenced board file from a board-preview item.

Menu

Settings -> View -> Load last board on startup

Automatically reopens LastBoardPath on launch when the file still exists.

File commands

Exact labelUser-facing behaviorTechnical behavior
NewFree
Starts a new empty board, with a save prompt if the current board has items.FileNewMenuItem_Click prompts Yes/No/Cancel. Yes calls SaveCurrentBoard(forcePrompt: true); cancel aborts the new-board action.
LoadFree
Loads an existing .fns or .json board.LoadBoardAsync cancels active board work, reads a UTF-8 board snapshot, deserializes BoardState, applies board metadata/locks, clears the canvas, recreates items in batches, and queues thumbnail/high-res/video backfill after the board is visible.
SaveFree
Writes the current board to the current path or asks for a path on first save.SaveCurrentBoardAsync uses the existing _currentBoardPath unless forcePrompt is true. The default dialog extension is .fns and the alternate filter is .json.
Save As...Free
Writes the current board to a new path.The SaveFileDialog filter is FenSight Boards (*.fns)|*.fns|JSON (*.json)|*.json. The suggested path is the current board path, LastBoardPath, or board.fns.
RecentFree
Reopens recent boards from the File menu.AddRecentBoard stores full paths in RecentBoards, deduplicates by full path, keeps the newest five, updates LastBoardPath, and refreshes menu items.
Clear historyFree
Clears the File -> Recent board list.Clears _settings.RecentBoards, saves settings, and redraws the Recent menu with No recent boards yet.
Load last board on startupFree
Automatically loads the last saved/opened board when FenSight starts.Persists AutoLoadLastBoard. MaybeAutoLoadLastBoard checks LastBoardPath and File.Exists before dispatching LoadBoardAsync.

What a .fns saves

The board file is a JSON BoardState. Source media is referenced by path; FenSight does not copy the original image, video, document, or audio files into the board.

Saved field groupWhat it preservesTechnical fields
ViewportFree
Restores the board view state.BoardState stores Zoom, PanX, and PanY. Load starts zoomed out while items are recreated, then fits the loaded board to the viewport.
File-backed itemsFree
Restores images, image sequences, videos, documents, audio, and board previews.Each BoardItem stores SourcePath, Kind, X/Y, ItemId, GroupId, tags, lock state, signatures, display size, natural size, and type-specific metadata.
Image sequencesFree
Keeps collapsed sequence membership.SequenceFrames stores the frame paths. On load, FenSight restores existing frames and skips sequence items whose frames are missing.
PowerPoint slide metadataFree
Lets slide image items rebuild back to their original presentation item.ImageItem slide exports save ParentDocumentPath and ParentDocumentSlideIndex.
Video/audio metadataFree
Avoids expensive metadata probes on every load.VideoNaturalWidth, VideoNaturalHeight, VideoDurationTicks, AudioDurationTicks, and AudioWaveformData are persisted when available.
Labels, shapes, connectors, and strokesFree
Restores board annotation and diagramming objects.BoardItem stores label text/colors/font/heading/alignment, shape kind/fill/stroke/opacity/dot spacing/text, connector points and anchors, and freehand stroke points/pressure.
Ratings and tagsFree
Keeps item review and organization data.Tags are saved per non-label item. StarRating is stored separately when positive, and old rating tags can hydrate StarRating on load.
Palettes and text sizesFree
Restores board-level colors and label sizing.BoardState stores StrokePalette, FillPalette, LabelTextSize, and ClusterLabelTextSize.
Team path portabilityFree
Lets team boards resolve paths through saved root mappings.BoardItem can store RootId, RelativePath, and SourcePathLastResolvedUtc. BoardState can store Team root mappings and policy metadata.
Embedded previewFree
Lets a saved board display as a thumbnail when imported into another board.BoardState.Preview stores BoardPreviewData with Format=png, Width, Height, and Base64 PNG data.

Save mechanics

MechanicUser-facing resultTechnical behavior
SchemaVersionFree
Marks the saved board schema.CurrentBoardSchemaVersion is 2. BoardState also includes BoardId, DocumentRevision, MinimumFenSightVersion, SavedBy, optional Team metadata, and optional Presentation metadata.
DocumentRevisionFree
Increments the board revision every time the board saves.GetNextDocumentRevision uses max(local revision, disk revision) + 1, so overwriting a newer disk copy preserves forward revision movement.
SavedByFree
Records who last saved the board.CreateSavedByInfo writes Environment.UserName, Environment.MachineName, and SavedUtc.
Atomic writeFree
Reduces the chance of a partially written board file.WriteTextAtomically writes a same-folder temp file, then uses File.Replace when possible or File.Move overwrite fallback. The temp file is removed on cleanup.
.bak fileFree
Keeps the previous board contents when replacing an existing board.The backup path is the board path plus .bak. State writes update the backup; the later embedded-preview write does not update backup because the state has already been written.
Embedded preview writeFree
Saves a visual thumbnail inside the board after the main state write.CreateEmbeddedBoardPreview hides overlays/creation rail, fits the view to items, renders a 1280 x 720 PNG snapshot, restores the prior view, then rewrites the board with Preview included. Failure here does not fail the board save.
Large board save progressFree
Shows progress when saving larger boards.SaveProgressThreshold is 150 items. Async save shows Saving board, Writing N items, Generating board preview, and Embedding board preview progress steps.

Load mechanics

MechanicUser-facing resultTechnical behavior
Board snapshotFree
Loads a consistent text snapshot and tracks whether the disk file later changes.BoardFileStamp.ReadTextSnapshotAsync reads UTF-8 bytes, decodes optional BOM, computes SHA-256, records LastWriteUtc and Length, then returns BoardFileSnapshot.
Batch item recreationFree
Keeps large boards visible without recreating everything in one UI-thread block.LoadBoardAsync recreates items in batches of 200, or 50 for boards with at least 5000 items, yielding between batches.
File existence pre-checkFree
Identifies missing files before item creation.Load pre-checks distinct SourcePath values on background threads and stores results in a temporary existence cache used by CreateBoardItemFromState.
Cache pre-warmFree
Speeds up large board reopen.For at least 300 existing paths, load pre-warms media cache keys for current decode limits, video-thumb, and document, while PreviewCache pre-decodes available image/sequence previews.
Placeholder-only pressure modeFree
Protects the app when GDI/user object pressure rises during board load.If GDI pressure appears while loading, remaining items switch to placeholder-only creation and later backfill/LOD streaming can repair visible previews.
Post-visible backfillFree
Shows the board first, then improves thumbnails and high-resolution previews.After item creation, FenSight fits the board, starts a thumbnail pass for repair candidates under 5000 items, starts LOD/high-res work when memory allows, and runs video Phase 4 backfill in the background.
AI badge restorePro
Restores cloud AI enrichment badges for board items when AI search is enabled.Load opens the index store in the background, filters records to board paths, and populates BoardViewState.AiEnrichedPaths. This follows the AI feature tier, not the board-file tier.

Board previews inside boards

BehaviorUser-facing resultTechnical behavior
PipelineSupportedBoardsFree
Lets .fns files appear as visual references on a board.The supported-board extension set is .fns. Drag/drop or import creates a BoardPreviewItem instead of loading the board into the current session.
Embedded preview readFree
Shows the saved board snapshot when available.TryReadEmbeddedBoardPreview reads BoardState.Preview, requires Format=png and non-empty DataBase64, then loads the bitmap from bytes.
Board placeholder thumbnailFree
Keeps board files visible even when no embedded preview exists.CreateBoardPreviewItemAsync falls back to BuildBoardPlaceholderThumbnail when preview loading fails.
Open board fileFree
Opens the referenced board file from a board-preview item.The board-preview context menu calls OpenItemDefault for the .fns source path.

Missing-file workflows

Exact labelUser-facing behaviorTechnical behavior
Resync boardFree
Removes missing file-backed items from the board.ResyncBoardItems checks file-backed items, finds empty or non-existing SourcePath values, deletes those items, clears selection, refreshes path/tag previews, and reports how many were removed.
Resync selectedFree
Removes only missing selected file-backed items.The context-menu helper changes the label to Resync selected when selected file-backed items exist.
Locate missing files...Free
Searches for moved files and relinks board items.LocateMissingFilesAsync first searches index records by filename/size/path matching, then prompts for a folder and recursively scans it for remaining missing files.
Locate selected files...Free
Relinks only missing selected file-backed items.The context-menu helper changes the label to Locate selected files... when selected file-backed items exist.
Files relocated during loadFree
Summarizes paths FenSight automatically relinked while opening a board.Load can relink via watched-folder checks and index/root searches, then shows the relocated-items dialog unless Suppress 'Files relocated during load' dialog is enabled.
Suppress 'Files relocated during load' dialogFree
Hides the relocation summary dialog after loading a board.Persists SuppressRelinkedItemsDialog in Settings -> View.

Shared-board safety

These safeguards matter when a board lives on a shared drive, is source-controlled, or is marked as a team board. Normal personal .fns saves do not require a lock file.

Safety pathUser-facing behaviorTechnical behavior
Shared Board ChangedFree
Warns when the board changed on disk after it was opened.FenSight captures a BoardFileStamp on load/save. If same-path save sees different SHA-256/length, it offers Save As, Overwrite, or Cancel and displays disk revision, last saved by, timestamp, and size when available.
Board File Is Read-OnlyFree
Avoids silently overwriting source-controlled or read-only board files.BoardSourceControl checks FileInfo.IsReadOnly and, when p4 is available, can run p4 where and p4 edit. If checkout fails or the file remains read-only, FenSight routes to Save As or Cancel.
Board Open Read-OnlyFree
Prevents saving back to a shared board opened read-only.If the current board is marked read-only, Save routes to a Save As prompt and refuses to save back to the original path.
Advisory .lock fileFree
Coordinates editing for team boards that require an advisory lock.When Team.RequireAdvisoryLock is true, FenSight creates <board>.lock with BoardId, LockId, user, machine, process id, app version, created time, and heartbeat. Heartbeat runs every 15 seconds; locks become stale after 2 minutes.
Open read-onlyFree
Allows review when another user owns the advisory lock or a lock cannot be created.Active and stale-lock prompts can open read-only. Read-only state blocks save-back to the shared path until a Save As path is chosen.

What board files do not contain

A .fns file is the workspace state, not an archive of every referenced asset. Moving the source files without relinking can produce missing-file placeholders on load.

  • Original media, videos, documents, PowerPoint decks, audio files, and external project files stay at their SourcePath.
  • Embedded Preview is only a board thumbnail, not a replacement for the source files.
  • Generated caches speed up reopen and preview repair, but the board remains valid without those cache files.
  • Missing file placeholders keep enough item identity to support Locate missing files... later.

Saving/loading boards, recent boards, embedded board previews, board-preview items, missing-file relink, resync, read-only safeguards, and advisory-lock handling are Free. AI badge restoration follows the AI feature tier.

Use Save As before experimenting on a shared board if the Shared Board Changed prompt appears. Overwrite intentionally replaces the shared file with your current board state.

Connected guides

Follow these related pages when the workflow crosses into setup, search, organization, export, security, or another board-level system.