Private Registry Deployment

Tax offices and internal finance teams can host proprietary parser packs on their own infrastructure and point LedgerSprout to that private registry URL.

Good fit for: teams that maintain custom parsers and want to share them internally without publishing to a public registry.

What You Need

  • A server that can host static files (Nginx, Apache, S3-compatible, intranet web host)
  • A private parser source directory with parser folders (`manifest.yaml` + `parser.js`)
  • A deployment account for SSH/rsync
  • A stable URL for `index.json`

Registry Layout

Your hosted files should follow this layout:

/registry/index.json
/registry/parsers/<parser-id>-<version>.zip
/registry/categories/<pack-id>-<version>.zip  (optional)

No custom backend API is required. Static hosting is enough.

Publish Workflow

Use the bundled script:

scripts/publish_registry_private.sh

Example:

SSH_TARGET=deploy@office-server \
REMOTE_DIR=/srv/ledgersprout/registry \
BASE_URL=https://office.example.com/registry \
PARSER_SRC_DIR=/opt/private_parsers \
CATEGORY_SRC_DIR=/opt/private_categories \
./scripts/publish_registry_private.sh

Dry run:

SSH_TARGET=deploy@office-server \
REMOTE_DIR=/srv/ledgersprout/registry \
BASE_URL=https://office.example.com/registry \
./scripts/publish_registry_private.sh --dry-run

Client App Setup

  1. Open LedgerSprout and click Browse Registry
  2. Paste your private registry URL into Registry URL
  3. Click Save
  4. Use Reset any time to switch back to the default public registry

Security Basics

  • Use HTTPS for all registry endpoints
  • Restrict registry access to office users or VPN
  • Rotate deploy keys regularly
  • Keep parser source repositories private

Index Format

The publish script generates index.json for you. For reference, it looks like this:

{
  "schema_version": 1,
  "parsers": [
    {
      "id": "bank_a_checking",
      "name": "Bank A",
      "account_type": "checking",
      "version": "1.2.0",
      "description": "Bank A monthly checking statement parser",
      "url": "https://office.example.com/registry/parsers/bank_a_checking-1.2.0.zip"
    }
  ],
  "categories": []
}

Optional publish settings: SKIP_CATEGORIES=1 publishes parsers only, and EXCLUDE_IDS=id1,id2 leaves specific parsers or category packs out.

Troubleshooting

  • Install rejected as wrong origin: every parser url in index.json must be on exactly the same origin as the Registry URL.
  • Registry fetch fails: check that index.json opens in a browser on the user's machine.
  • Empty parser list: each parser folder needs both manifest.yaml and parser.js.