AngleSharp 1.7.0-beta.578

logo

AngleSharp

CI GitHub Tag NuGet Count Issues Open

StackOverflow Questions CLA Assistant

AngleSharp is a .NET library that gives you the ability to parse angle bracket based hyper-texts like HTML, SVG, and MathML. XML without validation is also supported by the library. An important aspect of AngleSharp is that CSS can also be parsed. The included parser is built upon the official W3C specification. This produces a perfectly portable HTML5 DOM representation of the given source code and ensures compatibility with results in evergreen browsers. Also standard DOM features such as querySelector or querySelectorAll work for tree traversal.

:zap: Migrating from AngleSharp 0.9 to AngleSharp 0.10 or later (incl. 1.0)? Look at our migration documentation. :zap:

Key Features

  • Portable (using .NET Standard 2.0)
  • Standards conform (works exactly as evergreen browsers)
  • Great performance (outperforms similar parsers in most scenarios)
  • Extensible (extend with your own services)
  • Useful abstractions (type helpers, jQuery like construction)
  • Fully functional DOM (all the lists, iterators, and events you know)
  • Form submission (easily log in everywhere)
  • Navigation (a BrowsingContext is like a browser tab - control it from .NET!).
  • LINQ enhanced (use LINQ with DOM elements, naturally without wrappers)

The advantage over similar libraries like HtmlAgilityPack is that the exposed DOM is using the official W3C specified API, i.e., that even things like querySelectorAll are available in AngleSharp. Also the parser uses the HTML 5.1 specification, which defines error handling and element correction. The AngleSharp library focuses on standards compliance, interactivity, and extensibility. It is therefore giving web developers working with C# all possibilities as they know from using the DOM in any modern browser.

The performance of AngleSharp is quite close to the performance of browsers. Even very large pages can be processed within milliseconds. AngleSharp tries to minimize memory allocations and reuses elements internally to avoid unnecessary object creation.

Simple Demo

The simple example will use the website of Wikipedia for data retrieval.

var config = Configuration.Default.WithDefaultLoader();
var address = "https://en.wikipedia.org/wiki/List_of_The_Big_Bang_Theory_episodes";
var context = BrowsingContext.New(config);
var document = await context.OpenAsync(address);
var cellSelector = "tr.vevent td:nth-child(3)";
var cells = document.QuerySelectorAll(cellSelector);
var titles = cells.Select(m => m.TextContent);

Or the same with explicit types:

IConfiguration config = Configuration.Default.WithDefaultLoader();
string address = "https://en.wikipedia.org/wiki/List_of_The_Big_Bang_Theory_episodes";
IBrowsingContext context = BrowsingContext.New(config);
IDocument document = await context.OpenAsync(address);
string cellSelector = "tr.vevent td:nth-child(3)";
IHtmlCollection<IElement> cells = document.QuerySelectorAll(cellSelector);
IEnumerable<string> titles = cells.Select(m => m.TextContent);

In the example we see:

  • How to setup the configuration for supporting document loading
  • Asynchronously get the document in a new context using the configuration
  • Performing a query to get all cells with the content of interest
  • The whole DOM supports LINQ queries

Every collection in AngleSharp supports LINQ statements. AngleSharp also provides many useful extension methods for element collections that cannot be found in the official DOM.

Supported Platforms

AngleSharp has been created as a .NET Standard 2.0 compatible library. This includes, but is not limited to:

  • .NET Core (2.0 and later)
  • .NET Framework (4.6.2 and later)
  • Xamarin.Android (7.0 and 8.0)
  • Xamarin.iOS (10.0 and 10.14)
  • Xamarin.Mac (3.0 and 3.8)
  • Mono (4.6 and 5.4)
  • UWP (10.0 and 10.0.16299)
  • Unity (2018.1)

Documentation

The documentation of AngleSharp is located in the docs folder. More examples, best-practices, and general information can be found there. The documentation also contains a list of frequently asked questions.

More information is also available by following some of the hyper references mentioned in the Wiki. In-depth articles will be published on the CodeProject, with links being placed in the Wiki at GitHub.

Use-Cases

  • Parsing HTML (incl. fragments)
  • Parsing CSS (incl. selectors, declarations, ...)
  • Constructing HTML (e.g., view-engine)
  • Minifying CSS, HTML, ...
  • Querying document elements
  • Crawling information
  • Gathering statistics
  • Web automation
  • Tools with HTML / CSS / ... support
  • Connection to page analytics
  • HTML / DOM unit tests
  • Automated JavaScript interaction
  • Testing other concepts, e.g., script engines
  • ...

Vision

The project aims to bring a solid implementation of the W3C DOM for HTML, SVG, MathML, and CSS to the CLR - all written in C#. The idea is that you can basically do everything with the DOM in C# that you can do in JavaScript (plus, of course, more).

Most parts of the DOM are included, even though some may still miss their (fully specified / correct) implementation. The goal for v1.0 is to have all practically relevant parts implemented according to the official W3C specification (with useful extensions by the WHATWG).

The API is close to the DOM4 specification, however, the naming has been adjusted to apply with .NET conventions. Nevertheless, to make AngleSharp really useful for, e.g., a JavaScript engine, attributes have been placed on the corresponding interfaces (and methods, properties, ...) to indicate the status of the field in the official specification. This allows automatic generation of DOM objects with the official API.

This is a long-term project which will eventually result in a state of the art parser for the most important angle bracket based hyper-texts.

Our hope is to build a community around web parsing and libraries from this project. So far we had great contributions, but that goal was not fully achieved. Want to help? Get in touch with us!

Participating in the Project

If you know some feature that AngleSharp is currently missing, and you are willing to implement the feature, then your contribution is more than welcome! Also if you have a really cool idea - do not be shy, we'd like to hear it.

If you have an idea how to improve the API (or what is missing) then posts / messages are also welcome. For instance there have been ongoing discussions about some styles that have been used by AngleSharp (e.g., HTMLDocument or HtmlDocument) in the past. In the end AngleSharp stopped using HTMLDocument (at least visible outside of the library). Now AngleSharp uses names like IDocument, IHtmlElement and so on. This change would not have been possible without such fruitful discussions.

The project is always searching for additional contributors. Even if you do not have any code to contribute, but rather an idea for improvement, a bug report or a mistake in the documentation. These are the contributions that keep this project active.

Live discussions can take place in our Gitter chat, which supports using GitHub accounts.

More information is found in the contribution guidelines. All contributors can be found in the CONTRIBUTORS file.

This project has also 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.

Funding / Support

If you use AngleSharp frequently, but you do not have the time to support the project by active participation you may still be interested to ensure that the AngleSharp projects keeps the lights on.

See the related GitHub issue for more information.

Development

AngleSharp is written in the most recent version of C# and thus requires Roslyn as a compiler. Using an IDE like Visual Studio 2019+ is recommended on Windows. Alternatively, VSCode (with OmniSharp or another suitable Language Server Protocol implementation) should be the tool of choice on other platforms.

The code tries to be as clean as possible. Notably the following rules are used:

  • Use braces for any conditional / loop body
  • Use the -Async suffixed methods when available
  • Use VIP ("Var If Possible") style (in C++ called AAA: Almost Always Auto) to place types on the right

More important, however, is the proper usage of tests. Any new feature should come with a set of tests to cover the functionality and prevent regression.

Changelog

A very detailed changelog exists. If you are just interested in major releases then have a look at the GitHub releases.

.NET Foundation

This project is supported by the .NET Foundation.

License

AngleSharp is released using the MIT license. For more information see the license file.

Showing the top 20 packages that depend on AngleSharp.

Packages Downloads
YoutubeExplode
The ultimate dirty YouTube library. Parses public metadata on YouTube videos, lets you download them and much more. Does not require an API key and does not impose usage quotas.
71
AngleSharp.Css
Extends the CSSOM from the core AngleSharp library.
47
AngleSharp.Css
Extends the CSSOM from the core AngleSharp library.
46
AngleSharp.Css
Extends the CSSOM from the core AngleSharp library.
45
AngleSharp.Css
Extends the CSSOM from the core AngleSharp library.
44
AngleSharp.Css
Extends the CSSOM from the core AngleSharp library.
43
AngleSharp.Css
Extends the CSSOM from the core AngleSharp library.
42
HtmlSanitizer
Cleans HTML from constructs that can be used for cross-site scripting (XSS)
42
AngleSharp.Css
Extends the CSSOM from the core AngleSharp library.
41
AngleSharp.Css
Extends the CSSOM from the core AngleSharp library.
40

.NET Standard 2.0

.NET Framework 4.6.2

.NET Framework 4.7.2

.NET 6.0

  • No dependencies.

.NET 7.0

  • No dependencies.

.NET 8.0

  • No dependencies.

.NET 10.0

  • No dependencies.

Version Downloads Last updated
1.7.0-beta.580 1 07/29/2026
1.7.0-beta.579 1 07/29/2026
1.7.0-beta.578 1 07/29/2026
1.6.0 2 07/28/2026
1.6.0-beta.577 1 07/29/2026
1.6.0-beta.575 1 07/29/2026
1.6.0-beta.571 2 07/29/2026
1.6.0-beta.570 2 07/29/2026
1.6.0-beta.569 6 07/23/2026
1.6.0-beta.568 6 07/23/2026
1.5.3-beta.567 7 07/23/2026
1.5.3-beta.564 12 07/16/2026
1.5.3-beta.556 12 07/16/2026
1.5.3-beta.553 16 07/11/2026
1.5.2 16 07/07/2026
1.5.2-beta.548 17 07/07/2026
1.5.2-beta.547 14 07/07/2026
1.5.1 24 06/15/2026
1.5.1-beta.546 14 07/07/2026
1.5.1-beta.545 16 07/07/2026
1.5.1-beta.544 13 07/07/2026
1.5.1-beta.543 15 07/07/2026
1.5.1-beta.542 16 07/07/2026
1.5.1-beta.534 17 06/23/2026
1.5.1-beta.530 17 06/10/2026
1.5.0 16 06/08/2026
1.5.0-beta.529 14 06/10/2026
1.5.0-beta.526 17 06/10/2026
1.4.1-beta.525 16 06/10/2026
1.4.1-beta.523 40 04/20/2026
1.4.1-beta.518 38 04/02/2026
1.4.1-beta.509 41 03/31/2026
1.4.1-beta.508 30 03/31/2026
1.4.1-beta.506 47 12/17/2025
1.4.1-beta.505 33 12/12/2025
1.4.1-beta.504 42 12/14/2025
1.4.1-beta.502 36 12/13/2025
1.4.0 31 12/15/2025
1.4.0-beta.499 45 12/15/2025
1.4.0-beta.497 36 12/14/2025
1.4.0-beta.496 43 12/11/2025
1.4.0-beta.495 49 12/13/2025
1.4.0-beta.493 36 12/13/2025
1.3.1 42 12/15/2025
1.3.1-beta.491 48 12/10/2025
1.3.1-beta.490 39 12/15/2025
1.3.1-beta.486 34 12/12/2025
1.3.0 39 12/13/2025
1.3.0-beta.484 46 12/14/2025
1.3.0-beta.477 38 12/17/2025
1.3.0-beta.476 54 12/14/2025
1.3.0-beta.470 35 12/10/2025
1.3.0-beta.468 40 12/20/2025
1.3.0-beta.466 34 12/20/2025
1.2.0 37 12/19/2025
1.2.0-beta.457 36 12/11/2025
1.2.0-beta.456 36 12/17/2025
1.2.0-beta.449 31 12/11/2025
1.2.0-beta.448 36 12/13/2025
1.2.0-beta.439 33 12/13/2025
1.2.0-beta.431 35 12/12/2025
1.2.0-beta.423 37 12/14/2025
1.2.0-beta.420 43 12/20/2025
1.2.0-beta.419 41 12/10/2025
1.2.0-beta.418 33 12/11/2025
1.2.0-beta.410 37 12/20/2025
1.2.0-beta.408 37 12/09/2025
1.1.2 38 12/20/2025
1.1.2-beta.407 37 12/20/2025
1.1.2-beta.395 35 12/11/2025
1.1.1 31 12/10/2025
1.1.1-beta.392 40 12/13/2025
1.1.1-beta.390 37 12/09/2025
1.1.1-beta.389 44 12/12/2025
1.1.1-beta.388 38 12/20/2025
1.1.1-beta.387 35 12/11/2025
1.1.1-beta.386 41 12/14/2025
1.1.1-beta.385 42 12/10/2025
1.1.0 44 12/14/2025
1.1.0-beta.384 39 12/17/2025
1.1.0-alpha-379 43 12/20/2025
1.1.0-alpha-378 38 12/20/2025
1.1.0-alpha-377 38 12/20/2025
1.1.0-alpha-376 39 12/14/2025
1.1.0-alpha-375 44 12/14/2025
1.1.0-alpha-374 38 12/20/2025
1.0.7 46 12/19/2025
1.0.7-alpha-342 29 12/20/2025
1.0.6 42 12/13/2025
1.0.6-alpha-341 36 12/12/2025
1.0.6-alpha-339 42 12/11/2025
1.0.6-alpha-331 45 12/14/2025
1.0.6-alpha-330 43 12/20/2025
1.0.6-alpha-328 48 12/14/2025
1.0.6-alpha-325 39 12/14/2025
1.0.6-alpha-321 36 12/11/2025
1.0.5 46 12/13/2025
1.0.5-alpha-317 39 12/14/2025
1.0.4 38 12/13/2025
1.0.4-alpha-316 39 12/20/2025
1.0.4-alpha-314 45 12/09/2025
1.0.4-alpha-311 44 12/16/2025
1.0.4-alpha-307 40 12/18/2025
1.0.4-alpha-301 43 12/10/2025
1.0.4-alpha-300 38 12/09/2025
1.0.4-alpha-298 36 12/13/2025
1.0.4-alpha-290 41 12/20/2025
1.0.4-alpha-289 41 12/20/2025
1.0.3 48 12/20/2025
1.0.3-alpha-287 41 12/16/2025
1.0.2 42 12/13/2025
1.0.2-alpha-284 39 12/20/2025
1.0.2-alpha-283 47 12/12/2025
1.0.2-alpha-282 37 12/14/2025
1.0.2-alpha-281 35 12/13/2025
1.0.2-alpha-278 37 12/12/2025
1.0.2-alpha-277 43 12/11/2025
1.0.2-alpha-276 37 12/20/2025
1.0.2-alpha-275 35 12/20/2025
1.0.2-alpha-274 37 12/20/2025
1.0.2-alpha-273 35 12/14/2025
1.0.2-alpha-261 33 12/14/2025
1.0.2-alpha-258 31 12/20/2025
1.0.2-alpha-257 37 12/20/2025
1.0.2-alpha-255 38 12/14/2025
1.0.2-alpha-251 48 12/10/2025
1.0.2-alpha-250 41 12/16/2025
1.0.2-alpha-249 45 12/13/2025
1.0.1 45 12/13/2025
1.0.1-alpha-248 40 12/14/2025
1.0.1-alpha-243 31 12/20/2025
1.0.1-alpha-242 37 12/20/2025
1.0.1-alpha-241 38 01/06/2026
1.0.1-alpha-235 42 12/13/2025
1.0.0 33 12/13/2025
1.0.0-ci-228 41 12/20/2025
1.0.0-alpha-231 45 12/14/2025
1.0.0-alpha-229 40 12/14/2025
0.17.1 34 12/20/2025
0.17.1-alpha-179 37 12/20/2025
0.17.1-alpha-178 35 12/20/2025
0.17.0 39 12/14/2025
0.17.0-alpha-177 36 01/01/2026
0.17.0-alpha-174 39 12/15/2025
0.17.0-alpha-173 37 12/11/2025
0.17.0-alpha-172 39 12/20/2025
0.17.0-alpha-171 43 12/14/2025
0.17.0-alpha-170 31 12/13/2025
0.17.0-alpha-169 30 12/12/2025
0.16.1 41 12/13/2025
0.16.1-alpha-99 37 12/14/2025
0.16.1-alpha-96 35 12/13/2025
0.16.1-alpha-91 36 12/20/2025
0.16.1-alpha-168 38 12/14/2025
0.16.1-alpha-167 34 12/14/2025
0.16.1-alpha-155 34 12/20/2025
0.16.1-alpha-153 44 12/20/2025
0.16.1-alpha-152 37 12/20/2025
0.16.1-alpha-148 32 12/20/2025
0.16.1-alpha-145 37 12/14/2025
0.16.1-alpha-144 31 12/13/2025
0.16.1-alpha-133 41 12/14/2025
0.16.1-alpha-127 37 12/20/2025
0.16.1-alpha-125 36 12/14/2025
0.16.1-alpha-120 37 12/20/2025
0.16.1-alpha-114 31 12/13/2025
0.16.1-alpha-112 39 12/14/2025
0.16.1-alpha-110 39 12/13/2025
0.16.1-alpha-108 32 12/14/2025
0.16.1-alpha-106 41 12/09/2025
0.16.1-alpha-104 35 12/19/2025
0.16.0 36 12/20/2025
0.16.0-alpha-86 36 12/14/2025
0.16.0-alpha-85 33 12/20/2025
0.16.0-alpha-84 38 12/10/2025
0.16.0-alpha-80 35 12/20/2025
0.16.0-alpha-79 40 12/14/2025
0.16.0-alpha-78 32 12/10/2025
0.16.0-alpha-77 40 12/13/2025
0.16.0-alpha-76 35 12/16/2025
0.16.0-alpha-75 37 12/20/2025
0.16.0-alpha-72 30 12/20/2025
0.15.0 31 12/20/2025
0.15.0-alpha-14 35 12/20/2025
0.14.0 37 12/13/2025
0.14.0-alpha-818 42 12/14/2025
0.14.0-alpha-817 38 12/10/2025
0.14.0-alpha-813 31 12/20/2025
0.14.0-alpha-811 36 12/14/2025
0.14.0-alpha-809 34 12/19/2025
0.14.0-alpha-805 33 12/20/2025
0.14.0-alpha-803 36 12/20/2025
0.14.0-alpha-802 41 12/20/2025
0.14.0-alpha-801 33 12/10/2025
0.14.0-alpha-798 44 12/20/2025
0.14.0-alpha-796 38 12/11/2025
0.14.0-alpha-794 35 12/14/2025
0.14.0-alpha-793 33 12/10/2025
0.14.0-alpha-790 40 12/14/2025
0.14.0-alpha-789 36 12/20/2025
0.14.0-alpha-788 42 12/17/2025
0.14.0-alpha-787 32 12/20/2025
0.14.0-alpha-784 35 12/20/2025
0.14.0-alpha-783 35 12/20/2025
0.13.0 41 12/13/2025
0.13.0-alpha-782 35 12/14/2025
0.13.0-alpha-775 40 12/20/2025
0.13.0-alpha-771 39 12/20/2025
0.13.0-alpha-768 38 12/10/2025
0.13.0-alpha-766 34 12/20/2025
0.13.0-alpha-764 42 12/20/2025
0.13.0-alpha-763 35 12/20/2025
0.13.0-alpha-760 30 12/20/2025
0.13.0-alpha-758 36 12/20/2025
0.13.0-alpha-756 36 12/20/2025
0.13.0-alpha-754 38 12/20/2025
0.13.0-alpha-748 40 12/14/2025
0.13.0-alpha-745 37 01/06/2026
0.13.0-alpha-744 37 12/14/2025
0.13.0-alpha-743 36 12/11/2025
0.13.0-alpha-742 33 12/21/2025
0.13.0-alpha-739 42 12/20/2025
0.13.0-alpha-737 33 12/17/2025
0.13.0-alpha-735 31 12/20/2025
0.13.0-alpha-734 37 12/20/2025
0.13.0-alpha-733 42 12/20/2025
0.12.1 38 12/20/2025
0.12.0 44 12/20/2025
0.11.0 39 12/20/2025
0.10.1 36 12/20/2025
0.10.0 55 12/10/2025
0.9.11 37 12/22/2025
0.9.10 32 12/20/2025
0.9.9.2 38 12/24/2025
0.9.9.1 37 12/13/2025
0.9.9 40 12/20/2025
0.9.8.1 40 12/20/2025
0.9.8 38 12/20/2025
0.9.7 36 12/10/2025
0.9.6 33 12/20/2025
0.9.5 29 12/20/2025
0.9.4 36 12/20/2025
0.9.3 33 12/14/2025
0.9.2 41 12/11/2025
0.9.1 32 12/20/2025
0.9.0 38 12/14/2025
0.8.9 42 12/20/2025
0.8.8 39 12/16/2025
0.8.7.1 36 12/14/2025
0.8.7 35 12/14/2025
0.8.6 31 12/20/2025
0.8.5 40 12/20/2025
0.8.4.1 38 12/14/2025
0.8.4 43 12/12/2025
0.8.3 0 04/21/2015
0.8.2 0 04/15/2015
0.8.1 36 12/20/2025
0.8.0 36 12/13/2025
0.7.0 34 12/14/2025
0.6.1 38 12/12/2025
0.6.0 34 12/16/2025
0.5.1 39 12/13/2025
0.5.0 38 12/20/2025
0.4.0 34 12/20/2025
0.3.7 33 12/20/2025
0.3.6 35 12/10/2025
0.3.5 36 12/20/2025
0.3.4 33 12/20/2025
0.3.3 30 12/10/2025
0.3.2 41 12/14/2025
0.3.1 33 12/22/2025
0.3.0 36 12/13/2025
0.2.9 38 12/10/2025
0.2.8 40 12/13/2025
0.2.7 31 12/20/2025
0.2.6 31 12/20/2025
0.2.5 33 12/20/2025
0.2.4 33 12/20/2025
0.2.3 32 12/20/2025
0.2.2 33 12/20/2025
0.2.1 34 12/14/2025
0.2.0 35 12/13/2025