SIL Library Reuse
SkillFiles & storageReuse lower-level SIL libraries before writing custom helpers in FieldWorks. Use this whenever a task touches file or directory I/O, locked-file retries, paths or URIs, writing systems, keyboards, LCM caches/project IDs/service locators, linked files/media/config paths, localization, LIFT/import/export, FLExBridge or Chorus sync/merge flows, analytics/telemetry, morphology or NLP, scripture/Paratext integration, or SIL test helpers. Even for small fixes, check the package families and repo patterns here first. If any guidance here proves inaccurate or stale, revalidate against current FieldWorks package references, local package metadata, and upstream repos, then update this skill so it stays current.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the SIL Library Reuse skill
What this skill tells your AI
The instructions your AI receives, as published by sillsdev/fieldworks in .claude/skills/sil-library-reuse/SKILL.md and read by ahel’s review.
FieldWorks already depends on SIL packages that solve many of the "small helper" problems agents are tempted to rebuild. Start here before adding new filesystem wrappers, cache bootstraps, writing-system plumbing, localization hooks, bridge calls, or parser code.
Staying Current
If you find this to be inaccurate, treat that as a maintenance signal, not a reason to ignore the skill. SIL package versions, upstream repo layouts, and public API names change over time. Revalidate the claim against the current FieldWorks package references, installed package metadata, local usage, and upstream repos, then update this skill in the same change when practical. If you cannot update it, call out the stale item clearly in your final response.
Workflow
- Identify the package family from the touched namespace or project file. If the package or version is unclear, check Directory.Packages.props and Build/SilVersions.props.
- Search FieldWorks first for the concrete helper or namespace and copy the existing local pattern.
- If local usage is thin or the name is unfamiliar, open the upstream repo links below. Do not assume Context7 covers these packages well.
- Prefer the library helper over custom code when it already handles retries, path normalization, cache setup, localization metadata, sync boundaries, or corpus parsing.
- Keep FieldWorks constraints intact: .NET Framework 4.8, C# 7.3,
.resxfor user-facing strings, registration-free COM, and repo build/test scripts.
Good First Searches
RobustIO|RobustFile|RetryUtility|Keyboard.Controller|FileLocationUtilitiesLcmCache|TestProjectId|SimpleProjectId|ServiceLocator.GetInstance|LcmFileHelper|WritingSystemManager|FileUtilsLocalizationManagerWinforms|L10NExtenderAnalytics.Track|Analytics.ReportException|FLExBridgeHelperParatext|IParatextHelper|Usfm|Usx|Morpher|SIL.Machine
Package Family Map
libpalaso
Packages:
SIL.Core, SIL.Core.Desktop, SIL.Archiving, SIL.Lexicon, SIL.Lift,
SIL.Media, SIL.Scripture, SIL.TestUtilities, SIL.Windows.Forms*,
SIL.WritingSystems
Use for: filesystem resilience, path helpers, retry loops, desktop file helpers, writing systems, keyboards, LIFT processing, archiving, and test temp-file helpers.
FieldWorks usage anchors:
- Src/Common/RootSite/RootSiteTests/RealDataTestsBase.cs
- Src/xWorks/FwXWindow.cs
- Src/Common/SimpleRootSite/EditingHelper.cs
Main APIs to look for first:
RobustIO.DeleteDirectoryAndContentsRobustIO.MoveDirectoryRobustIO.RequireThatDirectoryExistsRobustFile.CopyRobustFile.WriteAllBytesRobustFile.ReplaceByCopyDeleteRetryUtility.RetryPathHelper.NormalizePathPathHelper.AreOnSameVolumePathHelper.StripFilePrefixFileLocationUtilities.LocateExecutableFileLocationUtilities.LocateInProgramFilesPathUtilities.SelectFileInExplorerPathUtilities.OpenDirectoryInExplorerWritingSystemDefinitionIWritingSystemRepositoryKeyboard.ControllerKeyboardControllerLiftSorter.SortLiftFileLiftPreparer.MigrateLiftFileWritingSystemsInLiftFileHelperArchivingFileSystem
Upstream repo:
- libpalaso
- SIL.Core/IO
- SIL.Core.Desktop/IO
- SIL.WritingSystems
- SIL.Windows.Forms.Keyboarding
- SIL.Windows.Forms.WritingSystems
- SIL.Lift
- SIL.Archiving
- SIL.TestUtilities
liblcm
Packages:
SIL.LCModel, SIL.LCModel.Core, SIL.LCModel.Utils,
SIL.LCModel.FixData, SIL.LCModel.Tests
Use for: LCM cache creation, project IDs, service location, writing-system managers, linked/media/config paths, imports, migrations, and repository/factory access.
FieldWorks usage anchors:
- Src/Common/RootSite/RootSiteTests/RealDataTestsBase.cs
- Src/xWorks/FwXWindow.cs
- Src/xWorks/xWorksTests/ExportDialogTests.cs
Main APIs to look for first:
LcmCache.CreateCacheFromExistingDataLcmCache.CreateCacheWithNewBlankLangProjILcmServiceLocatorServiceLocator.GetInstance<T>()IProjectIdentifierSimpleProjectIdTestProjectIdLcmFileHelper.GetConfigSettingsDirLcmFileHelper.GetDefaultLinkedFilesDirLcmFileHelper.GetDefaultMediaDirLcmFileHelper.GetWritingSystemDirLinkedFilesRelativePathHelperFileUtils.FileExistsFileUtils.DirectoryExistsFileUtils.EnsureDirectoryExistsFileUtils.StripFilePrefixFileUtils.ChangePathToPlatformWritingSystemManagerUnitOfWorkService
Upstream repo:
l10nsharp
Packages:
L10NSharp, L10NSharp.Windows.Forms
Use for: runtime WinForms localization, XLIFF-backed string management, control metadata, and language switching.
FieldWorks usage anchors:
Main APIs to look for first:
LocalizationManagerWinforms.CreateLocalizationManagerWinforms.SetUILanguageLocalizationManagerWinforms.ReapplyLocalizationsToAllObjectsL10NExtenderILocalizableComponentLocalizingInfoWinformsLocalizationCategoryXliffLocalizationManagerWinforms
Upstream repo:
desktopanalytics.net
Packages:
SIL.DesktopAnalytics
Use for: telemetry, consent-aware tracking, exception reporting, and application-level analytics properties.
FieldWorks usage anchors:
- Src/Common/FieldWorks/FieldWorks.cs
- Src/Common/FwUtils/TrackingHelper.cs
- Src/LexText/LexTextDll/AreaListener.cs
Main APIs to look for first:
Analytics.TrackAnalytics.ReportExceptionAnalytics.AllowTrackingAnalytics.IdentifyUpdateAnalytics.SetApplicationPropertyAnalytics.FlushClientUserInfo.CreateSanitized
Upstream repo:
ipcframework and chorus
Packages:
SIL.FLExBridge.IPCFramework, SIL.Chorus.App, SIL.Chorus.LibChorus,
SIL.Chorus.L10ns
Use for: FLExBridge launch/obtain/send-receive flows, IPC contracts, sync/merge orchestration, file-type handlers, and merge/conflict notes.
FieldWorks usage anchors:
- Src/Common/FwUtils/FLExBridgeHelper.cs
- Src/LexText/Lexicon/FLExBridgeListener.cs
- Src/Common/Controls/FwControls/ObtainProjectMethod.cs
Start with the local wrapper first:
FLExBridgeHelper.LaunchFieldworksBridgeFLExBridgeHelper.DoesProjectHaveFlexRepoFLExBridgeHelper.DoesProjectHaveLiftRepoFLExBridgeHelper.IsFlexBridgeInstalledFLExBridgeHelper.FullFieldWorksBridgePath
Then inspect upstream helpers if the change crosses the boundary:
IPCClientFactory.CreateIPCHostFactory.CreateIIPCClient.RemoteCallIIPCHost.InitializeSynchronizerXmlMergeService.Do3WayMergeMergeOrderElementStrategyIChorusFileTypeHandlerChorusNotesMergeEventListener
Upstream repos:
- ipcframework
- IPCFramework/IPCInterfaces.cs
- IPCClientFactory.cs
- IPCHostFactory.cs
- ServerProgram/FLExBridgeHelper.cs
- ClientProgram/FLExConnectionHelper.cs
- chorus
- src/LibChorus/sync
- src/LibChorus/merge/xml/generic
- src/LibChorus/FileTypeHandlers
- src/LibChorus/VcsDrivers/Mercurial
- src/LibChorus/notes
machine
Packages:
SIL.Machine, SIL.Machine.Morphology.HermitCrab
Use for: morphology, feature-structure-based NLP, text corpora, USFM/USX parsing, and alignment. Direct FieldWorks usage is light today; consult this before inventing parser or analysis code.
Main APIs to look for first:
Morpher.ParseWordMorpher.GenerateWordsXmlLanguageLoaderTraceManagerFeatureStructParatextTextCorpusUsxFileTextCorpusUsfmParserCorporaUtils
Upstream repo:
Paratext
Packages:
SIL.ParatextShared, ParatextData
Use for: Scripture project access, verse references, plugin integration, USFM tokens, and Paratext interoperability.
FieldWorks usage anchors:
- Src/Common/ScriptureUtils/ScriptureUtilsTests/ParatextHelperTests.cs
Paratext8Pluginprojects and helpers
Important caveat:
SIL.ParatextShared source for the legacy package used by FieldWorks is not
publicly available. Use the public docs and demo plugins instead of hunting
for a missing source tree.
Public docs and references:
Useful API names in the public docs:
IProjectIReadOnlyProjectIVerseRefIUSFMTokenIUSFMMarkerTokenIScriptureTextSelectionIBiblicalTermIProjectNote
Biases To Keep
- Prefer
RobustIOorRobustFileover ad hoc delete/retry loops. - Prefer
LcmCache,TestProjectId,ServiceLocator.GetInstance<T>(), andLcmFileHelperover custom LCM bootstrapping or path math. - Prefer
LocalizationManagerWinformsover ad hoc runtime localization state. - Prefer
FLExBridgeHelperover direct IPC calls from new UI code. - Prefer existing analytics calls or wrappers over one-off telemetry clients.
- When a repo search comes up empty, switch from keyword search to symbol/reference navigation before deciding the helper does not exist.
Signals
- GitHub stars
- 111
- Forks
- 42
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
sil-library-reuse- Source
- github.com/sillsdev/fieldworks