Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
3014945
fix: enhance accessibility for sidebar toggle button (#2604)
sy-records Sep 18, 2025
422a745
feat: enhance embed handling for table cells (#2606)
sy-records Sep 21, 2025
8fe0e1c
docs: Update intro paragraph to help improve first impressions and br…
paulhibbitts Sep 28, 2025
2bef215
chore: bump actions/checkout from 4 to 5 (#2608)
dependabot[bot] Oct 2, 2025
c403e9e
chore: bump actions/setup-node from 3 to 5 (#2609)
dependabot[bot] Oct 3, 2025
1abe3a9
feat: add fallback default language support (#2607)
sy-records Oct 15, 2025
47b0956
test: add test for file embed and code fragments (#2616)
jacobsorme Oct 28, 2025
8b59140
test: improve file embed & code fragment tests (#2617)
jacobsorme Oct 29, 2025
321939d
chore: bump stefanzweifel/git-auto-commit-action from 6 to 7 (#2622)
dependabot[bot] Nov 2, 2025
6a16ecf
chore: bump actions/upload-artifact from 4 to 5 (#2621)
dependabot[bot] Nov 2, 2025
1cf9e88
chore: bump actions/setup-node from 5 to 6 (#2620)
dependabot[bot] Nov 2, 2025
5eeb881
chore: bump @rollup/plugin-commonjs from 28.0.1 to 29.0.0 (#2618)
dependabot[bot] Nov 2, 2025
fa2f070
chore: bump rimraf from 5.0.7 to 6.1.0 (#2619)
dependabot[bot] Nov 3, 2025
15bb83f
docs: fix broken link to issues in CONTRIBUTING.md (#2625)
Gilbertode-iden254 Nov 11, 2025
8016f8f
docs: add DeployHQ deployment instructions (#2627)
MartaKar Nov 13, 2025
a8d144d
refactor: improve blockquoteCompiler logic (#2624)
sy-records Nov 15, 2025
2d45376
fix: typo (#2632)
Edge-Seven Nov 18, 2025
18a835d
chore: bump js-yaml from 3.14.1 to 3.14.2 (#2634)
dependabot[bot] Nov 19, 2025
5ed6b24
test: add unit test for table cell embedding functionality (#2629)
sy-records Nov 20, 2025
f793e26
chore: bump glob (#2633)
dependabot[bot] Nov 21, 2025
e811756
feat: Fragment identifier full line ignore (#2626)
jacobsorme Nov 24, 2025
73d41e9
fix: improve word breaking for code blocks in markdown (#2636)
sy-records Nov 28, 2025
245484b
chore: bump actions/checkout from 5 to 6 (#2642)
dependabot[bot] Dec 2, 2025
de63e3a
chore: bump eslint-plugin-jest from 28.6.0 to 29.2.1 (#2640)
dependabot[bot] Dec 3, 2025
b960519
feat: output type definitions, and allow `new Docsify(opts)` to accep…
trusktr Dec 4, 2025
4e8be38
fix: adjust intersection observer threshold for sticky class toggle (…
sy-records Dec 4, 2025
72b21d1
delete deprecation warning that was not meant to be added in #2392 (#…
trusktr Dec 6, 2025
44ec7cf
chore: bump glob from 11.1.0 to 13.0.0 (#2641)
dependabot[bot] Dec 8, 2025
44326ca
fix: include h6 headings in heading element selection (#2649)
sy-records Dec 17, 2025
c1dfc4d
chore: bump marked from 16.0.0 to 17.0.1 (#2647)
Koooooo-7 Dec 17, 2025
9f62b0f
chore: bump min-document from 2.19.0 to 2.19.2 (#2652)
dependabot[bot] Dec 22, 2025
1ca12be
chore: bump actions/upload-artifact from 5 to 6 (#2658)
dependabot[bot] Jan 2, 2026
6d7a8bb
chore: bump qs from 6.12.2 to 6.14.1 (#2655)
dependabot[bot] Jan 4, 2026
f99e865
chore: upgrade playright (#2663)
Koooooo-7 Jan 7, 2026
29ed781
docs: Improve embed files code fragment (#2650)
jacobsorme Jan 7, 2026
37a2559
docs: Add v5 upgrade docs (#2665)
paulhibbitts Jan 15, 2026
db69b49
chore: bump lodash from 4.17.21 to 4.17.23 (#2671)
dependabot[bot] Jan 23, 2026
8553ef8
chore: bump globals from 16.0.0 to 17.1.0 (#2657)
dependabot[bot] Jan 24, 2026
7e29ca0
chore: Build and publish v4 `lib/` and `themes/` folders for backward…
trusktr Feb 5, 2026
bb6c24d
chore: bump qs from 6.14.1 to 6.14.2 (#2678)
dependabot[bot] Feb 18, 2026
2bed638
chore: bump rollup from 4.22.4 to 4.59.0 (#2683)
dependabot[bot] Feb 27, 2026
2bacdb7
chore: bump minimatch (#2685)
dependabot[bot] Feb 28, 2026
42f956a
chore: bump actions/upload-artifact from 6 to 7 (#2686)
dependabot[bot] Mar 2, 2026
f4c37e0
docs: change embedded website link to Google
QingWei-Li Mar 4, 2026
0cfee34
fix: strip HTML tags from config.name when setting page title (#2690)
Bowl42 Mar 4, 2026
7363f43
chore: bump svgo from 3.3.2 to 3.3.3 (#2692)
dependabot[bot] Mar 5, 2026
fe1372b
chore: bump immutable from 3.8.2 to 3.8.3 (#2693)
dependabot[bot] Mar 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/crowdin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Crowdin push
uses: crowdin/github-action@v2
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/emoji.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ jobs:
if: github.repository == 'docsifyjs/docsify'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- uses: actions/setup-node@v4
- uses: actions/setup-node@v6
with:
node-version: latest
cache: 'npm'
Expand All @@ -25,7 +25,7 @@ jobs:

- name: Commit
id: auto-commit-action
uses: stefanzweifel/git-auto-commit-action@v6
uses: stefanzweifel/git-auto-commit-action@v7
with:
commit_message: 'chore: Sync emoji data with GitHub emoji API'
branch: sync-emoji
Expand Down
35 changes: 28 additions & 7 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ jobs:
matrix:
node-version: ['lts/*']
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
Expand All @@ -35,9 +35,9 @@ jobs:
node-version: ['lts/*']
os: ['macos-latest', 'ubuntu-latest', 'windows-latest']
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
Expand All @@ -49,16 +49,18 @@ jobs:
run: npm run test:unit -- --ci --runInBand
- name: Integration Tests
run: npm run test:integration -- --ci --runInBand
- name: Consumption Tests
run: npm run test:consume-types

test-playwright:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: ['lts/*']
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
Expand All @@ -70,8 +72,27 @@ jobs:
run: npx playwright install --with-deps
- name: E2E Tests (Playwright)
run: npm run test:e2e

# In the interest of not having to modify GitHub settings to update required
# builds for passing, I stuck this test here.
- name: Test v4 build
run: |
git fetch --tags
npm run build:v4
# ensure v4 build files exist:
test -f lib/docsify.js
test -f themes/pure.css
# ensure no git changes after building v4:
git diff --exit-code
npm run clean:v4
# ensure v4 build files are removed:
test ! -f lib/docsify.js
test ! -f themes/pure.css
# ensure no git changes after cleaning v4:
git diff --exit-code

- name: Store artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
if: failure()
with:
name: ${{ matrix.os }}-${{ matrix.node-version }}-artifacts
Expand Down
13 changes: 11 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
.vercel
_playwright-report
_playwright-results
dist
lib
node_modules

# Files
Expand All @@ -14,3 +12,14 @@ node_modules

# Exceptions
!.gitkeep

# Output folder for the global build only
dist/

# Output folders for the legacy v4 build
lib/
themes/

# TypeScript declaration files for standard ESM consumption
src/**/*.d.ts
src/**/*.d.ts.map
2 changes: 1 addition & 1 deletion .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ _vars.css
_vars-advanced.css
CHANGELOG.md
emoji-data.*
HISTORY.md
HISTORY.md
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"cSpell.words": ["coverpage"]
"cSpell.words": ["coverpage"],
"typescript.tsdk": "node_modules/typescript/lib"
}
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ We welcome any type of contribution, not only code. You can help with
- **QA**: file bug reports, the more details you can give the better (e.g. screenshots with the console open)
- **Marketing**: writing blog posts, howto's, printing stickers, ...
- **Community**: presenting the project at meetups, organizing a dedicated meetup for the local community, ...
- **Code**: take a look at the [open issues](issues). Even if you can't write code, commenting on them, showing that you care about a given issue matters. It helps us triage them.
- **Code**: take a look at the [open issues](https://github.com/docsifyjs/docsify/issues). Even if you can't write code, commenting on them, showing that you care about a given issue matters. It helps us triage them.
- **Money**: we welcome financial contributions in full transparency on our [open collective](https://opencollective.com/docsify).

## Your First Contribution
Expand Down Expand Up @@ -70,7 +70,7 @@ Anyone can file an expense. If the expense makes sense for the development of th

## Questions

If you have any questions, create an [issue](issue) (protip: do a quick search first to see if someone else didn't ask the same question before!).
If you have any questions, create an [issue](https://github.com/docsifyjs/docsify/issues) (protip: do a quick search first to see if someone else didn't ask the same question before!).
You can also reach us at hello@docsify.opencollective.com.

## Credits
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Docsify turns one or more Markdown files into a Website, with no build process r

## Features

- No statically built html files
- No statically built HTML files
- Simple and lightweight
- Smart full-text search plugin
- Multiple themes
Expand Down
3 changes: 3 additions & 0 deletions build/release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ if [[ $REPLY =~ ^[Yy]$ ]]; then
npm run build
npm run test:update:snapshot
npm run test
npm run build:v4 # builds legacy v4 lib/ and themes/ folders for backwards compat while people transition to v5.

# Changelog
npx conventional-changelog -p angular -i CHANGELOG.md -s
Expand All @@ -46,4 +47,6 @@ if [[ $REPLY =~ ^[Yy]$ ]]; then
else
npm publish --tag "$RELEASE_TAG"
fi

npm run clean:v4 # clean up legacy v4 build files
fi
6 changes: 2 additions & 4 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,11 @@
## What it is

Docsify generates your documentation website on the fly. Unlike GitBook, it does not generate static html files. Instead, it smartly loads and parses your Markdown files and displays them as a website. To start using it, all you need to do is create an `index.html` and [deploy it on GitHub Pages](deploy.md).

See the [Quick start](quickstart.md) guide for more details.
Docsify turns your Markdown files into a documentation website instantly. Unlike most other documentation site generator tools, it doesn't need to build HTML files. Instead, it dynamically loads and parses your Markdown files and displays them as a website. To get started, create an `index.html` file and [deploy it on GitHub Pages](deploy.md) (for more details see the [Quick start](quickstart.md) guide).

## Features

- No statically built html files
- No statically built HTML files
- Simple and lightweight
- Smart full-text search plugin
- Multiple themes
Expand Down
4 changes: 4 additions & 0 deletions docs/_sidebar.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,9 @@
- [Embed Files](embed-files.md)
- [UI Kit](ui-kit.md)

- Upgrading

- [v4 to v5](v5-upgrade.md)

* [Awesome docsify](awesome.md)
* [Changelog](changelog.md)
53 changes: 49 additions & 4 deletions docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,22 @@ window.$docsify = {
};
```

## fallbackDefaultLanguage

- Type: `String`
- Default: `''`

When a page is requested and it doesn't exist for the given locale, Docsify will fallback to the language specified by this option.

For example, in the scenario described above, if `/de/overview` does not exist and `fallbackDefaultLanguage` is configured as `zh-cn`, Docsify will fetch `/zh-cn/overview` instead of `/overview`.

```js
window.$docsify = {
fallbackLanguages: ['fr', 'de'],
fallbackDefaultLanguage: 'zh-cn', // default: ''
};
```

## formatUpdated

- Type: `String|Function`
Expand All @@ -262,7 +278,7 @@ window.$docsify = {
## hideSidebar

- Type : `Boolean`
- Default: `true`
- Default: `false`

This option will completely hide your sidebar and won't render any content on the side.

Expand Down Expand Up @@ -440,7 +456,7 @@ window.$docsify = {

## name

- Type: `String`
- Type: `Boolean | String`

Website name as it appears in the sidebar.

Expand All @@ -458,6 +474,22 @@ window.$docsify = {
};
```

If `true`, the website name will be inferred from the document's `<title>` tag.

```js
window.$docsify = {
name: true,
};
```

If `false` or empty, no name will be displayed.

```js
window.$docsify = {
name: false,
};
```

## nameLink

- Type: `String`
Expand Down Expand Up @@ -636,6 +668,10 @@ window.$docsify = {
};
```

## plugins

See [Plugins](./plugins.md).

## relativePath

- Type: `Boolean`
Expand Down Expand Up @@ -690,6 +726,8 @@ window.$docsify = {
};
```

If undefined or empty, no GitHub corner will be displayed.

## requestHeaders

- Type: `Object`
Expand Down Expand Up @@ -871,9 +909,9 @@ window.$docsify = {
Determines if/how the site's [skip navigation link](https://webaim.org/techniques/skipnav/) will be rendered.

```js
// Render skip link for all routes (default)
// Render skip link for all routes
window.$docsify = {
skipLink: 'Skip to main content',
skipLink: 'Skip to content',
};
```

Expand All @@ -896,6 +934,13 @@ window.$docsify = {
};
```

```js
// Use default
window.$docsify = {
skipLink: true, // "Skip to main content"
};
```

## subMaxLevel

- Type: `Number`
Expand Down
27 changes: 27 additions & 0 deletions docs/deploy.md
Original file line number Diff line number Diff line change
Expand Up @@ -213,3 +213,30 @@ You can deploy **Docsify** as a Static Site on [Kinsta](https://kinsta.com/stati
- Publish directory: `docs`

6. Click the **Create site**.

## DeployHQ

[DeployHQ](https://www.deployhq.com/) is a deployment automation platform that deploys your code to SSH/SFTP servers, FTP servers, cloud storage (Amazon S3, Cloudflare R2), and modern hosting platforms (Netlify, Heroku).

> [!IMPORTANT] DeployHQ does not host your site. It automates deploying your Docsify files to your chosen hosting provider or server.

To deploy your Docsify site using DeployHQ:

1. Sign up for a [DeployHQ account](https://www.deployhq.com/) and verify your email.

2. Create your first project by clicking on **Projects** and **New Project**. Connect your Git repository (GitHub, GitLab, Bitbucket, or any private repository). Authorize DeployHQ to access your repository.

3. Add a server and enter your server details:

- Give your server a name
- Select your protocol (SSH/SFTP, FTP, or cloud platform)
- Enter your server hostname, username, and password/SSH key
- Set **Deployment Path** to your web root (e.g., `public_html/`)

4. Since Docsify doesn't require a build step, you can deploy your files directly. If your Docsify files are in a `docs/` folder, configure the **Source Path** in your server settings to `docs/`.

5. Click **Deploy Project**, then select your server and click **Deploy** to start your first deployment.

Your Docsify site will be deployed to your server. You can enable automatic deployments to deploy on every Git push, or schedule deployments for specific times.

For more information on advanced deployment features, see [DeployHQ's documentation](https://www.deployhq.com/support).
20 changes: 16 additions & 4 deletions docs/embed-files.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,21 @@ Sometimes you don't want to embed a whole file. Maybe because you need just a fe
```

In your code file you need to surround the fragment between `/// [demo]` lines (before and after the fragment).
Alternatively you can use `### [demo]`.
Alternatively you can use `### [demo]`. By default, only identifiers are omitted. To omit the entire line containing the identifier in the fragment output, add the `:omitFragmentLine` option. This is useful if your code fragment is e.g. HTML and you want to hide the Docsify fragment identifier from showing in your HTML source. `<!-- /// [demo] -->` in your source file and `:omitFragmentLine` will make the `-->` not show up in your Docsify code fragment section.

Example:
Example: In the source file \_media/example.js, `/// [demo]` identifiers have been included:

```markdown
[filename](_media/example.js ':include :type=code')
```

[filename](_media/example.js ':include :type=code')

Adding the `:fragment=demo` results in the following:

```markdown
[filename](_media/example.js ':include :type=code :fragment=demo')
```

[filename](_media/example.js ':include :type=code :fragment=demo')

Expand All @@ -82,10 +94,10 @@ If you embed the file as `iframe`, `audio` and `video`, then you may need to set
```

```markdown
[cinwell website](https://cinwell.com ':include :type=iframe width=100% height=400px')
[cinwell website](https://google.com ':include :type=iframe width=100% height=400px')
```

[cinwell website](https://cinwell.com ':include :type=iframe width=100% height=400px')
[cinwell website](https://google.com ':include :type=iframe width=100% height=400px')

Did you see it? You only need to write directly. You can check [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) for these attributes.

Expand Down
Loading
Loading