
Security News
OpenClaw Advisory Surge Highlights Gaps Between GHSA and CVE Tracking
A recent burst of security disclosures in the OpenClaw project is drawing attention to how vulnerability information flows across advisory and CVE systems.
Read/Write config couldn't be easier!
Install using npm or yarn:
npm i rc9
# or
yarn add rc9
Import into your Node.js project:
// CommonJS
const { read, write, update } = require('rc9')
// ESM
import { read, write, update } from 'rc9'
.conf:
db.username=db username
db.password=db pass
db.enabled=true
Update config:
update({ 'db.enabled': true }) // or update(..., { name: '.conf' })
Push to an array:
update({ 'modules[]': 'test' })
Read/Write config:
const config = read() // or read('.conf')
// config = {
// db: {
// username: 'db username',
// password: 'db pass',
// enabled: true
// }
// }
config.enabled = false
write(config) // or write(config, '.conf')
User Config:
It is common to keep config in user home directory (MacOS: /Users/{name}, Linux: /home/{name}, Windows: C:\users\{name})
you can use readUser/writeuser/updateUser shortcuts to quickly do this:
writeUser({ token: 123 }, '.zoorc') // Will be saved in {home}/.zoorc
const conf = readUser('.zoorc') // { token: 123 }
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 readUser(options?: RCOptions | string): RC;
function serialize(config: RC): string;
function write(config: RC, options?: RCOptions | string): void;
function writeUser(config: RC, options?: RCOptions | string): void;
function update(config: RC, options?: RCOptions | string): RC;
function updateUser(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 🐇
MIT. Made with 💖
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.

Security News
A recent burst of security disclosures in the OpenClaw project is drawing attention to how vulnerability information flows across advisory and CVE systems.

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.