Skip to content

Releases

0.9.3

Choose a tag to compare

@github-actions github-actions released this 14 Nov 15:58

Changed replies: digikey_get_part finds part numbers several makers sell, adds a not-found hint, and gives the daily-limit reset time.

  • digikey_get_part now finds numbers several makers sell, including LM358DR, NE555DR, BSS138 and AO3400A, which returned "Part not found". It returns one listing per maker, most stock first. Each lookup uses one DigiKey keyword search; the all-digit retry's second request is gone. DigiKey part numbers still select the packaging asked for.
  • A number with no exact match now has a hint suggesting the DigiKey part number (usually ending in -ND); a miss for a number already ending in -ND has no hint.
  • The DigiKey daily-limit error now gives the reset time without a request count, with the same self-hosting and jlc_search advice.

0.9.2

Choose a tag to compare

@github-actions github-actions released this 14 Nov 13:35

Changed replies: jlc_search for header lengths, queries with two mm lengths, and part numbers that start with digits.

  • A part number that starts with 7 or more digits (Würth 9774025151R and 61300211121, Amphenol 10118194-0001LF) is a part number, searched on its own like STM32F103C8T6, with the query's other words in parsed.detected.not_searched. 9774025151R M2.5 spacer had searched both words; the listing doesn't say M2.5, so nothing matched and the retry dropped the part number too, returning 534 unrelated standoffs. It now finds the spacer, and an unknown part number with a part type returns nothing rather than other parts. Whole numbers with a unit (4700000 ohm, 1000000uF) are still values; packages and LCSC codes are unaffected.

  • Pin and female header searches take named lengths: insulation height 5mm (also body or plastic height), mating pin length 6mm and tail length 3mm filter those attributes, and at least, over, under, at most or a sign set the comparison. pin header 1x16P 2.54mm insulation height 5mm had read 5mm as a second pitch and found nothing.

  • A query searches one pitch. Every N mm reads as a pitch, and two different pitches can never both match, so pin header 2.54mm 5mm found nothing; now it searches 2.54mm and parsed.detected.not_searched says why 5mm was left out. With strict=true the second pitch is an unsupported constraint.

  • Insulation Height, Length of Mating Pin and Length of End Connection Pin are numeric, so spec_filters can use >, < and ranges on them (Insulation Height > 2.5mm was ignored). = on them allows 1%, as on Height and Diameter, so = 5mm also matches 5.04mm.

0.9.1

Choose a tag to compare

@github-actions github-actions released this 13 Nov 21:18

Changed replies: jlc_search for part numbers that end in R, k or M. Self-hosters: a new HTTP_HOST setting.

  • A part number that ends in a unit letter is searched as a part number. jlc_search("9774025151R") read the Würth spacer's number as a 9.77 GΩ resistance, searched chip resistors and found nothing; with strict=true it returned an error. A value now has at most 4 significant digits before a one-letter unit (1000R, 4R75 and 4k7 are unchanged, and spelled-out units such as 12345 ohm are always a resistance). The search finds C7496631.
  • The new HTTP_HOST setting chooses the address the server listens on: 127.0.0.1 or ::1 keeps it on this machine, :: listens on every IPv6 interface, and a specific address listens only there. The default stays 0.0.0.0, every IPv4 interface, which also lets other machines on the network connect to a server run from source. An empty value counts as unset. In Docker keep 0.0.0.0: docker-compose.yml already publishes the port on 127.0.0.1 only. Contributed by @plaes in #23.

0.9.0

Choose a tag to compare

@github-actions github-actions released this 12 Nov 21:33

