MCPcopy Index your code
hub / github.com/apache/stormcrawler

github.com/apache/stormcrawler @stormcrawler-3.6.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release stormcrawler-3.6.0 ↗ · + Follow
2,204 symbols 9,427 edges 315 files 490 documented · 22% updated 1d agostormcrawler-3.6.0 · 2026-05-22★ 98214 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

StormCrawler

license Build Status javadoc

Apache StormCrawler is an open source collection of resources for building low-latency, scalable web crawlers on Apache Storm. It is provided under Apache License and is written mostly in Java.

Quickstart

NOTE: These instructions assume that you have Apache Maven installed. You will need to install Apache Storm 2.8.8 to run the crawler.

StormCrawler requires Java 17 or above. To execute tests, it requires you to have a locally installed and working Docker environment.

Once Storm is installed, the easiest way to get started is to generate a new StormCrawler project following the instructions below:

mvn archetype:generate -DarchetypeGroupId=org.apache.stormcrawler -DarchetypeArtifactId=stormcrawler-archetype -DarchetypeVersion=3.4.0

You'll be asked to enter a groupId (e.g. com.mycompany.crawler), an artefactId (e.g. stormcrawler), a version, a package name and details about the user agent to use.

This will not only create a fully formed project containing a POM with the dependency above but also the default resource files, a default CrawlTopology class and a configuration file. Enter the directory you just created (should be the same as the artefactId you specified earlier) and follow the instructions on the README file.

Alternatively if you can't or don't want to use the Maven archetype above, you can simply copy the files from archetype-resources.

Have a look at crawler.flux, the crawler-conf.yaml file as well as the files in src/main/resources/, they are all that is needed to run a crawl topology : all the other components come from the core module.

Getting help

The documentation is a good place to start your investigations but if you are stuck please use the tag stormcrawler on StackOverflow or ask a question in the discussions section.

The project website has a page listing companies providing commercial support for Apache StormCrawler.

Note for developers

Please format your code before submitting a PR with

mvn git-code-format:format-code -Dgcf.globPattern="**/*" -Dskip.format.code=false

You can enable pre-commit format hooks by running:

mvn clean install -Dskip.format.code=false

Building from source

The requirements for building from source are as follows

  • JDK 17+
  • Apache Maven 3
  • Docker (if you want to run tests)

The build itself is straightforward:

mvn clean install

Note: We use some binary files for testing advanced crawler functionality. These files are located exclusively in the src/test directories of the respective modules.

Thanks

alt tag

YourKit supports open source projects with its full-featured Java Profiler. YourKit, LLC is the creator of YourKit Java Profiler and YourKit .NET Profiler, innovative and intelligent tools for profiling Java and .NET applications.

Extension points exported contracts — how you extend this code

JSONResource (Interface)
Defines a generic behaviour for ParseFilters or URLFilters to load resources from a JSON file. [20 implementers]
core/src/main/java/org/apache/stormcrawler/JSONResource.java
DelegateConfigure (Interface)
Callback interface for configuring the delegate after instantiation. [61 implementers]
external/opensearch/src/main/java/org/apache/stormcrawler/opensearch/DelegateRefresher.java
DelegateConfigure (Interface)
Callback interface for configuring the delegate after instantiation. [61 implementers]
external/opensearch-java/src/main/java/org/apache/stormcrawler/opensearch/DelegateRefresher.java
LlmResponseListener (Interface)
A listener interface for handling responses and failures from LLM-based operations. This interface allows implemente [5 …
external/ai/src/main/java/org/apache/stormcrawler/ai/listener/LlmResponseListener.java
URLFrontierContainerConfig (Interface)
(no doc) [2 implementers]
external/urlfrontier/src/test/java/org/apache/stormcrawler/urlfrontier/URLFrontierContainerConfig.java
Update (Interface)
(no doc) [2 implementers]
external/solr/src/main/java/org/apache/stormcrawler/solr/SolrConnection.java
CloudSearchConstants (Interface)
(no doc)
external/aws/src/main/java/org/apache/stormcrawler/aws/bolt/CloudSearchConstants.java
ScopedCounter (Interface)
Abstraction for a scoped counter metric, compatible with both Storm V1 {@link org.apache.storm.metric.api.MultiCountMetr [10 …
core/src/main/java/org/apache/stormcrawler/metrics/ScopedCounter.java

Core symbols most depended-on inside this repo

put
called by 329
core/src/main/java/org/apache/stormcrawler/parse/ParseData.java
append
called by 307
external/tika/src/main/java/org/apache/stormcrawler/tika/DOMBuilder.java
size
called by 278
core/src/main/java/org/apache/stormcrawler/persistence/urlbuffer/URLBuffer.java
get
called by 251
core/src/main/java/org/apache/stormcrawler/parse/ParseData.java
get
called by 200
external/warc/src/main/java/org/apache/stormcrawler/warc/WARCSpout.java
add
called by 185
core/src/main/java/org/apache/stormcrawler/persistence/urlbuffer/URLBuffer.java
getString
called by 165
core/src/main/java/org/apache/stormcrawler/util/ConfUtils.java
scope
called by 161
core/src/main/java/org/apache/stormcrawler/metrics/ScopedCounter.java

Shape

Method 1,812
Class 356
Interface 25
Enum 11

Languages

Java100%

Modules by API surface

external/tika/src/main/java/org/apache/stormcrawler/tika/DOMBuilder.java33 symbols
core/src/main/java/org/apache/stormcrawler/bolt/FetcherBolt.java28 symbols
external/urlfrontier/src/test/java/org/apache/stormcrawler/urlfrontier/URLFrontierContainer.java23 symbols
external/opensearch/src/test/java/org/apache/stormcrawler/opensearch/DelegateRefresherTest.java23 symbols
external/opensearch-java/src/test/java/org/apache/stormcrawler/opensearch/DelegateRefresherTest.java23 symbols
core/src/test/java/org/apache/stormcrawler/util/CookieConverterTest.java22 symbols
core/src/test/java/org/apache/stormcrawler/filtering/BasicURLNormalizerTest.java22 symbols
core/src/main/java/org/apache/stormcrawler/filtering/regex/FastURLFilter.java22 symbols
core/src/main/java/org/apache/stormcrawler/Metadata.java21 symbols
external/warc/src/main/java/org/apache/stormcrawler/warc/WARCSpout.java19 symbols
external/opensearch/src/test/java/org/apache/stormcrawler/opensearch/WaitAckCacheTest.java19 symbols
external/opensearch-java/src/main/java/org/apache/stormcrawler/opensearch/AsyncBulkProcessor.java19 symbols

Datastores touched

(mysql)Database · 1 repos
crawlDatabase · 1 repos

For agents

$ claude mcp add stormcrawler \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact