
Research
/Security News
Fake imToken Chrome Extension Steals Seed Phrases via Phishing Redirects
Mixed-script homoglyphs and a lookalike domain mimic imToken’s import flow to capture mnemonics and private keys.
Read/Write RC configs couldn't be easier!
Install dependencies:
# ✨ Auto-detect
npx nypm install rc9
# npm
npm install rc9
# yarn
yarn add rc9
# pnpm
pnpm add rc9
# bun
bun install rc9
# deno
deno install npm:rc9
Import utils:
ESM (Node.js, Bun, Deno)
import {
defaults,
parse,
parseFile,
read,
readUser,
serialize,
write,
writeUser,
readUserConfig,
writeUserConfig,
updateUserConfig,
update,
updateUser,
} from "rc9";
.conf:
db.username=username
db.password=multi word password
db.enabled=true
Update config:
update({ "db.enabled": false }); // or update(..., { name: '.conf' })
Push to an array:
update({ "modules[]": "test" });
Read/Write config:
const config = read(); // or read('.conf')
// config = {
// db: {
// username: 'username',
// password: 'multi word password',
// enabled: true
// }
// }
config.enabled = false;
write(config); // or write(config, '.conf')
User Config:
You can use readUserConfig/writeUserConfig/updateUserConfig to store config in the user's config directory ($XDG_CONFIG_HOME or ~/.config):
writeUserConfig({ token: 123 }, ".zoorc"); // Will be saved in ~/.config/.zoorc
const conf = readUserConfig(".zoorc"); // { token: 123 }
[!NOTE]
readUser/writeUser/updateUserare deprecated. UsereadUserConfig/writeUserConfig/updateUserConfiginstead, which follow XDG conventions (~/.config).
RC uses flat to automatically flat/unflat when writing and reading rcfile.
It means that you can use . for keys to define objects. Some examples:
hello.world = true <=> { hello: { world: true }test.0 = A <=> tags: [ 'A' ]Note: If you use keys that can override like x= and x.y=, you can disable this feature by passing flat: true option.
Tip: You can use keys ending with [] to push to an array like test[]=A
RC uses destr to convert values into native javascript values.
So reading count=123 results { count: 123 } (instead of { count: "123" }) if you want to preserve strings as is, can use count="123".
const defaults: RCOptions;
function parse(contents: string, options?: RCOptions): RC;
function parseFile(path: string, options?: RCOptions): RC;
function read(options?: RCOptions | string): RC;
function readUserConfig(options?: RCOptions | string): RC;
function serialize(config: RC): string;
function write(config: RC, options?: RCOptions | string): void;
function writeUserConfig(config: RC, options?: RCOptions | string): void;
function update(config: RC, options?: RCOptions | string): RC;
function updateUserConfig(config: RC, options?: RCOptions | string): RC;
Types:
type RC = Record<string, any>;
interface RCOptions {
name?: string;
dir?: string;
flat?: boolean;
}
Defaults:
{
name: '.conf',
dir: process.cwd(),
flat: false
}
Be the first one to guess 🐇
FAQs
Read/Write config couldn't be easier!
The npm package rc9 receives a total of 8,859,779 weekly downloads. As such, rc9 popularity was classified as popular.
We found that rc9 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.

Research
/Security News
Mixed-script homoglyphs and a lookalike domain mimic imToken’s import flow to capture mnemonics and private keys.

Security News
Latio’s 2026 report recognizes Socket as a Supply Chain Innovator and highlights our work in 0-day malware detection, SCA, and auto-patching.

Company News
Join Socket for live demos, rooftop happy hours, and one-on-one meetings during BSidesSF and RSA 2026 in San Francisco.