mrkeyoor.com_
Mon 28 Sept 19:27 UTC
Dataevaluationupdated 27 Aug 2026

chinese-poetry-api review

Chinese Poetry API is a Go service that exposes a large classical Chinese poetry corpus through REST and GraphQL. Its README and operator documentation are written in Chinese, and we found no English guide; the API gives applications searchable poem, author, dynasty, and form data in simplified or traditional Chinese.

+33stars / 7d
Verdict

Our Chinese Poetry API build passed in 66 seconds, but 1 of 2 test groups failed because the SQLite runtime lacked FTS5. Use the published container when you need a self-hosted Chinese poetry search service and can verify the source text your application displays. Build from source only with the documented sqlite_fts5 tag, and choose the raw dataset instead if an API server adds no value.

We ran it

Lab card: what happened when we ran chinese-poetry-apiScreenshot of chinese-poetry-api (poetry.palemoky.com)
Install✓ · 28s122 packages
Build✓ · 66s
Tests✗ · 57s1 passed · 1 failed of 2 (go test)
Repo2384 files~18,837 lines of source · 380 MB · 3 CI workflows · Dockerfile · tests dir

Answers from our run

Does chinese-poetry-api build from source?

Dependencies installed in 28 seconds (122 packages), and the build succeeded in 66 seconds. We cloned commit 1a01896 into a clean Debian container with 3 CPUs and no project-specific setup.

Do chinese-poetry-api's tests pass?

Not all of them: 1 of 2 passed and 1 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use chinese-poetry-api?

English-only operators: the README, Makefile help, release notes, and issue discussion are primarily Chinese.

What are the alternatives to chinese-poetry-api?

Chinese Poetry, Gushici. Our Chinese Poetry API build passed in 66 seconds, but 1 of 2 test groups failed because the SQLite runtime lacked FTS5.

Setup3/5Container path is short; source tests require SQLite FTS5
Docs4/5Good API and Docker detail in Chinese, no English guide found
Community4/52,695 stars and recent issue responses and pushes
Maturity3/5Versioned API and images, but data and search gaps remain

Who it’s for

Chinese-language education, reading, quiz, and cultural projects that need structured poetry data.
Developers who want REST and GraphQL over the chinese-poetry corpus.
Self-hosters comfortable with Docker, SQLite, and Chinese documentation.
Applications that need simplified and traditional Chinese from the same service.

Who it’s NOT for

English-only operators: the README, Makefile help, release notes, and issue discussion are primarily Chinese.
Teams that need editorially verified text: open issue 51 reports multiple transcription errors in search results.
Search clients that must combine a keyword with a dynasty filter: open issue 65 says the search endpoint does not support that combination.
Users seeking a tiny embedded dataset: our checkout was 380 MB and the container downloads a database at startup.
Go developers who will ignore build tags: the integration log says full-text search requires SQLite FTS5 support.

Setup reality

Our sandbox installed 122 Go packages in 28 seconds and built in 66 seconds. Tests failed after 57 seconds: 1 passed and 1 failed of 2. The checkout contained 2,384 files and occupied 380 MB.

The container is the clearest path. It downloads the poetry database on startup, stores data in a named volume, exposes port 1279, and includes a health check. Source builds require CGO plus SQLite development files and the sqlite_fts5 build tag.

The failed integration test could not create poems_fts_zh_hans because SQLite reported no such module: fts5. The log explicitly says the binary needs FTS5 support, for example through the sqlite_fts5 tag. The project Makefile and Dockerfile include that tag.

The service exposes 371,313 poems through REST and GraphQL

Chinese Poetry API packages the chinese-poetry dataset behind a Go server. Release v0.6.0 reports 371,313 poems, 13,577 authors, and 11 dynasties in one database. REST endpoints cover poems, random selection, search, authors, dynasties, forms, statistics, and health. GraphQL offers overlapping queries with edges and total counts. Every endpoint can switch between simplified zh-Hans and traditional zh-Hant data.

The documentation is primarily Chinese, with no English README linked or present in the material we inspected. That matches the subject and likely audience, but it affects operations as much as usage. Configuration notes, command descriptions, release changes, and issue reports are also Chinese. An English-only team can infer much from code examples, yet it will miss nuance in validation rules, dataset reports, and maintenance discussion.

Full-text search depends on an SQLite build feature

Search can target all text, titles, poem content, or authors. The database keeps separate simplified and traditional tables and creates full-text indexes for them. That design avoids converting every response on demand, but it makes SQLite's FTS5 extension part of the server contract. The repository's Makefile sets CGO_ENABLED=1 and the sqlite_fts5 build tag for builds and tests.

