npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

vibelocus

v1.0.1

Published

Client-side spatial learning, AI tutor, memory palace indexing, and semantic vector retrieval framework.

Readme

VibeLocus

Client-side spatial learning, AI tutor, memory palace indexing, and semantic vector retrieval framework.

License: AGPL v3 npm version


Overview

VibeLocus is an educational content creation and spatial learning architecture running 100% client-side in the browser. It parses raw documents (PDF, DOCX, TXT, MD) and topic prompts into structured hierarchical syllabi, anchors subtopics with real-time AI tutoring, and indexes knowledge representations into an in-browser Memory Palace database.

Available as both a reusable NPM library (hooks, UI components, vector retrieval, and storage utilities) and a standalone Next.js web application configured for static hosting (SSG).


Key Features

  • Multi-Provider LLM Orchestration: Direct client-side integration with Google Gemini, OpenAI, Ollama (localhost), Colab Gradio endpoints, Chrome Built-in AI (window.ai), and in-browser WebAssembly models via @xenova/transformers.
  • In-Browser Semantic Retrieval: Vector search powered by local 384-dimensional embeddings (all-MiniLM-L6-v2) running via WebAssembly and WebGPU without server roundtrips.
  • Spatial Memory Palace (IndexedDB): Client-side storage engine featuring lossless LZString data compression, storage quota telemetry, and organized Wing/Room/Drawer hierarchy.
  • Client-Side Security Safeguards: AST markdown tokenization (bypassing dangerouslySetInnerHTML), XOR key rotation obfuscation for browser credentials, and strict input/filename sanitizers.
  • Compressed State Sharing: Lossless URL fragment serialization for sharing full learning sessions, chat histories, and syllabi without backend infrastructure.
  • Speech Synthesis Suite: Configurable browser-native text-to-speech engine with markdown stripping, cadence modulation, and voice auto-selection.
  • Full TypeScript Definitions: Dual ES Module and CommonJS distribution with complete typings and tree-shaking support.

Installation

Install the package via npm:

npm install vibelocus

Or using yarn or pnpm:

yarn add vibelocus
# or
pnpm add vibelocus

Peer Dependencies

Ensure your project has React 18+ installed:

npm install react react-dom

Programmatic Usage (Library)

1. Multi-Provider AI Tutoring Hook (useLLM)

import React, { useState } from "react";
import { useLLM } from "vibelocus/hooks";

export function AssistantComponent() {
  const {
    apiProvider,
    setApiProvider,
    apiKey,
    setApiKey,
    queryLLM,
  } = useLLM();

  const [response, setResponse] = useState<string>("");

  const handleQuery = async () => {
    const messages = [
      { role: "user", content: "Explain quantum superposition simply." },
    ];
    const result = await queryLLM(messages, "You are a concise tutor.");
    setResponse(result);
  };

  return (
    <div>
      <button onClick={handleQuery}>Ask Question</button>
      <p>{response}</p>
    </div>
  );
}

2. Client-Side Memory Palace Storage (useIndexedDB)

import React, { useEffect } from "react";
import { useIndexedDB } from "vibelocus/hooks";

export function MemoryComponent() {
  const { drawers, stats, quota, addDrawer, refreshStats } = useIndexedDB();

  const saveNote = async () => {
    await addDrawer({
      wing: "Computer Science",
      room: "Algorithms",
      drawer: "Graph Traversal",
      compressedContent: "Breadth-First Search uses a queue...",
      embedding: null,
      rawSize: 120,
      compressedSize: 45,
      createdAt: Date.now(),
    });
  };

  return (
    <div>
      <button onClick={saveNote}>Save to Memory Palace</button>
      <p>Total Drawers: {stats.drawersCount}</p>
      <p>Storage Quota: {quota.usage} / {quota.quota}</p>
    </div>
  );
}

3. Safe AST Markdown Rendering (SafeMarkdown)

import React from "react";
import { SafeMarkdown } from "vibelocus/components";

