GithubHelp home page GithubHelp logo

dotnet / docfx Goto Github PK

View Code? Open in Web Editor NEW
3.9K 151.0 828.0 154.33 MB

Static site generator for .NET API documentation.

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

License: MIT License

C# 94.47% JavaScript 3.06% CSS 0.51% XSLT 0.17% Roff 0.09% SCSS 0.41% TypeScript 1.26% Dockerfile 0.02%
markdown api documentation csharp dotnet static-site-generator

docfx's Introduction

Build your docs with docfx

NuGet Help Wanted

Build your technical documentation site with docfx, with landing pages, markdown, API reference docs for .NET, REST API and more.


As you may have heard docfx has been transitioned to be a .NET Foundation project. Microsoft Learn no longer uses docfx and do not intend to support the project since Nov 2022.

Docfx is planned to continue as a community-driven project. We hope to produce future releases with new features and enhancements to support existing and new use cases. We also would like to invite any interested parties to be involved in this project. If you'd like to contact the community team please open a discussion thread.

Getting Started

  1. Install docfx as a global tool:

    dotnet tool install -g docfx
  2. Create and start a website locally:

    docfx init -y
    docfx build docfx_project\docfx.json --serve
    
  3. Go to https://localhost:8080 to see the sample site.

For more information, refer to Getting Started.

Tip

Docfx publishes nightly builds to GitHub Packages, this allows you to stay up-to-date with the latest developments in Docfx.

Contributing

Use Discussions for questions and general discussions. Use Issues to report bugs and proposing features.

We welcome code contributions through pull requests, issues tagged as help-wanted are good candidate to start contributing code.

Prerequisites

Build and Test

  • Build site templates in templates directory:
    • Run npm install to restore npm dependencies.
    • Run npm run build to build the templates.
  • Run dotnet build to build the project or use Visual Studio to build docfx.sln.
  • Run dotnet test to test the project or use Visual Studio test explorer.
    • Run git lfs checkout to checkout files for snapshot testing

Branch and Release

