cd /news/developer-tools/show-hn-panini-a-zero-dependency-par… · home › topics › developer-tools › article
[ARTICLE · art-151844] src=github.com ↗ pub= topic=developer-tools verified=true sentiment=↑ positive

Show HN: Panini – a zero-dependency parser for chaotic Indian bank narrations

A developer released Panini, a free, Apache-2.0-licensed TypeScript engine with zero runtime dependencies that parses chaotic Indian bank narrations and ReBIT v2.0 Account Aggregator payloads into structured transactions using deterministic JSON grammars rather than AI models. The project ships four packages — @panini/core, @panini/rules-engine, @panini/standards-schema and @panini/simulator — with built-in grammars for SBI, HDFC, ICICI and generic banks, validated by 158 tests across 15 suites. Panini's optional ops layer (rate limiting, metering, telemetry) is opt-in and its telemetry event type structurally excludes raw narrations, counterparties, references, VPAs and amounts, so parsing runs entirely in memory on the host.

read3 min views1 publishedOct 17, 2026
Show HN: Panini – a zero-dependency parser for chaotic Indian bank narrations
Image: Michielbdejong (auto-discovered)

The First Grammatical Open-Finance Orchestration Core for India's Digital Public Infrastructure (DPI).

Named after Acharya Pāṇini — the ancient architect of formal rule-based grammar — Panini is a zero-runtime-dependency TypeScript engine built to parse, structure, and normalize chaotic financial data ecosystems. It is a fully free and open-source local sandbox for processing ReBIT v2.0 Account Aggregator payload schemas and OCEN 4.0 lending networks, shipped with framework-neutral ops extensions for teams self-hosting at scale.

Just as Pāṇini's Aṣṭādhyāyī reduced a language to deterministic rules ~2500 years ago, Panini treats bank narrations as a grammar — not an AI problem. Fully free under Apache-2.0, forever.

The platform isolates the parsing core from the optional ops layer (rate limiting, metering, telemetry) to guarantee absolute privacy data sandboxing — everything is free and runs in memory on your host.

                 ┌────────────────────────────────────────────────┐
                 │              Client / Host Server              │
                 │                                                │
   narrations ──►│  @panini/rules-engine ──► @panini/core          │
   AA payloads ─►│     (JSON grammars)         (Normalizer)        │
                 │            │                                    │
                 │            ▼                                    │
                 │     NormalizedTransaction / AAProfile          │
                 │            │                                    │
                 │            ▼                                    │
                 │  @panini/standards-schema  (ReBIT / OCEN)      │
                 └───────────┬────────────────────────────────────┘
                             │  (optional ops layer)
                 ┌───────────▼────────────────────────────────────┐
                 │  EnterpriseProxy + HTTP adapter                 │
                 │  rate-limit • usage meter • opt-in telemetry    │
                 │  (PII-free by construction — no raw narrations) │
                 └────────────────────────────────────────────────┘
Package Role
@panini/core Deterministic tokenizer + grammar-driven normalizer; optional ops layer (rate limiting, metering, HTTP adapter).
@panini/rules-engine Community-extendable JSON grammars for Indian banks (SBI, HDFC, ICICI, generic) + archetype rule set.
@panini/standards-schema Zero-dependency validators for ReBIT v2.0 AA profiles and OCEN 4.0 loan applications.
@panini/simulator Generative sandbox producing seeded, anomaly-injected ReBIT payloads for client-side testing.
  • Zero runtime dependencies. The parsing core is pure TypeScript — deterministic regex grammars and tokenizers only. No network calls, no ML models, no phone-home telemetry. Safe to embed inside on-prem or sandboxed environments.
  • Rules are data, not code. Bank-specific grammars live in standalone JSON files loaded at runtime; updating a bank's narration layout never requires touching the TypeScript engine.
  • Strictly typed. Strict TypeScript throughout — noany ,unknown at external boundaries,exactOptionalPropertyTypes enabled.
  • PII isolation. The optional telemetry channel is opt-in only and its event type hasstructurally no field for raw narrations, counterparties, references, VPAs, or amounts.
npm install
npm run build   # tsc -b (project references)
npm test        # jest — 158 tests across 15 suites
js
import { parseBankNarration } from '@panini/rules-engine';

parseBankNarration('NEFT-N3452618902-SALARY-OCTOBER 2026-TCS LTD');
// {
//   channel: 'NEFT',
//   type: 'CREDIT',
//   ref_no: 'N3452618902',
//   counterparty: 'TCS Ltd',
//   is_salary: true,
//   category: 'Income',
//   ...
// }

Or use the raw engine for custom grammars:

import { Normalizer } from '@panini/core';
import { loadBuiltinRuleSets, loadCategories } from '@panini/rules-engine';

const normalizer = new Normalizer({
  ruleSets: loadBuiltinRuleSets(),
  categories: loadCategories(),
});
normalizer.normalize('UPI-SWIGGY-826384@okaxis-20261015-REV-DEBIT');
js
import { validateAAProfile, isOCENLoanApplication } from '@panini/standards-schema';

const result = validateAAProfile(payload); // { valid, errors[] } — zero deps
npm run simulate -- --count=50 --seed=7 --anomaly-rate=0.2
npm run simulate -- --count=50 -o mocks.json --pretty

Streams deterministic ReBIT v2.0 FI profiles — including deliberate anomalies (truncated narrations, corrupt timestamps, dropped fields) for exercising client-side error handling.

import { createPaniniHttpHandler } from '@panini/core';

app.post('/v1/parse', createPaniniHttpHandler(proxy));
// bearer token → rate-limit bucket → normalize → usage meter → JSON
npm run build          # strict project-reference build
npm test               # full monorepo suite
npm run lint           # eslint flat config
npm run format         # prettier

A pre-commit gate (scripts/pre-commit.sh, installed at .git/hooks/pre-commit) runs lint + tests before any commit finalizes.

Project Panini is an open-source initiative by People of Product™ — the team behind Product City, built to empower professionals with leading tech capabilities and to make India's open-finance infrastructure more open for everyone.

Find us:

Contributions welcome — see CONTRIBUTING.md.

── more in #developer-tools 4 stories · sorted by recency
── more on @panini 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/show-hn-panini-a-zer…] indexed:0 read:3min 2026-10-17 · —