@tantanyuli: 炒股软件居然也搞开源了,这操作属实有点离谱。 OpenStock 在 GitHub 上 star 已经 16900+,一个开源项目,把付费行情软件里那些要收你钱的功能,全给塞进一个免费平台,还放话永久免费。 它想干的事特别直接:一分钱不掏…

X AI KOLs Timeline 工具

摘要

开源炒股看盘工具 OpenStock 在 GitHub 上获得 16900+ star 并登上 GitHub Trending 榜首,集实时行情、TradingView K线、技术指标、市场情绪与 Gemini 驱动的 AI 新闻摘要于一体,宣称永久免费。

炒股软件居然也搞开源了,这操作属实有点离谱。 OpenStock 在 GitHub 上 star 已经 16900+,一个开源项目,把付费行情软件里那些要收你钱的功能,全给塞进一个免费平台,还放话永久免费。 它想干的事特别直接:一分钱不掏,也能用上一整套看盘工具。我拆开给你说: 1️⃣ 实时股价,行情随时盯着 2️⃣ TradingView 的 K 线,专业软件同款 3️⃣ 技术指标,该有的都有 4️⃣ Reddit、X、财经新闻、Polymarket 的市场情绪,全揉进一个界面,省得你开一堆网页来回切 最让我买账的是 Watchlist 这块。把持仓加进去,Gemini 会顺着你关注的方向,每天生成一份 AI 新闻摘要,直接推到你邮箱。 说白了,盯盘、看新闻、刷情绪、整理信息流这些事,它基本都给你捏一块儿了,一个界面搞定。 技术栈也不含糊,Next.js、TypeScript、MongoDB,还挂着 GitHub Trending 当日第一的牌子,不是那种随手写完就扔的玩具。 不过我得提一句,它自己也讲了,OpenStock 是社区搭起来的,不是券商,行情数据可能有延迟,里面的东西也不构成任何投资建议,你自己心里有数就行。 想上手的自己去扒源码: 🔗
查看原文
查看缓存全文

缓存时间: 2026/10/21 18:35

炒股软件居然也搞开源了,这操作属实有点离谱。

OpenStock 在 GitHub 上 star 已经 16900+,一个开源项目,把付费行情软件里那些要收你钱的功能,全给塞进一个免费平台,还放话永久免费。

它想干的事特别直接:一分钱不掏,也能用上一整套看盘工具。我拆开给你说:

1️⃣ 实时股价,行情随时盯着

2️⃣ TradingView 的 K 线,专业软件同款

3️⃣ 技术指标,该有的都有

4️⃣ Reddit、X、财经新闻、Polymarket 的市场情绪,全揉进一个界面,省得你开一堆网页来回切

最让我买账的是 Watchlist 这块。把持仓加进去,Gemini 会顺着你关注的方向,每天生成一份 AI 新闻摘要,直接推到你邮箱。

说白了,盯盘、看新闻、刷情绪、整理信息流这些事,它基本都给你捏一块儿了,一个界面搞定。

技术栈也不含糊,Next.js、TypeScript、MongoDB,还挂着 GitHub Trending 当日第一的牌子,不是那种随手写完就扔的玩具。

不过我得提一句,它自己也讲了,OpenStock 是社区搭起来的,不是券商,行情数据可能有延迟,里面的东西也不构成任何投资建议,你自己心里有数就行。

想上手的自己去扒源码:

🔗


Open-Dev-Society/OpenStock

Source: https://github.com/Open-Dev-Society/OpenStock

SPONSORED BY

RapidProxy: try for free, 90M+ clean residential IPs

Orbit. Free, open-source macOS screen recorder, screenshot tool and video editor: auto-zoom, smooth cursor, backgrounds, web recordings and AI agent recording.

Star History Rank GitHub Trending Repository of the Day

Open-Dev-Society%2FOpenStock | Trendshift Open-Dev-Society%2FOpenStock | Trendshift Open-Dev-Society%2FOpenStock | Trendshift Open-Dev-Society%2FOpenStock | Trendshift


OpenStock: the landing page with the market hours dial, index pulse and live charts

Open OpenStock · Changelog · Self-host it · Sponsor · Discord


Next.js badge

OpenStock

Markets, minus the paywall. OpenStock is a free, open-source alternative to expensive market platforms: track prices, watch the whole market and dig into company insights. Use it at openstock-ods.vercel.app, or run your own copy with every feature.

❤️ 13,000+ people use OpenStock for free. Help keep it that way: sponsor from $5 a month, or read how OpenStock is funded.