The main branch is the default branch for pull requests and most other development activities. We occasionally use feature/* branches for epic feature development.

Releases are based on a stable main branch commit using GitHub Releases. Use of Conventional Commit is encouraged.

Docfx is not released under a regular cadence, new versions arrive when maintainers see enough changes that warrant a new releases. Sometimes we use prereleases to dogfood breaking changes and get feedbacks from the community.

Roadmap

We use Milestones to communicate upcoming changes docfx:

  • Working Set are features being actively worked on. Not every features in this bucket will be committed in the next release but they reflect top of minds of maintainers in the upcoming period.

  • Backlog is a set of feature candidates for some future releases, but are not being actively worked on.

License

This project is licensed under the MIT License.

.NET Foundation

This project is supported by the .NET Foundation.

This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community. For more information see the .NET Foundation Code of Conduct.

docfx's People

Contributors

928pjy avatar adunndevster avatar angryberryms avatar ansyral avatar bitbonk avatar bryanla avatar chenkennt avatar daxianji007 avatar dependabot[bot] avatar fenxu avatar filzrev avatar hellosnow avatar herohua avatar icnocop avatar marzinz avatar partychen avatar pascalberger avatar peterennis avatar qinezh avatar sharanya-rao avatar simoncropp avatar superyyrrzz avatar surban avatar tianqizhang avatar tibel avatar v-pegao avatar vicancy avatar vwxyzh avatar yishengjin1413 avatar yufeih avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

docfx's Issues

Files list doesn't appear to support relative paths.

If I put the following in my docfx.json it works:

  "src": [
    {
      "cwd":  "../../src/",
      "files": [
        "Perspex.Base/Perspex.Base.csproj"
      ],
      "exclude": [ "**/bin/**", "**/obj/**" ]
    }

However, this doesn't work:

  "src": [
    {
      "files": [
        "../../src/Perspex.Base/Perspex.Base.csproj"
      ],
      "exclude": [ "**/bin/**", "**/obj/**" ]
    }

The two should be equivalent.

Referencing source code using a region

I use Sandcastle's code snippet plugin a lot. In your documentation it mentions referencing a file and then either specifying line numbers or a tag. What is a tag in C#? Sandcastle lets you specfiy a C# #region and that content is imported

<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\Samples\Json\CustomJsonReader.cs" region="Usage" title="Usage" />

I like #region because it is part of the language and messing them up results in a compilation error.


From #148

Release through Chocolatey?

This looks like a great candidate for release through Chocolatey. Would you be interested in a PR for this?

It would quickly become a trusted package (which means it is live very soon after you push it).

Is it possible to control file naming?

I am using docfx for generate the documentation for the Auth0 .NET SDK and have set up and automated build process with AppVeyor.

I have managed to generate the documentation with docfx automatically as part of the build pipeline, and after the build has been completed I want to upload the generated documentation to an Amazon S3 bucket.

In order to do that I need to define the generated documentation output as a build artifact in Appveyor. It seems that AppVeyor uploads their build artifacts to Google Storage, but Google Storage seems to have a problem with some of the file names generated by docfx for generic types which contains the ` character.

So I wonder if there is any way to tell docfx to not use the ` character for those filenames, but instead something else like a tilde (~) for example?

image

Possible reStructuredText support

I noticed from this page that RST support has been considered. I'd like to know what exactly is coming from DocFX. Will there soon be a C# parser from your guys?

I have evaluated a few Java parsers, but they are simply Regex based. The Python one (docutil) is the primary source of knowledge, and it uses a state machine to parse the files. Not sure if it is feasible to rewrite it in C# (I am trying to do so for the RST addin for VS Code), but there might be other options.

More info on references to an API page in Markdown files should be added

Currently DocFX documentation does not make it clear enough how to add a reference to a certain API page.

For an index page like this one I found that I need to point to the YAML file,

<a href="obj/api/WeifenLuo.WinFormsUI.Docking.DockPanel.yml" class="button">Read more...</a>

It is not intuitive, so should be better documented for new users.

DocFx questions

Hi! I'm happy that MS is finally making some documentation looks again. Right now I'm using Sandcastle and I had some questions:

1- The uses of it I've seen of DocFx so far are focused on generating the entire site rather than a section. I already have an ASP.NET MVC site and the documention is just a section. I'm guessing the template can just be updated to ignore the top level TOC file then the static files are uploaded to a subdirectory and linked to as usual?

While that approach works, a nice to have would be if the process that generates HTML files from markdown and templates could be turned into a library. ASP.NET sites could use it to generate HTML on the fly and embed in the layout system of an ASP.NET MVC site.

2- I use Sandcastle's code snippet plugin a lot. In your documentation it mentions referencing a file and then either specifying line numbers or a tag. What is a tag in C#? Sandcastle lets you specfiy a C# #region and that content is imported

<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\Samples\Json\CustomJsonReader.cs" region="Usage" title="Usage" />

I like #region because it is part of the language and messing them up results in a compilation error.

3- Can conceptual and API documentation be combined in a single TOC? That is what I'm doing currently with Sandcastle: http://www.newtonsoft.com/json/help/html/Introduction.htm (API documentation expands at the bottom)

4- Can the location of the templates be specified in the config file? One thing that bugs me about Sandcastle is the templates have to site inside Sandcastle's install directory so it makes it difficult to have them under source control.

5- I like the github links in the API documentation. In the DoxFx docs it is linking to the master branch. Can it link to a tag? Otherwise the docs and master will get out of sync from dev changes.

6- The DocFx API docs don't generate links to MSDN for BCL types, e.g. string. Will it support linking to other documentation websites for third-party types?

7- There are no pages generated for API members. Is this an option?

Custom CSS

Can you guys provide some information on how to include custom CSS.
I see you guys are using a hero CSS style for the official docfx page here http://dotnet.github.io/docfx/

I would like to do something similar but I'm not clear on how.

PathTooLongException

Hi, I'm wondering if anyone else has experienced a PathTooLongException when generating docs, and if there is a workaround.

"ASP.NET website project template" in "Getting Started" is wrong

The "Getting Started" docs say to use "ASP.NET website project template" but that exact project type doesn't exist in my VS2015.

Do you mean "ASP.NET Web Application"? It would be helpful to specify the correct name, as it's confusing otherwise.

Also, the docs imply that it's optional to use that project template. If I don't use that project template,what should I use?

More info on build.cmd should be added

The current code base in dev branch is compiled against .NET Core 5 1.0.0 RC1 Final, while 1.0.0 RC1 Update 1 is already available and on some machines like mine.

Thus, anyone who don't have 1.0.0 RC1 Final should execute dnvm install 1.0.0-rc1-final before executing build.cmd.

Meanwhile, someone might have Visual Studio 2015 with Update 1 installed, but no ASP.NET 5/.NET Core 5 RC1 bits. Those should install ASP.NET 5 (1.0.0 RC1 Update 1) from https://get.asp.net.

Yes, I know RC2 will use the dotnet command instead, but at least before that we should make it clear for new users.

Question: supporting other (non .Net ) languages

Hi! Congrats. This tool is awesome that I'm wondering if its usage is limited to .Net languages (supporting now C# and VB.Net).

In my scenario I provide "C#/Typescript/Java Client libraries" to a REST API. So it would be great that I could use this tool to generate the whole site. A couple of questions:

  1. How specific to .Net is the metadata specification format? Imagine that I use an external tool to generate the API metadata - how hard it would be to use the current spec with Typescript or even Java metadata?
  2. Any plans to support other languages out of the box? Or any plans to support "metadata extractor" plugins in order to extract metadata for other languages (instead of using Roslyn)

Thanks in advance

Implement build.cmd

The main build.cmd is currently a no-op. Need to implement that to compile all the project and run all the tests.

This will be useful for many scenarios:

  1. In general for anyone working on the project
  2. Needed for automated builds
  3. Great to run right before sending a PR or doing a commit

OutOfMemoryException when running docfx on lots of projects

When I try to run docfx on all of the ASP.NET projects I get an `OutOfMemoryException if I try to run in a 32bit process. Running docfx on the MVC project seems to be particularly memory hungry:

image

 System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxParser..ctor(Lexer lexer, LexerMode mode, CSharpSyntaxNode oldTree, IEnumerable`1 changes, Boolean allowModeReset, Boolean preLexIfNotIncremental, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser..ctor(Lexer lexer, CSharpSyntaxNode oldTree, IEnumerable`1 changes, LexerMode lexerMode, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseInterpolation(String text, Interpolation interpolation, Boolean isVerbatim)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseInterpolatedStringToken()
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseTerm(UInt32 precedence)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseSubExpressionCore(UInt32 precedence)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseSubExpression(UInt32 precedence)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseArgumentExpression(Boolean isIndexer)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseArgumentList(SyntaxToken& openToken, SeparatedSyntaxList`1& arguments, SyntaxToken& closeToken, SyntaxKind openKind, SyntaxKind closeKind)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseParenthesizedArgumentList()
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParsePostFixExpression(ExpressionSyntax expr)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseTerm(UInt32 precedence)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseSubExpressionCore(UInt32 precedence)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseSubExpression(UInt32 precedence)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseStatementNoDeclaration(Boolean allowAnyExpression)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseStatementCore()
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseStatements(CSharpSyntaxNode& previousNode, SyntaxListBuilder`1 statements, Boolean stopOnSwitchSections)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseBlock(Boolean isMethodBody, Boolean isAccessorBody)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseStatementNoDeclaration(Boolean allowAnyExpression)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseStatementCore()
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseEmbeddedStatement(Boolean complexCheck)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseIfStatement()
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseStatementNoDeclaration(Boolean allowAnyExpression)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseStatementCore()
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseStatements(CSharpSyntaxNode& previousNode, SyntaxListBuilder`1 statements, Boolean stopOnSwitchSections)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseBlock(Boolean isMethodBody, Boolean isAccessorBody)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseAccessorDeclaration(Boolean isEvent, Boolean& hasGetOrAdd, Boolean& hasSetOrRemove)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseAccessorList(Boolean isEvent)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParsePropertyDeclaration(SyntaxListBuilder`1 attributes, SyntaxListBuilder modifiers, TypeSyntax type, ExplicitInterfaceSpecifierSyntax explicitInterfaceOpt, SyntaxToken identifier, TypeParameterListSyntax typeParameterList)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseMemberDeclarationOrStatement(SyntaxKind parentKind, String typeName)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseClassOrStructOrInterfaceDeclaration(SyntaxListBuilder`1 attributes, SyntaxListBuilder modifiers)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseTypeDeclaration(SyntaxListBuilder`1 attributes, SyntaxListBuilder modifiers)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseMemberDeclarationOrStatement(SyntaxKind parentKind, String typeName)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseNamespaceBody(SyntaxToken& openBrace, NamespaceBodyBuilder& body, SyntaxListBuilder& initialBadNodes, SyntaxKind parentKind)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseNamespaceDeclaration()
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseNamespaceBody(SyntaxToken& openBrace, NamespaceBodyBuilder& body, SyntaxListBuilder& initialBadNodes, SyntaxKind parentKind)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseCompilationUnitCore()
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseWithStackGuard[TNode](Func`1 parseFunc, Func`1 createEmptyNodeFunc)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseCompilationUnit()
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.ParseText(SourceText text, CSharpParseOptions options, String path, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTreeFactoryServiceFactory.CSharpSyntaxTreeFactoryService.ParseSyntaxTree(String fileName, ParseOptions options, SourceText text, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.DocumentState.<FullyParseTreeAsync>d__11.MoveNext()
   --- End of inner exception stack trace ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.DocumentState.<GetSyntaxTreeAsync>d__33.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.Solution.CompilationTracker.<BuildDeclarationCompilationFromScratchAsync>d__24.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.Solution.CompilationTracker.<BuildCompilationFromScratchAsync>d__23.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.Solution.CompilationTracker.<GetOrBuildCompilationAsync>d__21.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.Solution.CompilationTracker.<GetMetadataReferenceAsync>d__29.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.Solution.<GetMetadataReferenceAsync>d__142.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at Microsoft.CodeAnalysis.Solution.CompilationTracker.<FinalizeCompilationAsync>d__28.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.Solution.CompilationTracker.<BuildCompilationFromScratchAsync>d__23.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.Solution.CompilationTracker.<GetOrBuildCompilationAsync>d__21.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.Solution.CompilationTracker.<GetMetadataReferenceAsync>d__29.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.Solution.<GetMetadataReferenceAsync>d__142.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at Microsoft.CodeAnalysis.Solution.CompilationTracker.<FinalizeCompilationAsync>d__28.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.Solution.CompilationTracker.<BuildCompilationFromScratchAsync>d__23.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.Solution.CompilationTracker.<GetOrBuildCompilationAsync>d__21.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at Microsoft.DocAsCode.EntityModel.ExtractMetadataWorker.<GetMetadataFromProjectLevelCacheAsync>d__30`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at Microsoft.DocAsCode.EntityModel.ExtractMetadataWorker.<SaveAllMembersFromCacheAsync>d__26.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.DocAsCode.EntityModel.ExtractMetadataWorker.<ExtractMetadataAsync>d__15.MoveNext()
---> (Inner Exception #0) System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxParser..ctor(Lexer lexer, LexerMode mode, CSharpSyntaxNode oldTree, IEnumerable`1 changes, Boolean allowModeReset, Boolean preLexIfNotIncremental, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser..ctor(Lexer lexer, CSharpSyntaxNode oldTree, IEnumerable`1 changes, LexerMode lexerMode, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseInterpolation(String text, Interpolation interpolation, Boolean isVerbatim)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseInterpolatedStringToken()
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseTerm(UInt32 precedence)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseSubExpressionCore(UInt32 precedence)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseSubExpression(UInt32 precedence)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseArgumentExpression(Boolean isIndexer)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseArgumentList(SyntaxToken& openToken, SeparatedSyntaxList`1& arguments, SyntaxToken& closeToken, SyntaxKind openKind, SyntaxKind closeKind)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseParenthesizedArgumentList()
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParsePostFixExpression(ExpressionSyntax expr)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseTerm(UInt32 precedence)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseSubExpressionCore(UInt32 precedence)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseSubExpression(UInt32 precedence)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseStatementNoDeclaration(Boolean allowAnyExpression)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseStatementCore()
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseStatements(CSharpSyntaxNode& previousNode, SyntaxListBuilder`1 statements, Boolean stopOnSwitchSections)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseBlock(Boolean isMethodBody, Boolean isAccessorBody)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseStatementNoDeclaration(Boolean allowAnyExpression)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseStatementCore()
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseEmbeddedStatement(Boolean complexCheck)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseIfStatement()
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseStatementNoDeclaration(Boolean allowAnyExpression)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseStatementCore()
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseStatements(CSharpSyntaxNode& previousNode, SyntaxListBuilder`1 statements, Boolean stopOnSwitchSections)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseBlock(Boolean isMethodBody, Boolean isAccessorBody)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseAccessorDeclaration(Boolean isEvent, Boolean& hasGetOrAdd, Boolean& hasSetOrRemove)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseAccessorList(Boolean isEvent)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParsePropertyDeclaration(SyntaxListBuilder`1 attributes, SyntaxListBuilder modifiers, TypeSyntax type, ExplicitInterfaceSpecifierSyntax explicitInterfaceOpt, SyntaxToken identifier, TypeParameterListSyntax typeParameterList)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseMemberDeclarationOrStatement(SyntaxKind parentKind, String typeName)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseClassOrStructOrInterfaceDeclaration(SyntaxListBuilder`1 attributes, SyntaxListBuilder modifiers)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseTypeDeclaration(SyntaxListBuilder`1 attributes, SyntaxListBuilder modifiers)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseMemberDeclarationOrStatement(SyntaxKind parentKind, String typeName)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseNamespaceBody(SyntaxToken& openBrace, NamespaceBodyBuilder& body, SyntaxListBuilder& initialBadNodes, SyntaxKind parentKind)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseNamespaceDeclaration()
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseNamespaceBody(SyntaxToken& openBrace, NamespaceBodyBuilder& body, SyntaxListBuilder& initialBadNodes, SyntaxKind parentKind)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseCompilationUnitCore()
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseWithStackGuard[TNode](Func`1 parseFunc, Func`1 createEmptyNodeFunc)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser.ParseCompilationUnit()
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.ParseText(SourceText text, CSharpParseOptions options, String path, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTreeFactoryServiceFactory.CSharpSyntaxTreeFactoryService.ParseSyntaxTree(String fileName, ParseOptions options, SourceText text, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.DocumentState.<FullyParseTreeAsync>d__11.MoveNext()<---

Date when .md file was committed

It is always convenient to see when the documentation was written to have sense if it is still relevant or not.
It would be nice to have that in the default template.

Markdown with XML comments "sort of works"

Title

Markdown with XML comments "sort of works"

Functional impact

Can't really use Markdown in XML comments, but the impression is given that you can. Maybe. Ish.
That means I don't know whether or not to change my codegen which is currently copying Markdown comments verbatim into XML comments (which I never expected to work, particularly) or leave it as-is with the expectation that it will be fine eventually.

Minimal repro steps

Step 1. Create a project.json file of:

{
  "version": "1.0.0",
  "frameworks": {
      "net451": { }
  }
}

Step 2. Create a DocfxTest.cs file of:

namespace Bug
{
    /// <summary>
    /// This is just a demo for docfx bugs.
    /// 
    /// Code in backticks:
    /// 
    /// ```csharp
    /// if (foo > 10)
    /// {
    ///    Console.WriteLine("In backticks");
    /// }
    /// ```
    /// 
    /// Code not in backticks, but indented:
    /// 
    ///     if (foo > 10)
    ///     {
    ///         Console.WriteLine("Just indented");
    ///     }
    /// 
    /// End of doc.
    /// </summary>
    public class DocfxTest
    {
    }
}

Step 3. Create a docfx.json file of:

{
  "metadata": [
    {
      "src": [
        {
          "files": [ "project.json" ],
          "cwd": "."
        }
      ],
      "dest": "obj/api"
    }
  ],
  "build": {
    "content": [
      {
        "files": [ "**/*.yml" ],
        "cwd": "obj/api",
        "dest": "api"
      }],
    "dest": "_site"
  }
}

Step 4. Build the metadata, the site, and then serve:

docfx metadata
docfx build
docfx serve _site -p 12345

Step 5. Browse to the relevant page, e.g. http://localhost:12345/api/Bug.DocfxTest.html

Expected result

Either no Markdown support, or full Markdown support with indentation.

Actual result

The first snippet (in backticks) is formatted as code, but without indentation.

The second snippet (just indented) is not formatted as code at all. See screenshot.

F# support

The Getting Started with docfx page states:

currently support C# and VB

Why not F#? Is it planned?

Why does the language even matter? Couldn't it work with any Visual-Studio-generated documentation XML file, regardless of origin language?

@ symbol in Markdown breaks generated HTML


---
_allowAffix: false
title: Welcome to DockPanel Suite Website!
documentType: index

---
<p>DockPanel Suite is currently maintained by @<a href="https://github.com/roken" class="user-mention">roken</a> and @<a href="https://github.com/lextm" class="user-mention">lextm</a>.</p>

Try to put the above to a markdown file, but docfx not only reports a warning, but also generates broken HTML.

The warning is

Warning: Missing following definitions of xref:
&lt;a. in phase Build Document

The broken HTML is

<p>DockPanel Suite is currently maintained by <span class="xref">&lt;a</span> href="https://github.com/roken" class="user-mention"&gt;roken and <span class="xref">&lt;a</span> href="https://github.com/lextm" class="user-mention"&gt;lextm.</p>

