Model or dataset
jundizhou/easy-stock avatar
jundizhou/easy-stock

easy-stock: a local-first A-share AI research workbench in Go and Electron

A 股行情分析与AI智能投研智能体——easy stock

691 stars17 forksGoNOASSERTION

At a glance

What is it?
easy-stock is an Electron desktop application with a Go backend that aggregates Chinese market data and runs LLM analysis over it. The README is detailed on features and thin on installation, so adoption means reading the source tree.
Who is it for?
easy-stock suits individual A-share traders who already read 涨停 pools, 连板 ladders and 题材 rotations and want those signals collected, scored and archived on their own machine, and who are willing to build a Go plus Electron stack from source. It is the wrong tool for anyone wanting a hosted service, a US or Hong Kong equity screener, or a documented one-click installer, because the README links to a release page but does not describe packaging or signing.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 3 days ago.
What is it written in?
Mainly Go, according to GitHub's language statistics.

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

DEEP OPEN-SOURCE ANALYSIS

What easy-stock solves for A-share retail research

The README opens with a complaint about the category rather than the product: traditional quote software is good at showing price, change and turnover, but the hard part of A-share trading is the structure behind the price. Which theme leads today, whether it is broadening, whether the 连板 ladder is opening, whether yesterday's strong stocks got a premium, whether the trend still holds, whether sentiment is repairing or retreating. easy-stock is aimed at individual investors who already track those things by hand across 雪球, 淘股吧 and 微信公众号, and who want the collection, scoring and archiving done locally.

The scope is deliberately narrow. The topics list a-share, china-stock, ai-agent and llm, and every feature in the README is framed around mainland market mechanics: 涨停 pools, 连板 ladders, 晋级率, 龙虎榜, 题材 maps. There is no mention of Hong Kong, US listings or options. If your workflow is not A-share, the domain model does not apply to you.

The Go backend, Electron shell and local-first data path

The repository is a monorepo with three runtime pieces. backend/ is Go and builds the server binary; frontend/ is React plus TypeScript; desktop/ is Electron and owns packaging. The root package.json declares frontend and desktop as npm workspaces and exposes a build:desktop script that chains all three: build:backend, build:frontend, then the desktop build. The backend binary is written to desktop/bin/easy-stock-backend.

The data flow the README describes runs in one direction: sources are aggregated (it names 开盘啦, 东方财富, 新浪 and 财联社) into unified quotes, K-lines, themes, limit-up lists and news; a domain model turns trend, theme, ladder, sentiment, volume-price and relative strength into computable fields; scheduled tasks and a built-in browser discover articles, deduplicate them and archive extracted opinions; and the results are stored on the local machine as articles, summaries, sentiment history, analysis records, model sessions and research caches. The AI layer is named Hermes in the badge row and appears as a reading and analysis surface rather than a separate service.

The design choice worth noting is the evidence trail. The README states that scoring dimensions, theme sources, original article URLs, update times, latency and degraded status are retained so a conclusion can be traced back to the evidence layer. That is a real architectural commitment, and it is also the part most likely to break quietly: if a source is slow or blocked, the app is supposed to mark the degradation rather than silently score on stale data. The README does not document what the degraded state looks like in the UI.

Building easy-stock from source and running the backend

The README points to the releases page for a download, but the installation steps it actually documents are the development ones in package.json. There is no documented installer walkthrough. The scripts assume Go and Node are already installed.

Install workspace dependencies from the repository root first, then start the backend. The dev:backend script sets A_STOCK_ADDR and runs the server from backend/:

bash
npm install
npm run dev:backend

You should see the Go server bind to 127.0.0.1:20081. If that port is taken, the script hardcodes it, so you would need to change the value in package.json or run the Go command yourself with a different A_STOCK_ADDR.

In a second terminal, start the frontend workspace. This is the browser-side UI without the Electron shell:

bash
npm run dev:frontend

The full desktop build is a three-stage chain, and it is the command to use when you want the packaged app rather than a dev session:

bash
npm run build:desktop

That runs build:backend, build:frontend and the desktop build in order. The backend output lands at desktop/bin/easy-stock-backend. For a first real use, open the app, go to the market overview, and hand the current page context to the AI, which the README says is possible from each page. Then add up to 10 holdings in the portfolio inspection view and start a run; the README states the inspection calls the full per-stock analysis in the background and saves the report locally, so you can keep using other screens while it works.

Where easy-stock stops being the right tool

The LLM dependency is the first limit. Every differentiated feature (the daily consensus from collected articles, the per-stock report, the portfolio inspection) is an AI call over aggregated data. The README does not name a model provider, an API key variable, or a token budget, so the cost and rate-limit profile of a full portfolio run is unknown from the documentation. Ten holdings means ten full per-stock analyses plus a portfolio synthesis.

