A library that provides the ability to import/export Realm files from a variety of data container formats.

Related tags

realm-cocoa-converter
Overview

Realm Converter

Realm Converter is an open source software utility framework to make it easier to get data both in and out of Realm. It has been built in Swift, but can also be easily utilized in Objective-C projects.

Technical Requirements

macOS: 10.9 or later iOS: 10.0 or later

Features

Schema Generator

  • Provides an interface to analyze the intended files to import and produce a compatible schema set that can be used to generate the Realm file

Importer

  • Imports from CSV, XLSX and JSON.

Exporter

  • Exports a Realm file to CSV.

Examples

Using Swift's Objective-C bridging, it's possible to use Realm Converter in Objective-C as well; and all classes on the Objective-C side are pre-fixed with RLM.

Exporting a Realm file to CSV

let realmFilePath = '' // Absolute file path to my Realm file
let outputFolderPath = '' // Absolute path to the folder which will hold the CSV files

let csvDataExporter = try! CSVDataExporter(realmFilePath: realmFilePath)
try! csvDataExporter.export(toFolderAtPath: outputFolderPath)

Generate a Realm file from CSV

var filePaths = [String]() // Array of file paths to each CSV file to include
let destinationRealmPath = '' // Path to the folder that will hold this Realm file

// Analyze the files and produce a Realm-compatible schema
let generator =  ImportSchemaGenerator(files: filePaths)
let schema = try! generator.generate()

// Use the schema and files to create the Realm file, and import the data
let dataImporter = CSVDataImporter(files: filePaths)
try! dataImporter.import(toPath: destinationRealmPath, schema: schema)

License

Realm Converter is licensed under the Apache license. See the LICENSE file for details.

