Enterprise Data Ingestion Platform

Securely connecting
siloed content to AI pipelines.

OpenCrawling is a high-performance enterprise data ingestion and security mapping framework. Powered by Java 25 and Spring Boot 4, it bridges enterprise repositories to vector search and LLM orchestrators while preserving document permissions (ACLs).

bash - docker-setup

# Spin up PostgreSQL + pgvector, Redis, Ollama, Kafka

git clone https://github.com/OpenCrawling/opencrawling.git

cd opencrawling

docker compose up -d

Creating network "opencrawling_default" ... Created

Creating container opencrawling-postgres ... Running

Creating container opencrawling-redis ... Running

Creating container opencrawling-kafka ... Running

Creating container opencrawling-ollama ... Running

✔ All services started successfully on local ports.

Java 25 Virtual Threads & Structured Concurrency
100% ACL Security & Permission Mapping
Event-Driven Apache Kafka Document Decoupling

Designed for Enterprise Security & Scale

Going far beyond simple scraping, OpenCrawling bridges data stores and vector indexes securely.

Enterprise Security First

Built-in authority translation and Access Control List (ACL) mapping. Search engines only return documents that users are explicitly authorized to view.

High Performance & Concurrency

Leverages Java 25 Virtual Threads and Spring Boot. Processes thousands of streams with minimal memory overhead, preventing source system bottlenecks.

AI & RAG Ready Ingestion

Built-in semantic chunking, document cleanups, metadata enrichment, and vector embedding generation (using Ollama, OpenAI, or HuggingFace) on the fly.

Pluggable SPI Architecture

Simple interfaces for writing custom connectors. Define a new Repository Source, Transformation filter, or Database Output connector in just a few lines of Java.

Ingestion Architecture

Decoupled, event-driven orchestration leveraging the Claim Check Pattern with Kafka and PostgreSQL.

Sources SharePoint S3 / Buckets Web / API Ingestion Core Job Orchestrator Virtual Threads ACL Resolver Apache Kafka Document Queue Claim Check Decoupled Processing Outputs pgvector Elasticsearch Qdrant Admin React UI oc-admin-ui Ollama Embedding Local AI Models PostgreSQL / Redis Job Status Cache Metadata State Authority Service Access Filters ACL Mapping

System Architecture

Hover over or tap any node in the architecture diagram to view how OpenCrawling orchestrates the high-speed data flow and security controls.

Live Ingestion Simulator

Simulate real-time ingestion, security mapping, and embedding generation locally in your browser.

Ready to run
📂 Source
⚙️ Core Engine
🧬 Vector Store
Job Console Output

Select a source and click "Run Ingestion Job" to start simulation...

Getting Started in 2 Minutes

Follow these quick steps to get OpenCrawling up and running locally.

# Run from root of cloned repository to boot up all infrastructure containers
docker compose up -d

# Verify services are running
docker ps

# Services started:
# - PostgreSQL: localhost:5432 (pgvector ready)
# - Redis: localhost:6379 (session cache)
# - Apache Kafka: localhost:9092 (messaging topic)
# - Ollama: localhost:11434 (embedding engine)
<!-- Add core connector API to your spring boot application -->
<dependency>
    <groupId>org.opencrawling</groupId>
    <artifactId>oc-core</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>

<!-- Include FileSystem Repository Connector if required -->
<dependency>
    <groupId>org.opencrawling</groupId>
    <artifactId>oc-filesystem-repository-connector</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>
// Implement RepositoryConnector interface to create custom sources
public class MyCustomRepositoryConnector implements RepositoryConnector {

    @Override
    public void connect(Map<String, String> configParams) throws RepositoryConnectionException {
        // Establish authentication with target repository
    }

    @Override
    public void scanDocuments(DocumentProcessor processor, JobContext context) {
        // Scan documents incrementally and dispatch to processor
        for (Document doc : fetchNewDocuments()) {
            processor.processDocument(
                doc.getId(),
                doc.getContentStream(),
                doc.getMetadata(),
                doc.getAcl() // Synchronize Access Control Lists!
            );
        }
    }
}

Connect & Contribute

We are an open-source organization building the future of secure AI ingestion pipelines.

📂

Framework Core

Browse the OpenCrawling core engine source code, Java SPIs, connectors, and admin react UI.

View Repo →
🌐

GitHub Org

Explore all repositories, check out the organizational standards, templates, and profiles.

View Organization →
💬

Discussions & Issues

Help shape the roadmap, report bugs, request new repository/output connectors, or ask questions.

Get Involved →