Cross.Platform
made by https://0x3d.site
GitHub - MikeKovarik/rage-edit: 🗃 Simple access to, and manipulation of, the Windows Registry. With promises. Without rage.🗃 Simple access to, and manipulation of, the Windows Registry. With promises. Without rage. - MikeKovarik/rage-edit
Visit Site
GitHub - MikeKovarik/rage-edit: 🗃 Simple access to, and manipulation of, the Windows Registry. With promises. Without rage.
rage-edit
🗃 Simple access to, and manipulation of, the Windows Registry. With promises. Without rage.
Installation
npm install rage-edit
Keep in mind before using
Structure and naming (keys & values) in the Windows Registry
Please be advised that the key
and value
terminology from the Windows registry might be confusing because it's different than the naming widely used in the world of JS. Windows registry is much like file system with folders and files, or XML, rather than JSON.
In JSON, key
usually stands for name of the property that stores a value
.
In the Windows registry, key
is like a folder (or the path to it) that can contain multiple value
s, which are kind of like files. value
has a name and the data content it stores (and type of the data).
So when refering to value
, its name is often meant rather than the data it holds.
To lessen the confusion, we're often using terms like value entry, value name, name of the value entry, etc... and path stands for the path of the key.
Default value (empty string)
Every windows registry key always contains a default value with the empty string ''
for name.
// read default value
await Registry.get('HKLM\\SOFTWARE\\Overwatch', '')
// write default value
await Registry.set('HKLM\\SOFTWARE\\Overwatch', '', 'Soldiers, scientists, adventurers, oddities...')
See Default values section for more
Case in/sensitivity
Key path and value names are case insensitive, you can interchangeably read, write and delete with any combination of casing. rage-edit
lowercases everything by default.
await Registry.get('HKCR\\.exe', 'Content Type') // returns the data
await Registry.get('hkcr\\.exe', 'content type') // returns the data
See Case sensitivity section for more
API
Registry
class
Only the Registry
class is exported (both named and default export)
// ES Modules way
import {Registry} from 'rage-edit'
import Registry from 'rage-edit'
// CJS way
var {Registry} = require('rage-edit')
It is modelled after ES6 Map
class with methods like .get()
, .set()
, .delete()
and a few others. Those can be used in two modes - static and instance.
Static mode
// Creates Overwatch key inside HKLM\SOFTWARE if it doesn't exist yet.
// Also creates default value inside it (with data 'Soldiers, scientists, adventurers, oddities...')
await Registry.set('HKLM\\SOFTWARE\\Overwatch', '', 'Soldiers, scientists, adventurers, oddities...')
// Gets value of 'Scientists' from key 'HKLM\Software\Overwatch'
await Registry.get('HKLM\\Software\\Overwatch', 'Scientists')
// Creates/rewrites value entry 'hq' with data 'Switzerland' at 'HKLM\Software\Overwatch'
await Registry.set('HKLM\\Software\\Overwatch', 'hq', 'Switzerland')
// Creates/rewrites value 'Leader' at 'HKLM\Software\Overwatch\Backwatch'
await Registry.set('HKLM\\Software\\Overwatch\\Blackwatch', 'Leader', 'Gabriel Reyes')
// Retrieves the 'leader' value from
// NOTE: case insensitivity
await Registry.get('hklm\\software\\overwatch\\blackwatch', 'leader')
Instance mode
// Creates the instance but does not yet create the Overwatch key if it doesn't exists yet.
var reg = new Registry('HKLM\\Software\\Overwatch')
// Creates default value inside the key (with data 'Soldiers, scientists, adventurers, oddities...')
await reg.set('', 'Soldiers, scientists, adventurers, oddities...')
// Gets value of 'Scientists' from key 'HKLM\Software\Overwatch'
await reg.get('Scientists')
// Creates/rewrites value entry 'hq' with data 'Switzerland' at 'HKLM\Software\Overwatch'
await reg.set('hq', 'Switzerland')
// Creates/rewrites value 'Leader' at 'HKLM\Software\Overwatch\Backwatch'
await reg.set('\\Blackwatch', 'Leader', 'Gabriel Reyes')
// Retrieves the 'leader' value from
// NOTE: case insensitivity
await reg.get('\\blackwatch', 'leader')
Static methods
.get(path, [name])
Retrieves key from path
or content of the name
d value entry at the path.
Parameters:
path
to a key to retrieve or from where to retrieve the value.[name]
of the value to retrieve. Optional. Default value (empty string) is retrieved if omitted.
Returns:
Promise<object>
Example
// Retrieves key 'HKLM\Software\Overwatch'.
Registry.get('HKLM\\Software\\Overwatch')
// Retrieves default value from 'HKLM\Software\Overwatch'.
Registry.get('HKLM\\Software\\Overwatch', '')
// Retrieves value 'Scientists' from 'HKLM\Software\Overwatch'.
Registry.get('HKLM\\Software\\Overwatch', 'Scientists')
.has(path, [name])
Just like .get()
but returns boolean depending on existence of the key or value.
Returns:
Promise<bool>
.delete(path, [name])
Deletes a registry key at the given path
or deletes a name
d value entry within this key.
Parameters
path
of the key to delete, or the key that hosts the value to delete.[name]
of the value to delete.
Returns
Promise
Example
// Deletes subkey 'Blackwatch' (with all of its subkeys and values) inside 'HKLM\Software\Overwatch'
Registry.delete('HKLM\\Software\\Overwatch\\Blackwatch')
// Deletes value 'Scientists' from 'HKLM\Software\Overwatch'
Registry.delete('HKLM\\Software\\Overwatch', 'Scientists')
// Deletes default value entry (empty string, can be omitted) from 'HKLM\Software\Overwatch'
Registry.delete('HKLM\\Software\\Overwatch', '')
// Deletes the key 'HKLM\Software\Overwatch' and all of its subkeys and values
Registry.delete('HKLM\\Software\\Overwatch')
.set(path[, name[, data[, type]]])
Creates or rewrites a key or name
d value inside a key at the given path
.
If a key at the path doesn't exist it will be created as if Registry.set(path)
was called beforehand.
Creating new keys also creates an empty default value inside it (that's how windows registry works) as if Registry.set(path, '', '', 'REG_SZ')
was called with it.
Parameters
path
of the key where the value should be created.[name]
of the value to create or modify. Optional. To modify the key's default value (empty string) use''
.[data]
to store in the value entry. Optional.[type]
of the storeddata
. Optional. It is inferred from thedata
if this parameter is omitted.
JS type | Registry type |
---|---|
String |
REG_SZ , REG_EXPAND_SZ |
Number |
REG_DWORD |
Array<String> |
REG_MULTI_SZ |
Buffer , Uint8Array , ArrayBuffer |
REG_BINARY |
Returns
Promise
Example
// Creates or rewrites value entry named 'Leader' with 'Jack Morrison' data of 'REG_SZ' type that is infered from the String data.
// inside the key 'HKLM\Software\Overwatch'. Also creates the key if it didn't exist
Registry.set('HKLM\\Software\\Overwatch', 'Leader', 'Jack Morrison')
// Creates or rewrites value 'Scientists' with data 'Angela Ziegler\0Winston\0Mei-Ling Zhou' of type 'REG_MUTLI_SZ' (inferred from Array data)
Registry.set('HKLM\\Software\\Overwatch', 'Scientists', ['Angela Ziegler', 'Winston', 'Mei-Ling Zhou'])
// Re/writes data of default value entry.
Registry.set('HKLM\\Software\\Overwatch', '', 'This is data of the default value entry')
// Creates a new subkey 'Blackwatch' inside 'HKLM\Software\Overwatch' and creates default value with data 'Mysterious branch of Overwatch'
Registry.set('HKLM\\Software\\Overwatch\\Blackwatch', '', 'Mysterious branch of Overwatch')
Static properties
DEFAULT = ''
String used to represent the name of the default value.
VALUES = '$values'
String used for naming values key in simple mode
Constructor, instance mode
new Registry(path)
var reg = new Registry('HKLM\\Software\\Overwatch')
reg.get('Scientists')
reg.set('\\Blackwatch', 'Leader', 'Gabriel Reyes')
Instance methods
#get([subpath][, name])
Retrieves key from the instance's path or from a given subpath
.
Or instead retrieves content of a value at the path if name
is defined.
Parameters:
[subpath]
Path to a subkey where the value is stored. Optional. Defaults tothis.path
.[name]
of the value to retrieve. Optional. Default value (empty string) is retrieved if omitted.
Returns:
Promise<object>
Example
// Creates instance of Registry, using 'HKLM\Software\Overwatch' path for all operations by default.
var reg = new Registry('HKLM\\Software\\Overwatch')
// Retrieves key 'HKLM\Software\Overwatch'.
reg.get()
// Retrieves default value from 'HKLM\Software\Overwatch'.
reg.get('')
// Retrieves value 'Scientists' from 'HKLM\Software\Overwatch'.
reg.get('Scientists')
// Retrieves subkey 'Blackwatch' inside 'HKLM\Software\Overwatch'.
reg.get('\\Blackwatch')
// Retrieves default value from 'HKLM\Software\Overwatch\Backwatch'
reg.get('\\Blackwatch', '')
// Retrieves value 'Leader' from 'HKLM\Software\Overwatch\Backwatch'
reg.get('\\Blackwatch', 'Leader')
#has([subpath][, name])
Just like .get()
but returns boolean depending on existence of the sub/key or value.
Returns:
Promise<bool>
#delete([subpath][, name])
Deletes the instance's registry key or subkey at given subath
.
Alternatively deletes name
d value from the key.
Parameters:
[subpath]
Path to a subkey where the value is stored. Optional. Defaults tothis.path
.[name]
of the value to delete.
Returns:
Promise
#set([subpath][, name[, data[, type]]])
Creates or rewrites name
d value inside instance's path or at given subpath
key.
Alternatively creates subkey at subpath
if name
and data
are undefined.
Parameters
[subpath]
Path of the subkey to create (or where to set value). Optional ifname
is defined.subpath
has to always begin with a backslash\
otherwise it will be mistaken asname
[name]
of the value to create or modify. Optional ifsubpath
is defined in which case no value is created, only the subkey. To modify key's default value (empty string) use''
.[data]
to be stored in the value entry. Optional.[type]
of the storeddata
. Optional. It is inferred from thedata
if this parameter is omitted.
Returns:
Promise
Example
// Creates instance of Registry, using 'HKLM\Software\Overwatch' path for all operations by default.
var reg = new Registry('HKLM\\Software\\Overwatch')
// Creates the key (if it didn't exist)
reg.set()
// Creates 'disbanded' value with no data
reg.set('disbanded')
// Creates or rewrites value entry named 'Leader' with 'Jack Morrison' data of 'REG_SZ' type that is infered from the String data.
// inside the key 'HKLM\Software\Overwatch'. Also creates the key if it didn't exist
reg.set('Leader', 'Jack Morrison')
// Creates or rewrites value 'Scientists' with data 'Angela Ziegler\0Winston\0Mei-Ling Zhou' of type 'REG_MUTLI_SZ' (inferred from Array data)
reg.set('Scientists', ['Angela Ziegler', 'Winston', 'Mei-Ling Zhou'])
// Re/writes data of default value entry.
reg.set('', 'This is data of the default value entry')
// Creates a key 'HKLM\Software\Overwatch\Blackwatch' (if it didn't exist)
reg.set('\\Blackwatch')
// Creates a new subkey 'Blackwatch' inside 'HKLM\Software\Overwatch' and creates default value with data Mysterious branch of Overwatch'
reg.set('\\Blackwatch', '', 'Mysterious branch of Overwatch')
// Creates/rewrites value 'Leader' at 'HKLM\Software\Overwatch\Backwatch'
reg.set('\\Blackwatch', 'Leader', 'Gabriel Reyes')
Instance properties
path
Full path of current key path.
hive
Short name of the current hive like HKCU
.
Output format
Retrieving data from the registry poses a complication. Format of the output cannot be as straight forward as JSONs nested structure because the registry better resembles an XML tree where each node can have both a children nodes and also attributes. A Windows registry key can host sub keys as well as value entries, both of which can have the same names leading to possible collisions.
Due to that rage-edit
offers two types of output formats. simple
and complex
. By default simple
is enabled globally for all calls.
It can be set as a global default for all method calls, or specified manually in each method call in the options
argument.
// change format globally
Registry.format = 'complex'
// or individually
Registry.get('HKCR\\Directory\\shell', {format: 'complex'}
Simple
Simple output tries to resemble JSON at much as possible while trying to avoid collisions with the names of keys and values.
Key names are properties of the object. The key is represented by (stub of) another object. This is useful when calling Registry.get()
in recursive mode.
Values are stored in $values
object of name:data
pairs, where value name is the property, value data is the content of that property, and type is omitted.
Warning: $values
might be still conflicting since $
is a valid character in key paths. You can change $values
to be whatever else by changing Registry.VALUES
. e.g. Registry.VALUES = '__$$NO_CONFLICT_VALUES'
So if your key has a subkey named version
and also a value named version
, you will be able to access both of them without collision with output.version
and output.$values.version
.
// Registry.get('HKCR\\.jpg')
{
$values: {
'': 'jpegfile',
'content type': 'image/jpeg',
'perceivedtype': 'image'
},
'openwithprogids': {...},
'persistenthandler': {...}
}
This format is optimized for nesting to allow you to do this.
Note: .get()
calls are not recursive by default due to performance reasons. The following snippet serves as an example of how output can be nested, but the HKLM
hive contains enormous amounts of data and thus is not recommended to be queried recursively.
// Gets default value (empty string) of HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Lock Screen\FeedManager
var software = await Registry.get('HKLM\\software', true)
software.microsoft.windows.currentversion['Lock Screen'].feedmanager.$values['']
Complex
Offers comprehensive output and first and foremost contains types of value entries since every value entry is represented by {name, data, type}
object in a values
array.
// Registry.get('HKCR\\.jpg', {format: 'complex'})
{
keys: {
'openwithprogids': {
keys: {...},
values: [...]
},
'persistenthandler': {
keys: {...},
values: [...]
}
},
values: [
{
name: '',
data: 'jpegfile',
type: 'REG_SZ'
}, {
name: 'content type',
data: 'image/jpeg',
type: 'REG_SZ'
}, {
name: 'perceivedtype',
data: 'image',
type: 'REG_SZ'
}
]
}
Nesting with this format is much more verbose.
// Gets default value (empty string) of HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Lock Screen\FeedManager
var software = await Registry.get('HKLM\\software', true, {format: 'complex'})
software.keys.microsoft.keys.windows.keys.currentversion.keys['Lock Screen'].keys.feedmanager.values['']
Caveats, edge cases & the weirdness of Windows registry
Windows registry has its fair share of footguns that you should be aware of. Not to mention the danger of damaging keys and values that are critical for the proper operation of the OS.
Friendly reminder about HKCR, HKLM, 64b and Wow6432Nodes
HKCR
is a pointer to HKLM\Software\Classes
. Use it to access all users.
HKCU
is a pointer to HKUS\${UserSid}
Use it to access only current user.
Therefore
HKCU\Software\Classes
is a pointer to HKUS\${UserSid}\Software\Classes
which is another pointer to HKUS\${UserSid}_Classes
.
But on on 64b it points to subkey Wow6432Nodes
, so HKUS\${UserSid}\Software\Classes
is a pointer to HKUS\${UserSid}_Classes\Wow6432Node
on 64b systems.
Example:
original key | pointer to | b |
---|---|---|
HKCU\Software\Classes\CLSID |
HKUS\${UserSid}_Classes\CLSID |
32b |
HKCU\Software\Classes\CLSID |
HKUS\${UserSid}_Classes\Wow6432Node\CLSID |
64b |
Default values
Every key has a default value (empty string) which is represented as an empty string. I.e. name of the value entry is empty string ''
. You might also come across it as a (Default)
in the regedit
program or in reg
command.
(await Registry.get(path)).$values[''] // value of the default value at given path
await Registry.get(path, '') // get default value from the path
await Registry.set(path, '', 'data of the default value') // set default value's data
It is by default of type REG_SZ
.
Creation of a new key also creates default value inside it. The value's name is an empty string ''
and the data content is also an empty string.
As long as the default value has any data, it will act as any other value and will show up in getValues()
.
await Registry.set(path)
await Registry.has(path, '') // true - default value exists in this key
await Registry.get(path, '') // '' - default value has data of an empty string
(await Registry.get(path)).$values // [''] - list of values in this key, so far only the default value
practical example:
// creates new key and default value '' of type REG_SZ
await Registry.set('HKLM\\SOFTWARE\\Overwatch')
// creates or updates default value of type REG_SZ, inside key HKLM\SOFTWARE\Overwatch (also creates the key if it doesn't exists)
await Registry.set('HKLM\\SOFTWARE\\Overwatch', '', 'Soldiers, scientists, adventurers, oddities...')
// creates or updates default value of type REG_EXPAND_SZ, inside key HKLM\SOFTWARE\Overwatch (also creates the key if it doesn't exists)
await Registry.set('HKLM\\SOFTWARE\\Overwatch', '', 'Soldiers, scientists, adventurers, oddities...', 'REG_EXPAND_SZ')
// sidenote: value name is '', value data is 'Soldiers, scientists, adventurers, oddities...')
Default value cannot be deleted. Attempting to do so (Registry.delete(path, '')
) will not actually delete the entry, but only its data. Or rather it will set the data to some sort of undefined
or null
(can be seen as (value not set)
in regedit
), which is unique to the default value.
In this state, the default value returns undefined
when queried with get()
it will not be listed in $values
, despite actually existing - has()
always returns true
.
await Registry.delete(path, '')
await Registry.has(path, '') // true - the value always exists
await Registry.get(path, '') // undefined - the value has no data
(await Registry.get(path)).$value // [] - empty array
Restricted access, administrator permissions
Write and delete operation outside HKCU
hive (Current user) as well as reading certain hives require the app to run with administrator privileges.
try {
await Registry.set('HKCU\\SOFTWARE\\Overwatch')
console.log('Written to HKCU without admin priviledges.')
await Registry.set('HKLM\\SOFTWARE\\Overwatch')
console.log('Written to HKLM with admin priviledges.')
} catch(err) {
console.log(`Couldn't write to HKLM without admin priviledges.`)
}
Error suppresion
rage-edit
deliberately suppresses error The system was unable to find the specified registry key or value
that is thrown by the reg
command when a non-existent value or key is queried. Instead the promise is resolve with undefined
.
All other errors (especially Access is denied
) are thrown as expected and the promise will be rejected.
Case sensitivity
Windows Registry is case insensitive. That applies to key paths and value names. But there are some edge cases. rage-edit
by default transforms all key paths and value names (not the actual data of value entry) to lowercase by default to prevent confusion.
This does not affect input - you can still use all-caps paths and value names with uppercased characters.
// both ways work and return the same value
await Registry.get('HKCR\\.exe', 'Content Type') // returns the data
await Registry.get('hkcr\\.exe', 'content type') // returns the data
await Registry.get('HKCR\\.exe\\PersistentHandler') // returns the data
await Registry.get('HkCr\\.exe\\persistentHANDLER') // returns the data
var key = await Registry.get('HKCR\\.exe')
key.persistenthandler // contains the data
key.PersistentHandler // undefined
key.$values['content type'] // contains the data
key.$values['Content Type'] // undefined
The lowercasing can be turned off
// globally
Registry.lowercase = false
// or per request
var key = await Registry.get('HKCR\\.exe', {lowercase: false})
key.$values['Content Type']
Why?
Underlying REG command doesn't distinguish between lowercase or upper case. Direct queries for a certain value with /v
argument always mimic the case in which the key and value name are inputted and never return the true case of the value name. In this case PERCEIVEDTYPE
, PerceivedType
and perceivedtype
reg query HKCR\.JPG /v PERCEIVEDTYPE
HKEY_CLASSES_ROOT\.JPG
PERCEIVEDTYPE REG_SZ image
reg query HKCR\.Jpg /v PerceivedType
HKEY_CLASSES_ROOT\.Jpg
PerceivedType REG_SZ image
reg query HKCR\.jpg /v perceivedtype
HKEY_CLASSES_ROOT\.jpg
perceivedtype REG_SZ image
But omiting /v
(value name) argument to query all contents of the key would return value entries with their true names (in this case PerceivedType
).
C:\WINDOWS\system32>reg query HKCR\.jpg
HKEY_CLASSES_ROOT\.jpg
(Default) REG_SZ jpegfile
Content Type REG_SZ image/jpeg
PerceivedType REG_SZ image
This however could cause performance issues (querying whole key when only single value is needed isn't a good idea) and the insensitive nature of Windows Registry lead rage-edit
to deliberately lowercase all paths and value names to prevent situations like this:
// rage-edit by default transforms all value names to lower case to prevent having to do this:
var key = await Registry.get('HKLM\\SOFTWARE\\MyApp')
var version = key.$values['VERSION'] || key.$values['Version'] || key.$values['version']
Type infering and conversions
rage-edit
automatically picks a registry value type for you, based in the data you're storing, if you don't specify the type for yourself.
Registry.setValue('HKLM\\Some\\Path', 'name', 'string', 'REG_SZ')
Registry.setValue('HKLM\\Some\\Path', 'name', 'string')
Registry.setValue('HKLM\\Some\\Path', 'name', '123', 'REG_DWORD')
Registry.setValue('HKLM\\Some\\Path', 'name', 123, 'REG_DWORD')
Registry.setValue('HKLM\\Some\\Path', 'name', 123)
Registry.setValue('HKLM\\Some\\Path', 'name', 'one\0two\0three', 'REG_MULTI_SZ')
Registry.setValue('HKLM\\Some\\Path', 'name', ['one', 'two', 'three'], 'REG_MULTI_SZ')
Registry.setValue('HKLM\\Some\\Path', 'name', ['one', 'two', 'three'])
Registry.setValue('HKLM\\Some\\Path', 'name', 'hello', 'REG_BINARY')
Registry.setValue('HKLM\\Some\\Path', 'name', Buffer.from('hello'))
REG_DWORD and REG_QWORD
Windows Registry allows storing 32b values as DWORDS and 64b values as QWORDS.
Javascript Number only support 53 bit integers.
DWORD values are automatically converted to and from Number by rage-edit
automatically.
QWORD values cannot be converted due to JS limitations. The reg
command also retrieves the values in hex Ox
notation and rage-edit
does not change that.
var value = 1234
Registry.set('HKLM\\Some\\Path', 'DwordValue', value)
Registry.set('HKLM\\Some\\Path', 'QwordValue', value)
Registry.get('HKLM\\Some\\Path', 'DwordValue') // 1234
Registry.get('HKLM\\Some\\Path', 'QwordValue') // '0x4D2'
Join the discussion
We're at Discord and Gitter. Come join us to discuss features, bugs and more.
Credits
Made by Mike Kovařík, Mutiny.cz
Articlesto learn more about the cross-platform concepts.
- 1Introduction to Cross-Platform Development: What You Need to Know
- 2Top Cross-Platform Development Frameworks: A Comparative Analysis
- 3React Native vs. Flutter: Which Framework is Right for You?
- 4Cross-Platform Development with Node.js: A Complete Guide
- 5Cross-Platform App Development with Kotlin Multiplatform: A Complete Guide
- 6Using Electron for Cross-Platform Desktop Applications: A Complete Guide
- 7Cross-Platform Mobile Apps vs. Native Apps: Pros and Cons
- 8Cross-Platform App Development for IoT: A New Frontier
- 9Using Progressive Web Apps (PWAs) for Cross-Platform Development
- 10Monetizing Cross-Platform Apps: Strategies for Success
Resourceswhich are currently available to browse on.
mail [email protected] to add your project or resources here 🔥.
- 1Accelerated Container Application Development
https://www.docker.com/
Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.
- 2Get running processes
https://github.com/sindresorhus/ps-list
Get running processes. Contribute to sindresorhus/ps-list development by creating an account on GitHub.
- 3Get the path to the user home directory
https://github.com/sindresorhus/user-home
Get the path to the user home directory. Contribute to sindresorhus/user-home development by creating an account on GitHub.
- 4Recursive version of fs.readdir with streaming api.
https://github.com/paulmillr/readdirp
Recursive version of fs.readdir with streaming api. - paulmillr/readdirp
- 5Tips, tricks, and resources for working with Node.js, and the start of an ongoing conversation on how we can improve the Node.js experience on Microsoft platforms.
https://github.com/Microsoft/nodejs-guidelines
Tips, tricks, and resources for working with Node.js, and the start of an ongoing conversation on how we can improve the Node.js experience on Microsoft platforms. - microsoft/nodejs-guidelines
- 6fs with incremental backoff on EMFILE
https://github.com/isaacs/node-graceful-fs
fs with incremental backoff on EMFILE. Contribute to isaacs/node-graceful-fs development by creating an account on GitHub.
- 7:rocket: Upgrade npm on Windows
https://github.com/felixrieseberg/npm-windows-upgrade
:rocket: Upgrade npm on Windows. Contribute to felixrieseberg/npm-windows-upgrade development by creating an account on GitHub.
- 8Features • GitHub Actions
https://github.com/features/actions
Easily build, package, release, update, and deploy your project in any language—on GitHub or any external system—without having to run code yourself.
- 9Native port of Redis for Windows. Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs. This repository contains unofficial port of Redis to Windows.
https://github.com/tporadowski/redis
Native port of Redis for Windows. Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Se...
- 10:rage2: make the keys on an object path.sep agnostic.
https://github.com/bcoe/any-path
:rage2: make the keys on an object path.sep agnostic. - bcoe/any-path
- 11Cross-platform `/dev/null`
https://github.com/sindresorhus/dev-null-cli
Cross-platform `/dev/null`. Contribute to sindresorhus/dev-null-cli development by creating an account on GitHub.
- 12Creates a readable stream producing cryptographically strong pseudo-random data using `crypto.randomBytes()`
https://github.com/sindresorhus/random-bytes-readable-stream
Creates a readable stream producing cryptographically strong pseudo-random data using `crypto.randomBytes()` - sindresorhus/random-bytes-readable-stream
- 13Check if the process is running with elevated privileges
https://github.com/sindresorhus/is-elevated
Check if the process is running with elevated privileges - sindresorhus/is-elevated
- 14Create a readable Node.js stream that produces no data (or optionally blank data) or a writable stream that discards data
https://github.com/sindresorhus/noop-stream
Create a readable Node.js stream that produces no data (or optionally blank data) or a writable stream that discards data - sindresorhus/noop-stream
- 15Returns true if the platform is Windows (and Cygwin or MSYS/MinGW for unit tests)
https://github.com/jonschlinkert/is-windows
Returns true if the platform is Windows (and Cygwin or MSYS/MinGW for unit tests) - jonschlinkert/is-windows
- 16Access the system clipboard (copy/paste)
https://github.com/sindresorhus/clipboard-cli
Access the system clipboard (copy/paste). Contribute to sindresorhus/clipboard-cli development by creating an account on GitHub.
- 17Check if the process is running inside Windows Subsystem for Linux (Bash on Windows)
https://github.com/sindresorhus/is-wsl
Check if the process is running inside Windows Subsystem for Linux (Bash on Windows) - sindresorhus/is-wsl
- 18Like which(1) unix command. Find the first instance of an executable in the PATH.
https://github.com/npm/node-which
Like which(1) unix command. Find the first instance of an executable in the PATH. - npm/node-which
- 19Colored symbols for various log levels
https://github.com/sindresorhus/log-symbols
Colored symbols for various log levels. Contribute to sindresorhus/log-symbols development by creating an account on GitHub.
- 20Read and Write to the Windows registry in-process from Node.js. Easily set application file associations and other goodies.
https://github.com/CatalystCode/windows-registry-node
Read and Write to the Windows registry in-process from Node.js. Easily set application file associations and other goodies. - CatalystCode/windows-registry-node
- 21Open stuff like URLs, files, executables. Cross-platform.
https://github.com/sindresorhus/open
Open stuff like URLs, files, executables. Cross-platform. - sindresorhus/open
- 22Fabulously kill processes. Cross-platform.
https://github.com/sindresorhus/fkill
Fabulously kill processes. Cross-platform. Contribute to sindresorhus/fkill development by creating an account on GitHub.
- 23:package: Install C++ Build Tools for Windows using npm
https://github.com/felixrieseberg/windows-build-tools
:package: Install C++ Build Tools for Windows using npm - felixrieseberg/windows-build-tools
- 24Install WSL
https://docs.microsoft.com/en-us/windows/wsl/install-win10
Install Windows Subsystem for Linux with the command, wsl --install. Use a Bash terminal on your Windows machine run by your preferred Linux distribution - Ubuntu, Debian, SUSE, Kali, Fedora, Pengwin, Alpine, and more are available.
- 25Unicode stdout on Windows command prompt · Issue #7940 · nodejs/node-v0.x-archive
https://github.com/nodejs/node-v0.x-archive/issues/7940
With Node.js 0.10.28 running the following: node -e "process.stdout.write('✔');" Outputs ✔ on OS X, but only shows the following on Windows 8.1 command prompt: It would be very useful if Unicode ch...
- 26Copy files
https://github.com/sindresorhus/cpy
Copy files. Contribute to sindresorhus/cpy development by creating an account on GitHub.
- 27Look up environment settings specific to different operating systems.
https://github.com/npm/osenv
Look up environment settings specific to different operating systems. - npm/osenv
- 28Unicode symbols with fallbacks for older terminals
https://github.com/sindresorhus/figures
Unicode symbols with fallbacks for older terminals - sindresorhus/figures
- 29Node.js — Download Node.js®
https://nodejs.org/en/download/
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
- 30Get the username of the current user
https://github.com/sindresorhus/username
Get the username of the current user. Contribute to sindresorhus/username development by creating an account on GitHub.
- 31Check if a process is running
https://github.com/sindresorhus/process-exists
Check if a process is running. Contribute to sindresorhus/process-exists development by creating an account on GitHub.
- 32when you want to fire an event no matter how a process exits.
https://github.com/tapjs/signal-exit
when you want to fire an event no matter how a process exits. - tapjs/signal-exit
- 33Make a directory and its parents if needed - Think `mkdir -p`
https://github.com/sindresorhus/make-dir
Make a directory and its parents if needed - Think `mkdir -p` - sindresorhus/make-dir
- 34Get the name of the current operating system. Example: macOS Sierra
https://github.com/sindresorhus/os-name
Get the name of the current operating system. Example: macOS Sierra - sindresorhus/os-name
- 35node module that provides access to the Windows Registry through the REG commandline tool
https://github.com/fresc81/node-winreg
node module that provides access to the Windows Registry through the REG commandline tool - fresc81/node-winreg
- 36Automated installation of the Microsoft IE App Compat virtual machines
https://github.com/amichaelparker/ievms
Automated installation of the Microsoft IE App Compat virtual machines - amichaelparker/ievms
- 37Human-friendly process signals
https://github.com/ehmicky/human-signals
Human-friendly process signals. Contribute to ehmicky/human-signals development by creating an account on GitHub.
- 38Gulp.js command execution for humans
https://github.com/ehmicky/gulp-execa
Gulp.js command execution for humans. Contribute to ehmicky/gulp-execa development by creating an account on GitHub.
- 39Get the global cache directory
https://github.com/ehmicky/global-cache-dir
Get the global cache directory. Contribute to ehmicky/global-cache-dir development by creating an account on GitHub.
- 40📗 How to write cross-platform Node.js code
https://github.com/ehmicky/cross-platform-node-guide
📗 How to write cross-platform Node.js code. Contribute to ehmicky/cross-platform-node-guide development by creating an account on GitHub.
- 41A `rm -rf` util for nodejs
https://github.com/isaacs/rimraf
A `rm -rf` util for nodejs. Contribute to isaacs/rimraf development by creating an account on GitHub.
- 42Delete files and directories
https://github.com/sindresorhus/del
Delete files and directories. Contribute to sindresorhus/del development by creating an account on GitHub.
- 43🔀 Cross platform setting of environment scripts
https://github.com/kentcdodds/cross-env
🔀 Cross platform setting of environment scripts. Contribute to kentcdodds/cross-env development by creating an account on GitHub.
- 44Node version management
https://github.com/tj/n
Node version management. Contribute to tj/n development by creating an account on GitHub.
- 45Access the system clipboard (copy/paste)
https://github.com/sindresorhus/clipboardy
Access the system clipboard (copy/paste). Contribute to sindresorhus/clipboardy development by creating an account on GitHub.
- 46All the characters that work on most terminals
https://github.com/ehmicky/cross-platform-terminal-characters
All the characters that work on most terminals. Contribute to ehmicky/cross-platform-terminal-characters development by creating an account on GitHub.
- 47Minimal and efficient cross-platform file watching library
https://github.com/paulmillr/chokidar
Minimal and efficient cross-platform file watching library - paulmillr/chokidar
- 48A Node.js module for sending notifications on native Mac, Windows and Linux (or Growl as fallback)
https://github.com/mikaelbr/node-notifier
A Node.js module for sending notifications on native Mac, Windows and Linux (or Growl as fallback) - mikaelbr/node-notifier
- 49Process execution for humans
https://github.com/sindresorhus/execa
Process execution for humans. Contribute to sindresorhus/execa development by creating an account on GitHub.
- 50A node.js version management utility for Windows. Ironically written in Go.
https://github.com/coreybutler/nvm-windows
A node.js version management utility for Windows. Ironically written in Go. - coreybutler/nvm-windows
- 51A Node.js module that returns the OS/Distribution name of the environment you are working on
https://github.com/retrohacker/getos
A Node.js module that returns the OS/Distribution name of the environment you are working on - retrohacker/getos
- 52🗃 Simple access to, and manipulation of, the Windows Registry. With promises. Without rage.
https://github.com/MikeKovarik/rage-edit
🗃 Simple access to, and manipulation of, the Windows Registry. With promises. Without rage. - MikeKovarik/rage-edit
- 53Windows support for Node.JS scripts (daemons, eventlog, UAC, etc).
https://github.com/coreybutler/node-windows
Windows support for Node.JS scripts (daemons, eventlog, UAC, etc). - coreybutler/node-windows
- 54:shell: Portable Unix shell commands for Node.js
https://github.com/shelljs/shelljs
:shell: Portable Unix shell commands for Node.js. Contribute to shelljs/shelljs development by creating an account on GitHub.
- 55Node.js: extra methods for the fs object like copy(), remove(), mkdirs()
https://github.com/jprichardson/node-fs-extra
Node.js: extra methods for the fs object like copy(), remove(), mkdirs() - jprichardson/node-fs-extra
- 56🖥️ A list of awesome packages and frameworks for implementing javascript applications on the desktop
https://github.com/styfle/awesome-desktop-js
🖥️ A list of awesome packages and frameworks for implementing javascript applications on the desktop - styfle/awesome-desktop-js
- 57A cross platform solution to node's spawn and spawnSync
https://github.com/IndigoUnited/node-cross-spawn
A cross platform solution to node's spawn and spawnSync - moxystudio/node-cross-spawn
- 58Wrap all spawned Node.js child processes by adding environs and arguments ahead of the main JavaScript file argument.
https://github.com/isaacs/spawn-wrap#contracts-and-caveats
Wrap all spawned Node.js child processes by adding environs and arguments ahead of the main JavaScript file argument. - istanbuljs/spawn-wrap
- 59System Information Library for Node.JS
https://github.com/sebhildebrandt/systeminformation
System Information Library for Node.JS. Contribute to sebhildebrandt/systeminformation development by creating an account on GitHub.
- 60child_process.spawn ignores PATHEXT on Windows · Issue #2318 · nodejs/node-v0.x-archive
https://github.com/nodejs/node-v0.x-archive/issues/2318
For example require('child.process').spawn('mycmd') won't find C:\util\mycmd.bat when PATH contains C:\util and PATHEXT contains .BAT. Ye olde code (https://github.com/joyent/node/blob/v0.4/src/nod...
- 61Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions
https://github.com/creationix/nvm
Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions - nvm-sh/nvm
FAQ'sto know more about the topic.
mail [email protected] to add your project or resources here 🔥.
- 1What should I do if my app crashes on one platform but not on others?
- 2How can I fix performance issues in my cross-platform app?
- 3What can I do if my app's UI looks different on various platforms?
- 4How do I handle API differences in cross-platform development?
- 5What steps should I take if my cross-platform app has inconsistent data storage?
- 6How can I troubleshoot build errors when developing cross-platform apps?
- 7What should I do if my app does not respond on a specific platform?
- 8How do I address user permissions issues in cross-platform apps?
- 9What steps should I take if my app's functionality is limited on certain platforms?
- 10How do I troubleshoot cross-platform compatibility issues?
- 11What can I do if my app's build time is excessively long?
- 12How do I handle feature parity in cross-platform development?
- 13What steps should I take if my app has localization issues?
- 14How can I manage user sessions in a cross-platform app?
- 15What should I do if my cross-platform app has network connectivity issues?
- 16How do I implement testing strategies for cross-platform apps?
- 17What can I do if users report unexpected behavior in my app?
- 18How do I implement push notifications in cross-platform apps?
- 19How do I troubleshoot performance issues in cross-platform apps?
- 20What should I do if my app crashes on a specific platform?
- 21How do I fix broken UI elements in my cross-platform app?
- 22How do I handle permissions in cross-platform apps?
- 23What steps should I take to ensure proper debugging across platforms?
- 24How can I manage API responses effectively in a cross-platform app?
- 25What should I do if my app's features are not syncing correctly across devices?
- 26How do I optimize images for cross-platform applications?
- 27How do I handle inconsistent user experience across platforms?
- 28What can I do if the app's loading speed varies across platforms?
- 29How do I troubleshoot network-related issues in my cross-platform app?
- 30What should I do if my app behaves differently in different environments?
- 31How do I debug API integration issues in my cross-platform app?
- 32What can I do if my app doesn't support certain device features?
- 33How do I fix localization issues in cross-platform apps?
- 34What should I do if users are experiencing connectivity issues in my app?
- 35How do I resolve issues with third-party libraries in my cross-platform app?
- 36What steps should I take to improve cross-platform app security?
- 37How can I optimize the app's performance across different devices?
- 38How do I manage updates in my cross-platform application effectively?
- 39What should I do if I encounter compatibility issues with older devices?
- 40How can I handle user feedback effectively in my cross-platform app?
- 41What steps should I take to ensure proper app testing across platforms?
- 42How can I resolve build errors in cross-platform development?
- 43What should I do if my app is crashing on specific devices?
- 44How do I handle localization in my cross-platform app?
- 45What steps should I take to improve my app's user experience (UX)?
- 46How can I manage different screen sizes and orientations effectively?
- 47What should I do if my app's performance is slow?
- 48How do I effectively manage app dependencies?
- 49What steps can I take to enhance accessibility in my cross-platform app?
- 50How can I troubleshoot issues with push notifications?
- 51What steps should I follow to ensure data synchronization across platforms?
- 52How do I fix layout issues on different devices?
- 53What should I do if my app is consuming too much battery?
- 54How can I effectively test my cross-platform app?
- 55What steps can I take to manage user authentication effectively?
- 56How can I troubleshoot issues with third-party libraries?
- 57How can I fix issues with app permissions on mobile devices?
- 58What steps should I take if my app crashes on startup?
- 59How can I resolve conflicts during version control?
- 60What steps can I take to handle memory leaks in my application?
- 61How do I troubleshoot API response issues?
- 62What should I do if my app's UI elements are not rendering correctly?
- 63How can I improve the responsiveness of my application?
- 64What steps should I take to handle user feedback effectively?
- 65How can I troubleshoot a slow application?
- 66What should I do if my app's localization is not working?
- 67How do I handle user authentication issues?
- 68What steps can I take to resolve database connection errors?
- 69How do I fix broken links in my application?
- 70What steps should I take if my app's push notifications aren't working?
- 71How can I troubleshoot issues with responsive design?
- 72What should I do if my app's animations are lagging?
- 73How do I handle CORS errors in my application?
- 74How can I resolve issues with file uploads in my application?
- 75What steps should I take if my app is experiencing crashes?
- 76How do I troubleshoot API response issues?
- 77What should I do if my app is not displaying correctly in certain browsers?
- 78How can I fix issues with custom fonts in my web application?
- 79What steps should I take if my application is showing outdated content?
- 80How do I troubleshoot issues with state management in my application?
- 81What should I check if my application is loading slowly?
- 82How can I troubleshoot issues with third-party API integrations?
- 83What should I do if my application is not responding?
- 84How do I resolve problems with user authentication in my application?
- 85What steps should I take if my application has broken links?
- 86How can I resolve issues with payment processing in my application?
- 87What should I check if my application is displaying incorrect data?
- 88How can I troubleshoot issues with mobile responsiveness?
- 89What steps should I take if my application is crashing frequently?
- 90How can I fix issues with outdated content in my application?
- 91How can I resolve issues with cross-browser compatibility?
- 92What should I do if my application is loading slowly?
- 93How can I fix issues with user notifications in my application?
- 94What steps should I take if my application crashes on specific devices?
- 95How can I troubleshoot issues with form validation?
- 96What should I check if my application is not connecting to the database?
- 97How can I fix issues with third-party libraries in my application?
- 98What steps should I take to ensure application security?
- 99How can I troubleshoot issues with user authentication?
- 100What steps should I take to resolve API integration issues?
- 101How can I fix issues with responsive design?
- 102How can I troubleshoot build errors in my project?
- 103What steps can I take to resolve database connection issues?
- 104How do I fix issues with third-party integrations?
- 105What steps should I take to resolve frontend performance issues?
- 106How can I troubleshoot cross-browser compatibility issues?
- 107What steps should I take to resolve API rate limiting issues?
- 108How can I troubleshoot mobile app performance issues?
- 109What steps can I take to resolve issues with code dependencies?
- 110How can I troubleshoot data serialization issues?
- 111What steps should I take to resolve issues with user authentication?
- 112How can I troubleshoot issues with file uploads?
- 113What steps should I take to troubleshoot issues with SSL certificates?
- 114How can I resolve issues with API versioning?
- 115What steps can I take to troubleshoot web socket connections?
- 116How can I resolve issues with mobile app testing?
- 117What steps can I take to resolve issues with build failures?
- 118How can I troubleshoot API call failures?
- 119What steps can I take to fix errors in my application’s deployment?
- 120How can I resolve issues with caching in my application?
- 121What steps can I take to troubleshoot SSL certificate problems?
- 122How can I resolve issues with API versioning?
- 123What steps can I take to troubleshoot web socket connections?
- 124How can I resolve issues with mobile app testing?
- 125How can I troubleshoot errors in my web application?
- 126What steps should I take to optimize my application’s performance?
- 127How can I fix common issues with responsive web design?
- 128What are the steps to secure my web application?
- 129How can I resolve issues with version control?
- 130What are the best practices for API development?
- 131How can I manage dependencies in my Node.js application?
- 132What steps should I follow for effective project management in software development?
- 133How do I handle user feedback effectively?
- 134How can I streamline the deployment process for my application?
- 135What are the steps to effectively onboard new team members?
- 136How can I ensure code quality in my projects?
- 137What steps should I take to improve my team's collaboration?
- 138How can I track my application's performance?
- 139What are the best practices for maintaining a clean codebase?
- 140How can I enhance user experience in my application?
- 141How do I effectively manage remote teams?
- 142What strategies can I use for effective time management?
- 143How do I effectively onboard new team members?
- 144How can I resolve build errors in my cross-platform app?
- 145What should I do if my app crashes on startup?
- 146How do I fix network connectivity issues in my app?
- 147How can I troubleshoot performance issues in my cross-platform app?
- 148How can I handle user input validation errors?
- 149How can I fix issues with third-party API integrations?
- 150What steps should I take if my mobile app is not responding?
- 151How can I manage version control conflicts in Git?
- 152What should I do if my app's UI is not displaying correctly?
- 153How can I troubleshoot database connection issues?
- 154How can I troubleshoot slow performance in my web app?
- 155What should I do if my app doesn't load in a browser?
- 156How do I handle authentication errors in my application?
- 157What should I do if my API requests are failing?
- 158How can I recover from a failed software deployment?
- 159What steps should I take if my app is experiencing memory leaks?
- 160How can I fix cross-browser compatibility issues in my web app?
- 161What should I do if my app crashes unexpectedly?
- 162How can I manage API versioning in my application?
- 163How can I resolve dependency conflicts in my project?
- 164What should I do if my app's API rate limit is exceeded?
- 165How can I improve my app's performance on mobile devices?
- 166What should I do if my web app is slow?
- 167How can I ensure my web app is accessible to all users?
- 168What should I do if my app is experiencing security vulnerabilities?
- 169How can I manage user sessions securely?
- 170What should I do if my app is not scaling well?
- 171How can I fix broken links in my web app?
- 172What steps should I take to optimize my web app for search engines?
- 173How can I handle CORS issues in my web app?
- 174What should I do if my web app has memory leaks?
- 175How can I improve the security of my web app?
- 176What should I do if my API is returning errors?
- 177How can I implement user authentication in my web app?
- 178What should I do if my web app is slow?
- 179How can I manage state in my web app effectively?
- 180What should I do if my web app's deployment fails?
- 181How can I implement logging in my web app?
- 182How can I test my web app for performance issues?
- 183How do I fix a broken deployment in my web app?
- 184What steps should I take to optimize my web app's loading speed?
- 185How do I troubleshoot API connection issues in my web app?
- 186What should I do if my web app's performance degrades over time?
- 187How do I manage user authentication and authorization in my web app?
- 188What steps should I take to recover a lost database connection?
- 189How can I debug JavaScript errors in my web application?
- 190What should I do if my web app keeps crashing?
- 191How do I resolve version conflicts in dependencies?
- 192How can I improve error handling in my web application?
- 193How do I handle CORS issues in my web app?
Queriesor most google FAQ's about Cross-Platform.
mail [email protected] to add more queries here 🔍.
- 1
cross platform app development 2024
- 2
flutter cross platform app development
- 3
multi platform development
- 4
cross platform mobile app development full course
- 5
cross platform mobile app development شرح
- 6
cross platform or native mobile development
- 7
visual studio cross platform app development
- 8
cross platform game development
- 9
cross platform development
- 10
cross-platform mobile development
- 11
cross platform desktop application development
- 12
cross platform vs native development
- 13
cross platform mobile app development roadmap
- 14
cross platform web development
- 15
cross platform app development tutorial
- 16
cross platform mobile development
- 17
xamarin cross platform app development tutorial
- 18
cross platform desktop application development c#
- 19
cross platform mobile app development
- 20
front end and cross platform mobile development
- 21
best cross platform mobile app development framework
- 22
python cross platform app development
- 23
what is cross platform app development
- 24
best cross platform app development frameworks 2023
- 25
best cross platform app development frameworks 2024
- 26
what is cross platform development
- 27
java cross platform app development
- 28
cross platform mobile app development in tamil
- 29
native vs cross platform mobile app development
- 30
cross platform app development roadmap
- 31
mobile cross platform development
- 32
cross platform app development full course
- 33
best programming language for cross platform app development
- 34
cross platform app development react native
- 35
cross platform app development
- 36
c++ cross platform development
- 37
cross platform software development
- 38
cross platform application development
- 39
lyra cross-platform ui development
- 40
android os cross platform app development
- 41
cross platform desktop app development
- 42
best cross platform development framework
- 43
ionic cross platform development
- 44
cross platform vs hybrid app development
- 45
cross platform mobile app development course
- 46
cross platform mobile app development tutorial
- 47
cross platform app development course
- 48
cross platform development for ios and android
- 49
cross platform mobile app development 2024
- 50
cross platform mobile game development
- 51
cross platform development frameworks
- 52
native or cross platform mobile development
- 53
what is cross platform app development in tamil
- 54
kotlin cross platform development
More Sitesto check out once you're finished browsing here.
https://www.0x3d.site/
0x3d is designed for aggregating information.
https://nodejs.0x3d.site/
NodeJS Online Directory
https://cross-platform.0x3d.site/
Cross Platform Online Directory
https://open-source.0x3d.site/
Open Source Online Directory
https://analytics.0x3d.site/
Analytics Online Directory
https://javascript.0x3d.site/
JavaScript Online Directory
https://golang.0x3d.site/
GoLang Online Directory
https://python.0x3d.site/
Python Online Directory
https://swift.0x3d.site/
Swift Online Directory
https://rust.0x3d.site/
Rust Online Directory
https://scala.0x3d.site/
Scala Online Directory
https://ruby.0x3d.site/
Ruby Online Directory
https://clojure.0x3d.site/
Clojure Online Directory
https://elixir.0x3d.site/
Elixir Online Directory
https://elm.0x3d.site/
Elm Online Directory
https://lua.0x3d.site/
Lua Online Directory
https://c-programming.0x3d.site/
C Programming Online Directory
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
https://r-programming.0x3d.site/
R Programming Online Directory
https://perl.0x3d.site/
Perl Online Directory
https://java.0x3d.site/
Java Online Directory
https://kotlin.0x3d.site/
Kotlin Online Directory
https://php.0x3d.site/
PHP Online Directory
https://react.0x3d.site/
React JS Online Directory
https://angular.0x3d.site/
Angular JS Online Directory