Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ POP Forums

A forum and Q&A application with real-time updating, image uploading and private message chat in multiple languages.

The main branch is now the work-in-progress for future versions running on .NET 9+. The v21.x branch is v21.x, running on .NET 9. If you're looking for the version that works on .NET Framework 4.5+ with MVC 5, check out v13.0.2.
The main branch is now the work-in-progress for future versions running on .NET 10+. The v22.x branch is v22.x, running on .NET 10. If you're looking for the version that works on .NET Framework 4.5+ with MVC 5, check out v13.0.2.

Roadmap:
v21 is another iterative release, leaning hard into refactoring and a few performance improvements. I've observed fast page rendering, average 20ms on Azure App Service P0v3 and SQL elastic pool at 50 eDTUs and 900k posts. Future versions will consider issues in the backlog.
v22 is another iterative release, with the biggest feature being an ignore list. I've observed fast page rendering, average 19ms on Azure App Service P0v3 and SQL elastic pool at 50 eDTUs and 900k posts. Future versions will consider issues in the backlog.

For the latest information and documentation, and how to get started, check the pages (also in markdown in `/docs` of source):
https://popworldmedia.github.io/POPForums/
Expand All @@ -19,7 +19,7 @@ https://popforumsdev.azurewebsites.net/Forums
[![Build status](https://dev.azure.com/popw/POP%20Forums/_apis/build/status/popforumsdev)](https://dev.azure.com/popw/POP%20Forums/_build/latest?definitionId=13)

Latest release:
https://github.com/POPWorldMedia/POPForums/releases/tag/v21.0.1
https://github.com/POPWorldMedia/POPForums/releases/tag/v22.0.0
Packages available on NuGet.

The latest CI build packages can be found with these feeds on MyGet:
Expand All @@ -29,7 +29,7 @@ Sample app using only the packages:
https://github.com/POPWorldMedia/POPForums.Sample

## Prerequisites:
* .NET v9.
* .NET v10.
* npm and Node.js to build the front-end.
* AzureKit optionally requires Redis for two-level cache, Azure Search for Search.
* AzureKit optionally requires an Azure Storage account for image storage, queues and Azure Functions.
Expand Down
2 changes: 1 addition & 1 deletion docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ All of the web app code is contained in the `PopForums.Mvc` project, which also

The app leverages ASP.NET's SignalR for real-time communication with the server via web sockets, including notifications of new posts, updating the forum and topic grids, new private messages, etc.

In accordance with the simple design philosophy, the web app does not use any specific front-end library, aside from Vue.js, which is used for the admin interface. Again, the intent is to produce search engine friendly markup without a web of dependencies and npm packages. That doesn't mean that there isn't any rich interactivity, because a number of small, raw elements are written in TypeScript. They live in `PopForums.Mvc/Client`. Along with a few small service classes and a simple stage engine, "reactive" elements are updated when a notification comes in via web sockets.
In accordance with the simple design philosophy, the web app does not use any specific front-end library, aside from Vue.js, which is used for the admin interface. Again, the intent is to produce search engine friendly markup without a web of dependencies and npm packages. That doesn't mean that there isn't any rich interactivity, because a number of small, raw elements are written in TypeScript. They live in `PopForums.Mvc/Client`. Along with a few small service classes and a simple state engine, "reactive" elements are updated when a notification comes in via web sockets.

While server-side localization is straight forward enough, the client-side bits use a small JSON payload apply the right language to the interface. For example, the use of time words varies by language, so the `FormattedTime.ts` component uses those strings for "5 minutes ago" or whatever the right variant is.

Expand Down
4 changes: 2 additions & 2 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ nav_order: 1
---
![POP Forums logo](https://avatars2.githubusercontent.com/u/8217691?s=200&v=4)

POP Forums v21 is a forum app for ASP.NET (formerly known as Core), used as the base for several sites maintained by the author, as well as a commercial, cloud hosted product. It's a long-term commitment to great community. If you're looking for the commercial hosted product and support for it, go to [popforums.com](https://popforums.com/).
POP Forums v22 is a forum app for ASP.NET (formerly known as Core), used as the base for several sites maintained by the author, as well as a commercial, cloud hosted product. It's a long-term commitment to great community. If you're looking for the commercial hosted product and support for it, go to [popforums.com](https://popforums.com/).

>_This documentation is for the open source POP Forums project. For documentation about the commercial hosted product, visit [support.popforums.com](https://support.popforums.com/). If you're working with a version that isn't v21, check the `/docs` folder in the source branch that matches the version you're using._
>_This documentation is for the open source POP Forums project. For documentation about the commercial hosted product, visit [support.popforums.com](https://support.popforums.com/). If you're working with a version that isn't v22, check the `/docs` folder in the source branch that matches the version you're using._

Get a load of [all the features](features.md).

Expand Down
10 changes: 4 additions & 6 deletions docs/starthere.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,13 @@ How to use [The Scoring Game](scoringgame.md) in your own application.

## Upgrading?

v21 has breaking changes for using `IForumAdapter`. See [Cusstomization](customization.md) for more information.

This version has data changes. From v20.x, run the `PopForums20to21.sql` script included in the `PopForums.Sql` project. If you need to upgrade from v16.x to v20.x, _first_ run the `PopForums16to20.sql` script against your database, which is found in the `PopForums.Sql` project. It's safe to run this script more than once. IMPORTANT: Going from v18 forward, because of the changes to private messages, you must first also delete all of the existing history by running `DELETE FROM pf_PrivateMessage` against your database. The reason that this isn't included in the upgrade script is because you should know it's necessary and do it on your own.
This version has data changes. From v21.x, run the `PopForums21to22.sql` script included in the `PopForums.Sql` project. If you need to upgrade from v16.x to v20.x, _first_ run the `PopForums16to20.sql` script against your database, which is found in the `PopForums.Sql` project. It's safe to run this script more than once. IMPORTANT: Going from v18 forward, because of the changes to private messages, you must first also delete all of the existing history by running `DELETE FROM pf_PrivateMessage` against your database. The reason that this isn't included in the upgrade script is because you should know it's necessary and do it on your own.

Updating your app from the legacy ASP.NET MVC world to ASP.NET Core is non-trivial, and well beyond the scope of this documentation.

## Prerequisites
You'll need the following locally:
* Visual Studio 2022 or later, with the Azure workload (community version is fine), Visual Studio for Mac or Jetbrains Rider
* Visual Studio 2026 or later, with the Azure workload (community version is fine), Visual Studio for Mac or Jetbrains Rider
* Node.js (comes with npm)
* SQL Server Developer, or SQL Server running in a Docker container
* A mail sending service that supports SMTP
Expand All @@ -46,8 +44,8 @@ For the bleeding edge, latest build from `main`, the CI build packages can be ob
## Build

* Clone the latest source code from GitHub, or use the production packages as described above. Build it. If your IDE doesn't automatically build Javascript or Typescript, be sure to `npm install` in the `PopForums.Mvc` project, and then run the `gulpfile.js`.
* The project files require an up-to-date version of Visual Studio 2022 or later. It also works great with Jetbrains' Rider on Mac or Windows.
* This project is built on ASP.NET v9. Make sure you have the required SDK installed (v9.0.101).
* The project files require an up-to-date version of Visual Studio 2026 or later, but it also works great with Jetbrains' Rider on Mac or Windows. I prefer it.
* This project is built on ASP.NET v10. Make sure you have the required SDK installed (v10.0.100).
* The `PopForums.Web` project is the template to use to include the forum in your app. It references `PopForums.Mvc`, which contains all of the web app-specific code, including script and CSS. `PopForums.Sql` concerns itself only with data, while `PopForums` works entirely with business logic and defines interfaces used in the upstream projects. `PopForums.AzureKit` contains a number of items to facilitate using various Azure services. `PopForums.ElasticKit` contains an ElasticSearch implementation. `PopForums.AzureKit.Functions` is an implementation of functions, used if you're not using in-app context background services (see below).
* The `main` branch is using Azure Functions by default to run background processes. Run the [Azurite](https://github.com/azure/azurite) container in Docker (works on Windows and Mac). If not, you can run the background things in-process by uncommenting `services.AddPopForumsBackgroundServices()` in `Program.cs` and commenting out or removing `services.AddPopForumsAzureFunctionsAndQueues()`. This causes all of the background things to run in the context of the web app itself.

Expand Down
6 changes: 6 additions & 0 deletions docs/versionhistory.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ nav_order: 4

Here's a partial version history that shows how POP Forums has evolved over the years. It's fun to look back at some of the things we now take for granted in a forum app.

## Version v22.0.0 (11/24/25)
* Implement an ignore feature #318
* BUG: YouTube short links throwing exception on submit #386
* BUG: Hosted service failure in startup will prevent app start #381
* BUG: In process hosted jobs run at silly intervals #383

## Version v21.0.1 (12/8/24)
* BUG: Hosted service failure in startup will prevent app start #381
* BUG: In process hosted jobs run at silly intervals #383
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Description>PopForums AzureKit Functions</Description>
<VersionPrefix>21.0.0</VersionPrefix>
<VersionPrefix>22.0.0</VersionPrefix>
<Authors>Jeff Putz</Authors>
<TargetFramework>net10.0</TargetFramework>
<AssemblyName>PopForums.AzureKit.Functions</AssemblyName>
<PackageId>PopForums.AzureKit.Functions</PackageId>
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
<PackageProjectUrl>https://github.com/POPWorldMedia/POPForums</PackageProjectUrl>
<RepositoryUrl>https://github.com/POPWorldMedia/POPForums</RepositoryUrl>
<Copyright>2024, POP World Media, LLC</Copyright>
<Copyright>2025, POP World Media, LLC</Copyright>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
<OutputType>Exe</OutputType>
</PropertyGroup>
Expand Down
4 changes: 2 additions & 2 deletions src/PopForums.AzureKit/PopForums.AzureKit.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

<PropertyGroup>
<Description>PopForums AzureKit Class Library</Description>
<VersionPrefix>21.0.0</VersionPrefix>
<VersionPrefix>22.0.0</VersionPrefix>
<Authors>Jeff Putz</Authors>
<TargetFramework>net10.0</TargetFramework>
<AssemblyName>PopForums.AzureKit</AssemblyName>
<PackageId>PopForums.AzureKit</PackageId>
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
<PackageProjectUrl>https://github.com/POPWorldMedia/POPForums</PackageProjectUrl>
<RepositoryUrl>https://github.com/POPWorldMedia/POPForums</RepositoryUrl>
<Copyright>2024, POP World Media, LLC</Copyright>
<Copyright>2025, POP World Media, LLC</Copyright>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>

Expand Down
4 changes: 2 additions & 2 deletions src/PopForums.ElasticKit/PopForums.ElasticKit.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

<PropertyGroup>
<Description>PopForums ElasticKit Class Library</Description>
<VersionPrefix>21.0.0</VersionPrefix>
<VersionPrefix>22.0.0</VersionPrefix>
<Authors>Jeff Putz</Authors>
<TargetFramework>net10.0</TargetFramework>
<AssemblyName>PopForums.ElasticKit</AssemblyName>
<PackageId>PopForums.ElasticKit</PackageId>
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
<PackageProjectUrl>https://github.com/POPWorldMedia/POPForums</PackageProjectUrl>
<RepositoryUrl>https://github.com/POPWorldMedia/POPForums</RepositoryUrl>
<Copyright>2024, POP World Media, LLC</Copyright>
<Copyright>2025, POP World Media, LLC</Copyright>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>

Expand Down
4 changes: 2 additions & 2 deletions src/PopForums.Mvc/PopForums.Mvc.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<Description>PopForums Mvc Class Library</Description>
<VersionPrefix>21.0.1</VersionPrefix>
<VersionPrefix>22.0.0</VersionPrefix>
<Authors>Jeff Putz</Authors>
<TargetFramework>net10.0</TargetFramework>
<AssemblyName>PopForums.Mvc</AssemblyName>
Expand All @@ -11,7 +11,7 @@
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
<PackageProjectUrl>https://github.com/POPWorldMedia/POPForums</PackageProjectUrl>
<RepositoryUrl>https://github.com/POPWorldMedia/POPForums</RepositoryUrl>
<Copyright>2024, POP World Media, LLC</Copyright>
<Copyright>2025, POP World Media, LLC</Copyright>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<!--This is an important line to trigger the hot reload:-->
<AssignTargetPathsDependsOn>CompileTypeScript;$(AssignTargetPathsDependsOn)</AssignTargetPathsDependsOn>
Expand Down
4 changes: 2 additions & 2 deletions src/PopForums.Sql/PopForums.Sql.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

<PropertyGroup>
<Description>PopForums.Data.Sql Class Library</Description>
<VersionPrefix>21.0.0</VersionPrefix>
<VersionPrefix>22.0.0</VersionPrefix>
<Authors>Jeff Putz</Authors>
<TargetFramework>net10.0</TargetFramework>
<AssemblyName>PopForums.Sql</AssemblyName>
<PackageId>PopForums.Sql</PackageId>
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
<PackageProjectUrl>https://github.com/POPWorldMedia/POPForums</PackageProjectUrl>
<RepositoryUrl>https://github.com/POPWorldMedia/POPForums</RepositoryUrl>
<Copyright>2024, POP World Media, LLC</Copyright>
<Copyright>2025, POP World Media, LLC</Copyright>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>

Expand Down
2 changes: 1 addition & 1 deletion src/PopForums.Test/PopForums.Test.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<VersionPrefix>21.0.0</VersionPrefix>
<VersionPrefix>22.0.0</VersionPrefix>
<TargetFramework>net10.0</TargetFramework>
<AssemblyName>PopForums.Test</AssemblyName>
<PackageId>PopForums.Test</PackageId>
Expand Down
2 changes: 1 addition & 1 deletion src/PopForums.Web/PopForums.Web.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<VersionPrefix>21.0.0</VersionPrefix>
<VersionPrefix>22.0.0</VersionPrefix>
<AssemblyName>PopForums.Web</AssemblyName>
<PackageId>PopForums.Web</PackageId>
</PropertyGroup>
Expand Down
4 changes: 2 additions & 2 deletions src/PopForums/PopForums.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

<PropertyGroup>
<Description>PopForums Class Library</Description>
<VersionPrefix>21.0.0</VersionPrefix>
<VersionPrefix>22.0.0</VersionPrefix>
<Authors>Jeff Putz</Authors>
<TargetFramework>net10.0</TargetFramework>
<AssemblyName>PopForums</AssemblyName>
<PackageId>PopForums</PackageId>
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
<PackageProjectUrl>https://github.com/POPWorldMedia/POPForums</PackageProjectUrl>
<RepositoryUrl>https://github.com/POPWorldMedia/POPForums</RepositoryUrl>
<Copyright>2024, POP World Media, LLC</Copyright>
<Copyright>2025, POP World Media, LLC</Copyright>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>

Expand Down
Loading