DevPik Logo
self hostedstock marketnextjsopen sourcefinance

OpenStock: A Self-Hosted Market Dashboard, and What Free Data Really Costs

A 17,000-star Next.js market dashboard you can host yourself: watchlists, TradingView charts, and email digests. Here is what it genuinely gives you, and why the word real-time needs an asterisk on the free tier.

ByMuhammad Tayyab13 min read
All open source picks
Open-Dev-Society/OpenStock
The official repository — this write-up is not affiliated with the project.
17.4kTypeScriptAGPL-3.0

What OpenStock Is

OpenStock is a self-hosted market dashboard built with Next.js 15 and React 19. Watchlists, company profiles, TradingView charts, a command palette, and automated email digests, all running on infrastructure you control.

It is the most-starred project covered in this series so far, at over 17,300 stars, and it comes from Open Dev Society, a community that publishes a manifesto about keeping tools free rather than a pricing page.

Before anything else, the project's own note, which deserves to be repeated rather than buried:

OpenStock is community-built and not a brokerage. Market data may be delayed based on provider rules and your configuration. Nothing here is financial advice.

That is an unusually straight thing to put at the top of a README, and the rest of this write-up takes it seriously. Nothing here is financial advice either.

What Real-Time Actually Means Here

This is the section to read before you decide whether to deploy it, because "real-time prices" is the headline and the reality has conditions attached.

OpenStock does not have its own market data. It reads from Finnhub, and what you get depends entirely on the Finnhub plan behind your API key. The project documents this plainly rather than hiding it:

  • Free Finnhub tiers may return delayed quotes.
  • Real-time data for non-US stocks is delayed by 15 minutes or more on the free tier.
  • TradingView's free tier restricts emerging markets, India's NSE and Vietnam among them, which is why some symbols show "only available on TradingView".

So the accurate framing is this. Deployed with free keys, OpenStock is an excellent watchlist, research and monitoring tool. It is not a real-time trading screen, and anyone treating a delayed quote as a live one is going to have a bad time in exactly the situations where the delay matters most.

Put a paid Finnhub plan behind it and the picture changes, which is the honest upgrade path. The software is free; market data at low latency is the part nobody gives away, because redistributing exchange data in real time is expensive and licensed.

None of this is a criticism of the project. It is the structural reality of every free finance tool, and OpenStock is one of the few that says so out loud.

It Is Not a Bloomberg Terminal

The comparison gets made constantly, so it is worth being precise about what the gap actually is.

A Bloomberg Terminal costs somewhere around 30,000 dollars per user per year. What that buys is not a nicer interface. It is licensed real-time data across essentially every asset class, proprietary analytics, a newsroom, and the messaging network that a large part of the industry uses to actually transact.

OpenStock is a well-built web dashboard over a free market data API and embedded charts. For following a personal watchlist, reading company fundamentals and getting a weekly digest, it does a genuinely good job, and for that use case the 30,000 dollars buys you very little extra.

The two are not competing for the same person. If you are a retail investor tracking twenty positions, OpenStock plus a free Finnhub key may be entirely sufficient. If your job depends on sub-second quotes and the chat network, no open-source project is going to replace that, and none of them claim to.

The useful question is not "is this as good as Bloomberg" but "do I need any of the things Bloomberg has". For most people the honest answer is no.

How It Differs From OpenBB

If you have looked at open-source finance before, you have met OpenBB, and the two are different enough that picking wrong wastes a weekend.

OpenStockOpenBB
ShapeA web app you deploy and log intoA data platform and toolset
LanguageTypeScript, Next.js, ReactPython
Built forIndividuals tracking a watchlistAnalysts and data engineers building workflows
InterfaceDashboard, charts, email digestsTerminal, notebooks, an integration layer
DataFinnhub plus TradingView widgetsMany providers, integrated as sources

OpenBB is the heavyweight if you want to pull data into your own analysis, plug in licensed feeds, and build on top. OpenStock is the better answer if you want a clean interface your family could use, running on your own hosting, without writing any Python.

They are complementary rather than competing, and it is entirely reasonable to run OpenBB for analysis and OpenStock as the daily dashboard.

What You Actually Get

The feature set is focused, which is a compliment. It does a small number of things properly rather than half-building a trading platform.

  • Watchlists, stored per user in MongoDB with one entry per symbol, so two people on the same deployment do not see each other's positions.
  • Global search with a Cmd or Ctrl + K palette, backed by Finnhub, debounced, with popular stocks shown when idle.
  • Stock detail pages combining TradingView symbol info, candlestick and advanced charts, baseline and technical widgets, plus company profile and financials.
  • Market overview with a heatmap, quotes and top stories.
  • Optional sentiment insights through Adanos, pulling cross-source snapshots from Reddit, X, news and Polymarket. This one is opt-in and sits on the stock detail page only.
  • Personalised onboarding collecting country, investment goals, risk tolerance and preferred industry.
  • Email automation through Inngest: an AI-written welcome email, and a weekly news summary on a Monday 9am cron.
  • 30 or more international exchanges, including NSE, LSE and TSX, subject to the data caveats above.