Note that the below in Markdown also fails,

<p>DockPanel Suite is currently maintained by <a href="https://github.com/roken" class="user-mention">@roken</a> and <a href="https://github.com/lextm" class="user-mention">@lextm</a>.</p>

I think it is related to #45 .

Provide a way to remove the "improve this doc" button

Hi,

When completing the walkthrough, his button (which I believe is for github only) should not be displayed.

I'm not sure if that is a bug, or if I need to specify something in the docfx.json to hide it explicity.

Overriding output doesn't work if json has absolute path in dest property

Let me explain what I want to do.

I have a docfx project plugged into my build. It generates the site and puts it in the desired location: a share in the company network. Because this is a share, it's an absolute path in the dest property of my docfx.json file.

However, sometimes I want to generate the site locally. For example, when I've changed something to the documentation and want to see what it will look like, before I push this out for others to read. In that case, I run:

docfx.exe docfx_project/docfx.json -o ./site

However, this doesn't seem to work. Even if I use an absolute path on my machine (not a share on the network).

When I use a relative path in my json file, and use the -o flag at the command-line, it does work. I'm using docfx 1.4.0

Support running docfx on .NET Core

Today docfx runs on the full .NET Framework (and Mono). We should update docfx to run on .NET Core, as this will be the support xplat story for .NET console applications. Obviously this means working with the authors of the many third party dependencies that docfx has to get them onto .NET Core as well.

