Open-source project
newsnext/newsnow avatar
newsnext/newsnow

NewsNow: self-hosting the real-time news aggregator behind newsnow.busiyi.world

Elegant reading of real-time and hottest news

21,924 stars5,968 forksTypeScriptMIT

At a glance

What is it?
NewsNow is a TypeScript news reader that scrapes trending sources on an adaptive interval and caches results for 30 minutes. It is easy to deploy on Cloudflare Pages or in Docker, but the README now points contributors and feature seekers at a successor that does not exist yet.
Who is it for?
Adopt NewsNow if you want a self-hosted, MIT-licensed trending-news reader and are comfortable with the Cloudflare D1 or SQLite setup described in the README. Do not adopt it if you need a supported project with an open contribution process: the README says the new version is coming soon and that contributions are no longer accepted.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 14 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What NewsNow solves, and who it is actually for

NewsNow is a reading interface for trending news. The README describes it as "elegant reading of real-time and hottest news," and the feature list backs that up: a clean UI, real-time updates on trending items, and a 30-minute default cache. The intended user is someone who wants one page that pulls from many sources instead of opening a dozen tabs.

The project is not a general RSS reader. It ships with a fixed set of data sources under shared/sources and server/sources, and the README points contributors to those directories when they want to add more. That is a narrower proposition than a feed reader where you paste any URL. It is closer to a curated dashboard: the maintainer decides which sources exist, the scraper normalizes them, and the UI presents the result.

There is a second audience: developers who want to embed the same data in an agent. The README documents an MCP server, newsnow-mcp-server, configured through npx. That turns NewsNow from a website into a data endpoint for tool-using models. Both audiences get the same cache and scraping layer, which is the real product here.

The scraping interval and cache are the core design

Two numbers define how NewsNow behaves. The first is the 30-minute default cache. Readers see a cached snapshot unless they are logged in, in which case the README says they can force a refresh. The second is the adaptive scraping interval, with a minimum of 2 minutes, which the README says adjusts to each source's update frequency to reduce resource use and avoid IP bans.

That second mechanism is the interesting one. A fixed polling loop would either hammer fast-moving sources or miss updates on slow ones. An interval that follows observed update frequency is a reasonable compromise, and the explicit mention of IP bans shows the maintainer has hit that wall. Scrapers get blocked when they look like scrapers, and a news aggregator that polls dozens of sites is exactly that.

The trade-off is freshness. With a 30-minute cache and a floor of 2 minutes between scrapes, NewsNow is not a breaking-news wire. For a trending-headlines dashboard that is fine. If you need second-level latency, the architecture works against you, and the README does not document a way to push updates instead of polling.

Installing NewsNow with Docker and getting a first page

The repository ships a docker-compose.yml that pulls ghcr.io/ourongxing/newsnow:latest, maps port 4444, and mounts a named volume at /usr/app/.data. From the project root, the README gives one command:

sh
docker compose up

After the image starts, the service listens on port 4444. Open http://localhost:4444 and you should see the news interface. The compose file passes environment variables for GitHub OAuth, JWT, and caching. On a first run, INIT_TABLE must be true so the database schema is created; the README notes it can be turned off afterward. ENABLE_CACHE controls the cache layer. G_CLIENT_ID and G_CLIENT_SECRET come from a GitHub App, and the callback URL must be https://your-domain.com/api/oauth/github.

For a build from source rather than the image, the README requires Node.js >= 20 and gives this sequence:

sh
corepack enable
pnpm i
pnpm dev

To run the built server outside Docker, package.json defines a start script that loads .env.server:

sh
node --env-file .env.server dist/output/server/index.mjs

The environment file is created by renaming example.env.server. If you skip that step, the OAuth and database settings are missing and login will not work.

Deploying to Cloudflare Pages, and where the database fits

The README's basic deployment path is a fork plus an import into Cloudflare Pages or Vercel. For Cloudflare Pages it specifies the build command pnpm run build and the output directory dist/output/public. That output path matters because the build produces both a client bundle and a server bundle; pointing Pages at dist/output would be wrong.

Database support comes from db0, and the README links to the db0 connectors page rather than listing them. It recommends Cloudflare D1. Setting that up means creating a D1 database in the Cloudflare dashboard, putting database_id and database_name into wrangler.toml, and renaming example.wrangler.toml if wrangler.toml does not exist yet. The README says changes take effect on the next deployment, which is a useful detail: editing wrangler.toml alone does nothing until you redeploy.

The Docker path uses a different database story. The Dockerfile installs better-sqlite3 and the compose file persists /usr/app/.data in a named volume, so the container keeps a local SQLite file. That is simpler than D1 but ties the data to the volume. If you delete the volume, you lose the database, and the README does not describe an export or backup command.

The MCP server turns NewsNow into a tool for agents

The README documents an MCP server as a first-class feature, with a JSON configuration block for clients:

json
{
  "mcpServers": {
    "newsnow": {
      "command": "npx",
      "args": [
        "-y",
        "newsnow-mcp-server"
      ],
      "env": {
        "BASE_URL": "https://newsnow.busiyi.world"
      }
    }
  }
}

The only documented setting is BASE_URL, which the README says can point at your own domain. That means the MCP server is a client of a running NewsNow instance, not a standalone scraper. If you self-host, you point BASE_URL at your deployment and inherit your own cache and scraping interval.