The sentiment card is the most interesting and the one to treat most carefully. Aggregated Reddit and X sentiment is a genuinely useful signal about attention, and a genuinely poor signal about value. It tells you what retail is talking about, which is information, just not the information people often assume it is.

Market caps and volumes come back as very large numbers, and if you are cross-checking them against another source a scientific notation converter removes the zero-counting. For percentage gains and position sizing, a markup and margin calculator covers the arithmetic that spreadsheets usually get imported for.

The Stack

The technology choices are current and conventional, which for a project handling your data is the right kind of boring.

LayerChoice
FrameworkNext.js 15 App Router, React 19
LanguageTypeScript, about 93 percent of the codebase
StylingTailwind CSS v4, shadcn/ui, Radix primitives
AuthBetter Auth, email and password, MongoDB adapter
DatabaseMongoDB with Mongoose
Market dataFinnhub
ChartsTradingView embeddable widgets
Background jobsInngest for events and cron
EmailNodemailer over Gmail
AIGemini by default, MiniMax and Siray also supported

Using TradingView widgets for charts rather than building charting is the single best decision in here. Financial charting is a genuinely hard problem with years of edge cases, and embedding the people who solved it means the project gets to spend its effort on watchlists and alerts instead.

Because it is Tailwind v4 with design tokens and a dark theme by default, theming it to your own palette is mostly a token exercise, and a colour converter saves time moving between the hex values a designer gives you and the formats the token files want.

AGPL-3.0 Bites Harder Here Than Usual

The licence is AGPL-3.0, and for this project specifically that matters more than it would for most.

AGPL's distinguishing clause covers use over a network. The repository states it directly:

If you modify, redistribute, or deploy it (including as a web service), you must release your source code under the same license and credit the original authors.

For a desktop application, AGPL rarely triggers, because most people never distribute a modified copy. OpenStock is a web app, so deploying it publicly is the exact activity the licence is written about.

In practice:

  • Running it for yourself, your family or internally at work: fine. No obligation, because you are not providing it to the public as a service.
  • Deploying a modified version where other people can use it: you must publish your source under AGPL-3.0, including your changes.
  • Building a commercial product on it: the same applies, which for most commercial plans is a dealbreaker, and that is deliberate.

This is a licence chosen on purpose by a group whose manifesto says they will never lock knowledge. It is not an accident or an oversight, and it is the mechanism that keeps a fork from being turned into a paid product with the source closed. If you are evaluating this for a company, involve whoever handles licensing before you get attached to it.

Running It Yourself

The setup is more involved than the single-binary projects in this series, because it genuinely needs several services.

You will need Node 20 or newer, a MongoDB connection string from Atlas or local Docker, and a Finnhub API key. A Gmail account handles outbound email unless you swap the Nodemailer transport. Optional additions are a Gemini key for the AI welcome email, an Inngest signing key for deployment, and an Adanos key for sentiment.

There is a Docker Compose path for the whole thing including MongoDB, which is the route to take if you would rather not install a database.

One deployment detail worth knowing in advance: NEXT_PUBLIC_FINNHUB_API_KEY is required for Vercel deploys, and the NEXT_PUBLIC_ prefix means that key ships to the browser. That is how Finnhub's client-side usage works and it is not a flaw in OpenStock, but it does mean the key is visible to anyone who opens devtools. Use a key scoped to exactly this purpose, keep an eye on your rate limits, and do not reuse a key that has anything else attached to it.

If you want your watchlist data outside the app, it lives in MongoDB and exports cleanly, at which point a JSON to CSV converter is the shortest path into a spreadsheet.

The Community Behind It

Worth a paragraph, because it explains several of the decisions above.

Open Dev Society opens its README with a manifesto rather than a feature list: knowledge should not sit behind paywalls, tools should not be locked in subscriptions, newcomers should be guided rather than judged, and the project runs on transparency and donations rather than profit.

That is easy to be cynical about and the licence choice suggests they mean it. AGPL-3.0 is what you pick when you want to prevent someone closing a fork, and picking it costs you commercial adoption. They took the trade.

The contributor list is short and honest about who did what. One developer, ravixalgorithm, built the application end to end. Others contributed the logo, Docker configuration, a MongoDB build fix and README improvements. Seventeen thousand stars with a contributor list that size is worth reading as a signal in both directions: the idea clearly resonated, and the bus factor is small.

