diff --git a/NStack/NStack.csproj b/NStack/NStack.csproj
index 2430313..5934263 100644
--- a/NStack/NStack.csproj
+++ b/NStack/NStack.csproj
@@ -26,34 +26,7 @@
It starts with a new string type that is focused on Unicode code-points as opposed to the historical chars and UTF-16 encoding and introduces a utf8 string that supports slicing
- Version 1.0.5
- * Fixes #83. Ustring ConsoleWidth must return the exactly character size or zero and not Rune.ColumnWidth
-
- Version 1.0.3
- * Fixes #79. Needed to add unit test for equal and not equal operators.
-
- Version 1.0.1 - Moderinized API doc generation and now using gitflow
- * Fixes #59. Automatically generate API docs via github action
- * Fixes #61. ustring.IsNullOrEmpty doesn't work the same way as the string.IsNullOrEmpty method.
-
- Previous Versions:
- 0.17: Fork by @tig modernize build/deploy and help publishing newer versions. No functional changes.
- 0.16: Fixes issue #51 (chess symbols);
- 0.15: Fixes to MaxRune; ColumnWidth differentiates between non-printable and nul characters; Rune has a constructor from two surrogate pairs; contributions by @BDisp;
- 0.14: Upgrade the NetStandard dependencies;
- 0.13: Fixes ustring.Map() and Lower(); Extends Rune.IsValid to match Go; add Rune.ExpectedSizeFromFirstByte() plus a bug fix;
- stack
- 0.12: Rebuild with an older Roslyn, to prevent regressions on Xamarin.
- 0.10: Merged some changes from upstream.
-
- 0.9:
- Added ustring.ColumnWidth to return number of columns that a ustring takes in a console.
-
- 0.8:
- * Renamed some methods to match the equivalent methods in Char.
- * Introduced Substring (int start)
- * Introduced difference between this [int start, int end] and this [int start, object end] the latter used to mean "until the end", replacing '0' as the previous value for "until the end".
- * Introduced new method in Rune to measure the width in columns for console applications.
+ See https://github.com/gui-cs/NStack/releases
diff --git a/NStack/README.md b/NStack/README.md
new file mode 100644
index 0000000..bc7c7c1
--- /dev/null
+++ b/NStack/README.md
@@ -0,0 +1,125 @@
+# Build & Deploy
+
+## Regenerating Tables when the Unicode standard is updated
+
+To regenerate the Tables.cs file from the reference unicode files, run `Makefile`
+with the command `make tables`, which will create the updated tables.
+
+There is some work to be done to dump the tables as a binary blob,
+without going through the various data structures that we have now, it would
+avoid all these constructors triggered on the static class.
+
+## Version Numbers
+
+Version info for NStack is managed by [gitversion](https://gitversion.net).
+
+Install `gitversion`:
+
+```powershell
+dotnet tool install --global GitVersion.Tool
+dotnet-gitversion
+```
+
+The project version (the nuget package and in `NStack.dll`) is determined from the latest `git tag`.
+
+The format of version numbers is `vmajor.minor.patch.build.height` and follows the [Semantic Versioning](https://semver.org/) rules.
+
+To define a new version (e.g. with a higher `major`, `minor`, `patch`, or `build` value) tag a commit using `git tag`:
+
+```powershell
+git tag v1.3.4-beta.5 -a -m "Release v1.3.4 Beta 5"
+dotnet-gitversion /updateprojectfiles
+dotnet build -c Release
+```
+
+**DO NOT COMMIT AFTER USING `/updateprojectfiles`!**
+
+Doing so will update the `.csproj` files in your branch with version info, which we do not want.
+
+## Deploying a new version of the NStack Nuget Library
+
+To release a new version (e.g. with a higher `major`, `minor`, or `patch` value) tag a commit using `git tag` and then
+push that tag directly to the `main` branch on `github.com/gui-cs/NStack` (`upstream`).
+
+The `tag` must be of the form `v..`, e.g. `v2.3.4`.
+
+`patch` can indicate pre-release or not (e.g. `pre`, `beta`, `rc`, etc...).
+
+### 1) Verify the `develop` branch is ready for release
+
+* Ensure everything is committed and pushed to the `develop` branch
+* Ensure your local `develop` branch is up-to-date with `upstream/develop`
+
+### 2) Create a pull request for the release in the `develop` branch
+
+The PR title should be of the form "Release v2.3.4"
+
+```powershell
+git checkout develop
+git pull upstream develop
+git checkout -b v_2_3_4
+git merge develop
+git add .
+git commit -m "Release v2.3.4"
+git push
+```
+
+Go to the link printed by `git push` and fill out the Pull Request.
+
+### 3) On github.com, verify the build action worked on your fork, then merge the PR
+
+### 4) Pull the merged `develop` from `upstream`
+
+```powershell
+git checkout develop
+git pull upstream develop
+```
+
+### 5) Merge `develop` into `main`
+
+```powershell
+git checkout main
+git pull upstream main
+git merge develop
+```
+
+Fix any merge errors.
+
+### 6) Create a new annotated tag for the release on `main`
+
+```powershell
+git tag v2.3.4 -a -m "Release v2.3.4"
+```
+
+### 7) Push the new tag to `main` on `upstream`
+
+```powershell
+git push --atomic upstream main v2.3.4
+```
+
+*See https://stackoverflow.com/a/3745250/297526*
+
+### 8) Monitor Github Actions to ensure the Nuget publishing worked.
+
+https://github.com/gui-cs/NStack/actions
+
+### 9) Check Nuget to see the new package version (wait a few minutes)
+https://www.nuget.org/packages/NStack.Core
+
+### 10) Add a new Release in Github: https://github.com/gui-cs/NStack/releases
+
+Generate release notes with the list of PRs since the last release
+
+Use `gh` to get a list with just titles to make it easy to paste into release notes:
+
+```powershell
+gh pr list --limit 500 --search "is:pr is:closed is:merged closed:>=2022-11-1"
+```
+### 11) Update the `develop` branch with the new version
+
+```powershell
+git checkout develop
+git pull upstream develop
+git merge main
+git push upstream develop
+```
diff --git a/NStack/demo.md b/NStack/demo.md
deleted file mode 100644
index ef7301a..0000000
--- a/NStack/demo.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# Hello
-
-This is a text file
-
-## Second level
-
diff --git a/NStack/unicode/README.md b/NStack/unicode/README.md
deleted file mode 100644
index e2198fa..0000000
--- a/NStack/unicode/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-To regenerate the Tables.cs file from the reference unicode files, execute the Makefile
-with the command `make tables`, which will dump the updated tables:
-
-There is some work to be done to dump the tables as a binary blob,
-without going through the various data structures that we have now, it would
-avoid all these constructors triggered on the static class.
\ No newline at end of file
diff --git a/README.md b/README.md
index 30db768..428c92d 100644
--- a/README.md
+++ b/README.md
@@ -34,29 +34,3 @@ can exist without them being valid UTF8 strings, but rather a collection of byte
a particular character set and are effectively not possible to map into strings.
-# Version Numbers
-
-Version info for NStack is managed by [gitversion](https://gitversion.net).
-
-Install `gitversion`:
-
-```powershell
-dotnet tool install --global GitVersion.Tool
-dotnet-gitversion
-```
-
-The project version (the nuget package and in `NStack.dll`) is determined from the latest `git tag`.
-
-The format of version numbers is `vmajor.minor.patch.build.height` and follows the [Semantic Versioning](https://semver.org/) rules.
-
-To define a new version (e.g. with a higher `major`, `minor`, `patch`, or `build` value) tag a commit using `git tag`:
-
-```powershell
-git tag v1.3.4-beta.5 -a -m "Release v1.3.4 Beta 5"
-dotnet-gitversion /updateprojectfiles
-dotnet build -c Release
-```
-
-**DO NOT COMMIT AFTER USING `/updateprojectfiles`!**
-
-Doing so will update the `.csproj` files in your branch with version info, which we do not want.