Documentation | Demo | Docker Image
Part-DB
Part-DB is an Open-Source inventory management system for your electronic components. It is installed on a web server and so can be accessed with any browser without the need to install additional software.
The version in this repository is a complete rewrite of the legacy Part-DB
(Version

Features
- Inventory management of your electronic parts. Each part can be assigned to a category, footprint, manufacturer, and multiple store locations and price information. Parts can be grouped using tags. You can associate various files like datasheets or pictures with the parts.
- Multi-language support (currently German, English, Russian, Japanese, French, Czech, Danish, and Chinese)
- Barcodes/Labels generator for parts and storage locations, scan barcodes via webcam using the builtin barcode scanner
- User system with groups and detailed (fine granular) permissions. Two-factor authentication is supported (Google Authenticator and Webauthn/U2F keys) and can be enforced for groups. Password reset via email can be set up.
- Optional support for single sign-on (SSO) via SAML (using an intermediate service like Keycloak you can connect Part-DB to an existing LDAP or Active Directory server)
- Import/Export system for parts and data structure. BOM import for projects from KiCAD is supported.
- Project management: Create projects and assign parts to the bill of material (BOM), to show how often you could build this project and directly withdraw all components needed from DB
- Event log: Track what changes happen to your inventory, track which user does what. Revert your parts to older versions.
- Responsive design: You can use Part-DB on your PC, your tablet, and your smartphone using the same interface.
- MySQL, SQLite and PostgreSQL are supported as database backends
- Support for rich text descriptions and comments in parts
- Support for multiple currencies and automatic update of exchange rates supported
- Powerful search and filter function, including parametric search (search for parts according to some specifications)
- Automatic thumbnail generation for pictures
- Use cloud providers (like Octopart, Digikey, Farnell, LCSC or TME) to automatically get part information, datasheets, and prices for parts
- Retrieve part information from arbitrary shop websites, using either conventional data extraction from structured metadata, or AI based data extraction. A browser plugin allows to quickly submit parts from any website to your Part-DB instance, and even allows to circumvent anti-bot measures on shop websites.
- API to access Part-DB from other applications/scripts
- Integration with KiCad: Use Part-DB as the central datasource for your KiCad and see available parts from Part-DB directly inside KiCad.
- MCP Server for letting AI agents and chats access your Part-DB instance to allow them to answer questions about your inventory
With these features, Part-DB is useful to hobbyists, who want to keep track of their private electronic parts inventory, or maker spaces, where many users should have (controlled) access to the shared inventory.
Part-DB is also used by small companies and universities for managing their inventory.
Requirements
- A web server (like Apache2 or nginx) that is capable of running Symfony 7, this includes a minimum PHP version of PHP 8.2
- A MySQL (at least 5.7) /MariaDB (at least 10.4) database server, or PostgreSQL 10+ if you do not want to use SQLite.
- Shell access to your server is highly recommended!
- For building the client-side assets yarn and nodejs (>= 22.0) is needed.
Installation
If you want to upgrade your legacy (< 1.0.0) version of Part-DB to this version, please read this first.
Hint: A docker image is available under jbtronics/part-db1. How to set up Part-DB via docker is described here.
Below you find a very rough outline of the installation process, see here for a detailed guide on how to install Part-DB.
- Copy or clone this repository into a folder on your server.
- Configure your webserver to serve from the
public/folder. See here for additional information. - Copy the global config file
cp .env .env.localand edit.env.local:- Change the line
APP_ENV=devtoAPP_ENV=prod - If you do not want to use SQLite, change the value of
DATABASE_URL=to your needs ( see here) for the format. In bigger instances with concurrent accesses, MySQL is more performant. This can not be changed easily later, so choose wisely.
- Change the line
- Install composer dependencies and generate autoload files:
composer install -o --no-dev - Install client side dependencies and build it:
yarn installandyarn build - Optional (speeds up first load): Warmup cache:
php bin/console cache:warmup - Upgrade database to new scheme (or create it, when it was empty):
php bin/console doctrine:migrations:migrateand follow the instructions given. During the process the password for the admin is user is shown. Copy it. Caution: These steps tamper with your database and could potentially destroy it. So make sure to make a backup of your database. - You can configure Part-DB via
config/parameters.yaml. You should check if settings match your expectations after you installed/upgraded Part-DB. Check ifpartdb.default_currencymatches your mainly used currency (this can not be changed after creating price information). Runphp bin/console cache:clearwhen you change something. - Access Part-DB in your browser (under the URL you put it) and log in with user admin. Password is the one outputted
during DB setup.
If you can not remember the password, set a new one with
php bin/console app:set-password admin. You can create new users with the admin user and start using Part-DB.
When you want to upgrade to a newer version, then just copy the new files into the folder and repeat the steps 4. to 7.
Normally a random password is generated when the admin user is created during initial database creation,
however, you can set the initial admin password, by setting the INITIAL_ADMIN_PW env var.
You can configure Part-DB to your needs by changing environment variables in the .env.local file.
See here for more information.
Reverse proxy
If you are using a reverse proxy, you have to ensure that the proxies set the X-Forwarded-* headers correctly, or you
will get HTTP/HTTPS mixup and wrong hostnames.
If the