DocFX VS MkDocs

Compare DocFX vs MkDocs and see what are their differences.

DocFX

Static site generator for .NET API documentation. (by dotnet)

MkDocs

Project documentation with Markdown. (by mkdocs)
Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
DocFX MkDocs
18 111
3,848 18,123
2.6% 1.8%
9.8 9.0
7 days ago 3 days ago
C# Python
MIT License BSD 2-clause "Simplified" License
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

DocFX

Posts with mentions or reviews of DocFX. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-12-19.
  • TSDocs.dev: type docs for any JavaScript library
    6 projects | news.ycombinator.com | 19 Dec 2023
    This is a better looking version of what Java and C# have had for a long time (kudos to the author for that!), is that the inspiration for this tool?

    https://docs.oracle.com/javase/8/docs/technotes/tools/window...

    https://dotnet.github.io/docfx/

    I saw the author mentioned in another comment that they found themselves peeping inside type declaration files "too often". While I do often use sites generated by the above tools to discover new API's that suit my needs, diving into the actual code using a good decompiler is still my first move, as it is often cheaper than seeking out the documentation online, and it will show me the actual implementation as well. So in my opinion there is no shame in looking inside the declaration files!

  • Use Case Driven Development with Low-Code
    4 projects | dev.to | 25 Aug 2023
    Tools like DocFx provide the ability to display the programmable functions in HTML pages. They are used with the following commands in the docfx folder:
  • Anybody know if there's a library for the doc engine that MS Docs/Learn uses?
    2 projects | /r/dotnet | 15 Jun 2023
    AFAIK they use https://github.com/dotnet/docfx which can be too heavy for your case. We use mdBook for internal documentation (plain .md with mermaid plugin) and then serve it at docs.yourdevenv.com.
  • Is there a simple way to auto-generate a wiki / documentation for project code that pulls from comments or <summary> tags?
    2 projects | /r/Unity3D | 5 Mar 2023
  • What the latest tool to generate website docs from /// summary comments?
    2 projects | /r/csharp | 3 Jan 2023
    DocFX is a nice solution.
  • How to build a solution like docs.microsoft.com
    2 projects | /r/github | 8 May 2022
    It uses DocFX
  • Comments in Javascript
    2 projects | dev.to | 22 Mar 2022
    Some of the standard and well-maintained Tools for Comments are JSDoc for Javascript, DocFx for .NET, and JavaDoc for Java.
  • Library / Codebase Documentation - Multiple aggregated libraries - How to create? DocFx does not support this?
    5 projects | /r/csharp | 6 Jan 2022
    We would really prefer to use a somewhat generic pre-made tool for this (such as DocFX) compared to rolling our own solution. We can roll our own solution... But would prefer not to so that we can minimize development and maintenance overhead.
  • dotnet-ci-pipelines
    3 projects | dev.to | 10 Nov 2021
    name: .NET Core # use https://marketplace.visualstudio.com/items?itemName=me-dutour-mathieu.vscode-github-actions to validate yml in vscode env: NUGET_PACKAGES_DIRECTORY: '.nupkg' RESHARPER_CLI_NAME: 'JetBrains.ReSharper.CommandLineTools.Unix' RESHARPER_CLI_VERSION: "2019.2.3" DOCKER_DRIVER: overlay CONTAINER_IMAGE: codeclimate/codeclimate CONTAINER_TAG: '0.85.2' rIds: ${{ secrets.rIds }} dotnetVersion: 3.1.102 on: pull_request: branches: - master push: branches: - master jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.dotnetVersion}} - name: Build with dotnet run: | export DOTNET_CLI_TELEMETRY_OPTOUT=1 dotnet publish -c Release - name: Tests run: | cp MyProject.Repository.Test/Data/appSettings.gitlab.json MyProject.Repository.Test/Data/AppSettings.json dotnet test --logger "junit" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput='./TestResults/' - name: Coverage Report run: | dotnet --version dotnet tool install dotnet-reportgenerator-globaltool --tool-path tools ./tools/reportgenerator "-reports:**/TestResults/coverage.opencover.xml;" "-targetdir:Reports" -reportTypes:TextSummary; ./tools/reportgenerator "-reports:**/TestResults/coverage.opencover.xml;" "-targetdir:Reports" -reportTypes:Html; ./tools/reportgenerator "-reports:**/TestResults/coverage.opencover.xml;" "-targetdir:Reports" -reportTypes:Badges; cat ./Reports/Summary.txt - uses: actions/upload-artifact@v1 with: name: CodeCoverage path: Reports - name: Resharper Code Quality run: | # apt update && apt install -y curl zip unzip curl -LO "https://download.jetbrains.com/resharper/ReSharperUltimate.$RESHARPER_CLI_VERSION/$RESHARPER_CLI_NAME.$RESHARPER_CLI_VERSION.zip" unzip -q $RESHARPER_CLI_NAME.$RESHARPER_CLI_VERSION.zip -d "resharper" mkdir -p CodeQuality files=(*.sln) sh ./resharper/dupfinder.sh "${files[0]}" --output=CodeQuality/dupfinderReport.html --format=Html sh ./resharper/inspectcode.sh "${files[0]}" --output=CodeQuality/inspectcodeReport.html --format=Html - uses: actions/upload-artifact@v1 with: name: CodeQuality path: CodeQuality - name: prerelease if: ${{ env.rIds }} != '' run: | echo 'build, obfuscate, and release' dotnet tool install Obfuscar.GlobalTool --tool-path tools --version 2.2.28 bash scripts/extractRelease.sh export rIds=${{ env.rIds }} bash ./scripts/pipeline.sh bash ./scripts/finalRelease.sh - name: upload release uses: actions/upload-artifact@v2 if: ${{ env.rIds }} != '' with: name: Release_unix path: Release/post build-win: runs-on: windows-latest steps: - uses: actions/checkout@v1 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.dotnetVersion}} - name: Build with dotnet run: | set DOTNET_CLI_TELEMETRY_OPTOUT=1 dotnet publish -c Release - name: Tests run: | copy MyProject.Repository.Test/Data/appSettings.gitlab.json MyProject.Repository.Test/Data/AppSettings.json dotnet test --logger "junit" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput='.\TestResults\' - name: prerelease if: ${{ env.rIds }} != '' run: | echo "build, obfuscate, and release" dotnet tool install Obfuscar.GlobalTool --tool-path tools --version 2.2.28 .\scripts\extractRelease.cmd set rIds=$env:rIds .\scripts\pipeline.cmd .\scripts\finalRelease.cmd - name: upload release uses: actions/upload-artifact@v2 if: ${{ env.rIds }} != '' with: name: Release_win path: Release\post unit_test_db_mssql: runs-on: ubuntu-latest # Service containers to run with `runner-job` services: # Label used to access the service container localhost_mysql: # Docker Hub image image: mcr.microsoft.com/mssql/server:2019-latest # ports: # Opens tcp port 6379 on the host and service container - 1433:1433 env: GIT_SUBMODULE_STRATEGY: recursive ACCEPT_EULA: Y SA_PASSWORD: yourStrong(!)Password steps: - uses: actions/checkout@v1 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.dotnetVersion}} - name: enabledb run: cp ./MyProject.Repository.Test/Data/appSettings.bitbucket.mssql.json ./MyProject.Repository.Test/Data/AppSettings.json - name: Tests run: | cd MyProject.Repository.Test dotnet test --logger "junit" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput='./TestResults/' unit_test_db_postgres: runs-on: ubuntu-latest # Service containers to run with `runner-job` services: # Label used to access the service container redis: # Docker Hub image image: postgres:11 # ports: - 5432:5432 # Provide the password for postgres env: POSTGRES_DB: mockDb POSTGRES_USER: postgres POSTGRES_PASSWORD: "mysecretpassword" POSTGRES_HOST_AUTH_METHOD: trust # Set health checks to wait until postgres has started options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v1 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.dotnetVersion}} - name: enabledb run: cp ./MyProject.Repository.Test/Data/appSettings.devops.postgres.json ./MyProject.Repository.Test/Data/AppSettings.json - name: Tests run: | cd MyProject.Repository.Test dotnet test --logger "junit" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput='./TestResults/' unit_test_db_mysql: runs-on: ubuntu-latest # Service containers to run with `runner-job` services: # Label used to access the service container redis: # Docker Hub image image: mysql:5.7.29 # ports: - 3306:3306 env: MYSQL_DATABASE: "mockDb" MYSQL_ROOT_PASSWORD: "mysecretpw" steps: - uses: actions/checkout@v1 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.dotnetVersion}} - name: enabledb run: cp ./MyProject.Repository.Test/Data/appSettings.devops.mysql.json ./MyProject.Repository.Test/Data/AppSettings.json - name: Tests run: | cd MyProject.Repository.Test dotnet test --logger "junit" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput='./TestResults/' code_docs: runs-on: windows-latest name: code documentation steps: - uses: actions/checkout@v1 - name: docfx run: | curl -LO "https://github.com/dotnet/docfx/releases/download/v2.48/docfx.zip" powershell.exe -NoP -NonI -Command "Expand-Archive '.\docfx.zip' '.\docfx\'" ./docfx/docfx.exe - uses: actions/upload-artifact@v1 with: name: CodeDocs path: _site security: runs-on: ubuntu-latest name: Snyk Security Scan steps: - uses: actions/checkout@v1 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.dotnetVersion}} - name: Build with dotnet run: | export DOTNET_CLI_TELEMETRY_OPTOUT=1 dotnet build - name: Run Snyk to check for vulnerabilities uses: snyk/actions/dotnet@master with: args: --file=MyProject.sln env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
  • Serving DocFX static site from .NET & adding Authentication
    3 projects | dev.to | 16 Jun 2021
    For those of you who are new to DocFX, DocFX is static site generator from source code files and markdown. it is mainly used for documentation, however it is important to mention that it is flexible to be used for many different purposes. some use it for blogging, profile site,... really its up to you to define what to use it for. for more information on DocFX you can visit their official website.

MkDocs

Posts with mentions or reviews of MkDocs. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-03-25.

What are some alternatives?

When comparing DocFX and MkDocs you can also consider the following projects:

sphinx - The Sphinx documentation generator

Sandcastle - Sandcastle Help File Builder (SHFB). A standalone GUI, Visual Studio integration package, and MSBuild tasks providing full configuration and extensibility for building help files with the Sandcastle tools.

pdoc - API Documentation for Python Projects

Hugo - The world’s fastest framework for building websites.

Docusaurus - Easy to maintain open source documentation websites.

BookStack - A platform to create documentation/wiki content built with PHP & Laravel

Swashbuckle - Seamlessly adds a swagger to WebApi projects!

Read the Docs - The source code that powers readthedocs.org

mdBook - Create book from markdown files. Like Gitbook but implemented in Rust

Wiki.js - Wiki.js | A modern and powerful wiki app built on Node.js

VuePress - 📝 Minimalistic Vue-powered static site generator

mkdocs-material - Documentation that simply works