diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000000..bdaa5ba982
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,50 @@
+*.doc diff=astextplain
+*.DOC diff=astextplain
+*.docx diff=astextplain
+*.DOCX diff=astextplain
+*.dot diff=astextplain
+*.DOT diff=astextplain
+*.pdf diff=astextplain
+*.PDF diff=astextplain
+*.rtf diff=astextplain
+*.RTF diff=astextplain
+
+*.jpg binary
+*.png binary
+*.gif binary
+
+*.cs text=auto diff=csharp
+*.vb text=auto
+*.resx text=auto
+*.c text=auto
+*.cpp text=auto
+*.cxx text=auto
+*.h text=auto
+*.hxx text=auto
+*.py text=auto
+*.rb text=auto
+*.java text=auto
+*.html text=auto
+*.htm text=auto
+*.css text=auto
+*.scss text=auto
+*.sass text=auto
+*.less text=auto
+*.js text=auto
+*.lisp text=auto
+*.clj text=auto
+*.sql text=auto
+*.php text=auto
+*.lua text=auto
+*.m text=auto
+*.asm text=auto
+*.erl text=auto
+*.fs text=auto
+*.fsx text=auto
+*.hs text=auto
+
+*.csproj text=auto
+*.vbproj text=auto
+*.fsproj text=auto
+*.dbproj text=auto
+*.sln text=auto eol=crlf
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000..ac82da7568
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,27 @@
+[Oo]bj/
+[Bb]in/
+TestResults/
+.nuget/
+_ReSharper.*/
+packages/
+artifacts/
+PublishProfiles/
+*.user
+*.suo
+*.cache
+*.docstates
+_ReSharper.*
+nuget.exe
+*net45.csproj
+*net451.csproj
+*k10.csproj
+*.psess
+*.vsp
+*.pidb
+*.userprefs
+*DS_Store
+*.ncrunchsolution
+*.*sdf
+*.ipch
+*.sln.ide
+project.lock.json
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000000..c0befaffcf
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,18 @@
+language: csharp
+sudo: required
+dist: trusty
+addons:
+ apt:
+ packages:
+ - gettext
+ - libcurl4-openssl-dev
+ - libicu-dev
+ - libssl-dev
+ - libunwind8
+ - zlib1g
+env:
+ - KOREBUILD_DNU_RESTORE_CORECLR=true KOREBUILD_TEST_DNXCORE=true
+mono:
+ - 4.0.5
+script:
+ - ./build.sh --quiet verify
diff --git a/HtmlAbstractions.sln b/HtmlAbstractions.sln
new file mode 100644
index 0000000000..1d1f5118f3
--- /dev/null
+++ b/HtmlAbstractions.sln
@@ -0,0 +1,55 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.24711.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{A5A15F1C-885A-452A-A731-B0173DDBD913}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{F31FF137-390C-49BF-A3BD-7C6ED3597C21}"
+EndProject
+Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.AspNet.Html", "src\Microsoft.AspNet.Html.Abstractions\Microsoft.AspNet.Html.xproj", "{68A28E4A-3ADE-4187-9625-4FF185887CB3}"
+EndProject
+Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.AspNet.Html.Test", "test\Microsoft.AspNet.Html.Abstractions.Test\Microsoft.AspNet.Html.Test.xproj", "{2D187B88-94BD-4A39-AC97-F8F8B9363301}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {68A28E4A-3ADE-4187-9625-4FF185887CB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {68A28E4A-3ADE-4187-9625-4FF185887CB3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {68A28E4A-3ADE-4187-9625-4FF185887CB3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {68A28E4A-3ADE-4187-9625-4FF185887CB3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {68A28E4A-3ADE-4187-9625-4FF185887CB3}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {68A28E4A-3ADE-4187-9625-4FF185887CB3}.Debug|x86.Build.0 = Debug|Any CPU
+ {68A28E4A-3ADE-4187-9625-4FF185887CB3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {68A28E4A-3ADE-4187-9625-4FF185887CB3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {68A28E4A-3ADE-4187-9625-4FF185887CB3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {68A28E4A-3ADE-4187-9625-4FF185887CB3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {68A28E4A-3ADE-4187-9625-4FF185887CB3}.Release|x86.ActiveCfg = Release|Any CPU
+ {68A28E4A-3ADE-4187-9625-4FF185887CB3}.Release|x86.Build.0 = Release|Any CPU
+ {2D187B88-94BD-4A39-AC97-F8F8B9363301}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2D187B88-94BD-4A39-AC97-F8F8B9363301}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2D187B88-94BD-4A39-AC97-F8F8B9363301}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {2D187B88-94BD-4A39-AC97-F8F8B9363301}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {2D187B88-94BD-4A39-AC97-F8F8B9363301}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2D187B88-94BD-4A39-AC97-F8F8B9363301}.Debug|x86.Build.0 = Debug|Any CPU
+ {2D187B88-94BD-4A39-AC97-F8F8B9363301}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2D187B88-94BD-4A39-AC97-F8F8B9363301}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2D187B88-94BD-4A39-AC97-F8F8B9363301}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {2D187B88-94BD-4A39-AC97-F8F8B9363301}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {2D187B88-94BD-4A39-AC97-F8F8B9363301}.Release|x86.ActiveCfg = Release|Any CPU
+ {2D187B88-94BD-4A39-AC97-F8F8B9363301}.Release|x86.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {68A28E4A-3ADE-4187-9625-4FF185887CB3} = {A5A15F1C-885A-452A-A731-B0173DDBD913}
+ {2D187B88-94BD-4A39-AC97-F8F8B9363301} = {F31FF137-390C-49BF-A3BD-7C6ED3597C21}
+ EndGlobalSection
+EndGlobal
diff --git a/NuGet.config b/NuGet.config
new file mode 100644
index 0000000000..03704957e8
--- /dev/null
+++ b/NuGet.config
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/NuGetPackageVerifier.json b/NuGetPackageVerifier.json
new file mode 100644
index 0000000000..c57b2afb17
--- /dev/null
+++ b/NuGetPackageVerifier.json
@@ -0,0 +1,25 @@
+{
+ "adx": { // Packages written by the ADX team and that ship on NuGet.org
+ "rules": [
+ "AssemblyHasDocumentFileRule",
+ "AssemblyHasVersionAttributesRule",
+ "AssemblyHasServicingAttributeRule",
+ "AssemblyHasNeutralResourcesLanguageAttributeRule",
+ "SatellitePackageRule",
+ "StrictSemanticVersionValidationRule"
+ ],
+ "packages": {
+ "Microsoft.AspNet.Html.Abstractions": { }
+ }
+ },
+ "Default": { // Rules to run for packages not listed in any other set.
+ "rules": [
+ "AssemblyHasDocumentFileRule",
+ "AssemblyHasVersionAttributesRule",
+ "AssemblyHasServicingAttributeRule",
+ "AssemblyHasNeutralResourcesLanguageAttributeRule",
+ "SatellitePackageRule",
+ "StrictSemanticVersionValidationRule"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/appveyor.yml b/appveyor.yml
new file mode 100644
index 0000000000..636a7618d3
--- /dev/null
+++ b/appveyor.yml
@@ -0,0 +1,7 @@
+init:
+ - git config --global core.autocrlf true
+build_script:
+ - build.cmd --quiet verify
+clone_depth: 1
+test: off
+deploy: off
\ No newline at end of file
diff --git a/build.cmd b/build.cmd
new file mode 100644
index 0000000000..553e3929a0
--- /dev/null
+++ b/build.cmd
@@ -0,0 +1,40 @@
+@echo off
+cd %~dp0
+
+SETLOCAL
+SET NUGET_VERSION=latest
+SET CACHED_NUGET=%LocalAppData%\NuGet\nuget.%NUGET_VERSION%.exe
+SET BUILDCMD_KOREBUILD_VERSION=
+SET BUILDCMD_DNX_VERSION=
+
+IF EXIST %CACHED_NUGET% goto copynuget
+echo Downloading latest version of NuGet.exe...
+IF NOT EXIST %LocalAppData%\NuGet md %LocalAppData%\NuGet
+@powershell -NoProfile -ExecutionPolicy unrestricted -Command "$ProgressPreference = 'SilentlyContinue'; Invoke-WebRequest 'https://dist.nuget.org/win-x86-commandline/%NUGET_VERSION%/nuget.exe' -OutFile '%CACHED_NUGET%'"
+
+:copynuget
+IF EXIST .nuget\nuget.exe goto restore
+md .nuget
+copy %CACHED_NUGET% .nuget\nuget.exe > nul
+
+:restore
+IF EXIST packages\Sake goto getdnx
+IF "%BUILDCMD_KOREBUILD_VERSION%"=="" (
+ .nuget\nuget.exe install KoreBuild -ExcludeVersion -o packages -nocache -pre
+) ELSE (
+ .nuget\nuget.exe install KoreBuild -version %BUILDCMD_KOREBUILD_VERSION% -ExcludeVersion -o packages -nocache -pre
+)
+.nuget\NuGet.exe install Sake -ExcludeVersion -Source https://www.nuget.org/api/v2/ -Out packages
+
+:getdnx
+IF "%BUILDCMD_DNX_VERSION%"=="" (
+ SET BUILDCMD_DNX_VERSION=latest
+)
+IF "%SKIP_DNX_INSTALL%"=="" (
+ CALL packages\KoreBuild\build\dnvm install %BUILDCMD_DNX_VERSION% -runtime CoreCLR -arch x86 -alias default
+ CALL packages\KoreBuild\build\dnvm install default -runtime CLR -arch x86 -alias default
+) ELSE (
+ CALL packages\KoreBuild\build\dnvm use default -runtime CLR -arch x86
+)
+
+packages\Sake\tools\Sake.exe -I packages\KoreBuild\build -f makefile.shade %*
diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000000..da4e3fcd1c
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,43 @@
+#!/usr/bin/env bash
+
+if test `uname` = Darwin; then
+ cachedir=~/Library/Caches/KBuild
+else
+ if [ -z $XDG_DATA_HOME ]; then
+ cachedir=$HOME/.local/share
+ else
+ cachedir=$XDG_DATA_HOME;
+ fi
+fi
+mkdir -p $cachedir
+nugetVersion=latest
+cachePath=$cachedir/nuget.$nugetVersion.exe
+
+url=https://dist.nuget.org/win-x86-commandline/$nugetVersion/nuget.exe
+
+if test ! -f $cachePath; then
+ wget -O $cachePath $url 2>/dev/null || curl -o $cachePath --location $url /dev/null
+fi
+
+if test ! -e .nuget; then
+ mkdir .nuget
+ cp $cachePath .nuget/nuget.exe
+fi
+
+if test ! -d packages/Sake; then
+ mono .nuget/nuget.exe install KoreBuild -ExcludeVersion -o packages -nocache -pre
+ mono .nuget/nuget.exe install Sake -ExcludeVersion -Source https://www.nuget.org/api/v2/ -Out packages
+fi
+
+if ! type dnvm > /dev/null 2>&1; then
+ source packages/KoreBuild/build/dnvm.sh
+fi
+
+if ! type dnx > /dev/null 2>&1 || [ -z "$SKIP_DNX_INSTALL" ]; then
+ dnvm install latest -runtime coreclr -alias default
+ dnvm install default -runtime mono -alias default
+else
+ dnvm use default -runtime mono
+fi
+
+mono packages/Sake/tools/Sake.exe -I packages/KoreBuild/build -f makefile.shade "$@"
diff --git a/global.json b/global.json
new file mode 100644
index 0000000000..983ba0401e
--- /dev/null
+++ b/global.json
@@ -0,0 +1,3 @@
+{
+ "projects": ["src"]
+}
diff --git a/makefile.shade b/makefile.shade
new file mode 100644
index 0000000000..d5e473d558
--- /dev/null
+++ b/makefile.shade
@@ -0,0 +1,10 @@
+
+var VERSION='0.1'
+var FULL_VERSION='0.1'
+var AUTHORS='Microsoft Open Technologies, Inc.'
+
+use-standard-lifecycle
+k-standard-goals
+
+#xml-docs-test .clean .build-compile description='Check generated XML documentation files for errors' target='package'
+ k-xml-docs-test
diff --git a/src/Microsoft.AspNet.Html/HtmlContentBuilder.cs b/src/Microsoft.AspNet.Html/HtmlContentBuilder.cs
new file mode 100644
index 0000000000..34e59d3318
--- /dev/null
+++ b/src/Microsoft.AspNet.Html/HtmlContentBuilder.cs
@@ -0,0 +1,138 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text.Encodings.Web;
+
+namespace Microsoft.AspNet.Html
+{
+ ///
+ /// An implementation using an in memory list.
+ ///
+ public class HtmlContentBuilder : IHtmlContentBuilder
+ {
+ ///
+ /// Creates a new .
+ ///
+ public HtmlContentBuilder()
+ : this(new List