This is the part of the project with the least explanation. The README does not list which tools the MCP server exposes, what arguments they take, or what the response shape looks like. Anyone integrating it will have to inspect the package or the source. The mechanism is clear enough (an MCP client spawns the server over stdio and it calls your NewsNow instance over HTTP), but the contract is undocumented.

Why NewsNow may be the wrong tool right now

The README contains a notice that NewsNext, described as the next generation of NewsNow, is coming soon, with a waitlist link. It also strikes through the contributing section and states that the new version is coming soon and contributions will no longer be accepted. Whatever the maintainer's reasons, the practical effect is that this is a project in a holding pattern.

That creates three problems. First, adding a data source is now something you do privately, because pull requests are not being taken. Second, bug reports have no defined channel. Third, the roadmap in the README (multi-language support, personalization, more sources) is unlikely to land here if effort is going into the successor. The last push was on 2026-09-16, so the repository is not abandoned, but the README's own text tells you where the maintainer's attention is going.

There is also a category problem. NewsNow scrapes sources directly. When a source changes its markup or blocks the scraper, the source breaks until someone fixes it, and the README does not document a health check or alerting for that. A self-hoster can end up with a silently empty category and no signal explaining why.

How NewsNow differs from RSS readers and hosted aggregators

The closest alternative in kind is a self-hosted RSS reader such as FreshRSS or Miniflux. The difference is where the source list comes from. An RSS reader consumes feeds that publishers already expose, and you subscribe to whatever you want. NewsNow ships its own scrapers under shared/sources and server/sources, normalizes them into one schema, and renders them in a purpose-built UI. You get a curated, consistent set of sources with no feed discovery, and you give up the ability to add an arbitrary site without writing code.

A hosted aggregator like Google News or Feedly takes the opposite approach on operations: someone else absorbs the scraping and blocking problems. NewsNow's value is that you own the instance and the data, and the MCP server lets you pipe that data into your own tooling. The cost is that you also own the breakage.

For teams already running an RSS stack, the honest comparison is this: if your sources publish feeds, an RSS reader is less work and less fragile. NewsNow earns its place when the sources you care about do not publish usable feeds, or when you want the trending view and the MCP endpoint rather than a chronological inbox.

Licence, upgrade cost, and what to check before you commit

NewsNow is MIT licensed, copyright ourongxing. MIT is permissive: you can use, modify, and redistribute it, including commercially, provided the licence and copyright notice are retained. That is a statement about the licence text, not legal advice; if you plan to redistribute a modified version, read the LICENSE file in the repository rather than this summary.

The upgrade cost is moderate. The project is a private package (private: true in package.json) pinned to pnpm 10.30.3, and the Dockerfile builds on node:20.12.2-alpine. Upgrading means pulling a new image or rebuilding from a new commit, and the README does not document a migration path for schema changes. INIT_TABLE is described as a first-run flag, so it is not obvious what happens to an existing database when the schema moves. Back up the .data volume or the D1 database before upgrading, and treat that as your own responsibility because the documentation does not cover it.

Verify three things before adopting: that your chosen database connector appears on the db0 connectors page, that your GitHub App callback is set to /api/oauth/github, and that you are comfortable depending on a project whose README directs new work elsewhere.

Editorial conclusion

Adopt NewsNow if you want a self-hosted, MIT-licensed trending-news reader and are comfortable with the Cloudflare D1 or SQLite setup described in the README. Do not adopt it if you need a supported project with an open contribution process: the README says the new version is coming soon and that contributions are no longer accepted. Before deploying, verify that your database connector is supported by db0, that INIT_TABLE is set to true on the first run, and that your GitHub OAuth callback points at /api/oauth/github.

Frequently asked questions

What is NewsNow and what does it do?

NewsNow is an MIT-licensed TypeScript project described in its README as "elegant reading of real-time and hottest news." It scrapes a fixed set of news sources, caches results for 30 minutes by default, and presents them in a clean reading UI, with an optional MCP server for agent use.

Is NewsNow down right now?

That cannot be determined from the repository. The README documents a homepage at newsnow.busiyi.world, but it does not describe uptime monitoring, status pages, or incident reporting, so availability has to be checked against that site directly.

What is newsnow?

It is a self-hostable news aggregator: the README lists a clean UI, real-time trending updates, GitHub OAuth login with data synchronization, a 30-minute default cache, and an adaptive scraping interval with a 2-minute minimum.

Is newsnow legit?

The repository is a public project under the MIT licence, copyright ourongxing, with releases published up to v0.0.42. Its README states that NewsNext is coming soon and that contributions are no longer accepted, so legitimacy is not the open question; ongoing development here is.

Is NewsNow not working or offline?

The README does not document a troubleshooting path for an unreachable instance. The closest relevant detail is that the project requires Node.js >= 20 for development and that INIT_TABLE must be true on the first run, so a fresh self-hosted instance with an uninitialized database is a plausible failure point to check.

What is a NewsNow alternative?

The README does not name alternatives. The structural difference worth knowing is that NewsNow ships its own scrapers under shared/sources and server/sources rather than consuming publisher feeds, so a self-hosted RSS reader such as FreshRSS or Miniflux occupies a different position: you subscribe to feeds instead of relying on maintained scrapers.

Official sources

  1. License: MIT
  2. newsnext/newsnow on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/newsnext-newsnow.svg)](https://hysenlabs.com/projects/newsnext-newsnow)