Skip to content
sofyanox12Public

About

A self-hosted password manager with client-side encryption, passkey authentication, and simple Docker setup.

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

Credyman

Credyman is a personal vault for passwords, login details, and notes. Organize saved items into groups and categories, search your entries, and generate passwords when adding an item.

Your browser encrypts vault contents before sending them to the server. Sign in with an account password or a passkey. For extra protection, enable Account Secret and unlock with both your password and a separate secret. The security guide explains encryption, recovery, and their limits.

Get started with Docker

Requirements: Git, Docker, and a modern browser. Start Docker before setup. The first start needs internet access. Compose and Buildx are supplied through an official Docker tools container when the host plugins are missing or too old.

On Linux or macOS, run:

git clone https://github.com/sofyanox12/credyman.git
cd credyman
./credyman start

On Windows, run these commands inside WSL2 with Docker integration enabled. Keep the checkout in the Linux filesystem, such as ~/credyman.

The launcher creates private environment files, prepares images, starts PostgreSQL, applies migrations, and waits for the API and web app to become healthy. The launcher builds the checkout automatically. The first source build can take several minutes.

Open the printed URL, usually http://localhost:3000. Register an account and save the recovery kit to finish setup. New vaults start with Personal, Work, and Family categories, which you can rename or delete.

Use these commands from the checkout:

./credyman stop
./credyman start
./credyman restart
./credyman status
./credyman logs

stop shuts down and removes all project containers and networks, including the test database if it is running. Saved data, configuration, and cached images remain available for the next start. logs follows output until you press Ctrl+C. Docker itself and other projects stay running.

To delete all Credyman accounts, items, database volumes, and local environment files:

./credyman reset --confirm credyman-reset

Then run ./credyman start to begin again. The reset keeps source files and cached images. ./scripts/setup.sh and ./scripts/stop.sh are aliases for start and stop.

Startup failures keep saved configuration and data. Prerequisite errors explain what to fix; application startup errors point to status and logs. Compose's readiness wait is limited to 180 seconds; image preparation and dependency startup can take longer. See deployment for hosting with HTTPS and backups.

Develop with Node.js

Requirements: Node.js 22.12+ (containers use Node.js 24), pnpm 10.26.2, Docker Compose, and a modern browser. Local development uses localhost; production requires HTTPS.

If the Docker app is running, stop its API and web services before using hot reload on the same ports: ./credyman stop.

corepack enable
corepack prepare pnpm@10.26.2 --activate
pnpm install --frozen-lockfile
pnpm env:init
pnpm prepare:app
docker compose up -d --wait db
pnpm db:migrate
pnpm dev

Open APP_ORIGIN from .env, usually http://localhost:3000.

pnpm env:init adds missing settings and generates separate application and test database passwords. It preserves saved values and restricts .env and .env.test to the file owner (0600). See configuration.

For daily development, start the database and run pnpm dev. It builds both shared packages and generates the Prisma client before starting the shared-package, API, and Nuxt watchers. Restart pnpm dev after schema changes to regenerate the client; apply database migrations separately with pnpm db:migrate. See local reset to rebuild a local database.

Project structure

Credyman uses NestJS for the API, Nuxt 3 for the web app, and PostgreSQL 18 with Prisma 7 for storage.

Area Responsibility
contracts Shared data definitions and request validation
crypto Key derivation, encryption, and key changes
API Sign-in, sessions, access control, and database operations
web Vault unlocking, item management, and the interface
scripts Environment setup and local database reset

Verify changes

pnpm format:check
pnpm lint
pnpm typecheck
pnpm test
pnpm build

Integration tests modify the separate database in .env.test. Enable them with ZK_TEST_DATABASE=1:

docker compose --profile test up -d --wait db-test
pnpm db:test:migrate
pnpm test:integration

For browser tests, keep the app running at APP_ORIGIN, then run:

pnpm exec playwright install chromium
pnpm test:browser

Browser tests create application data. See dependency checks for security review and unused-code checks.

For launcher changes, also run sh tests/tooling/setup.test.sh and sh -n credyman scripts/*.sh.

Documentation

About

A self-hosted password manager with client-side encryption, passkey authentication, and simple Docker setup.

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages