Search for Parts ⋅ tscircuit ⋅ discord
This is an in-stock parts search engine for JLCPCB parts. It also features an easy-to-use API (just add ".json")
Play with it at jlcsearch.tscircuit.com
You can go on any page and click "json" in the top right corner to automatically convert whatever filter you've made to a JSON query.
curl https://jlcsearch.tscircuit.com/resistors/list.json?package=&resistance=1k
# {
# "resistors": [
# {
# "lcsc": 21190,
# "mfr": "0603WAF1001T5E",
# "package": "0603",
# "resistance": 1000,
# "tolerance_fraction": 0.01,
# "power_watts": 100,
# "stock": 31485061,
# "price1": 0.000814286
# },
# {
# "lcsc": 11702,
# "mfr": "0402WGF1001TCE",
# "package": "0402",
# "resistance": 1000,
# ...
Prerequisites & Notes: The automation scripts in this repo are only set up for macOS and Linux development. The setup command below will fail if run on Windows, but no worries, you can simply use WSL (although it may be very slow). Bun is required, so follow the Installing → macOS and Linux instructions here (same for WSL).
Run bun i
then bun run setup
to download the necessary dependencies and vendor data (be aware this can take a while),
you can then run bun run start
to start the server.
All the routes are in the routes
folder. If you want to add a new page/table,
you can do the following:
- Create a new "derived table" inside
lib/db/derivedtables
, referencedocs
to understand the structure and available properties for different components - Run
bun run scripts/setup-derived-tables.ts --reset led_driver
(ifled_driver
is the name of the table you're adding) - Run
bun run generate:db-types
to generate the new table types - Create a new route inside
routes
to represent the page - Add the new route to the
routes/index.ts
file - Make sure to run
bun run format
AI is incredibly good at performing every step in the process above, end to end. I recommend using aider and adding docs, lib, routes and scripts folders to the context.
As a developer new to this codebase, or a curious user, you may have some questions about the flow of data through the scripts and automations inside this repo. It all starts with the jlcparts project, which compiles a massive 11GB sqlite3 database of everything JLCPCB has to offer. As you can imagine, this would be very resource-intensive and slow to search, so the next steps are scripts that optimize it heavily, although it's more accurate to say that they rebuild it entirely.
scripts/setup-db-optimizations.ts
and scripts/setup-derived-tables.ts
show the various optimizations that are performed, including:
- Removing stale components that haven't been in stock for over a year.
- Only keeping categories of components that we are currently interested in and have a schema defined for (see the corresponding component types in
lib/db/derivedtables
for examples). - Adding columns for traits that we care about such as price, stock level, and basic/ preferred status (to save on assembly costs).
The result is db.sqlite3
which presently comes in at under 2GB in size.
If you wish to use some data that exists in the jlcparts database but is not yet being brought over to the optimized db.sqlite3
, you can look at the originating database to get familiar with it and find the data structures you wish to bring over. An easy way to do this can be: after you have run bun run setup
and it has completed, the cache zip archive files are still located at ./buildtmp
- simply unpack these yourself (preferably into a separate directory outside of the project) and there is your 11GB cache.sqlite3
database to look at.
To recap:
- If you wish to use additional component data (like the basic/ preferred status) that exists in jlcparts, it won't be in the optimized
db.sqlite3
(and thus jlcsearch won't know about it) until you add it via a script inlib/db/optimizations/
and then call it inscripts/setup-db-optimizations.ts
. You should then dobun run setup
again to rebuild the optimized database with your new data. - If you wish to add additional component types (like gyroscopes or Molex connectors) you would need to set up a new schema for them in
lib/db/derivedtables
and then dobun run generate:db-types
to generate the new table types as per the Development section above.
None of this would be possible without JLCPCB and the work jlcparts project.