The Dockerfile makes the same dependency explicit. Its build stage installs a compiler, musl development files, and SQLite development headers, then compiles a static Go binary with the FTS5 tag. If you replace that image with a generic go build, successful compilation alone does not prove search migrations will work. Start the server against a fresh data directory and exercise both language indexes before shipping a custom binary.

What happened when we ran it

Our sandbox installed 122 Go packages in 28 seconds. The build succeeded in 66 seconds. The checkout at commit 1a01896 contained 2,384 files, roughly 18,837 lines of source, and occupied 380 MB. It included 3 CI workflow files, a Dockerfile, a Compose file, and a tests directory.

Tests exited with code 1 after 57 seconds, with 1 passing and 1 failing group out of 2. TestGraphQLCountFields failed while migrating the simplified Chinese tables because SQLite could not create poems_fts_zh_hans. The reported error was no such module: fts5 and named the sqlite_fts5 build tag as the required support. The processor package passed in the same log.

The published container owns the database download and persistence

The shortest deployment maps port 1279 from the published image. On startup, its script downloads the compressed database, while Compose mounts a named volume at /app/data so the result survives container replacement. The image exposes a health check and defaults to rate limiting. Open and idle database connection limits can be overridden, though the Compose comments say defaults are chosen from CPU count.

That convenience adds a startup dependency on the release asset and enough storage for the corpus. Version v0.6.0 publishes a compressed unified database plus SHA256 checksums. Operators should pin the image rather than use latest, verify the downloaded asset, back up the named volume if local changes matter, and test restart behavior without network access. The 380 MB checkout from our run is another reason to distinguish source, release data, and runtime storage in capacity planning.

Query validation is stricter than search composition

The REST examples document pagination, repeated type filters, dynasty and author filters, and random selection constrained by an author, form, dynasty, or character. Unknown parameters return HTTP 400 instead of being ignored, and the shown page-size ceiling is 100. That is a useful default for clients because a misspelled filter cannot silently broaden a request.

Search has a narrower combination model. Open issue 65 asks for keyword search plus a dynasty or dynasty ID, explaining that clients currently filter those results themselves. If a teaching app needs “moon poems from the Tang dynasty,” verify whether the current endpoint can express the query before building the interface around it. GraphQL may offer a different shape, but the README's search example does not establish that combined filter.

Corpus size does not guarantee textual accuracy

The API inherits its material from the chinese-poetry project and adds classification and simplified-traditional storage. Open issue 51 reports multiple wrong characters in poems returned by keyword search and supplies an example image. One issue cannot quantify the error rate across 371,313 records, but it is enough to reject an assumption that database presence equals editorial verification.

For a reading toy or developer demo, occasional source errors may be acceptable. A classroom, quotation product, or scholarly tool needs a provenance and correction process. Keep upstream identifiers where possible, sample well-known works in both scripts, and give users a way to report mistakes. The GPL-3.0 server license and the upstream dataset's terms also deserve review before redistributing a modified database or service.

August maintenance is active, with 11 open items and pull requests

GitHub showed 2,695 stars, 11 combined issues and pull requests, and a last push on August 24, 2026. Release v0.6.0 was published on July 4. August issue activity included database connection help, an MCP request, and community applications built on the API. Those dates support active maintenance; the small combined queue is not proof that the data is error-free.

Chinese Poetry API is a focused choice when you need local REST or GraphQL access to a large Chinese corpus. The container already encodes the tricky FTS5 build requirement that broke our 57-second test run. Prefer that route, pin its version, validate representative text, and confirm your exact search combinations. If all you need is data for offline processing, the upstream corpus is simpler and avoids another service.

Alternatives

ProjectWhat it isPick it when
Chinese PoetryThe underlying Chinese poetry dataset, supplied as repository files rather than an API server.pick this instead when you want raw source data and will build your own indexing or application layer.
GushiciA narrower service that returns a random classical Chinese poetry line.pick this instead when a quote widget needs one random line and does not need full corpus search or GraphQL.

What people are saying

  1. [github-trending] palemoky/chinese-poetry-api

Sources

  1. Chinese Poetry API README
  2. Chinese Poetry API v0.6.0 release
  3. SQLite FTS5 build configuration
  4. Reported poem text errors
  5. Requested dynasty filter for search

More data reviews

polyledger · timeseries-atlas · opendataloader-pdf · data-formulator · toasty · gfwlist · the whole board →