
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
@marculosus/local-pg
Advanced tools
Global CLI tool to run PGlite as a PostgreSQL-compatible server with wire protocol support
A global CLI tool that runs PGlite as a PostgreSQL-compatible server. Connect with any PostgreSQL client using standard connection strings!
# Install globally from npm
npm install -g local-pg
# Now you can use it anywhere
local-pg --help
# Install locally in your project
npm install local-pg
# Use with npx
npx local-pg --help
# Quick start with in-memory database
local-pg
# Development mode with debug output
local-pg --db=memory:// --debug=1
# Persistent database
local-pg --db=./my-database
# Custom port and host
local-pg --port=5433 --host=0.0.0.0
# Using psql
psql -h localhost -p 5432 -U postgres template1
# Connection string format
postgres://postgres@localhost:5432/template1
local-pg [options]
# Alternative command
pg-local [options]
| Option | Description | Default | Example |
|---|---|---|---|
--db=<path> | Database path | memory:// | --db=./data/mydb |
--dbname=<name> | Custom database name | template1 | --dbname=mydb |
--port=<port> | Port to listen on | 5432 | --port=5433 |
--host=<host> | Host to bind to | 127.0.0.1 | --host=0.0.0.0 |
--debug=<level> | Debug level (0-5) | 0 | --debug=1 |
--version, -v | Show version | - | --version |
--help, -h | Show help | - | --help |
| Option | Description | Use Case |
|---|---|---|
memory:// | In-memory database | Development, testing, temporary data |
./data/mydb | File-based storage | Persistent data, production use |
/absolute/path | Absolute path | Custom storage location |
# Quick development setup
local-pg --db=memory:// --debug=1
# Custom database name
local-pg --dbname=myappdb
# Persistent database on custom port
local-pg --db=./data/myapp --port=5433
# Bind to all network interfaces
local-pg --host=0.0.0.0
# Production-like setup
local-pg --db=/var/lib/pglite/myapp --port=5432 --dbname=production
# Show version
local-pg --version
# Get help
local-pg --help
import pg from 'pg';
// Connection string approach
const client = new pg.Client('postgres://postgres@localhost:5432/template1');
await client.connect();
// Config object approach
const client = new pg.Client({
host: 'localhost',
port: 5432,
database: 'template1',
user: 'postgres'
});
await client.connect();
const result = await client.query('SELECT * FROM users');
console.log(result.rows);
export PGHOST=localhost
export PGPORT=5432
export PGDATABASE=template1
export PGUSER=postgres
# Now you can use psql without arguments
psql
.env fileThe server automatically creates a sample users table with test data:
-- View sample data
SELECT * FROM users;
-- Insert new data
INSERT INTO users (name, email) VALUES ('Your Name', 'your.email@example.com');
-- Check PostgreSQL version
SELECT version();
-- List all tables
\dt
You can also use this package programmatically in your Node.js applications:
import { startPGliteServer } from 'local-pg';
// Start server programmatically
const server = await startPGliteServer({
db: './my-app-db',
dbname: 'myappdb', // Custom database name
port: 5432,
host: 'localhost',
debug: 1
});
console.log('Connection string:', server.connectionString);
// postgres://postgres@localhost:5432/myappdb
// Use the database
const result = await server.db.query('SELECT * FROM users');
console.log(result.rows);
// Stop the server
await server.stop();
To publish this package to npm (for package maintainers):
# 1. Update version in package.json
# 2. Build and test
npm test
# 3. Login to npm
npm login
# 4. Publish
npm publish
# 5. Users can then install globally
npm install -g local-pg
If you want to contribute or modify this package:
# Clone the repository
git clone https://github.com/kalib-code/local-pg.git
cd local-pg
# Install dependencies
npm install
# Test locally
node bin/local-pg.js --help
# Link for global testing
npm link
local-pg --help
# Test the package
npm test
⚠️ PGlite supports only ONE connection at a time. If you get "connection refused" or "too many clients" errors, make sure no other client is connected.
memory://): Data is lost when server stops./data/mydb): Data persists between restarts# Make sure the server is running
node server.js
# Check if port is already in use
lsof -i :5432
# Only one client can connect at a time
# Close other connections (psql, DBeaver, etc.)
# Restart the server
# Make sure no other PGlite instance is using the same database file
local-pg/
├── package.json # Package configuration
├── index.js # Main module exports
├── bin/
│ └── local-pg.js # CLI executable
├── custom-handler.js # Low-level socket implementation
├── test-client.js # Connection test utility
├── test-custom-db.js # Custom database name test utility
├── README.md # Main documentation
├── CUSTOM_DB.md # Custom database name documentation
├── CUSTOM_DB_FEATURE.md # Detailed feature documentation
├── LICENSE # MIT License
└── .gitignore # Git ignore rules
After publishing to npm, users can install globally:
# Install from npm
npm install -g local-pg
# Use anywhere
local-pg --db=./myproject --port=5433
git checkout -b my-featureMIT License - see LICENSE file for details.
FAQs
Global CLI tool to run PGlite as a PostgreSQL-compatible server with wire protocol support
We found that @marculosus/local-pg demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.