npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

studyci

v0.3.0

Published

CI and linting tools for collaboratively maintained study materials and certification question banks.

Downloads

433

Readme

StudyCI

StudyCI lints YAML and Markdown study materials, certification question banks, and flashcards.

Deterministic checks run locally and in CI without network access. Optional semantic review uses a local Ollama model.

日本語

Install

npm install -g studyci

Or run it with npx:

npx studyci check ./questions

Node.js 20 or later is required.

Check study content

studyci check ./questions

StudyCI currently checks:

  • YAML and Markdown parsing
  • required fields
  • duplicate IDs
  • exact duplicate question text
  • duplicates across files
  • missing source when the input format supports source references
  • invalid tags when the input format supports tags
  • undeclared categories when the input format supports categories
  • category counts when categories are available

A check exits with status 1 when an error is found. Warnings do not fail the command.

Supported input formats

StudyCI auto-detects supported formats during loading.

Native StudyCI YAML

questions:
  - id: network-001
    question: What is the default HTTPS port?
    answer: "443"
    source: RFC 9110

A top-level YAML array of question objects is also supported.

Native StudyCI Markdown

## network-001
Question: What is the default HTTPS port?
Answer: 443
Source: RFC 9110

QUIZR-style YAML

QUIZR-style YAML maps top-level question IDs to prompt and answer fields:

q_001:
  prompt: What is the name of OSI Layer 1?
  answer: Physical

QUIZR IDs are treated as file-scoped because the format commonly reuses identifiers such as q_001 in different files. Checks that depend on source, category, or tags are skipped for QUIZR documents because those fields are not part of the format.

Directory scans

You can scan a directory or the repository root:

studyci check .

Recursive scans ignore these directories by default:

  • .git
  • .github
  • node_modules
  • dist
  • coverage

Unrelated YAML and Markdown files are skipped during directory scans. If a file is passed explicitly, StudyCI treats it as input and reports an error when it does not contain a supported study document.

Output formats

Text output is the default:

studyci check ./questions

JSON output:

studyci check ./questions --format json

GitHub Actions annotations:

studyci check ./questions --format github

StudyCI reports source line numbers when the active input adapter can determine them.

GitHub Action

- uses: yushi0405/[email protected]
  with:
    path: questions

The action runs deterministic checks and emits errors and warnings as GitHub annotations. Ollama review is not run by the action.

Local AI review

Semantic review is optional and runs against a local Ollama endpoint.

Default model: qwen3.5:9b

ollama pull qwen3.5:9b
ollama serve
studyci review ./questions

Specify a model or endpoint directly:

studyci review ./questions \
  --model qwen3.5:9b \
  --base-url http://127.0.0.1:11434

The current AI review reports warnings for:

  • semantic duplicates
  • ambiguous questions
  • obvious question/answer mismatches

It does not perform external fact checking.

Use --quiet to print findings without progress output:

studyci review ./questions --quiet

JSON output is also available:

studyci review ./questions --format json

Configuration

Copy .studyci.example.yaml to .studyci.yaml to configure local AI review:

ai:
  provider: ollama
  model: qwen3.5:9b
  baseUrl: http://127.0.0.1:11434
  timeoutMs: 120000
  maxQuestions: 50

Native YAML example with metadata

syllabus:
  categories: [networking, security]

questions:
  - id: network-001
    question: What is the default HTTPS port?
    answer: "443"
    category: networking
    tags: [tcp, https]
    source: RFC 9110

Native Markdown example with metadata

## network-001
Question: What is the default HTTPS port?
Answer: 443
Category: networking
Tags: tcp, https
Source: RFC 9110

License

MIT