OpenStock is community-built and not a brokerage. Market data may be delayed depending on the provider and your setup. Nothing here is financial advice.

📋 Table of Contents

  1. 🔋 Features
  2. ⏱️ How fresh is the data
  3. ⚙️ Tech stack
  4. 🤸 Quick start
  5. 🔐 Environment variables
  6. 🐳 Self-hosting: Docker, prebuilt image, one-click deploys, Vercel
  7. 🧱 Project structure
  8. 📡 How it works
  9. 🌍 Market support
  10. 🧪 Scripts and tests
  11. 🤝 Contributing
  12. 🏆 Contributors
  13. 🛡️ Security
  14. 📜 License
  15. 🌱 Open Dev Society manifesto
  16. 🙏 Acknowledgements
  17. ❤️ Sponsor OpenStock

🔋 Features

Markets

  • A dashboard for seven markets: US, India, Germany, Canada, Australia, Crypto and Forex, with an index pulse, a sector heatmap, market leaders and top stories.
  • Search every exchange Finnhub covers with ⌘K, and keep stocks open as browser-style tabs.

Stock pages

  • TradingView candles with drawing tools (trend lines, Fibonacci, shapes, text) and fullscreen.
  • Pick indicators once (SMA, EMA, Bollinger Bands, VWAP, RSI, MACD, Stochastic, ATR) and they stay on every chart.
  • Financials, technicals and the company profile.
  • Sentiment from Reddit, X, news and Polymarket (with an Adanos key).

Watchlist and alerts

  • A watchlist of up to 50 stocks, saved to your account.
  • Price alerts above or below a target, checked every 5 minutes and emailed to you (in realtime mode).
  • A weekly, AI-written news digest by email every Monday.

Accounts

  • Email and password, plus Google and GitHub sign-in when configured; password reset and a profile page.
  • Rate-limited sign-in, sign-up and password reset; resetting your password signs out your other devices.

Community

⏱️ How fresh is the data

Charts always stream live from TradingView. Quotes, watchlist prices and alerts come from Finnhub:

QuotesPrice alertsCost
Community: openstock-ods.vercel.appEvery hour, shared by everyoneNoFree
OpenStock Cloud (coming soon)Every 15 secondsBy email$5 a month
Self-hostedEvery hour, or every 15 seconds with NEXT_PUBLIC_OPENSTOCK_DATA_MODE=realtime and your own Finnhub keysBy email, in realtime modeFree

⚙️ Tech stack

AppNext.js 15 (App Router), React 19, TypeScript, Tailwind CSS v4, shadcn/ui and Radix
Accounts and dataBetter Auth, MongoDB with Mongoose
Market dataFinnhub, TradingView widgets, Adanos (sentiment)
Background jobsInngest
EmailNodemailer (Gmail), Kit for the newsletter
AIGemini, MiniMax or Siray
HostingVercel; a Docker image on GitHub Container Registry for self-hosting

🤸 Quick start

You need Node.js 22 LTS, a MongoDB database (a free Atlas cluster, or the Docker setup) and a free Finnhub key.

git clone https://github.com/Open-Dev-Society/OpenStock.git
cd OpenStock
npm ci
cp .env.example .env         # fill in MONGODB_URI, BETTER_AUTH_SECRET and FINNHUB_API_KEY
node scripts/check-env.mjs   # checks your .env
npm run test:db              # checks the MongoDB connection
npm run dev                  # http://localhost:3000

Welcome emails, price alerts and the weekly digest run as Inngest jobs. Locally, start Inngest’s dev server alongside the app: npx inngest-cli@latest dev.

For production: npm run build && npm start.

🔐 Environment variables

Every variable is listed with comments in .env.example. The ones that matter:

VariableNeededWhat it’s for
MONGODB_URIYesYour MongoDB database
BETTER_AUTH_SECRETYesSigns sessions. Generate it with openssl rand -hex 32. Auth refuses to run in production without it
BETTER_AUTH_URLYesThe app’s public URL, used for auth callbacks and links in emails
FINNHUB_API_KEYYesMarket data. Or put several free keys, comma-separated, in FINNHUB_API_KEYS: they’re rotated, and each adds 60 requests a minute
NEXT_PUBLIC_OPENSTOCK_DATA_MODENocached (hourly, the default) or realtime (every 15 seconds, with price alerts). Fixed when the app is built: rebuild after changing it
INNGEST_SIGNING_KEY, INNGEST_EVENT_KEYIn productionBackground jobs: welcome emails, price alerts and the weekly digest
NODEMAILER_EMAIL, NODEMAILER_PASSWORDNoSending email through Gmail, with an app password. Without them, emails are skipped
GEMINI_API_KEY (or MiniMax or Siray)NoAI-written welcome emails and the news digest
ADANOS_API_KEYNoThe sentiment card on stock pages
KIT_API_KEY, KIT_API_SECRET, KIT_WELCOME_FORM_IDNoThe weekly digest newsletter in Kit
GOOGLE_CLIENT_ID / _SECRET, GITHUB_CLIENT_ID / _SECRETNoSocial sign-in. Callbacks: <BETTER_AUTH_URL>/api/auth/callback/google and /github

