A drop-in development logger with a built-in console UI for debuging React applications. DevConsole provides powerful logging with export support, real-time variable inspection, command execution, and an extensible plugin system—all while remaining safe for production environments.
- Drop-in integration with any React project (Only Vite confirmed)
- Multiple log levels:
debug
,info
,warn
,error
, anddev
- Visual console UI toggled via
~
key - REPL-style JavaScript execution with
>
prefix - Custom and built-in commands using
/
prefix - Source tracking & export logs to a JSON file
- Pre-included extensions for HTTP & Storage management
- Configurable and production-safe
npm install react-devconsole
# or
yarn add react-devconsole
# or
pnpm add react-devconsole
Control logger behavior with VITE_DEV_CONSOLE
in .env
files:
disable
: (default) No logging or console code bundledhidden
: Console bundled but not activated by default (can enable viaactivateDevConsole
)active
: Fully active with UI and logs enabled
# .env.development
VITE_DEV_CONSOLE=active
# .env.production
VITE_DEV_CONSOLE=disable
In vite.config.ts
:
define: {
'import.meta.env.VITE_DEV_CONSOLE': JSON.stringify(process.env.VITE_DEV_CONSOLE || 'disable')
}
import { DevConsole, DevConsoleUI, configureDevConsole } from 'react-devconsole';
configureDevConsole({
maxLogs: 1000,
enableConsoleOutput: true,
enableSourceTracking: true,
});
function App() {
return (
<>
<DevConsoleUI />
{/* Your application */}
</>
);
}
DevConsole.info('App started');
DevConsole.debug('Debugging state', { user: 'Alice' });
DevConsole.error('Unexpected error', new Error('Oops'));
Prefix commands with /
in the console:
/help
– Show all available commands with descriptions/clear
,clear
, orcls
– Clear the console/export
– Export logs to a JSON file/var
– Manage runtime variables/var
or/var list
– List all variables/var set <name> <value>
– Set a variable/var get <name>
– Get a variable value/var delete <name>
– Delete a variable
You can also register custom commands:
DevConsole.registerCommand({
name: 'echo',
description: 'Echo input text',
handler: (args) => DevConsole.dev(args.join(' ')),
});
Start any command with >
to evaluate JavaScript:
> 2 + 2
> window.location.href
> document.title
Define variables and reuse them:
DevConsole.setVariable('apiHost', 'https://api.example.com');
DevConsole.setVariable('userId', 42);
# Then use in command:
/http.get ${apiHost}/users/${userId}
import { activateHttpExtension, setUserHeaders } from 'react-devconsole';
await activateHttpExtension();
await setUserHeaders({
Authorization: 'Bearer token',
});
Supported commands:
/http.headers [show|clear|set <key> <value>]
- Manage user-defined headers/http.request <method> <url> [-u] [-H "Key: Value"] [-j \'{"key":"value"}\'] [key=value...]
- Custom HTTP request/http.get <url>?query [-u] [-H "Header: Value"] [-j '{"key":"value"}'] [key=value...]
/http.post <url>?query [-u] [-H "Header: Value"] [-j '{"key":"value"}'] [key=value...]
/http.put <url>?query [-u] [-H "Header: Value"] [-j '{"key":"value"}'] [key=value...]
/http.delete <url>?query [-u] [-H "Header: Value"] [-j '{"key":"value"}'] [key=value...]
Options:
-u
- Include user-defined headers (set with/http.headers
)-H "Header: Value"
- Add custom headers-j '{"key":"value"}'
- Send JSON body (must be quoted)key=value
- Send form data (when not using-j
)
Examples:
# POST with JSON body
/http.post https://api.example.com/users -j '{"name":"John","age":30}'
# POST with form data
/http.post https://api.example.com/users name=John age=30
# GET with headers and query parameters
/http.get https://api.example.com/users?status=active -H "Authorization: Bearer token"
import { activateStorageExtension } from 'react-devconsole';
await activateStorageExtension();
Commands include:
/storage.ls
- list local storage keys/storage.ss
- list session storage keys/storage.set <ls|ss> <key> <value>
- set key-value pair in local/session storage/storage.clear <ls|ss|all>
- clear local/session storage or both/storage.export
- export local/session storage to a file/cookies.list
- list cookies/cookies.clear [domain]
- set a cookie
DevConsole.debug(message, data?)
DevConsole.info(message, data?)
DevConsole.warn(message, data?)
DevConsole.error(message, error?)
DevConsole.dev(message, data?)
~
– Toggle console↑ / ↓
– Command historyTab
– AutocompleteEscape
– Close UI/autocomplete
DevConsole is safe for production use. When the VITE_DEV_CONSOLE
variable is set to disable
, all logging calls are replaced with no-op implementations, and the bundle does not include the DevConsole UI or logic.
For environments like staging or QA, use hidden
mode for optional activation via DevTools:
- Improve command registration and help generation. For now, it's hard to determine which commands are registered by which extensions and which are user custom commands.