@blackdwarf

Hard-to-diagnose "No metadata is generated" error when code has no namespace

Title

Hard-to-diagnose "No metadata is generated" error when code has no namespace

Functional impact

Friction when trying to reproduce a trivial issue, or when getting started from scratch for tiny simple demo purposes.

Minimal repro steps

Step 1. Create a project.json file of:

{
  "version": "1.0.0",
  "frameworks": {
      "net451": { }
  }
}

Step 2. Create a DocfxTest.cs file of:

/// <summary>Just a demo</summary>
public class DocfxTest
{
}

Step 3. Ensure it builds:

dnu restore
dnu build

Step 4. Create a docfx.json file of:

{
  "metadata": [
    {
      "src": [
        {
          "files": [ "project.json" ],
          "cwd": "."
        }
      ],
      "dest": "obj/api"
    }
  ],
  "build": {
    "content": [
      {
        "files": [ "**/*.yml" ],
        "cwd": "obj/api",
        "dest": "api"
      }],
    "dest": "_site"
  }
}

Step 5. Try to generate the metadata:

docfx metadata

Expected result

Metadata should be generated, or if this restriction is deliberate, it should give a more detailed warning.

Actual result

Result from step 5:

Info: Config file docfx.json found, start generating metadata...
Warning: No metadata is generated for docfxbug2.


Build succeeded with warning.
Warning: No metadata is generated for docfxbug2.


There are totally 1 Warning(s), 0 Error(s)

Further technical details

On the off-chance, I added a namespace to the code in step 2. Regenerate the metadata (with -f) and bingo - it all works.

I can now submit the bug I was actually trying to reproduce to start with...

API docs should contain attributes

At our company we're interested to use docfx as the main doc generation tool. Great work so far :) We have a quite large project and we'd need it to also include the attributes of classes, methods etc. in the generated api docs. A real world example would be the ObsoleteAttribute.

I'd love to help out, just give me a hint where this would fit best in the code base.

Full text search

Hello! The default template provides the ability to search the navigation tree. Is there any support for full text search possible so far?
Thanks, Jörg

Exclusion globs are not in line with the site name specified in docfx init

During the init process i specified the output directory be _generated

But when I look at the emitted docfx.json it contains _site throughout.

{
  "metadata": [
    {
      "src": [
        {
          "files": [
            "src/**.csproj"
          ],
          "exclude": [
            "**/bin/**",
            "**/obj/**",
            "_site/**"
          ]
        }
      ],
      "dest": "api"
    }
  ],
  "build": {
    "content": [
      {
        "files": [
          "api/**.yml",
          "api/index.md"
        ]
      },
      {
        "files": [
          "articles/**.md",
          "articles/**/toc.yml",
          "toc.yml",
          "*.md"
        ],
        "exclude": [
          "**/bin/**",
          "**/obj/**",
          "_site/**"
        ]
      }
    ],
    "resource": [
      {
        "files": [
          "images/**"
        ],
        "exclude": [
          "**/bin/**",
          "**/obj/**",
          "_site/**"
        ]
      }
    ],
    "overwrite": [
      {
        "files": [
          "apidoc/**.md"
        ],
        "exclude": [
          "**/bin/**",
          "**/obj/**",
          "_site/**"
        ]
      }
    ],
    "dest": "_generated",
    "template": [
      "default"
    ]
  }
}

Building from sources fails

I cloned the repo, checked out tag 1.4.2 (latest release at the time of reporting this issue) and ran build.cmd from a regular Windows 10 Command Prompt. This was more or less per the instructions laid out in the “Build from source code” section of your documentation but it failed with many warnings & errors.

See buildlog.txt for the complete build details.

Support .NET CLI based projects

Currently docfx supports DNX projects, which is great, but DNX is getting replaced by the new .NET CLI for .NET Core. ASP.NET Core is moving off of DNX and onto the new .NET CLI and DNX will be retired. We need to make sure that docfx works with .NET Core based projects.

@blackdwarf

Support .inv generation to enable integration with sphinx generated sites

I have several sites generated by sphinx, but want to integrate them with a site generated by docfx.

Since reStructuredText won't be supported (per #104), is it possible for a docfx project to emit .inv file so that integration with sphinx generated sites can be achieved?

A sphinx generated site can use intersphinx to add references to another sphinx generated site,

http://www.sphinx-doc.org/en/stable/ext/intersphinx.html

The .inv file can be parsed by a gist like this,

https://gist.github.com/epc/4118456

I am not sure how it should be generated though, but docutils is open source so there should be a way to dig that out.

Once docfx can generate .inv for a site, then it can be used by sphinx generated sites and achieve tight integration with each other.

ASP.NET 5 and .NET Core 5 have their contents running on sphinx and reStructuredText, so probably this feature can help them too.

Support for xproj?