The public demo runs on a free Vercel subdomain, which tells you this is a community effort rather than a funded product. That is not a criticism, but it is the right expectation to set before relying on the hosted demo for anything.

Who Should Deploy This

A good fit if you want a clean, self-hosted dashboard for a personal watchlist, you are comfortable running a Next.js app and a MongoDB instance, you value owning your own data, and delayed quotes are acceptable for how you actually invest.

A bad fit if you need genuine real-time data without paying a data provider, since no software choice fixes that, or if you want a brokerage, because this deliberately does not place trades, or if you are building something commercial, where AGPL-3.0 will almost certainly stop you.

Set expectations on maturity. The project is about a year old, effectively one primary developer, and depends on several third-party services staying available on their free tiers. Free-tier terms change, and when a provider tightens theirs, a project like this feels it immediately.

What it does well, it does properly: a modern stack, an honest README, a licence that matches its stated values, and charting delegated to people who already solved charting. For a self-hosted personal market dashboard, that is a sound set of choices, as long as you go in understanding what the word free is doing in "free market data".

Frequently Asked Questions

Is OpenStock's data actually real-time?

It depends entirely on your Finnhub plan, not on OpenStock. The project states that free tiers may return delayed quotes, and that real-time data for non-US stocks is delayed by 15 minutes or more on the free tier. TradingView's free tier also restricts some emerging markets including India's NSE and Vietnam. With free keys, treat it as a research and monitoring dashboard rather than a live trading screen. A paid Finnhub plan improves latency, because low-latency market data is the part nobody gives away.

Is OpenStock really a Bloomberg Terminal alternative?

Only for a narrow slice of what a Terminal does. Bloomberg costs roughly 30,000 dollars per user per year and that buys licensed real-time data across asset classes, proprietary analytics, a newsroom and the messaging network the industry transacts on. OpenStock is a web dashboard over a free data API with embedded charts. For following a personal watchlist and reading fundamentals it is genuinely good. For anything depending on sub-second quotes or the chat network, it is not a substitute and does not claim to be.

Can I use OpenStock commercially?

Almost certainly not without publishing your source. It is AGPL-3.0, and the repository spells out that if you modify, redistribute or deploy it including as a web service, you must release your source under the same licence and credit the original authors. Because this is a web app, public deployment is exactly what that clause covers. Running it privately for yourself, your family or internally is fine. Building a closed commercial product on it is not.

Does OpenStock let me buy and sell stocks?

No. It is explicitly not a brokerage and places no trades. It tracks prices, holds watchlists, shows company profiles and charts, and sends email digests. There is no account linkage to any broker and no order flow anywhere in it. The project also states plainly that nothing in it is financial advice.

What do I need to self-host OpenStock?

Node 20 or newer, a MongoDB connection string from Atlas or local Docker, and a Finnhub API key, which has a usable free tier. A Gmail account handles email unless you swap the Nodemailer transport. Optional extras are a Gemini key for the AI welcome email, an Inngest signing key for deployment, and an Adanos key for sentiment. A Docker Compose setup covers the whole stack including MongoDB.

Is my Finnhub API key exposed in the browser?

Yes, and that is expected rather than a bug. Deployment requires NEXT_PUBLIC_FINNHUB_API_KEY, and the NEXT_PUBLIC_ prefix in Next.js means the value is bundled into client-side code where anyone can read it. That is how Finnhub's browser usage works. Use a key dedicated to this deployment, watch your rate limits, and never reuse a key that has other services or billing attached.

Which stock exchanges does OpenStock support?

More than 30 international exchanges including NSE, LSE and TSX, since Finnhub covers most global markets. The limits come from the data tiers rather than the app: TradingView's free tier restricts some emerging markets such as India's NSE and Vietnam, which is why certain symbols show a message about being available only on TradingView, and non-US real-time data is delayed on free plans. The repository's MARKET_SUPPORT.md lists the specifics.

How reliable is the sentiment feature?

Treat it as an attention signal, not a valuation one. The optional Adanos integration aggregates sentiment snapshots from Reddit, X, news and Polymarket onto the stock detail page. That genuinely tells you what retail investors are discussing, which is real information. It does not tell you what a company is worth, and social sentiment is well known to be noisy, gameable and heaviest exactly when a stock is already moving. It is off unless you configure a key.

Related DevPik tools

Muhammad Tayyab

Written by

Muhammad Tayyab

CEO & Founder at Mergemain

Muhammad Tayyab builds free, privacy-first developer tools at DevPik. He writes about AI trends, developer tools, and web technologies.

More open source picks