Changed replies: sensor_recommend (every record re-checked: voltages against makers' datasheets, descriptions, identities, measures), get_design_rules (33 files audited, 5 new topics), board_get data on 295 boards, board_search ranking and tags, jlc_get_pinout on some multi-unit symbols, jlc_find_alternatives with library_type and has_easyeda_footprint, cse_search and cse_get_kicad, and holder searches. Snapshot prices in jlc_search and jlc_get_part(mpn=...) are refreshed weekly, given as prices_as_of. New tool: jlc_stock_history. /mcp/stats gains fields. Self-hosters building from source: the catalog moved to data/catalog/.

Breaking

  • The catalog snapshot's prices are refreshed weekly; stock stays daily. jlc_search results and jlc_get_part(mpn=...) matches show the 1-piece price from the latest weekly refresh, and their replies add prices_as_of next to data_as_of. A part listed since that refresh has the price it was first scraped with. Prices barely move day to day: of 340,172 price changes between the 2026-11-09 and 2026-11-10 scrapes, 261,362 were under 0.05%, and storing them cost the repository 2.3 MB a day. jlc_get_part(lcsc=...) and jlc_stock_check are still live.

  • The committed catalog moved from data/categories/*.jsonl.gz to data/catalog/: one uncompressed file per subcategory with each part's fields except stock and price, sorted by LCSC code, plus stock.tsv and prices.tsv for every part. Git stores only the rows that change, so a daily data commit adds about 1 MB instead of about 25 MB (the repository had grown to 6.75 GB, 6.6 GB of it old catalog copies). The old copies stay in the history, so existing clones and forks keep pulling as before; the README now clones with --depth 1, about 80 MB instead of about 7 GB. scripts/build_database.py reads the new layout and builds the same database; anything else that read data/categories/ needs updating.

  • Calculated CO2 is no longer listed under measure="co2": ENS160, SGP30, iAQ-Core and APC1 moved to eco2, because their makers say the value is estimated from VOC, hydrogen or ethanol signals. BME680 and BME688 note that Bosch's BSEC library calculates IAQ and CO2 equivalent on the host (the separate BSEC software records left the catalog, below). Real CO2 sensors stay, and SEN6x stays with a note that only SEN63C, SEN66 and SEN69C have a CO2 sensor.

  • ENS160 is no longer listed under humidity, pressure or temperature: it only takes humidity and temperature as compensation inputs, and the pressure tag came from the BME280 on a SparkFun combo board.

  • ENS160, ENS161 and the ScioSense ENS16x library record list voltage 1.71-1.98V, the chips' VDD. They listed 1.71-3.6V or 1.8-3.6V, which is the separate VDDIO range, so a 3.3V supply read from the old value would exceed the 1.98V maximum.

  • 23 records that aren't sensors left sensor_recommend, each checked against its maker's or project's documentation: number (an ESPHome platform tagged with 13 measures), ESPHome software and appliance integrations, a USB PD controller, a stepper driver, I/O expanders, an analog mux, an RF transceiver, ion generators, and a co2 record that merged several unrelated libraries.

  • SM300D2 moved from co2 to eco2: its parameter table says the CO2 and formaldehyde outputs are equivalent values of TVOC. Its maker is now Generic (it was credited to Amphenol, with no source) and its voltage 4.8-5.2V.

  • iAQ-Core lists voltage 3.2-3.4V (ams datasheet: 3.3V ±0.1V); it listed 3.0-5.5V, so a 5V supply looked safe. MAX32664 lists VDD 1.71-3.63V (was 1.8-3.3V).

  • ADCs stay in sensor_recommend but appear only under what they measure. General-purpose ADCs (AD7194, ADS122C04, MCP3427, TLA2021, ADC128D818, ADS1258) are listed under voltage. They are no longer under sound, weight or force, which came from library text saying "low noise", "Iowa Scaled Engineering" and "PGA/FSR". Load-cell, thermocouple, RTD and ECG front ends (HX711, NAU7802, MAX31855, MAX31865, ADS1292R) keep their measures.

  • MAX32664 sensor hubs are no longer typed photodiode or listed under acceleration, and carry a capability_note naming the front end each version needs. MAX30001 and MAX30003 ECG front ends are typed adc instead of photodiode.

  • Records for different parts are no longer merged. sensor_recommend merged 109 part names into another part's record, and 77 of those were in use, so a part showed another's datasheet, supply range or measures: MH-Z19 carried MH-Z14A's datasheet, MPU6500 had MPU6050's supply range, LSM9DS0 had LSM9DS1's 1.9V minimum (ST: 2.4V), six different ST IMUs (LSM6DS3, DSL, DSO, DSR, DSV16X, DSV16BX) were one LSM6DSOX record, DS18S20 was DS18B20, and MAX30105, a smoke-detection part, put particulate on MAX30101. Each is now its own record, with its own voltage from the maker's datasheet where one was checked and none otherwise; family records (SHT3x, SCD4x, BME68x) no longer absorb concrete models. 27 names that really are the same device (AM2302 for DHT22 and the like) stay merged; every decision and its evidence is in data/sensors/ic_alias_evidence.json.

  • Every sensor record's supply voltage (all 1,701) was reviewed against its maker's datasheet or product page, and 782 of those 0.8.24 also had differ, including 171 that 0.8.24 left empty (BMA456, ICM-42688-P, ZED-F9P, TMF8806, LD2416 and others). 222 are empty, each with its reason recorded: 154 parts have no supply of their own (photoresistors, thermopiles, electrochemical cells, RTDs, load cells, heated gas elements whose heater and sensing-loop ratings aren't a supply) or the stored number wasn't a voltage (MRT511's 45 is a noise density, ME4-NO2's 10 a resistance), 62 have no maker or vendor source that states one, and 6 are families whose members differ (LSM6DS, MH-Z19). MH-Z19 no longer borrows a model's supply. AS7341 and AS7343 run on 1.7-2.0V and 1.7-1.98V (listed 1.7-3.6V), BMM350's VDD is 1.72-1.98V (1.62-3.6V), Acconeer A111 1.71-1.89V (1.8-3.6V), HLK AS201 2.2-5.5V (12V), Senseair K30 5.0-9V, its preferred range (4.5-14.0V, its absolute rating), ADS1293 2.7-5.5V (1.7-3.6V); minimums the catalog rounded to 1.7V are the makers' 1.71V. 39 parts sold in separate supply versions or with separate modes list each, e.g. AS5600 "3.0-3.6 or 4.5-5.5" and MLX90614 "2.6-3.6 or 4.5-5.5"; a record covering several chips gives the range all of them support (TMP11x 1.9-5.5V, which TMP116 needs). PZEM-004T lists the 5V its TTL interface needs, with a note that it runs from the 80-260VAC line it measures, and KY-040 lists 3.3 or 5V, because its outputs are pulled up to whatever powers it. Each checked value and its source is in data/sensors/curated.json.

  • Sensor records missing their sensing technology, interfaces or maker were filled from makers' and module vendors' pages. type is now empty on 19 records (132 in 0.8.24), protocols on 4 (120) and manufacturer on 10 (59). What stays empty is a module combining several technologies (SEN54/SEN55, HW-290, body-composition modules), a part whose maker names no technology (HSCDTD008A), or a part no source attributes to a maker. The four without protocols are lidars with only an Ethernet port (Benewake Horn-RT, Horn-X2-Pro; the catalog has no Ethernet tag) or no documented interface (COIN-D4, Delta-2D). Types follow one rule per technology: silicon piezoresistive pressure dies are mems, silicon light and proximity detectors photodiode, GNSS receivers rf. Magnetic sensors and encoders typed Hall-effect without a source now carry their makers' technology: HMC5883L, HMC6343, HMC6352, QMC5883L/P, MMC56x3, MMC5983MA and BMM350 are magnetoresistive (AMR or TMR), RM3100 magneto_inductive, FG-3+ fluxgate, AMT25 capacitive, KY-040 a mechanical encoder and BM32S2031-1 an optical proximity module; Alps names no technology for HSCDTD008A, so it has none; AS201 is mems (it was imu, a device class), BMH05104 was credited to Holtek (it is Best Health's four-electrode BMH05104-2), the GROW fingerprint record now names R307, R503 and ZFM-20, and HWT901B's description was a Vietnamese library summary.

  • The monthly sensor scrape would have dropped about 50 parts over its next three runs. 0.9.0 stopped reading "IMU", "6-axis" and "9-DoF" as accelerometer and gyroscope keywords, because they gave magnetometers a gyroscope. After that, libraries described only that way (LSM6DSV16X, ICM-42688, BMI088, ADIS1647x, QMI8658A and others) and general-purpose ADCs got no measures and were skipped as non-sensors. Their reviewed entries would then have failed the catalog build that gates the scrape. Such wording now still means an accelerometer and gyroscope when the text names no inertial or magnetic sensor, and a nine-axis part always has a gyroscope. Zephyr bindings whose trimmed description names no measure (ICM-42686, MAX32664C) and the ADCs have their measures set explicitly. A live scrape of all 14 sources finds every one of them again.

  • LD2410 and LD2412 keep light. The Hi-Link modules have a photodiode whose reading ESPHome exposes, but ESPHome dropped the entity's device class on 6 November, and the scraper keyed on it, so the next scrape would have removed light. A part a scrape no longer finds is dropped at once when every one of its pages answers 404, instead of staying listed for three more scrapes: the MicroPython SN-GCJA5 driver's repository was deleted, so SN-GCJA5 stops claiming MicroPython support.

  • Winsen products the scraper couldn't classify were listed as gas sensors, as in 0.8.24: its piezoelectric vibration sensors (WAP01, WAV01-WAV05, EA-134, WVV01, WVI01, WAI01), the ZH401 light sensor, conductivity probes, and residual-chlorine and aerosol monitors. They are now listed under what they measure, and Winsen's ion generators are skipped.

  • Sensor descriptions use plain punctuation: full-width brackets, commas and tildes, invisible spaces and subscript digits from maker pag...

Read more

0.8.24

Choose a tag to compare

@github-actions github-actions released this 09 Nov 15:55

Changed replies: jlc_search results for repeated = filters on range specs, battery holders and the words adjustable, variable and fixed; digikey_get_part misses on all-digit numbers.

Breaking

  • Repeated = filters on a range-listed spec now keep range matching: each value matches what it would alone, and the filters still mean any of the values. LDOs with Output Voltage = 3.3V and = 5V went from 4,793 parts to 6,281, because adjustable parts such as C75510 (1.2V~37V) were being left out. Supply Voltage and Vin still require a part to cover every value. The rule is now in the spec_filters description.
  • "battery holder", "cell holder", "coin cell holder" and "button cell holder" are now a part type covering the five subcategories holders are filed under; in Battery accessories only listings that say "holder" match. battery holder went from 188 parts to about 660 and coin cell holder from none to about 400.
  • In a holder search, AA, AAA, C, D, No. 1/2/5/7, 14500, 10440 and coin or button cell match the size in the part's text, as Battery Size in filters_applied.spec_filters. AA no longer returns AAA-only holders, 14500 finds AA holders, and D returns no parts because none is stocked.
  • "adjustable", "variable" and "fixed" stay search words when the query names no part type or model. They used to add an Output Type filter, which turned adjustable battery holder into DC-DC converters.
  • digikey_get_part retries an all-digit number its lookup misses with DigiKey's keyword search, which costs one more request and keeps exact manufacturer part numbers only, so Keystone 209 is found. Several makers' parts can come back. A number still not found adds hint.

Fixed

  • A single letter joined by a hyphen stays attached to its word: BH-D searched BH and returned 889 unrelated parts. It now matches that prefix only, and finds nothing because no part has it.

0.8.23

Choose a tag to compare

@github-actions github-actions released this 08 Nov 17:41

Breaking

  • Inductor alternatives with unknown or differing Isat criteria, rating bases, or thermal-current conditions now appear in unverified_alternatives, with explicit unchecked requirements. They no longer drive a verified recommendation, savings comparison, or compatibility_verified=true. DCR comparisons require comparable published rating bases. Multi-diode forward-current comparisons also remain unverified when loading/thermal conditions aren't established.
  • Part results can include spec_evidence (reviewed manufacturer values, conditions, document identity, printed page and source URL), spec_discrepancies (catalog versus document claims), and no_datasheet_note (the flag applies to JLCPCB only). Catalog specs and numeric search/sort values are preserved.
  • Negative output-voltage queries/filters preserve polarity, including catalogs with unsigned values plus Negative configuration. Ferrite impedance filters with a frequency require that condition (including OR alternatives and natural-language requests). Negated part-number searches return an explicit unsupported-exclusion error instead of selecting the excluded identity.
  • Empty searches can return why_empty: bounded local library/package/stock counterfactuals with retained constraints, exact/lower-bound counts, next calls and completeness. Original results remain empty. Diagnostic work uses a private read-only connection, at most three queries, a 200 ms deadline, two million SQLite steps and 5,000 post-filter rows. No automatic external calls.
  • Local part results carry data_source with snapshot observation time; live lookup results retain their observation time through caching. MPN misses explicitly describe the local snapshot and offer an unexecuted next_call to jlc_stock_check(min_stock=0); availability beyond the snapshot stays unknown. MPN hits also return data_as_of.
  • Sensor data excludes generic MCU/platform identities such as RP2040. CCS811 exposes eco2 instead of co2; humidity/temperature are compensation inputs, not its direct measurements. It includes capability/voltage evidence and the 1.8–3.3 V operating range (3.6 V is a stress limit). Description merging prioritizes device/integration sources over breakout prose, preventing SCD4X from inheriting an all-in-one board's capabilities. Other families still need individual capability audits.
  • Alternatives savings preserve the legacy $3 numeric basis but explicitly label it a rounded Economic loading-fee estimate: is_estimate, assembly_service_assumption, loading_fee_per_extended_type_estimate_usd and fee_basis. It is not a current quote or a Standard assembly fee calculation.

Fixed

  • C53308978's catalog DCR is 20 mΩ, but SOREDE SRD-WI-22770 Rev A (2024-06-14), printed p.2/8, specifies 27 mΩ maximum. The discrepancy is annotated at runtime, independently of daily catalog rebuilds. Its 8.5 A typical Isat at 30% inductance drop cannot verify equivalence to C913245's 8.5 A at 20% drop. Reviewed evidence accompanies both parts.
  • C2500 (Nexperia BAV99,215) now explains multi-diode loading conditions and carries the manufacturer's 215 mA single-loaded and 125 mA per-diode both-loaded limiting values (BAV99 v.9, Table 5). Multi-diode listings warn about loading and thermal conditions; single-diode listings do not receive that warning. If >= 150mA still filters the catalog's 125 mA value.
  • Isat and diode-current sorting explain the missing comparison conditions. Missing-datasheet flags explicitly refer to JLCPCB's listing, even when LCSC has a copy. The response builder also enforces the unverified-candidate boundary, and confidence reports unchecked requirements from those candidates.
  • Component scrapes finish retries in a private staging directory before history generation or category publication. Incomplete/tripped runs fail without replacing published data; progress remains resumable. Publication I/O errors roll back completed replacements and retain staged output. Final checks reject remaining failed subcategories, inconsistent counts, >5% total drops and >30% drops in previously 1,000+ part categories. The existing explicit manual drop override applies to count thresholds only.
  • The component workflow reuses the same manifest validation before commit/deploy. No workflow was executed as part of local verification.
  • Fixed a deprecated class-scoped test fixture. Removed completed and duplicate planning documents; remaining deferred work stays in a local, uncommitted backlog.

0.8.22

Choose a tag to compare

@github-actions github-actions released this 07 Nov 13:42

Changed replies: get_design_rules text for voltage supervisors.

Fixed

  • Voltage-supervisor rules that had open-drain RESET backwards (from a design-session report, checked against the TLV803, TPS3808 and MAX803/809 datasheets). The rule said to pull RESET up to a rail that's up before the monitored rail, never to the monitored rail; TI's TLV803 application and Maxim's MAX803 datasheet pull up to the monitored rail, and Maxim warns that a pull-up to another rail drives RESET high while the supervisor is below 1 V. It said an open-drain output can't discharge a capacitor on RESET; an asserted output is a low-impedance sink, and the real limits are its current rating (5 mA on TLV803 and TPS3808) and the RC release delay. TPS3808 and MAX809 were said to hold RESET low below 0.6 V; they're valid down to 0.8 V and 1 V. The 100 kohm pull-down fix applies to push-pull outputs such as MAX809; beside an open-drain pull-up it only forms a divider. The 4.7 kohm default is now the datasheet's range (10 kohm-1 Mohm on TLV803 and TPS3808).

0.8.21

Choose a tag to compare

@github-actions github-actions released this 06 Nov 17:23

Changed replies: get_design_rules text for EMC, DFM, I2C and USB.

Fixed

  • Design rules that were still wrong (from a follow-up review of 0.8.20, each checked against its source). The EMC guide put Murata NFE61P filters on MIPI camera lanes and called them 0603 pi filters; NFE61P is a 6.8 x 1.6 mm single-circuit T filter made for DC power lines, and Murata's MIPI D-PHY note recommends DLM common-mode filters, which keep both the differential and single-ended signals intact. TDK MAF is an audio-line filter, not a USB/HDMI part. DLW21HN was called a > 5 Gbps choke, but DLW21HN900SQ2 is Murata's USB 2.0 part; signal-line chokes are now chosen by cutoff frequency from Murata's charts, with sizes in mm (Murata's codes mix inch 0805 with metric 1210/0806/0605; inch 1210 is a 3.2 x 2.5 mm footprint). TDK ACM2012H's commercial version was discontinued in 2019. The I2C rule "2.2 kohm for 400 kHz or > 200 pF" gives a 373 ns rise at 200 pF, over the 300 ns limit; 400 kHz at 200 pF needs 967 ohm-1.77 kohm (3.3 V), and the worked example's "use 1.8 kohm" was over its own 1.77 kohm maximum. The 5 V minimum was 1.5 kohm, under the 1.53 kohm limit. JLCPCB Economic reflow is 255 +/- 5 C, so up to 260 C, and Standard is 240 +/- 5 C. TI's MCU-pin resistor note now also says TI ranks fast parallel ports, such as external-memory buses, high for filtering.

Changed

  • A new test recomputes the I2C pull-up worked examples in the rule files.
  • Each version is now published as a GitHub release, tagged vX.Y.Z, with its changelog entry as the notes. Self-hosters can watch the repository's releases to hear about new versions.