PHPackages                             godbout/dash-docset-builder - 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. godbout/dash-docset-builder

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

godbout/dash-docset-builder
===========================

Dash (LOVE) Docset Builder in PHP (LOVE).

3.0.1(3y ago)1253.5k9[3 issues](https://github.com/godbout/dash-docset-builder/issues)[1 PRs](https://github.com/godbout/dash-docset-builder/pulls)MITPHPPHP ^8.0.2

Since May 26Pushed 2y ago3 watchersCompare

[ Source](https://github.com/godbout/dash-docset-builder)[ Packagist](https://packagist.org/packages/godbout/dash-docset-builder)[ Docs](https://sleeplessmind.com.mo/news/dash-docsets-tailwind-css-jigsaw-laravel-zero-and/)[ GitHub Sponsors](https://github.com/godbout)[ Fund](https://ko-fi.com/godbout)[ RSS](/packages/godbout-dash-docset-builder/feed)WikiDiscussions master Synced 6d ago

READMEChangelog (5)Dependencies (13)Versions (10)Used By (0)

DASH DOCSET BUILDER
===================

[](#dash-docset-builder)

 [![latest stable version](https://camo.githubusercontent.com/514573deb6a2cea4741066d1b8b31bcd1354cccd6cdbfff0fdc95e70bb4dd45c/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f676f64626f75742f646173682d646f637365742d6275696c646572)](https://packagist.org/packages/godbout/dash-docset-builder) [![build status](https://camo.githubusercontent.com/ef743008a5fb47c393a361a1409881de03f091202c30ee8133ed55f658becb76/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f676f64626f75742f646173682d646f637365742d6275696c6465722f6d61696e2e796d6c3f6272616e63683d6d6173746572)](https://github.com/godbout/dash-docset-builder/actions) [![quality score](https://camo.githubusercontent.com/529acda9f9d4bf454ff3e8efed31198792817e66625e71d639f6fe03105a9d07/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f7175616c6974792f672f676f64626f75742f646173682d646f637365742d6275696c646572)](https://scrutinizer-ci.com/g/godbout/dash-docset-builder) [![code coverage](https://camo.githubusercontent.com/ec9950e688e2572b90967a5c270ff27abbb05bd1c722901fc277ffaff3b9f82d/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f636f7665726167652f672f676f64626f75742f646173682d646f637365742d6275696c646572)](https://scrutinizer-ci.com/g/godbout/dash-docset-builder) [![total downloads](https://camo.githubusercontent.com/31e885f75a91c19495da7956dc139f1a15dee06403f4b6fc6b33f6fcd80d139a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f676f64626f75742f646173682d646f637365742d6275696c646572)](https://packagist.org/packages/godbout/dash-docset-builder)

 That shit creates Dash Docsets for you. Of course you still need to declare some stuff in your own class. That shit doesn't read minds yet. See more below.

---

DASH IS LOVE
------------

[](#dash-is-love)

When coding with Sublime + Chrome in Split View, [Dash](http://kapeli.com/) is the savior ❤️

HOW TO USE (ALSO KNOWN AS USAGE)
--------------------------------

[](#how-to-use-also-known-as-usage)

### Install the awesome tool (ambiguous meaning)

[](#install-the-awesome-tool-ambiguous-meaning)

```
composer require godbout/dash-docset-builder
```

### Generate your pretty Docset class

[](#generate-your-pretty-docset-class)

```
dash-docset new my-pretty-docset
```

You now have a beautiful `MyPrettyDocset` class that you're gonna have to edit. See below.

### Edit your pretty Docset class

[](#edit-your-pretty-docset-class)

Your Docset Class has to extend the [BaseDocset class](https://github.com/godbout/dash-docset-builder/blob/master/app/Docsets/BaseDocset.php) that implements the [Docset interface](https://github.com/godbout/dash-docset-builder/blob/master/app/Contracts/Docset.php). That allows the Builder to make your Docset with just a little configuration.

Your Docset Class has to define the following constants:

```
// To generate the docset filename
public const CODE = 'tailwindcss';
// What name will show up in Dash
public const NAME = 'Tailwind CSS';
// Where to download the doc from
public const URL = 'tailwindcss.com';
// What page should the docset show by default
public const INDEX = 'installation.html';
// A link to try the service/app, if any
public const PLAYGROUND = 'https://codesandbox.io/s/github/lbogdan/tailwindcss-playground';
// Where to grab the icon in 16x16 res
public const ICON_16 = 'favicon-16x16.png';
// Where to grab the icon in 32x32 res
public const ICON_32 = 'favicon-32x32.png';
// List of external domains where images or other files have to
// be downloaded, if not from URL defined above
public const EXTERNAL_DOMAINS = [
    'refactoring-ui.nyc3.cdn.digitaloceanspaces.com',
    'jsdelivr.net',
    'code.jquery.com',
    'rsms.me',
    'googleapis.com',
];
```

Then there are two mandatory methods to define:

```
/**
 * This method is responsible for generating the Dash Table of Contents
 *
 * For each HTML file of your downloaded doc, this method will be called.
 * You have to parse the file (how you want) and return a collection of
 * entries. See Docsets in
 * https://github.com/godbout/dash-docsets/tree/master/app/Docsets
 * for examples.
 */
public function entries(string $file): Collection
{
    $crawler = HtmlPageCrawler::create(Storage::get($file));

    $entries = collect();
    $entries = $this->generateEntries($crawler, $file);

    return $entries;
}

/**
 * This method is responsible for formatting the doc for Dash
 *
 * For each HTML file of your downloaded doc, this method will be called.
 * You have to update the content of the file and return that content.
 * The file is passed as argument rather than its content because sometimes
 * the file name is the only way you have to generate the Dash Online Redirection.
 * See Docsets in
 * https://github.com/godbout/dash-docsets/tree/master/app/Docsets
 * for examples.
 */
public function format(string $file): string
{
    $crawler = HtmlPageCrawler::create(Storage::get($file));

    $this->modifyHtml($crawler, $file);

    return $crawler->saveHTML();
}
```

The Builder provides a generic way to download your Docset docs. It'll use a `sitemap.xml` if found, else it'll go through your Docset index. If you need to provide your own way of downloading your docs, you can define a `grab()` method in your Docset. The Builder will catch it and use your custom method instead.

```
public function grab(): bool
{
    system(
        "wget doc.tiki.org/All-the-Documentation \
            --mirror \
            -e robots=off \
            --header 'Cookie: javascript_enabled_detect=true' \
            --reject-regex='/Plugins-|Plugins\.html|fullscreen=|PDF\.js|tikiversion=|comzone=|structure=|wp_files_sort_mode[0-9]=|offset=|\?refresh|\?session_filters|\?sort_mode' \
            --accept-regex='/Plugin|/LIST|Tiki_org_family|\.css|\.js|\.jpg|\.png|\.gif|\.svg|\.ico|\.webmanifest' \
            --page-requisites \
            --adjust-extension \
            --convert-links \
            --span-hosts \
            --domains={$this->externalDomains()} \
            --directory-prefix=storage/{$this->downloadedDirectory()}",
        $result
    );

    return $result === 0;
}
```

### Build your Docset

[](#build-your-docset)

Once your class is set up, run:

```
dash-docset build my-pretty-docset
```

This will download the doc, package it into a .docset file, and create an archive—useful if you want to contribute it to Dash—in the storage folder.

ENJOY
-----

[](#enjoy)

Enjoy your new fresh Docset and maybe also share it with the community that would be nice kiss kiss: .

DOCSETS GENERATED WITH THIS BUILDER
-----------------------------------

[](#docsets-generated-with-this-builder)

Elderlies go first:

- [Laravel-Zero](https://github.com/godbout/laravel-zero-dash-docset)
- [Jigsaw by Tighten](https://github.com/godbout/jigsaw-dash-docset)
- [Tailwind CSS](https://github.com/godbout/tailwindcss-dash-docset)
- [Tiki](https://github.com/godbout/tiki-dash-docset)
- [Stripe](https://github.com/godbout/dash-docset-builder/tree/stripe/storage/stripe) — **DECEASED**
- [Stripe API](https://github.com/godbout/dash-docset-builder/tree/stripe-api/storage/stripe-api) — **DECEASED**
- [Ploi API](https://github.com/godbout/ploi-api-dash-docset)
- [Bulma](https://github.com/godbout/bulma-dash-docset)
- [Alfred 4](https://github.com/godbout/alfred-dash-docset)
- [Chart.js](https://github.com/godbout/chartjs-dash-docset)
- [Alpine.js](https://github.com/godbout/alpinejs-dash-docset)
- [chartjs-plugin-datalabels](https://github.com/godbout/chartjs-plugin-datalabels-dash-docset)
- [webpack](https://github.com/godbout/webpack-dash-docset)
- [Laravel Mix](https://github.com/godbout/laravel-mix-dash-docset)

###  Health Score

37

—

LowBetter than 83% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity35

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity66

Established project with proven stability

 Bus Factor1

Top contributor holds 98.6% 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.

###  Release Activity

Cadence

Every ~138 days

Recently: every ~156 days

Total

6

Last Release

1450d ago

Major Versions

1.2.0 → 2.0.02021-01-09

2.0.0 → 3.0.02022-05-06

PHP version history (4 changes)1.0.0PHP ^7.2

1.1.0PHP ^7.3

1.2.0PHP ^7.4 || ^8.0

3.0.0PHP ^8.0.2

### Community

Maintainers

![](https://www.gravatar.com/avatar/0a99985b9d95710208c2b66a8935acaf3ef0e09d98d8732408a683a26c09351d?d=identicon)[godbout](/maintainers/godbout)

---

Top Contributors

[![godbout](https://avatars.githubusercontent.com/u/121373?v=4)](https://github.com/godbout "godbout (363 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (5 commits)")

---

Tags

builderdashdocsetdocumentationloveofflinephpphpdocumentationbuilderbuildofflinedashlovedocset

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/godbout-dash-docset-builder/health.svg)

```
[![Health](https://phpackages.com/badges/godbout-dash-docset-builder/health.svg)](https://phpackages.com/packages/godbout-dash-docset-builder)
```

###  Alternatives

[gherkins/regexpbuilderphp

PHP port of thebinarysearchtree/regexpbuilderjs

1.4k163.0k1](/packages/gherkins-regexpbuilderphp)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)[jansenfelipe/cnpj-gratis

Com esse pacote você poderá consultar, gratuitamente, CNPJs diretamente no site da receita.

17620.9k](/packages/jansenfelipe-cnpj-gratis)[genericmilk/docudoodle

Generate documentation for your Laravel application using OpenAI

15120.5k](/packages/genericmilk-docudoodle)[jansenfelipe/cep-gratis

Com esse pacote você poderá realizar consultas de CEP gratuitamente.

689.4k](/packages/jansenfelipe-cep-gratis)

PHPackages © 2026

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