Extension Details

- Offline MVP
- by Swipht Group
- 0 Recent Installs | 0 Total Installs
- Offline docset search, payload verification, and toolchains for developers working without a network connection.
- Repository
- Bug Reports
-
Read & Write Files
-
Launch Subprocesses
-
This extension is allowed to:
Readme
Offline MVP
Offline MVP gives Nova developers API docsets, a full-text search index, payload verification, and toolchains, all without a network connection. It is built for machines that never reach the internet. Everything it needs is copied onto the machine ahead of time.
This is proprietary software for Swipht Group. See LICENSE.
What it does
- Search (
Editor → Search Offline Docs,⌘⇧D): one search across every installed docset. The search uses the FTS5 index when it is installed and falls back to scanning each docset otherwise. Results are ranked: exact names first, then names that start with the search, then word starts, then anything else. Addtype:<kind>to keep one kind of entry, for examplemap type:Methodortype:Class Array. - Look Up Symbol (
Editor → Look Up Symbol in Offline Docs,⌃⇧D): looks up the selection, or the word under the cursor, in the docsets for the document's language. If exactly one entry has that name it opens right away.foo.barfalls back tobarwhen nothing matches. - Search Docs for This Language (
Editor → Search Docs for This Language): the normal search, limited to the docsets for the document's language. When no docset is mapped to the language, every docset is searched. - Open Docset (
Extensions → Open Docset, or click a docset in the sidebar): opens a docset'sindex.html. - Verify Payloads (
Extensions → Verify Payloads): checks every archive in the library against its SHA-256 inpayloads/manifest.jsonbefore anything is installed or run. - Install Payload (
Extensions → Install Payload): hash-checks an archive and then unpacks it. Installs run only after the hash matches. The list also offers payloads whose manifest hash has changed since they were installed, marked (update). Before unpacking, every path in the archive is checked; a docset archive may hold only<name>.docset/. Archives are unpacked into.staging/first and moved into place only when complete, so a failed update leaves the old copy working. A toolchain whose entry is missing or not executable is not installed. - Reinstall Payload (
Extensions → Reinstall Payload): installs an installed payload again from its archive, for example after its files were changed. - Uninstall Payload (
Extensions → Uninstall Payload): removes any installed docset, toolchain, or the search index after you confirm. The archive stays inpayloads/. - Search in Docset (
Extensions → Search in Docset): the same search, limited to one docset you pick first. Opening the search palette also lists your recent queries. - Run Tool (
Extensions → Run Tool): runs an installed toolchain's entry program. Pick Run again for the last arguments, a saved preset, or type new arguments. Save the last arguments as a preset to reuse them. Arguments are split like a shell would, without running one: quote with"..."or'...', and escape with\. Output opens in a new document with the exit status and run time. Before every run, the entry program is hashed and compared with the hash taken when it was installed; if it changed, the run is refused until you reinstall the toolchain. (Toolchains installed before version 1.2 have no recorded hash; reinstall them to turn the check on.) - Uninstall Docset (
Extensions → Uninstall Docset): removes one docset folder after you confirm. The payload archive stays inpayloads/, so you can install it again. Search results from that docset are hidden while it is not installed. - Disk Usage (
Extensions → Disk Usage): the size of each installed docset and the total. - Library Health (
Extensions → Library Health): checks the manifest, every payload's hash, which payloads are not installed yet, and free space on the library volume (at least 1 GB is needed). The result also shows in the sidebar. - Sidebar: an Offline Library tree listing docsets (click one to open it), toolchains (with their install state), and the verification and health actions. Payloads with an update show (update available). When the library folder does not exist, the sidebar says so.
Setting up an offline machine
- Copy the extension bundle and the
payloads/folder onto the machine on approved media. Do not rely on a network connection. - Put the payloads in the library folder. The default is
~/Library/Application Support/NovaCEE Offline/payloads/. To use another location, set Offline Library Folder in the extension preferences. - Run Extensions → Verify Payloads. Do not install anything until every payload passes.
- Run Extensions → Install Payload for each docset, the search index, and each toolchain you need.
- Activate the extension with Extensions → Activate Project as Extension, or install the bundle the usual way.
Installed layout under the library folder:
docsets/ extracted *.docset folders
payloads/ downloaded archives and manifest.json
index/ search.sqlite (installed from payloads/)
toolchains/ extracted toolchains, one folder per name-version
state.json recent searches, last tool arguments, presets, and install records
Building payloads
Payloads are built on a connected machine and are not part of this repository. The builder is Tools/build-payloads/build.js. It needs Node.js and the system sqlite3 and tar:
node Tools/build-payloads/build.js --out dist/payloads \
--licenses licenses.json --toolchains toolchains.json \
Swift.docset Python_3.docset
licenses.json maps each docset to a license. The builder refuses to package a docset or toolchain without one. Upload the archives from dist/payloads/ as release assets of this repository, and copy them to offline media.
Settings
| Setting | Default | What it does |
|---|---|---|
| Offline Library Folder | ~/Library/Application Support/NovaCEE Offline |
Where docsets, payloads, the index, and toolchains live. |
| Docsets for Each Language | built in | Which docsets the language commands use, as syntax=Docset,Docset pairs separated by ;, for example javascript=React,NodeJS; python=Django. A syntax listed here replaces its built-in docsets. Names match by prefix, ignoring case, when the prefix ends the name or is followed by _, -, a space, or a digit, so Python matches Python_3 but Java does not match JavaScript. |
Security notes
- The extension makes no network requests.
Tests/run-tests.jschecks that no network APIs appear inScripts/. - A payload is never installed or run unless its SHA-256 matches the manifest.
- Manifest paths and toolchain entry points must stay inside their folder. Absolute paths and
..are rejected. - Archive members are checked the same way before anything is unpacked.
- A toolchain's entry program is hashed again before every run.
Feedback
To report a bug or send feedback, email support@swiphtgroup.com.
Development
node Tests/run-tests.js # pure logic and the no-network check
Tools/check-no-ai-files.sh # run before every push
Activate the working copy with Extensions → Activate Project as Extension to try changes in Nova.
Release Notes
Version 1.2
- Run Tool: quoted and escaped arguments, output in a new document with exit status and run time, and a hash check of the entry program before every run.
- Look Up Symbol (⌃⇧D): look up the selection or the word under the cursor in the docsets for the document's language.
- Search Docs for This Language, with the new Docsets for Each Language setting.
- Search:
type:<kind>filters, and ranked results (exact, prefix, word start, anywhere) on both the index and the scan fallback. - Install Payload offers updates when a payload's manifest hash changes, and replaces the old copy only after the new one unpacked cleanly.
- Reinstall Payload and Uninstall Payload for docsets, toolchains, and the search index.
- Install checks every archive path first and refuses toolchains whose entry is missing or not executable.
- Sidebar: click a docset to open it, see "update available", and see the placeholder when the library folder is missing.
- Run Tool now reports an invalid manifest instead of failing silently.
- Search hides index results from docsets that are no longer installed.
- Search, Look Up Symbol, Verify Payloads, Disk Usage, and Library Health report errors instead of failing silently.
- Library Health reads free space correctly on volumes whose name has spaces.
- Extension icon, and bug reports by email to support@swiphtgroup.com.
Version 1.1
- Search in Docset: limit a search to one docset, and offer recent queries when the search opens.
- Uninstall Docset: remove a docset folder after confirmation. Only docsets/ children can be removed.
- Disk Usage: size of each installed docset and the total.
- Library Health: manifest, payload hashes, not-yet-installed payloads, and free disk space. The last result shows in the sidebar.
- Run Tool: run again with the last arguments, or use saved presets.
Version 1.0
- Offline docset search across every installed docset, with an FTS5 index and a scan fallback.
- Open Docset, Verify Payloads, Install Payload, and Run Tool commands.
- Offline Library sidebar listing docsets, toolchains, and verification.
- SHA-256 verification of every payload before it is installed or run.
- Dev-side payload builder (
Tools/build-payloads/build.js) that requires a license for every docset and toolchain. - No network access:
Tests/run-tests.jschecks thatScripts/makes no network calls.
License
Proprietary Software License
Copyright (c) 2026 Swipht Group. All rights reserved.
This software and its documentation are proprietary. No license is granted to copy,
modify, merge, publish, distribute, sublicense, or sell copies of this software, in whole
or in part, except under a written agreement with Swipht Group.
Bundled third-party docsets and tools remain under their own licenses. See
THIRD-PARTY-NOTICES.md for each one.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED.