AngleSharp 1.8.2-beta.734

logo

AngleSharp

CI GitHub Tag NuGet Count Issues Open 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 ships for netstandard2.0, net8.0, and net10.0. On Windows the build also targets net462 and net472.

In practice this keeps the library broadly consumable while still allowing newer runtimes to take advantage of runtime and BCL improvements.

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.

AngleSharp Ecosystem

AngleSharp.Core is the foundation. Additional repositories provide higher-level services and integrations:

Project Purpose Repository
AngleSharp.Css Full CSS parser, CSSOM, and styling services https://github.com/AngleSharp/AngleSharp.Css
AngleSharp.Js JavaScript integration for browsing contexts https://github.com/AngleSharp/AngleSharp.Js
AngleSharp.Wasm WebAssembly-oriented integration work for AngleSharp https://github.com/AngleSharp/AngleSharp.Wasm
AngleSharp.Xml XML, XHTML, and related XML-oriented parsing support https://github.com/AngleSharp/AngleSharp.Xml
AngleSharp.Renderer Rendering-focused companion project https://github.com/AngleSharp/AngleSharp.Renderer
AngleSharp.Diffing DOM and markup diffing utilities https://github.com/AngleSharp/AngleSharp.Diffing
AngleSharp.XPath XPath support on top of the AngleSharp DOM https://github.com/AngleSharp/AngleSharp.XPath

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.

Discussion and issue tracking happen on GitHub.

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 2022+ is recommended on Windows. Alternatively, VS Code with the C# extension or another suitable Language Server Protocol implementation works well 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.

No packages depend on AngleSharp.

https://github.com/AngleSharp/AngleSharp/blob/main/CHANGELOG.md

.NET 10.0

  • No dependencies.

.NET Framework 4.6.2

.NET Framework 4.7.2

.NET 8.0

  • No dependencies.

.NET Standard 2.0

Version Downloads Last updated
1.8.2 3 09/18/2026
1.8.2-beta.734 1 09/18/2026
1.8.2-beta.733 1 09/18/2026
1.8.2-beta.731 1 09/18/2026
1.8.2-beta.730 6 09/16/2026
1.8.2-beta.726 15 09/14/2026
1.8.2-beta.715 8 09/13/2026
1.8.2-beta.712 15 09/12/2026
1.8.2-beta.709 13 09/12/2026
1.8.2-beta.701 14 09/11/2026
1.8.1 13 09/11/2026
1.8.1-beta.696 13 09/10/2026
1.8.1-beta.694 13 09/10/2026
1.8.1-beta.693 15 09/10/2026
1.8.1-beta.692 11 09/10/2026
1.8.1-beta.691 15 09/10/2026
1.8.1-beta.690 13 09/10/2026
1.8.0 19 09/06/2026
1.8.0-beta.679 15 09/05/2026
1.8.0-beta.677 12 09/05/2026
1.8.0-beta.675 19 09/04/2026
1.8.0-beta.674 15 09/04/2026
1.8.0-beta.673 19 09/04/2026
1.8.0-beta.603 23 08/14/2026
1.7.3 11 09/04/2026
1.7.3-beta.669 16 09/04/2026
1.7.3-beta.667 20 09/04/2026
1.7.3-beta.665 30 09/03/2026
1.7.3-beta.643 18 09/04/2026
1.7.3-beta.641 20 09/03/2026
1.7.3-beta.640 17 09/04/2026
1.7.3-beta.639 24 09/04/2026
1.7.2 16 08/26/2026
1.7.2-beta.638 14 09/04/2026
1.7.2-beta.637 17 09/04/2026
1.7.2-beta.636 17 09/03/2026
1.7.2-beta.635 17 09/04/2026
1.7.2-beta.630 18 09/02/2026
1.7.2-beta.627 17 09/02/2026
1.7.2-beta.626 20 09/02/2026
1.7.2-beta.619 14 08/26/2026
1.7.2-beta.617 12 08/26/2026
1.7.1 16 08/14/2026
1.7.1-beta.615 13 08/24/2026
1.7.1-beta.614 12 08/23/2026
1.7.1-beta.609 19 08/14/2026
1.7.1-beta.604 25 08/14/2026
1.7.0 18 08/14/2026
1.7.0-beta.602 16 08/14/2026
1.7.0-beta.595 17 08/14/2026
1.7.0-beta.585 15 08/14/2026
1.7.0-beta.583 14 08/14/2026
1.7.0-beta.580 14 08/14/2026
1.7.0-beta.579 12 08/14/2026
1.7.0-beta.578 19 08/14/2026
1.6.0 15 08/14/2026
1.6.0-beta.577 21 08/14/2026
1.6.0-beta.575 17 08/14/2026
1.6.0-beta.571 16 08/14/2026
1.6.0-beta.570 16 08/14/2026
1.6.0-beta.569 16 08/14/2026
1.6.0-beta.568 13 08/14/2026
1.5.3-beta.567 14 08/14/2026
1.5.3-beta.564 23 08/14/2026
1.5.3-beta.556 21 08/14/2026
1.5.3-beta.553 17 08/14/2026
1.5.2 17 08/14/2026
1.5.2-beta.548 13 08/14/2026
1.5.2-beta.547 14 08/14/2026
1.5.1 19 08/14/2026
1.5.1-beta.546 12 08/14/2026
1.5.1-beta.545 16 08/14/2026
1.5.1-beta.544 13 08/14/2026
1.5.1-beta.543 13 08/14/2026
1.5.1-beta.542 19 08/14/2026
1.5.1-beta.534 13 08/14/2026
1.5.1-beta.530 16 08/14/2026
1.5.0 20 08/14/2026
1.5.0-beta.529 13 08/14/2026
1.5.0-beta.526 23 08/14/2026
1.4.1-beta.525 12 08/14/2026
1.4.1-beta.523 15 08/14/2026
1.4.1-beta.518 15 08/14/2026
1.4.1-beta.509 15 08/14/2026
1.4.1-beta.508 17 08/14/2026
1.4.1-beta.506 16 08/14/2026
1.4.1-beta.505 18 08/14/2026
1.4.1-beta.504 14 08/14/2026
1.4.1-beta.502 16 08/14/2026
1.4.0 23 08/14/2026
1.4.0-beta.499 16 08/14/2026
1.4.0-beta.497 15 08/14/2026
1.4.0-beta.496 14 08/14/2026
1.4.0-beta.495 18 08/14/2026
1.4.0-beta.493 19 08/14/2026
1.3.1 19 08/14/2026
1.3.1-beta.491 20 08/14/2026
1.3.1-beta.490 19 08/14/2026
1.3.1-beta.486 22 08/14/2026
1.3.0 18 08/14/2026
1.3.0-beta.484 17 08/14/2026
1.3.0-beta.477 23 08/14/2026
1.3.0-beta.476 22 08/14/2026
1.3.0-beta.470 13 08/14/2026
1.3.0-beta.468 17 08/14/2026
1.3.0-beta.466 17 08/14/2026
1.2.0 15 08/14/2026
1.2.0-beta.457 14 08/14/2026
1.2.0-beta.456 19 08/14/2026
1.2.0-beta.449 21 08/14/2026
1.2.0-beta.448 18 08/14/2026
1.2.0-beta.439 15 08/14/2026
1.2.0-beta.431 20 08/14/2026
1.2.0-beta.423 22 08/14/2026
1.2.0-beta.420 16 08/14/2026
1.2.0-beta.419 17 08/14/2026
1.2.0-beta.418 17 08/14/2026
1.2.0-beta.410 16 08/14/2026
1.2.0-beta.408 18 08/14/2026
1.1.2 14 08/14/2026
1.1.2-beta.407 26 08/14/2026
1.1.2-beta.395 22 08/14/2026
1.1.1 15 08/14/2026
1.1.1-beta.392 15 08/14/2026
1.1.1-beta.390 18 08/14/2026
1.1.1-beta.389 23 08/14/2026
1.1.1-beta.388 18 08/14/2026
1.1.1-beta.387 16 08/14/2026
1.1.1-beta.386 18 08/14/2026
1.1.1-beta.385 18 08/14/2026
1.1.0 16 08/14/2026
1.1.0-beta.384 14 08/14/2026
1.1.0-alpha-379 18 08/14/2026
1.1.0-alpha-378 19 08/14/2026
1.1.0-alpha-377 12 08/14/2026
1.1.0-alpha-376 18 08/14/2026
1.1.0-alpha-375 25 08/14/2026
1.1.0-alpha-374 16 08/14/2026
1.0.7 15 08/14/2026
1.0.7-alpha-342 14 08/14/2026
1.0.6 20 08/14/2026
1.0.6-alpha-341 13 08/14/2026
1.0.6-alpha-339 19 08/14/2026
1.0.6-alpha-331 12 08/14/2026
1.0.6-alpha-330 14 08/14/2026
1.0.6-alpha-328 12 08/14/2026
1.0.6-alpha-325 17 08/14/2026
1.0.6-alpha-321 15 08/14/2026
1.0.5 20 08/14/2026
1.0.5-alpha-317 18 08/14/2026
1.0.4 24 08/14/2026
1.0.4-alpha-316 22 08/14/2026
1.0.4-alpha-314 14 08/14/2026
1.0.4-alpha-311 18 08/14/2026
1.0.4-alpha-307 17 08/14/2026
1.0.4-alpha-301 16 08/14/2026
1.0.4-alpha-300 19 08/14/2026
1.0.4-alpha-298 13 08/14/2026
1.0.4-alpha-290 17 08/14/2026
1.0.4-alpha-289 15 08/14/2026
1.0.3 16 08/14/2026
1.0.3-alpha-287 16 08/14/2026
1.0.2 20 08/14/2026
1.0.2-alpha-284 17 08/14/2026
1.0.2-alpha-283 13 08/14/2026
1.0.2-alpha-282 15 08/14/2026
1.0.2-alpha-281 14 08/14/2026
1.0.2-alpha-278 21 08/14/2026
1.0.2-alpha-277 20 08/14/2026
1.0.2-alpha-276 18 08/14/2026
1.0.2-alpha-275 15 08/14/2026
1.0.2-alpha-274 15 08/14/2026
1.0.2-alpha-273 13 08/14/2026
1.0.2-alpha-261 11 08/14/2026
1.0.2-alpha-258 15 08/14/2026
1.0.2-alpha-257 17 08/14/2026
1.0.2-alpha-255 18 08/14/2026
1.0.2-alpha-251 16 08/14/2026
1.0.2-alpha-250 14 08/14/2026
1.0.2-alpha-249 13 08/14/2026
1.0.1 19 08/14/2026
1.0.1-alpha-248 16 08/14/2026
1.0.1-alpha-243 16 08/14/2026
1.0.1-alpha-242 18 08/14/2026
1.0.1-alpha-241 17 08/14/2026
1.0.1-alpha-235 16 08/14/2026
1.0.0 20 08/14/2026
1.0.0-ci-228 17 08/14/2026
1.0.0-alpha-231 19 08/14/2026
1.0.0-alpha-229 17 08/14/2026
0.17.1 15 08/14/2026
0.17.1-alpha-179 16 08/14/2026
0.17.1-alpha-178 18 08/14/2026
0.17.0 17 08/14/2026
0.17.0-alpha-177 18 08/14/2026
0.17.0-alpha-174 16 08/14/2026
0.17.0-alpha-173 14 08/14/2026
0.17.0-alpha-172 21 08/14/2026
0.17.0-alpha-171 21 08/14/2026
0.17.0-alpha-170 13 08/14/2026
0.17.0-alpha-169 15 08/14/2026
0.16.1 15 08/14/2026
0.16.1-alpha-99 18 08/14/2026
0.16.1-alpha-96 23 08/14/2026
0.16.1-alpha-91 18 08/14/2026
0.16.1-alpha-168 16 08/14/2026
0.16.1-alpha-167 25 08/14/2026
0.16.1-alpha-155 18 08/14/2026
0.16.1-alpha-153 15 08/14/2026
0.16.1-alpha-152 15 08/14/2026
0.16.1-alpha-148 20 08/14/2026
0.16.1-alpha-145 17 08/14/2026
0.16.1-alpha-144 16 08/14/2026
0.16.1-alpha-133 18 08/14/2026
0.16.1-alpha-127 16 08/14/2026
0.16.1-alpha-125 17 08/14/2026
0.16.1-alpha-120 16 08/14/2026
0.16.1-alpha-114 15 08/14/2026
0.16.1-alpha-112 17 08/14/2026
0.16.1-alpha-110 15 08/14/2026
0.16.1-alpha-108 16 08/14/2026
0.16.1-alpha-106 13 08/14/2026
0.16.1-alpha-104 13 08/14/2026
0.16.0 18 08/13/2026
0.16.0-alpha-86 15 08/14/2026
0.16.0-alpha-85 17 08/14/2026
0.16.0-alpha-84 17 08/14/2026
0.16.0-alpha-80 27 08/14/2026
0.16.0-alpha-79 16 08/14/2026
0.16.0-alpha-78 13 08/14/2026
0.16.0-alpha-77 20 08/14/2026
0.16.0-alpha-76 22 08/14/2026
0.16.0-alpha-75 19 08/14/2026
0.16.0-alpha-72 18 08/14/2026
0.15.0 17 08/14/2026
0.15.0-alpha-14 17 08/14/2026
0.14.0 21 08/14/2026
0.14.0-alpha-818 23 08/14/2026
0.14.0-alpha-817 16 08/14/2026
0.14.0-alpha-813 12 08/14/2026
0.14.0-alpha-811 19 08/14/2026
0.14.0-alpha-809 21 08/14/2026
0.14.0-alpha-805 23 08/14/2026
0.14.0-alpha-803 16 08/14/2026
0.14.0-alpha-802 16 08/14/2026
0.14.0-alpha-801 15 08/14/2026
0.14.0-alpha-798 12 08/14/2026
0.14.0-alpha-796 17 08/14/2026
0.14.0-alpha-794 13 08/14/2026
0.14.0-alpha-793 15 08/14/2026
0.14.0-alpha-790 17 08/14/2026
0.14.0-alpha-789 14 08/14/2026
0.14.0-alpha-788 15 08/14/2026
0.14.0-alpha-787 15 08/14/2026
0.14.0-alpha-784 16 08/14/2026
0.14.0-alpha-783 16 08/14/2026
0.13.0 20 08/14/2026
0.13.0-alpha-782 17 08/14/2026
0.13.0-alpha-775 15 08/14/2026
0.13.0-alpha-771 15 08/14/2026
0.13.0-alpha-768 17 08/14/2026
0.13.0-alpha-766 15 08/14/2026
0.13.0-alpha-764 17 08/14/2026
0.13.0-alpha-763 16 08/14/2026
0.13.0-alpha-760 14 08/14/2026
0.13.0-alpha-758 16 08/14/2026
0.13.0-alpha-756 25 08/14/2026
0.13.0-alpha-754 16 08/14/2026
0.13.0-alpha-748 17 08/14/2026
0.13.0-alpha-745 16 08/14/2026
0.13.0-alpha-744 12 08/14/2026
0.13.0-alpha-743 20 08/14/2026
0.13.0-alpha-742 15 08/14/2026
0.13.0-alpha-739 21 08/14/2026
0.13.0-alpha-737 18 08/14/2026
0.13.0-alpha-735 16 08/14/2026
0.13.0-alpha-734 17 08/14/2026
0.13.0-alpha-733 16 08/14/2026
0.12.1 15 08/14/2026
0.12.0 19 08/14/2026
0.11.0 17 08/14/2026
0.10.1 18 08/14/2026
0.10.0 15 08/14/2026
0.9.11 19 08/14/2026
0.9.10 19 08/14/2026
0.9.9.2 15 08/14/2026
0.9.9.1 16 08/14/2026
0.9.9 18 08/14/2026
0.9.8.1 13 08/14/2026
0.9.8 16 08/14/2026
0.9.7 23 08/14/2026
0.9.6 15 08/14/2026
0.9.5 17 08/14/2026
0.9.4 21 08/14/2026
0.9.3 26 08/14/2026
0.9.2 20 08/14/2026
0.9.1 20 08/14/2026
0.9.0 16 08/14/2026
0.8.9 22 08/14/2026
0.8.8 18 08/14/2026
0.8.7.1 15 08/14/2026
0.8.7 18 08/14/2026
0.8.6 16 08/14/2026
0.8.5 17 08/14/2026
0.8.4.1 19 08/14/2026
0.8.4 24 08/14/2026
0.8.3 0 04/21/2015
0.8.2 0 04/15/2015
0.8.1 17 08/14/2026
0.8.0 17 08/14/2026
0.7.0 18 08/14/2026
0.6.1 23 08/14/2026
0.6.0 20 08/14/2026
0.5.1 14 08/14/2026
0.5.0 19 08/14/2026
0.4.0 16 08/14/2026
0.3.7 17 08/14/2026
0.3.6 22 08/14/2026
0.3.5 15 08/14/2026
0.3.4 18 08/14/2026
0.3.3 20 08/14/2026
0.3.2 20 08/14/2026
0.3.1 20 08/14/2026
0.3.0 21 08/14/2026
0.2.9 18 08/14/2026
0.2.8 19 08/14/2026
0.2.7 17 08/14/2026
0.2.6 19 08/14/2026
0.2.5 18 08/14/2026
0.2.4 18 08/14/2026
0.2.3 19 08/14/2026
0.2.2 20 08/14/2026
0.2.1 19 08/14/2026
0.2.0 23 08/14/2026