export function ContentViewer({ rawMarkdown }: { rawMarkdown: string }) {
  return (
    <div className="content-container">
      <SafeMarkdown content={rawMarkdown} />
    </div>
  );
}

4. Security & State Sharing Utilities

import {
  obfuscate,
  deobfuscate,
  sanitizeInput,
  encodeShareData,
  decodeShareData,
} from "vibelocus/utils";

// Encrypt credentials before writing to localStorage
const secureKey = obfuscate("user-api-key");
const restoredKey = deobfuscate(secureKey);

// Sanitize user inputs against XSS
const safeText = sanitizeInput("<script>alert('xss')</script>Hello World");

// Compress state into URL fragment
const shareUrlParam = encodeShareData({
  v: 1,
  topic: "Neural Networks",
  syllabus: [
    {
      title: "Backpropagation",
      description: "Gradient descent mechanics.",
      estimated_minutes: 20,
    },
  ],
});

Directory Structure

vibelocus/
|-- .github/
|   |-- ISSUE_TEMPLATE/
|   |   |-- bug_report.md
|   |   `-- feature_request.md
|   |-- workflows/
|   |   |-- ci.yml
|   |   `-- publish.yml
|   `-- PULL_REQUEST_TEMPLATE.md
|-- dist/                           # Generated library bundle (CJS, ESM, DTS)
|-- public/
|   |-- _headers
|   |-- favicon.svg
|   `-- og-image.png
|-- src/
|   |-- app/                        # Next.js web application
|   |   |-- api/
|   |   |   `-- gradio/route.ts
|   |   |-- layout.tsx
|   |   `-- page.tsx
|   |-- components/                 # Reusable UI components
|   |   |-- MemoryHub.tsx
|   |   |-- SafeMarkdown.tsx
|   |   |-- SemanticSearch.tsx
|   |   |-- Settings.tsx
|   |   |-- ShareModal.tsx
|   |   |-- Sidebar.tsx
|   |   |-- SyllabusList.tsx
|   |   |-- TutorChat.tsx
|   |   `-- index.ts
|   |-- hooks/                      # React hooks
|   |   |-- useIndexedDB.ts
|   |   |-- useLLM.ts
|   |   |-- useSpeech.ts
|   |   `-- index.ts
|   |-- styles/
|   |   `-- style.css
|   |-- utils/                      # Security & sharing utilities
|   |   |-- llm.worker.ts
|   |   |-- security.ts
|   |   |-- shareLink.ts
|   |   `-- index.ts
|   `-- index.ts                    # Main package entrypoint
|-- tests/                          # Automated unit test suite
|   |-- exports.test.ts
|   |-- safeMarkdown.test.ts
|   |-- security.test.ts
|   `-- shareLink.test.ts
|-- scripts/
|   `-- obfuscate.js
|-- .editorconfig
|-- .gitignore
|-- .npmignore
|-- CHANGELOG.md
|-- CODE_OF_CONDUCT.md
|-- CONTRIBUTING.md
|-- LICENSE
|-- next.config.js
|-- package.json
|-- README.md
|-- SECURITY.md
|-- tsconfig.json
|-- tsup.config.ts
`-- vitest.config.ts

Standalone Web Application Development

1. Run Local Development Server

npm run dev

Visit http://localhost:3000 to interact with the local development instance.

2. Execute Test Suite

npm test

3. Type Checking

npm run typecheck

4. Build Package & Web Application

To build the npm distribution library:

npm run build:lib

To build the static web application export:

npm run build:app

To build both:

npm run build

Security Model

VibeLocus enforces strict client-side data isolation:

  • Zero Telemetry: All IndexedDB records, vector embeddings, and chats remain confined to the user's browser.
  • AST Parsing: Safe markdown transformation mitigates inline execution vulnerabilities.
  • Obfuscation: API credentials stored in browser persistence undergo XOR rotation encoding to prevent plain-text discovery.

License

This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See the LICENSE file for complete details.