The second limit is data-source fragility. The aggregation layer depends on 开盘啦, 东方财富, 新浪 and 财联社. These are third-party endpoints that can change shape or block clients without notice. The README's answer is degraded-state reporting, which tells you something went wrong but does not give you a fallback source. A scoring run on partial data is still a scoring run.

The third is the licence, and it is a genuine ambiguity rather than a detail. The repository metadata reports NOASSERTION. The README badge says Non-Commercial. Those two statements do not agree, and neither is a full licence text in what is shown here. Anyone planning to use the analysis output inside a commercial workflow needs to read LICENSE directly rather than trust either label.

Finally, the README is a feature document, not an operations document. Rollback, migration between releases, and what happens to the local research cache when the schema changes are not covered. Three releases shipped between 2026-09-06 and 2026-09-16, which is a fast cadence for something with a persistent local store.

How easy-stock differs from a Python quant stack

The obvious alternative for someone who wants programmatic A-share analysis is a Python stack: akshare or Tushare for data, pandas for the domain model, and a notebook or a small scheduler for the recurring jobs. The difference is where the work happens. In a Python stack you write the domain model yourself, and the 连板 ladder, 晋级率 and theme-breadth calculations are your code to maintain. easy-stock ships those as a fixed domain model behind a UI, which means less code to write and less freedom to change how sentiment or relative strength is defined.

The second difference is the interface. A notebook gives you a dataframe and a chart you control. easy-stock gives you a desktop application with a market overview, a theme radar, a per-stock report and a portfolio inspection, each with its own layout and its own AI entry point. If your research habit is exploratory scripting, the desktop shell adds a layer between you and the numbers. If your habit is reading screens every evening and writing notes, the shell is the point.

The third is the archive. easy-stock stores articles, summaries, sentiment history and analysis records locally as a research memory, and the README frames the daily loop as accumulating that memory over time. A notebook does that too, but only if you build the storage layer. That is the trade: easy-stock gives you the storage and the model, and takes away the ability to redefine either without forking.

Release cadence, upgrade cost and the licence question

The last push to the repository was on 2026-09-16, and v1.2.0 was released the same day, four days after v1.1.0 and ten days after v1.0.0. That is three releases in ten days, which reads as early-stage iteration rather than a settled product. For an application that keeps a local research cache, sentiment history and model sessions, a fast release cadence raises a concrete question the README does not answer: whether the local store is migrated on upgrade or whether you are expected to clear it. The repository has a ROADMAP.md and a CONTRIBUTING.md, so the project is organised, but neither is summarised in the README shown here.

On licensing, the repository reports NOASSERTION while the README badge says Non-Commercial. Those are different signals. NOASSERTION means the repository metadata does not assert a recognised licence; a Non-Commercial badge implies a custom or non-standard licence that restricts commercial use. The practical consequence is that the terms governing redistribution, modification and commercial use are not established by either label, and the actual text in LICENSE is the only thing that settles it. This is not legal advice; it is a statement that the two visible signals conflict and that anyone building on easy-stock commercially should read the file.

Editorial conclusion

easy-stock suits individual A-share traders who already read 涨停 pools, 连板 ladders and 题材 rotations and want those signals collected, scored and archived on their own machine, and who are willing to build a Go plus Electron stack from source. It is the wrong tool for anyone wanting a hosted service, a US or Hong Kong equity screener, or a documented one-click installer, because the README links to a release page but does not describe packaging or signing. Before adopting, verify three things: the terms in LICENSE, since the repository reports NOASSERTION while the README badge says Non-Commercial; whether the Go backend starts on A_STOCK_ADDR=127.0.0.1:20081 with your data sources reachable; and how the app behaves when a source such as 开盘啦 or 财联社 is unavailable, since the README promises degraded-state reporting but does not document the failure path.

Frequently asked questions

What is easy-stock?

It is an A-share market analysis and AI research desktop application for individual investors, built as an Electron app with a Go backend and a React frontend. The README describes it as a local-first workbench that aggregates quotes, themes, limit-up data and news, then runs LLM analysis over the collected evidence.

Is easy-stock a good easy stock app for beginners?

The README does not present it as a beginner tool. Its features assume familiarity with A-share mechanics such as 涨停 pools, 连板 ladders, 晋级率 and 题材 rotation, and the documented setup path is a Go plus Node build from source rather than a guided installer.

Does easy-stock relate to Goeasy stock or the EASY ETF?

No. easy-stock is a desktop research application for the Chinese A-share market from the jundizhou/easy-stock repository. Goeasy and the EASY ETF are unrelated listings, and the README makes no reference to either.

Official sources

  1. Issues
  2. jundizhou/easy-stock on GitHub
  3. README
  4. Releases
Community notes

Community notes