Issues
  • Add iOS support for RealmConverter

    Add iOS support for RealmConverter

    We wanted to use RealmConverter in our iOS project, Relisten. With these changes we're able to export our Realm database to csv files on iOS.

    This PR adds iOS support for RealmConverter. Some notes on the implementation:

    • TGSpreadsheetWriter is only available on macOS (due to its dependency on NSXMLDocument) so the Podfile/.podspec had to be updated and some code had to be wrapped in platform conditionals.
    • CSwiftV needs to be updated for Swift 4. The first PR with those fixes is in UberJason's fork
    opened by farktronix 22
  • Fix detect property value type on import

    Fix detect property value type on import

    fixes #26

    /cc @TimOliver, @jpsim

    T-Bug 
    opened by stel 6
  • Fix CSV export crash while exporting an empty object array

    Fix CSV export crash while exporting an empty object array

    This PR is addressed to https://github.com/realm/realm-browser-osx/issues/180.

    /cc @jpsim @TimOliver

    T-Bug-Crash 
    opened by stel 4
  • Fix Podfile format

    Fix Podfile format

    Current Podfile will result in this warning:

    [!] Invalid `Podfile` file: no block given (yield). Updating CocoaPods might fix the issue.
    
    opened by JustinJiaDev 4
  • Added Travis Support

    Added Travis Support

    I've enabled this project on Travis and added the appropriate Travis YML file.

    opened by TimOliver 4
  • Update Realm to 2.8.3

    Update Realm to 2.8.3

    T-Bug-Crash 
    opened by stel 4
  • Fixed project scheme for Travis CI

    Fixed project scheme for Travis CI

    Made the main Xcode scheme shared in order for it to be properly built on Travis

    opened by TimOliver 3
  • Removed Realm Swift and re-added dependent enum.

    Removed Realm Swift and re-added dependent enum.

    It wasn't sitting well with me that this library was pulling in RealmSwift as a dependency when it was only being used for a single enum (All of the import/export logic is done via Realm Objective-C).

    As such, this PR removes RealmSwift as a dependency, and re-implements just the enum it was using.

    opened by TimOliver 3
  • `pod lib lint` is failing

    `pod lib lint` is failing

    pod lib lint is failing with these errors and warnings:

       Testing with `xcodebuild`. 
     -> RealmConverter (0.5.3)
        - ERROR | swift: Specification `RealmConverter` specifies inconsistent `swift_versions` (`5.0`) compared to the one present in your `.swift-version` file (`3`). Please remove the `.swift-version` file which is now deprecated and only use the `swift_versions` attribute within your podspec.
        - ERROR | [OSX] xcodebuild: Returned an unsuccessful exit code.
        - NOTE  | xcodebuild:  note: Using new build system
        - NOTE  | xcodebuild:  note: Building targets in parallel
        - NOTE  | xcodebuild:  note: Using codesigning identity override: 
        - NOTE  | xcodebuild:  note: Planning build
        - NOTE  | xcodebuild:  note: Constructing build description
        - NOTE  | [OSX] xcodebuild:  warning: [CP] Unable to find matching .xcframework slice in 'Realm/core/realm-sync.xcframework realm-sync library macos-x86_64' for the current build architectures (arm64 x86_64).
        - NOTE  | xcodebuild:  ld: warning: directory not found for option '-L/Users/pharkas/Library/Developer/Xcode/DerivedData/App-asmewyhnuikzkmglxcvabhvcalpd/Build/Products/Release/XCFrameworkIntermediates/realm-sync'
        - NOTE  | xcodebuild:  clang: error: linker command failed with exit code 1 (use -v to see invocation)
        - NOTE  | [OSX] xcodebuild:  ld: warning: dylib (/Users/pharkas/Library/Developer/Xcode/DerivedData/App-asmewyhnuikzkmglxcvabhvcalpd/Build/Products/Release/SSZipArchive/SSZipArchive.framework/SSZipArchive) was built for newer macOS version (10.8) than being linked (10.7)
        - NOTE  | [OSX] xcodebuild:  warning: The macOS deployment target 'MACOSX_DEPLOYMENT_TARGET' is set to 10.7, but the range of supported deployment target versions is 10.9 to 11.0.99. (in target 'TGSpreadsheetWriter' from project 'Pods')
        - NOTE  | [OSX] xcodebuild:  warning: The macOS deployment target 'MACOSX_DEPLOYMENT_TARGET' is set to 10.8, but the range of supported deployment target versions is 10.9 to 11.0.99. (in target 'SSZipArchive' from project 'Pods')
        - NOTE  | xcodebuild:  note: Using codesigning identity override: -
        - NOTE  | [iOS] xcodebuild:  warning: Skipping code signing because the target does not have an Info.plist file and one is not being generated automatically. (in target 'App' from project 'App')
        - NOTE  | [iOS] xcodebuild:  warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 14.2.99. (in target 'PathKit' from project 'Pods')
        - NOTE  | [iOS] xcodebuild:  warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 14.2.99. (in target 'CSwiftV' from project 'Pods')
    
    [!] RealmConverter did not pass validation, due to 2 errors.
    You can use the `--no-clean` option to inspect any issue.
    

    There appear to be three problems here:

    1. A swift version is defined in .swift-version, which isn't necessary any more
    • This is a simple fix
    1. Realm 10.0 doesn't build for arm64. This should be fixed with Cocoapods 1.10 and Realm 10.1 (per this issue) but I'm still seeing the error during pod lib lint even with those versions on my machine.
    • I'm still working on a fix for this
    1. Most of the dependencies have a lower MacOS or iOS deployment target than RealmConverter, which creates warnings.
    • We can fix this in our Podfile, but it's not possible to fix it in the pod spec since that would require overwriting build settings for other Cocoapods in a workspace.
    opened by farktronix 3
  • Added podspec

    Added podspec

    Adding a podspec to this repo.

    This one is still a WIP since it's apparently not supported in CocoaPods for dependency pods to use the git: syntax. The project is going to need some extra refactoring to get it properly working with CocoaPods.

    opened by TimOliver 2
  • How can I use this as a mac os app?

    How can I use this as a mac os app?

    I downloaded the .zip file for the repo and open/run the workspace with Mac os as target but nothing opens. What I am doing wrong? or is it like I have to include it in my project and use it programmatically. Screenshot 2021-09-22 at 6 32 04 PM

    O-Community 
    opened by ammarmarn 0
  • Bump addressable from 2.7.0 to 2.8.0

    Bump addressable from 2.7.0 to 2.8.0

    Bumps addressable from 2.7.0 to 2.8.0.

    Changelog

    Sourced from addressable's changelog.

    Addressable 2.8.0

    • fixes ReDoS vulnerability in Addressable::Template#match
    • no longer replaces + with spaces in queries for non-http(s) schemes
    • fixed encoding ipv6 literals
    • the :compacted flag for normalized_query now dedupes parameters
    • fix broken escape_component alias
    • dropping support for Ruby 2.0 and 2.1
    • adding Ruby 3.0 compatibility for development tasks
    • drop support for rack-mount and remove Addressable::Template#generate
    • performance improvements
    • switch CI/CD to GitHub Actions
    Commits
    • 6469a23 Updating gemspec again
    • 2433638 Merge branch 'main' of github.com:sporkmonger/addressable into main
    • e9c76b8 Merge pull request #378 from ashmaroli/flat-map
    • 56c5cf7 Update the gemspec
    • c1fed1c Require a non-vulnerable rake
    • 0d8a312 Adding note about ReDoS vulnerability
    • 89c7613 Merge branch 'template-regexp' into main
    • cf8884f Note about alias fix
    • bb03f71 Merge pull request #371 from charleystran/add_missing_encode_component_doc_entry
    • 6d1d809 Adding note about :compacted normalization
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Failed: Unable to open a realm at path make_dir() failed: No such file or directory

    Failed: Unable to open a realm at path make_dir() failed: No such file or directory

    Failed: Unable to open a realm at path make_dir() failed: No such file or directory.

    I'm trying to export realm file to csv in real device. am getting this error. Can someone help?

    Goals

    read data from the realm file on real iPhone

    Expected Result

    Read realm file without error and export as csv

    Code Sample

    do {
                let realmPath = Realm.Configuration.defaultConfiguration.fileURL
                try exportToCSVAndCheckResults(realmPath?.absoluteString ?? "", outputDirectoryPath: outputDirectoryPath)
            } catch let error as NSError {
                print("Failed: \(String(describing: error.localizedDescription))")
            }
    
    func exportToCSVAndCheckResults(_ realmPath: String, outputDirectoryPath: String) throws {
            
            let exporter = try CSVDataExporter(realmFilePath: realmPath)
            try exporter.export(toFolderAtPath: outputDirectoryPath)
            let configuration = RLMRealmConfiguration.default()
            configuration.fileURL = URL(fileURLWithPath: realmPath)
            configuration.dynamic = true
            
            let realm = try RLMRealm(configuration: configuration)
            
            let schema = realm.schema
            
            for object in schema.objectSchema {
                print(FileManager.default.fileExists(atPath: "\(outputDirectoryPath)/\(object.className).csv"))
            }
        }
    
    O-Community 
    opened by Keerthi-Sparkout 0
  • Support for other data type like arrays, realm objects etc

    Support for other data type like arrays, realm objects etc

    Hi devs,

    Are we planning to add support for realm objects and arrays also? I'm currently is process to write a script which takes a bunch of CSV and gives me the compressed realm in return to be used in my .IPA file. But currently the script fails for data types other than Int, Double, Bool, String.

    O-Community 
    opened by sanchitgarg1909 0
  • Crash after importing a csv file and adding a User object in realm. (iOS)

    Crash after importing a csv file and adding a User object in realm. (iOS)

    I am importing a CSVFile in my iOS app:

    
    let realm = try! Realm(configuration: Realm.Configuration.defaultConfiguration)
    let path = Bundle.main.path(forResource: "magictelescope_csv", ofType: "csv")
    let documentsPath1 = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
    let logsPath = documentsPath1.appendingPathComponent("data")
    
    let file = path!
    let generator = ImportSchemaGenerator(file: file)
    let schema = try! generator.generate()
    
    let dataImporter = CSVDataImporter(file: file)
    try! dataImporter.import(toPath: documentsPath1.absoluteString!, schema: schema)
            
            try! realm.write {
                let project = Project("Muchos")
    
                let dataset = Dataset()
                dataset.tableName = "magictelescope_csv"
                realm.add(dataset)
                realm.add(project)
            }
    

    The crash log is this:

    `` Terminating app due to uncaught exception 'RLMException', reason: 'Object type 'magictelescope_csv' is not managed by the Realm. If using a custom objectClasses / objectTypes array in your configuration, add magictelescope_csv to the list of objectClasses / objectTypes.' *** First throw call stack: ( 0 CoreFoundation 0x00007fff23baa1ee __exceptionPreprocess + 350 1 libobjc.A.dylib 0x00007fff50864b20 objc_exception_throw + 48 2 Realm 0x0000000104fc51ed _ZN13RLMSchemaInfoixEP8NSString + 189 3 Realm 0x0000000105019bb1 RLMAddObjectToRealm + 401 4 Realm 0x00000001050fd96b -[RLMRealm addObject:] + 43 5 RegicideDemo 0x0000000104a6733c $s12RegicideDemo15CSVDataImporterC6import6toPath6schemaSo8RLMRealmCSS_AA12ImportSchemaCtKF + 3084 6 RegicideDemo 0x0000000104a5b7ad $s12RegicideDemo14ViewControllerC10newProjectyyF + 2429 7 RegicideDemo 0x0000000104a5beea $s12RegicideDemo14ViewControllerC15newProjectClickyyypF + 58 8 RegicideDemo 0x0000000104a5bf40 $s12RegicideDemo14ViewControllerC15newProjectClickyyypFTo + 80 9 UIKitCore 0x00007fff4757a082 -[UIApplication sendAction:to:from:forEvent:] + 83 10 UIKitCore 0x00007fff46f608e5 -[UIControl sendAction:to:forEvent:] + 223 11 UIKitCore 0x00007fff46f60c2f -[UIControl _sendActionsForEvents:withEvent:] + 398 12 UIKitCore 0x00007fff46f5fb8e -[UIControl touchesEnded:withEvent:] + 481 13 UIKitCore 0x00007fff475b4a31 -[UIWindow _sendTouchesForEvent:] + 2604 14 UIKitCore 0x00007fff475b6338 -[UIWindow sendEvent:] + 4596 15 UIKitCore 0x00007fff47591693 -[UIApplication sendEvent:] + 356 16 UIKitCore 0x00007fff47611e5a __dispatchPreprocessedEventFromEventQueue + 6847 17 UIKitCore 0x00007fff47614920 __handleEventQueueInternal + 5980 18 CoreFoundation 0x00007fff23b0d271 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 17 19 CoreFoundation 0x00007fff23b0d19c __CFRunLoopDoSource0 + 76 20 CoreFoundation 0x00007fff23b0c974 __CFRunLoopDoSources0 + 180 21 CoreFoundation 0x00007fff23b0767f __CFRunLoopRun + 1263 22 CoreFoundation 0x00007fff23b06e66 CFRunLoopRunSpecific + 438 23 GraphicsServices 0x00007fff38346bb0 GSEventRunModal + 65 24 UIKitCore 0x00007fff47578dd0 UIApplicationMain + 1621 25 RegicideDemo 0x0000000104a6613b main + 75 26 libdyld.dylib 0x00007fff516ecd29 start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException

    O-Community 
    opened by carlosandresSanchez 0
  • Can't convert to CSV

    Can't convert to CSV

    After I installed pod 'RealmConverter' and make the simple swift class to convert realm to csv. The exported csv file was empty rows.

    ViewController.swift

    override func viewDidLoad() {
            super.viewDidLoad()
            let stringPath = Bundle.main.path(forResource: "mydata", ofType: "realm")
            // Do any additional setup after loading the view.
            let realmFilePath = stringPath // Absolute file path to my Realm file
            let outputFolderPath = "~/Desktop/csv" // Absolute path to the folder which will hold the CSV files
            let csvDataExporter = try! CSVDataExporter(realmFilePath: realmFilePath!)
            try! csvDataExporter.export(toFolderAtPath: outputFolderPath)
        }
    

    And my PodFile

    platform :osx, '10.12'
    use_frameworks!
    target 'MyProject' do
      pod 'RealmConverter'
    end
    
    O-Community 
    opened by rensamatar 0
  • Opening older realm file corrupts it

    Opening older realm file corrupts it

    It appears simply using this lib to open an older realm file rewrites its version so that the original app can't open the file anymore. IMO reads should not be destructive. I'm investigating if this is a RealmConveter issue or a realm issue.

    O-Community 
    opened by jhoughjr 0
  • Add relationship report for CSV Import

    Add relationship report for CSV Import

    Per the source code:

    • warning: Presently, relationships between Realm objects are not captured in the CSV files.

    Paying customer Showsourcing would like this as well as another prospect

    opened by mgeerling 2
  • Can't Find Library After Pod Install

    Can't Find Library After Pod Install

    Hey there!

    Goals So I've been trying to find software that let's me build a Realm database from a CSV, but I just haven't been able to run a project after installing RealmConverter.

    Expected Result I expected to be able to run an empty project with the RealmConverter framework installed and print the "hello world" message that's in the templated main.swift file.

    Actual Result Fails to run.

    The last thing I tired was install via pod:

    Steps to reproduce

    1. Create macOS terminal project
    2. pod init; add pod "RealmConverter", fix misc stuff, pod install
    3. Run project

    Code Sample Here is my PodFile:

    platform :osx, '10.9'
    
    target 'RealmBuilder' do
      use_frameworks!
    
      pod 'RealmConverter'
    end
    

    Here is main.swift:

    import Foundation
    
    print("Hello, World!")
    

    But I get library missing errors:

    dyld: Library not loaded: @rpath/CSwiftV.framework/Versions/A/CSwiftV
    Referenced from: /Users/me/Library/Developer/Xcode/DerivedData/RealmBuilder-hhgucuyuvbtlvqgxfuqmhmnfastg/Build/Products/Debug/RealmBuilder
    Reason: image not found
    

    Other stuff: I'm running macOS 10.12.6 pod version is 1.4.0

    Thoughts?

    opened by didiergarcia 2
  • Support Korean.

    Support Korean.

    Export Realm data to CSV gave me chin ease instead of Korean.

    opened by younatics 0
Releases(0.5.4)
Owner
Realm
Realm is a mobile database: a replacement for SQLite & ORMs. SDKs for Swift, Objective-C, Java, Kotlin, C#, and JavaScript.
Realm
A library that provides the ability to import/export Realm files from a variety of data container formats.

Realm Converter Realm Converter is an open source software utility framework to make it easier to get data both in and out of Realm. It has been built

Realm 204 Jul 28, 2021
Unrealm is an extension on RealmCocoa, which enables Swift native types to be saved in Realm.

Unrealm enables you to easily store Swift native Classes, Structs and Enums into Realm . Stop inheriting from Object! Go for Protocol-Oriented program

Artur  Mkrtchyan 459 Sep 14, 2021
Sync Realm Database with CloudKit

IceCream helps you sync Realm Database with CloudKit. It works like magic! Features Realm Database Off-line First Thread Safety Reactive Programming O

Soledad 1.6k Sep 18, 2021
WCDB is a cross-platform database framework developed by WeChat.

WCDB 中文版本请参看这里 WCDB is an efficient, complete, easy-to-use mobile database framework used in the WeChat application. It's currently available on iOS,

Tencent 9.2k Sep 16, 2021
Mac Native Mongodb Client

System Requirements Mac OS X (10.8.x, 10.9.x, 10.10.x), intel 64bit based. Download HERE Or you can compile it yourself using Xcode Build Just build i

Jérôme Lebel 2.5k Sep 12, 2021
Official home of the DB Browser for SQLite (DB4S) project. Previously known as "SQLite Database Browser" and "Database Browser for SQLite". Website at:

DB Browser for SQLite What it is DB Browser for SQLite (DB4S) is a high quality, visual, open source tool to create, design, and edit database files c

null 15.4k Sep 24, 2021
CoreData/Realm sweet wrapper written in Swift

What is SugarRecord? SugarRecord is a persistence wrapper designed to make working with persistence solutions like CoreData in a much easier way. Than

Modo 2.1k Aug 18, 2021
Native MongoDB driver for Swift, written in Swift

Installation | Tutorial | Basic usage | About BSON | Codable | Community | How to help A fast, pure swift MongoDB driver based on Swift NIO built for

null 617 Sep 20, 2021
A Cocoa / Objective-C wrapper around SQLite

FMDB v2.7 This is an Objective-C wrapper around SQLite. The FMDB Mailing List: https://groups.google.com/group/fmdb Read the SQLite FAQ: https://www.s

August 13.6k Sep 21, 2021
Free universal database tool and SQL client

DBeaver Free multi-platform database tool for developers, SQL programmers, database administrators and analysts. Supports any database which has JDBC

DBeaver 22.2k Sep 16, 2021
A type-safe, Swift-language layer over SQLite3.

SQLite.swift A type-safe, Swift-language layer over SQLite3. SQLite.swift provides compile-time confidence in SQL statement syntax and intent. Feature

Stephen Celis 7.8k Sep 16, 2021
Native cross-platform MongoDB management tool

About Robo 3T Robo 3T (formerly Robomongo *) is a shell-centric cross-platform MongoDB management tool. Unlike most other MongoDB admin UI tools, Robo

Studio 3T 8.7k Sep 23, 2021
The easiest way to get started with MongoDB on the Mac

mongoDB.app The easiest way to get started with mongoDB on the Mac. Just download, drag to the applications folder, and double-click. Download Version

Giovanni Collazo 472 Sep 16, 2021
Personal db information management system.

The Information Management System This tool is so simple that most people don't understand how to use it. TL;DR This is a personal database which stor

null 39 Sep 14, 2021
The easiest way to get started with PostgreSQL on the Mac

Postgres.app The easiest way to run PostgreSQL on your Mac Includes everything you need to get started with PostgreSQL Comes with a pretty GUI to star

Postgres.app 6k Sep 23, 2021
Open source PostgreSQL GUI client for macOS, Linux and Windows

Postbird Postbird is a cross-platform PostgreSQL GUI client, written in JavaScript, runs with Electron Download Version 0.8.4 MacOS: Postbird-0.8.4.dm

Pavel Evstigneev 1.2k Sep 21, 2021
:wrench: Cross-platform GUI management tool for Redis

RDM Install & Run | Quick Start | Native Formatters | Development Guide | Known issues | Telegram Chat Open source cross-platform Desktop Manager for

Igor Malinovskiy 19k Sep 24, 2021
YapDB is a collection/key/value store with a plugin architecture. It's built atop sqlite, for Swift & objective-c developers.

YapDatabase is a collection/key/value store and so much more. It's built atop sqlite, for Swift & Objective-C developers, targeting macOS, iOS, tvOS &

Yap Studios 3.3k Sep 14, 2021
💻 Medis is a beautiful, easy-to-use Mac database management application for Redis.

Medis Medis is a beautiful, easy-to-use Redis management application built on the modern web with Electron, React, and Redux. It's powered by many awe

Zihua Li 10.4k Sep 14, 2021