# \[ANN\] PassStores.jl - an interface to the \`pass\` command

**URL:** https://discourse.julialang.org/t/ann-passstores-jl-an-interface-to-the-pass-command/135298
**Category:** Package Announcements
**Tags:** linux, password, secrets
**Created:** [January 27, 2026, 9:13pm UTC](https://discourse.julialang.org/t/ann-passstores-jl-an-interface-to-the-pass-command/135298 "2026-01-27T21:13:38Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![KyleSJohnston](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kylesjohnston/32/12674_2.png) [@KyleSJohnston](https://discourse.julialang.org/u/KyleSJohnston)
#### Post date: [January 27, 2026, 9:13pm UTC](https://discourse.julialang.org/t/ann-passstores-jl-an-interface-to-the-pass-command/135298/1 "2026-01-27T21:13:38Z")

</div>

Hi everyone!

I’d like to introduce PassStores.jl, an interface to the unix [`pass`](https://www.passwordstore.org/) command. This package provides the `PassStore` struct, a read-only mapping from keys to passwords.

## Installation & Usage

If you already use `pass` at the command line, you should find that PassStores.jl works with the standard installation and import process.

If you are new to `pass`, I’ve [outlined some basic setup](https://kylesjohnston.github.io/PassStores.jl/stable/#Setup), but I would really recommend the manual (i.e.: `man pass`) and [website](https://www.passwordstore.org/). Once you are able to `pass show example/password` at the command line, you are ready to source these same passwords in Julia.

Install the package from the General registry:

```julia
pkg> add PassStores

```

Import the package and instantiate a `PassStore`:

```julia
using PassStores # exports only `PassStore`
store = PassStore() # default `pass` location
api_key = store["service/api_key"]

```

Non-default directories are supported with `PassStore(path)`, and any custom `PASSWORD_STORE_DIR` in your environment is respected as the default.

For simplicity and security, `PassStore` instances are read-only, retrieving data directly from the `pass` command. There is no caching; all requests are on-demand.

## Motivation

I have collected various passwords and tokens while working on other projects. Organizing these with `pass` is simple and avoids plaintext storage. The most noticeable drawback was accessibility: retrieving these secrets was much less convenient than `ENV[...]`. A `PassStore` provides that convenience.

In my [startup.jl](https://docs.julialang.org/en/v1/manual/command-line-interface/#Startup-file), I have the following lines:

```julia
using PassStores
const PASS = PassStore()

```

Later, at the REPL or in scripts:

```julia
password = PASS["example/password"];

```

## Feedback

I hope that you find this as useful and convenient as I do. Give it a try, and let me know if you should encounter any [issues](https://github.com/KyleSJohnston/PassStores.jl/issues)—or if you find [the documentation](https://kylesjohnston.github.io/PassStores.jl/stable/) unclear or ambiguous.