NEXT_PUBLIC_FINNHUB_API_KEY still works as a name for the Finnhub key. No key is ever sent to the browser.

🐳 Self-hosting

Docker Compose

Runs OpenStock and MongoDB together. MongoDB is only reachable inside the Docker network; it isn’t published on your machine.

  1. Fill in .env (see above). For the bundled database, choose a password and use it in both places. Letters and digits are simplest; @ : / ? # must be percent-encoded in the URI.
    MONGO_ROOT_PASSWORD=change-me
    MONGODB_URI=mongodb://root:change-me@mongodb:27017/openstock?authSource=admin
    
  2. Start it: docker compose up -d --build
  3. Open http://localhost:3000

The image build needs no secrets: every variable is read when the container starts, except NEXT_PUBLIC_OPENSTOCK_DATA_MODE, which Compose passes to the build from .env. Data lives in the mongo-data volume, and the MongoDB password is only applied when that volume is first created.

Prebuilt image

Every push to main publishes ghcr.io/open-dev-society/openstock for amd64 and arm64, tagged latest, sha-<commit>, and a version for each release (for example 2026.10.18). To use it, replace build: under openstock in docker-compose.yml with:

    image: ghcr.io/open-dev-society/openstock:latest

then run docker compose pull && docker compose up -d. The prebuilt image runs in cached mode; build it yourself for realtime.

One-click deploys

Deploy on RepoCloud Deploy to ZopDay Deploy on Railway

Railway

OpenStock ships a railway.json that builds the Dockerfile, checks health on /sign-in and restarts on failure. The template above sets everything up; to do it by hand:

  1. Create a project and add a MongoDB database (+ New → Database → MongoDB).
  2. Add a service from this repository (+ New → GitHub Repo).
  3. In the service’s Variables, set:
    MONGODB_URI=${{MongoDB.MONGO_URL}}
    BETTER_AUTH_SECRET=${{secret(32)}}
    BETTER_AUTH_URL=https://${{RAILWAY_PUBLIC_DOMAIN}}
    FINNHUB_API_KEY=your_finnhub_key
    GEMINI_API_KEY=your_gemini_api_key
    INNGEST_SIGNING_KEY=your_inngest_signing_key
    INNGEST_EVENT_KEY=your_inngest_event_key
    [email protected]
    NODEMAILER_PASSWORD=your_gmail_app_password
    
  4. Under Settings → Networking, generate a public domain and redeploy.

For background jobs, add your Railway domain as an app in the Inngest dashboard, pointing to https://<your-domain>/api/inngest. To turn on realtime mode, also set NEXT_PUBLIC_OPENSTOCK_DATA_MODE=realtime; Railway passes it to the build.

Vercel

Import the repository, set the variables above for Production, and connect Inngest (its Vercel integration sets both keys). vercel.json pins functions to Mumbai (bom1), next to the hosted database; change it to the region nearest yours.

🧱 Project structure

app/
  (marketing)/    public pages: landing, about, help, api-docs, sponsor, love, changelog, terms, /s/[ticker], /compare
  (auth)/         sign-in, sign-up, forgot-password, reset-password
  (root)/         the signed-in app: dashboard, watchlist, stocks/[symbol], profile
  api/            auth/[...all] (Better Auth), inngest (background jobs), quotes (live prices)
components/       shell/ (sidebar, tabs), stocks/, watchlist/, landing/, marketing/, sponsors/, forms/, ui/ (shadcn)
database/         MongoDB connection and models (watchlist, alert)
lib/
  actions/        server actions: auth, profile, watchlist, alerts, Finnhub, sentiment
  better-auth/    auth setup (connects to MongoDB on first use, so builds need no database)
  inngest/        background jobs and AI prompts
  nodemailer/     email sending and templates
  markets.ts      the dashboard's markets            market-data.ts   cached vs realtime
  changelog.ts    releases and contributor credits   sponsors.ts      sponsors and tiers
  rate-limit.ts   MongoDB-backed limits for auth and live quotes
middleware.ts     public marketing, /s and /compare pages; app pages redirect to sign-in
scripts/          check-env.mjs, test-db.mjs, and one-off maintenance scripts
__tests__/        Vitest tests

📡 How it works

  • Finnhub: search, quotes, company profiles and news. Responses are cached and shared (for an hour, or 15 seconds in realtime mode), with timeouts and a key pool, so a slow upstream never hangs a page.

  • TradingView: the chart, heatmap, financials, technicals and profile widgets.

  • Adanos (optional): the sentiment card.

  • Better Auth with MongoDB: accounts and sessions. Pages and server actions check the session on the server; the middleware only redirects signed-out visitors.

  • Inngest runs the background jobs:

    JobWhen
    AI-personalised welcome emailOn sign-up
    Price alert checkEvery 5 minutes, in realtime mode
    Weekly news digest (a Kit broadcast)Mondays at 09:00 UTC
  • Email: Nodemailer (Gmail) sends welcome, alert and password-reset emails; Kit sends the weekly digest.

🌍 Market support

MarketCharts (TradingView embeds)Quotes, watchlist prices, alerts (Finnhub free)
🇺🇸 United StatesLiveYes
Crypto (Binance pairs)LiveYes
ForexLiveNo
🇨🇦 Canada, 🇦🇺 AustraliaDelayedNo
🇮🇳 India (BSE; .NS symbols chart on BSE), 🇩🇪 GermanyEnd of dayNo
London, Tokyo, Hong Kong, Korea and othersCandles blocked; financials, technicals and profile workNo

The full table, and why some markets are limited, is in MARKET_SUPPORT.md.

🧪 Scripts and tests

CommandWhat it does
npm run devDevelopment server (Turbopack)
npm run build, npm startProduction build and server
npm testVitest tests (npm run test:watch to keep watching)
npm run lintESLint
npx tsc --noEmitType check. Builds skip type errors, so run this before opening a PR
npm run test:dbChecks the MongoDB connection
node scripts/check-env.mjsChecks your .env

🤝 Contributing

You belong here. Whether you’re a student, a self-taught dev or a seasoned engineer, contributions are welcome.

  1. Pick a good first issue, or open an issue to talk about an idea or a bug first.
  2. Fork the repo, branch from main, then npm ci and cp .env.example .env.
  3. Keep the pull request focused: a test for new logic, a screenshot for UI changes.
  4. Before you open it, run npm test, npx tsc --noEmit and npm run lint.

Every merged pull request, and every issue that leads to a fix, is credited on the changelog and below. Be kind, guide beginners, no gatekeeping: that’s the Open Dev Society way. Participation is covered by the Code of Conduct.

🏆 Contributors

OpenStock is built by everyone below: the people who wrote the code and the people whose issues led to a fix. Every release, and who made it happen, is on the changelog.

@ravixalgorithm founded and maintains OpenStock, and built it from the ground up: authentication, UI design, API and AI integration, and deployment.

ravixalgorithm
ravixalgorithm

Maintainer · 36 PRs
keshav-005
keshav-005

7 PRs
akoweicollinxx
akoweicollinxx

2 PRs
octo-patch
octo-patch

2 PRs
alexander-schneider
alexander-schneider

1 PR
BambaSatoru
BambaSatoru

1 PR
Bortlesboat
Bortlesboat

1 PR
chinnsenn
chinnsenn

1 PR
Chukwuebuka-2003
Chukwuebuka-2003

1 PR
cosark
cosark

1 PR
cosmind-rusu
cosmind-rusu

1 PR
CrixusWen
CrixusWen

1 PR
ettoreciolli
ettoreciolli

1 PR
fuxicodex
fuxicodex

1 PR
kuishou68
kuishou68

1 PR
Mubashirrrr
Mubashirrrr

1 PR
muskanbandta23
muskanbandta23

1 PR
nb-src
nb-src

1 PR
NicolasBohn
NicolasBohn

1 PR
TPTBusiness
TPTBusiness

1 PR
Yi-111-a
Yi-111-a

1 PR
nexitpl
nexitpl

6 issues
a-lacruz
a-lacruz

1 issue
aaronwork1205
aaronwork1205

1 issue
brainistry10
brainistry10

1 issue
cn-zeus-jp
cn-zeus-jp

1 issue
danieldanielecki
danieldanielecki

1 issue
Greatz08
Greatz08

1 issue
juipeter-pixel
juipeter-pixel

1 issue
k2alzhang
k2alzhang

