PHPackages                             yggverse/yo - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. yggverse/yo

ActiveProject[Utility &amp; Helpers](/categories/utility)

yggverse/yo
===========

Yo! Micro Web Crawler in PHP &amp; Manticore

310[7 issues](https://github.com/YGGverse/Yo/issues)PHP

Since Apr 7Pushed 2y ago3 watchersCompare

[ Source](https://github.com/YGGverse/Yo)[ Packagist](https://packagist.org/packages/yggverse/yo)[ RSS](/packages/yggverse-yo/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (2)Used By (0)

Yo!
===

[](#yo)

Micro Web Crawler in PHP &amp; Manticore

Yo! is the super thin client-server crawler based on [Manticore](https://github.com/manticoresoftware) full-text search.
Compatible with different networks, includes flexible settings, history snaps, CLI tools and adaptive JS-less UI.

Available [alternative branch](https://github.com/YGGverse/Yo/tree/gemini) for [Gemini Protocol](https://geminiprotocol.net)!

Features
--------

[](#features)

- MIME-based crawler with flexible filter settings by regular expressions, selectors, external links etc
- Page snap history with local and remote mirrors support (including FTP protocol)
- CLI tools for index administration and crontab tasks
- JS-less frontend to run local or public search web portal

Components
----------

[](#components)

- [Manticore Server](https://github.com/manticoresoftware/manticoresearch)
- [PHP library for Manticore](https://github.com/manticoresoftware/manticoresearch-php)
- [PHP library for Network operations](https://github.com/YGGverse/net-php)
- [Symfony DOM crawler](https://github.com/symfony/dom-crawler)
- [Symfony CSS selector](https://github.com/symfony/css-selector)
- [FTP client for snap mirrors](https://github.com/YGGverse/ftp-php)
- [Hostname ident icons](https://github.com/dmester/jdenticon-php)
- [Captcha](https://github.com/Gregwar/Captcha)
- [Bootstrap icons](https://icons.getbootstrap.com/)

### Install

[](#install)

#### Environment

[](#environment)

##### Debian

[](#debian)

- `wget https://repo.manticoresearch.com/manticore-repo.noarch.deb`
- `dpkg -i manticore-repo.noarch.deb`
- `apt update`
- `apt install git composer manticore manticore-extra php-fpm php-curl php-mbstring php-gd`

Yo search engine uses Manticore as the primary database. If your server sensitive to power down, change default [binlog flush strategy](https://manual.manticoresearch.com/Logging/Binary_logging#Binary-flushing-strategies) to `binlog_flush = 1`

#### Deployment

[](#deployment)

Project in development, to create new search project, use `dev-main` branch:

- `composer create-project yggverse/yo:dev-main`

#### Development

[](#development)

- `git clone https://github.com/YGGverse/Yo.git`
- `cd Yo`
- `composer update`
- `git checkout -b pr-branch`
- `git commit -m 'new fix'`
- `git push`

#### Update

[](#update)

- `cd Yo`
- `git pull`
- `composer update`

#### Init

[](#init)

- `cp example/config.json config.json`
- `php src/cli/index/init.php`

#### Usage

[](#usage)

- `php src/cli/document/add.php URL`
- `php src/cli/document/crawl.php`
- `php src/cli/document/search.php '*'`

#### Web UI

[](#web-ui)

1. `cd src/webui`
2. `php -S 127.0.0.1:8080`
3. open `http://127.0.0.1:8080` in browser

Documentation
-------------

[](#documentation)

### CLI

[](#cli)

#### Index

[](#index)

##### Init

[](#init-1)

Create initial index

```
php src/cli/index/init.php [reset]

```

- `reset` - optional, reset existing index

##### Alter

[](#alter)

Change existing index

```
php src/cli/index/alter.php {operation} {column} {type}

```

- `operation` - operation name, supported values: `add`|`drop`
- `column` - target column name
- `type` - target column type, supported values: `text`|`integer`

#### Document

[](#document)

##### Add

[](#add)

```
php src/cli/document/add.php URL

```

- `URL` - add new URL to the crawl queue

##### Crawl

[](#crawl)

```
php src/cli/document/crawl.php

```

##### Clean

[](#clean)

Make index optimization, apply new configuration rules

```
php src/cli/document/clean.php [limit]

```

- `limit` - integer, documents quantity per queue

##### Search

[](#search)

```
php src/cli/document/search.php '@title "*"' [limit]

```

- `query` - required
- `limit` - optional search results limit

##### Migration

[](#migration)

###### YGGo

[](#yggo)

Import index from YGGo database

```
php src/cli/yggo/import.php 'host' 'port' 'user' 'password' 'database' [unique=off] [start=0] [limit=100]

```

Source DB fields required:

- `host`
- `port`
- `user`
- `password`
- `database`
- `unique` - optional, check for unique URL (takes more time)
- `start` - optional, offset to start queue
- `limit` - optional, limit queue

### Backup

[](#backup)

#### Logical

[](#logical)

SQL text dumps could be useful for public index distribution, but requires more computing resources.

[Read more](https://manual.manticoresearch.com/Securing_and_compacting_a_table/Backup_and_restore#Backup-and-restore-with-mysqldump)

#### Physical

[](#physical)

Better for infrastructure administration and includes original data binaries.

[Read more](https://manual.manticoresearch.com/Securing_and_compacting_a_table/Backup_and_restore#Using-manticore-backup-command-line-tool)

Instances
---------

[](#instances)

### [Yggdrasil](https://github.com/yggdrasil-network)

[](#yggdrasil)

- `http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yo/` - IPv6 `0200::/7` addresses only | [index](http://%5B201:23b4:991a:634d:8359:4521:5576:15b7%5D/yo/index.sql)
    - `http://yo.ygg`
    - `http://yo.ygg.at`
    - `http://ygg.yo.index`

###  Health Score

10

—

LowBetter than 0% of packages

Maintenance0

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity21

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/67b0f652ebac064d26ca06ba5fd4271fab0ac5482d6c2d4865b8f3697721bc31?d=identicon)[d47081](/maintainers/d47081)

![](https://www.gravatar.com/avatar/d4eafa818f51a43c026ee538ac36192684eef5e128e1eac8d622b74d1bfd4de4?d=identicon)[YGGverse](/maintainers/YGGverse)

---

Top Contributors

[![d47081](https://avatars.githubusercontent.com/u/108541346?v=4)](https://github.com/d47081 "d47081 (1 commits)")

---

Tags

alfis-dnsaltwebcomposerfull-text-searchgeminigemini-protocolhttpinternetjs-lessmanticoremanticore-crawler-phpmanticoresearch-phpphp-crawlersearch-enginesmallwebspiderwebweb-crawleryggdrasil

### Embed Badge

![Health badge](/badges/yggverse-yo/health.svg)

```
[![Health](https://phpackages.com/badges/yggverse-yo/health.svg)](https://phpackages.com/packages/yggverse-yo)
```

###  Alternatives

[wa72/htmlpagedom

jQuery-inspired DOM manipulation extension for Symfony's Crawler

3383.9M34](/packages/wa72-htmlpagedom)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