I have a solution that uses xproj instead of csproj. Docfx doesn't seem to support it while building. This is what I have in my config file:
"src": [
{
"files": [ "/*.sln", "/*.xproj" ],

and the error:
Warning: File A:/newGit6/docfx-seed/src/ARM/Microsoft.Azure.ResourceManager/Microsoft.Azure.ResourceManager.xproj is not supported, supported file extension are: .sln,.csproj,.vbproj,.cs,.vb. The file will be ignored.

Are there plans to support generating documentation from an xproj?

Metadata being left behind

I'm a little confused by the metadata Yaml files generated into the api folder. First, this is generated code, for the most part, so I thought I could add this folder to .gitignore and/or delete it safely. However, at least index.md seems like it's necessary to keep in source control. Is there anything else in this directory that's not generated?

The real issue here, though, is that if you remove a class from the project, for instance, and regenerate the metadata the old YML file for that class isn't removed. That won't be as big of an issue if I can figure out what I can exclude from source control here, but it still seems like a bad thing.

BTW, what would a good .gitignore list be for docfx?

Minor: Strange wording in output message

This is a really minor one ;)

The output from docfx.exe told me:

There are totally 1 Warning(s), 0 Error(s)

The "totally" in there makes docfx sound like a california surfer dude. Maybe this was intentional (I like it personally, it made me laugh!) but I know that English isn't your team's first language so just giving you a heads up ;)

ArgumentOutOfRangeException when running docfx on the ASP.NET MVC repo

When I run docfx on the master branch of the ASP.NET MVC repo I get the following exception:

System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
   at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   at Microsoft.DocAsCode.EntityModel.ReferenceItem.Merge(ReferenceItem other)
   at Microsoft.DocAsCode.EntityModel.YamlModelGenerator.AddSpecReference(ISymbol symbol, IReadOnlyList`1 typeGenericParameters, IReadOnlyList`1 methodGenericParameters, Dictionary`2 references, SymbolVisitorAdapter adapter)
   at Microsoft.DocAsCode.EntityModel.SymbolVisitorAdapter.AddMethodSyntax(IMethodSymbol symbol, MetadataItem result, IReadOnlyList`1 typeGenericParameters, IReadOnlyList`1 methodGenericParameters)
   at Microsoft.DocAsCode.EntityModel.SymbolVisitorAdapter.VisitMethod(IMethodSymbol symbol)
   at Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol.Accept[TResult](SymbolVisitor`1 visitor)
   at Microsoft.DocAsCode.EntityModel.SymbolVisitorAdapter.VisitNamedType(INamedTypeSymbol symbol)
   at Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol.Accept[TResult](SymbolVisitor`1 visitor)
   at Microsoft.DocAsCode.EntityModel.SymbolVisitorAdapter.VisitDescendants[T](IEnumerable`1 children, Func`2 getChildren, Func`2 filter)
   at Microsoft.DocAsCode.EntityModel.SymbolVisitorAdapter.VisitNamespace(INamespaceSymbol symbol)
   at Microsoft.CodeAnalysis.CSharp.Symbols.NamespaceSymbol.Accept[TResult](SymbolVisitor`1 visitor)
   at Microsoft.DocAsCode.EntityModel.SymbolVisitorAdapter.VisitDescendants[T](IEnumerable`1 children, Func`2 getChildren, Func`2 filter)
   at Microsoft.DocAsCode.EntityModel.SymbolVisitorAdapter.VisitAssembly(IAssemblySymbol symbol)
   at Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol.Accept[TResult](SymbolVisitor`1 visitor)
   at Microsoft.DocAsCode.EntityModel.ExtractMetadataWorker.GenerateYamlMetadata(Compilation compilation, Boolean preserveRawInlineComments)
   at Microsoft.DocAsCode.EntityModel.ExtractMetadataWorker.<GetMetadataFromProjectLevelCacheAsync>d__30`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at Microsoft.DocAsCode.EntityModel.ExtractMetadataWorker.<SaveAllMembersFromCacheAsync>d__26.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.DocAsCode.EntityModel.ExtractMetadataWorker.<ExtractMetadataAsync>d__15.MoveNext()

I am using docfx 1.2.0-alpha-48-gceb7ec2 from the docfx-dev feed.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.