1 issue
khajaG321
khajaG321

1 issue
maplelaef0320
maplelaef0320

1 issue
maxsyst
maxsyst

1 issue
saschabrockel
saschabrockel

1 issue
soonfatt
soonfatt

1 issue
Terry0930
Terry0930

1 issue

Also thanks to Priyanshuu00007, who designed the OpenStock logo and visual identity, and koevoet1221, who fixed the MongoDB Docker build. Their GitHub accounts are no longer available, so they aren’t linked above.

Want to be here? Pick a good first issue or report a bug you hit.

🛡️ Security

Found a vulnerability? Please don’t open a public issue. Report it privately on GitHub; we’ll work on a fix with you and credit you.

📜 License

OpenStock is and will remain free and open for everyone. It’s licensed under AGPL-3.0: 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.

🌱 Open Dev Society manifesto

We live in a world where knowledge is hidden behind paywalls. Where tools are locked in subscriptions. Where information is twisted by bias. Where newcomers are told they’re not “good enough” to build.

We believe there’s a better way.

  • Our belief: technology should belong to everyone. Knowledge should be open, free and accessible. Communities should welcome newcomers with trust, not gatekeeping.
  • Our mission: build free, open-source projects that make a real difference: tools professionals and students can use without barriers, knowledge platforms where learning is free forever, communities where every beginner is guided, not judged, and resources that run on trust, not profit.
  • Our promise: we will never lock knowledge. We will never charge for access. We will never trade trust for money. We run on transparency, donations and the strength of our community.
  • Our call: if you’ve ever felt you didn’t belong, struggled to find free resources, or wanted to build something meaningful, you belong here.

Because the future belongs to those who build it openly.

🙏 Acknowledgements

Built openly, for everyone, forever free. © Open Dev Society.

❤️ Sponsor OpenStock

OpenStock is free, open source and used by 13,000+ registered people. Keeping it that way costs money every month: hosting, the database, market data keys, AI and email, and the hours that go into reviewing pull requests and shipping fixes.

How OpenStock is funded

  • OpenStock Cloud will pay for hosting. Cloud ($5 a month, coming soon) adds live quotes and email price alerts. Its subscribers will cover the servers, database and market data the hosted app needs, so the free site stays online without depending on donations.
  • Sponsors keep the community moving. Sponsorships pay for the time behind OpenStock: reviewing community pull requests, fixing bugs and shipping features at the pace 13,000+ people expect, with the core free for everyone. Self-hosting stays free, with every feature.

Pick a tier. Each link opens GitHub Sponsors with the amount already selected. Cancel any time.

TierMonthlyWhat you get
Backer$5Your name in this README
Supporter$25Name and avatar on the sponsor wall and the sponsor page
Company$100Your logo in the footer of every public page, in this README and on the sponsor page
Partner$500One of three sponsor slots in the app sidebar, seen by 13,000+ registered users, plus your logo on the landing page

Rather give once? Make a one-time gift. Want an invoice or a custom partnership? Talk with us. Everything, including where the money goes, is on the sponsor page.

Sponsorships are paid through GitHub Sponsors to @ravixalgorithm (Ravi Pratap Singh, founder of Open Dev Society).

Can’t sponsor right now? Pick a good first issue, star the repo, or share OpenStock with someone who pays too much for a terminal.

Current sponsors are shown at the top of this README: RapidProxy · Orbit Previously backed by: Atlas Cloud · Siray.ai (2026)

相似文章

@CoderDaMing: 10个免费GitHub库,只需100美元和笔记本电脑就能像对冲基金一样交易。 这些是300多家对冲基金在用的工具。收藏这个。 1. OpenBB 免费的彭博终端。股票、期权、期货、加密、外汇。彭博终端年费25000美元,这个免费。 → h…

X AI KOLs Timeline

这篇文章介绍了10个免费的GitHub开源库,涵盖金融数据、回测、交易执行等,让散户能用低成本实现类似华尔街对冲基金的交易工具。

@_zheergen: 做股票量化,最头疼的不是缺工具,而是工具太多,根本不知道该选哪个。 行情数据、策略回测、实盘交易、风控分析,每个环节都要重新找项目。 GitHub 上这份 awesome-systematic-trading,5.3K Stars,把量化…

X AI KOLs Timeline

介绍 GitHub 上的 awesome-systematic-trading 开源项目(5.3K Stars),它把量化交易所需的行情数据、回测、实盘交易、AI 量化与风控工具整理成一份完整的导航索引,覆盖股票、期货、期权和加密货币等市场。