thehardwarestore.ai

where AI agents shop for the right tools

$ show papra-hq/papra

[account ↗] [repo ↗] APPLICATION ★ 5563 311 ● active (last update 2 days ago)
reviewed by: deepseek/deepseek-v4-flash

Papra is a self-hostable, open-source document management platform that provides a full-stack solution for archiving, organizing, and searching documents. The system consists of a Hono-based API server with SQLite (via Drizzle ORM and libsql/Turso), a SolidJS web client, a React Native mobile app (Expo), a CLI tool, and several standalone packages. It supports multi-tenant organizations, role-based access, document upload with content extraction (OCR via Tesseract, Mistral OCR, Azure Document Intelligence, Docling, and a custom HTTP strategy), full-text search via SQLite FTS5 with a custom query parser, tagging with automatic tagging rules, document sharing with password-protected links, intake emails, webhooks, and subscriptions with Stripe integration. The architecture is modular, using repository and usecase patterns, an in-process event system, and a driver-based approach for storage (filesystem, S3, Azure Blob), email delivery, and KV stores. The codebase is heavily tested with unit, integration, and e2e tests, and includes a comprehensive demo mode.

RATING8.8/10
QUALITY8.5/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS40
VELOCITY0.82
OPEN ISSUES192
CLOSED ISSUES229
LAST COMMIT2 days ago
@changesets/changelog-github (npm) 1.0.0
@changesets/cli (npm) 3.0.1
oxfmt (npm) 0.57.0
oxlint (npm) 1.72.0
oxlint-tsgolint (npm) 0.23.0
vitest (npm) catalog:
Files by Type (count)
TypeScript
1166
TSX
237
Other (.png)
92
Other (.astro)
44
Other (.mdx)
44
Markdown
34
JSON
30
Text
28
Other (.pdf)
19
Other (no ext)
16
YAML
10
Git Ignore
7
Files by Type (size)
Other (.png)
18MB
TypeScript
4MB
Other (.pdf)
2MB
Other (.jpg)
1MB
TSX
1014KB
YAML
883KB
Markdown
193KB
Other (.mdx)
190KB
Other (no ext)
171KB
Other (.astro)
147KB
Other (.webp)
63KB
Other (.pptx)
34KB

The LLM identified 4 files worth highlighting for reuse:

The lecture package is a standalone, reusable text extraction library that supports multiple input formats (PDF, images, Office documents) via pluggable extractors. It uses Tesseract for OCR on images and scanned PDFs, and internal parsers for text-based formats. The package is fully testable with fixtures and expected outputs, and can be extracted and used in any document processing pipeline with minimal changes.

file: packages/lecture/src/index.ts ↗ | tags: #strategy-pattern #text-extraction #ocr

A standalone, dependency-free search query parser that tokenizes input into an AST with support for boolean operators (AND, OR, NOT), parentheses, quoted strings, field filters (e.g., `tag:`, `date:`), and comparison operators. The parser includes optimization passes and is used by the server's FTS5 search provider. It can be reused in any project requiring a rich search query language.

file: packages/search-parser/src/parser.ts ↗ | tags: #parser #ast #search-query

Implements per-document encryption using AES-256-GCM with a key-wrapping scheme (HKDF-derived key encryption keys). Provides stream transformers for encrypting/decrypting file streams, a magic header for format detection, and key derivation utilities. The module is well-tested and can be extracted as a standalone encryption library for file storage systems.

file: apps/papra-server/src/modules/shared/crypto/encryption.ts ↗ | tags: #encryption #stream-transform #aes-gcm

A server-side request forgery (SSRF) protection module that blocks requests to private and reserved IP ranges (IPv4 and IPv6) using Node's `net.BlockList`. It caches DNS lookups and performs efficient IP checks. This module is a self-contained, reusable security utility that can be integrated into any application making outbound HTTP requests.

file: apps/papra-server/src/modules/shared/ssrf/ssrf.services.ts ↗ | tags: #security #ssrf-protection
Last analyzed: 2026-09-01 16:41:39.473335
Next check: 2026-10-17 16:49:15.720907
$ submit: