A user-friendly database interface

Overview

Diwata

Diwata is a database interface for PostgreSQL,Mysql, Sqlite with the goal of being usable, user-friendly with its basic and advanced functionality be discoverable by the user.

Backers on Open Collective Sponsors on Open Collective

Demo

sakila database in heroku

Quick local demo setup using sqlite sakila.db

Use the nightly compiler.

git clone https://github.com/ivanceras/diwata
cd diwata
git submodule update --init --recursive
./run_sqlite_sakila.sh
open http://localhost:9000

Features

  • Automatic display of direct and indirect linked record
  • Freeze column and freeze rows
  • Infinite scrolling / loading of page on scrolling
  • User friendly granular search and filter
  • Diplay descriptive referred records. (ie: Instead of displaying the foreign_key value integer or uuid, display the referred records in such a way it is distinguisable by the user)
  • Well integrated with the browsers, clickable tables, records and tabs can be openned in a new window and displays the data as though clicking on it.

Roadmap checklist:

  • Basic data display
  • Infinite load-on-deman scrolling
  • Meaningful dropdown lookup
  • Seamless url-based navigation
  • Delete records
  • Update records
  • Insert records
  • Detail record update/insert, delete link detail records [ ] Filtering and searching on has_many and indirect records for detailed record
  • Undo update/delete records (upon deletion/modification, user have a grace period to undo the changes)
  • Search and filter data
  • Drag/Rearrange and resize columns
  • Multi column sorting
  • Smart delete cascade messages
  • Error Handling/Error messages display
  • Advanced filtering, where user can type in the logic for filtering
  • Display of images and file attachments
  • Interactive/dynamic record count indicator for toolbar buttons
  • Loading indicators
  • Page transition animation
  • Search/filter on tables
  • Table/Columns filtering based on privilege system.
    • Display only tables that the user has privilege
    • Display only columns that the user has privilege
    • An interface for superusers to set user privileges for each tables
  • Row level security
    • When the server is configured to require user login, the user will be forced to login
  • Plugin and module system
  • Custom validation on field
  • Custom buttons for application specific functionality

Notes:

[1]: You can use sakila database dump as demo database https://github.com/ivanceras/sakila

Patreon:

Please support me on patreon, so I can dedicate more time to the development of this project

Contact me:

ivanceras [a t] gmail.com

Contributors

This project exists thanks to all the people who contribute.

Backers

Please be a backer of this project! πŸ™ [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

Comments
  • Support Arrays

    Support Arrays

    I was trying to check out this project using my local db, but I get a panic with not convered: ArrayType(Int) in rustorm-0.10.5/src/pg/column_info.rs:203:30.

    opened by sebmiq 7
  • Elm 0.19

    Elm 0.19

    one of the dependencies is outdated and breaks during the install.

    npm ERR! errno 1
    npm ERR! [email protected] install: `node install.js`
    npm ERR! Exit status 1
    npm ERR!
    npm ERR! Failed at the [email protected] install script.
    npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /root/.npm/_logs/2018-09-08T05_04_13_032Z-debug.log
    
    

    You can manually download the new update using: wget "https://github.com/elm/compiler/releases/download/0.19.0/binaries-for-linux.tar.gz"

    opened by ghost 4
  • Build breaks due to missing rustorm/dao/Cargo.toml

    Build breaks due to missing rustorm/dao/Cargo.toml

    Following the "Install dependencies" step in README.md, during the "Compile and run" steps,

    running e.g. cargo run -p diwata -- --help gives me the error

    error: failed to read `/tmp/diwata/rustorm/dao/Cargo.toml`
    
    Caused by:
      No such file or directory (os error 2)
    

    See https://github.com/rust-lang/rust/issues/40284 and https://github.com/rust-lang/rust/pull/40297

    A simple solution (that at least make the program run) is to add git submodule update --init as a step before the cargo run... line, but I'm not sure if that's really what you want.


    I'm using

    • Ubuntu 17.10
    • Git version 2.15.1
    • rustc 1.26.0-nightly (2789b067d 2018-03-06)
    opened by Ran4 4
  • Failed to build openssl v0.9.24

    Failed to build openssl v0.9.24

    I think I've hit this issue https://github.com/sfackler/rust-openssl/issues/987. This command from the README

    cargo install diwata_cli
    

    results in that error:

    error: failed to run custom build command for `openssl v0.9.24`
    process didn't exit successfully: `/tmp/cargo-installt1jW4Q/release/build/openssl-8abd590564d2b4a3/build-script-build` (exit code: 101)
    --- stderr
    thread 'main' panicked at 'Unable to detect OpenSSL version', /home/smueller/.cargo/registry/src/github.com-1ecc6299db9ec823/openssl-0.9.24/build.rs:16:14
    note: Run with `RUST_BACKTRACE=1` for a backtrace
    
    ➜  diwata git:(master) βœ— rustc -vV                                                                                                                                                     16:51:28
    rustc 1.32.0-nightly (14997d56a 2018-12-05)
    binary: rustc
    commit-hash: 14997d56a550f4aa99fe737593cd2758227afc56
    commit-date: 2018-12-05
    host: x86_64-unknown-linux-gnu
    release: 1.32.0-nightly
    LLVM version: 8.0
    ➜  ~ openssl version                                                                                                                                                                   15:39:57
    OpenSSL 1.1.1a  20 Nov 2018
    ➜  ~ lsb_release -a                                                                                                                                                                    15:40:02
    No LSB modules are available.
    Distributor ID: Debian
    Description:    Debian GNU/Linux buster/sid
    Release:        unstable
    Codename:       sid
    
    opened by zzeroo 3
  • Compile error on Win 10 64-bit machine

    Compile error on Win 10 64-bit machine

    I am trying to do a compile on Windows 64-bit machine and run into this error. I have OpenSSL installed and set the environment as per here - https://facility9.com/2016/03/installing-rust-on-windows/

    • DEP_OPENSSL_INCLUDE=C:\OpenSSL-Win64\include
    • OPENSSL_INCLUDE_DIR=C:\OpenSSL-Win64\include
    • OPENSSL_LIB_DIR=C:\OpenSSL-Win64\lib\VC
    • OPENSSL_LIBS=ssleay32MT:libeay32MT
    error: failed to run custom build command for `openssl-sys v0.9.33`
    process didn't exit successfully: `/tmp/cargo-install7r9fIC/release/build/openssl-sys-40df22b71997e8b6/build-script-main` (exit code: 101)
    --- stdout
    cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_LIB_DIR
    cargo:rerun-if-env-changed=OPENSSL_LIB_DIR
    cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_INCLUDE_DIR
    cargo:rerun-if-env-changed=OPENSSL_INCLUDE_DIR
    cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_DIR
    cargo:rerun-if-env-changed=OPENSSL_DIR
    run pkg_config fail: "Failed to run `\"pkg-config\" \"--libs\" \"--cflags\" \"openssl\"`: No such file or directory (os error 2)"
    
    --- stderr
    thread 'main' panicked at '
    
    
    Could not find directory of OpenSSL installation, and this `-sys` crate cannot
    proceed without this knowledge. If OpenSSL is installed and this crate had
    trouble finding it,  you can set the `OPENSSL_DIR` environment variable for the
    compilation process.
    
    Make sure you also have the development packages of openssl installed.
    For example, `libssl-dev` on Ubuntu or `openssl-devel` on Fedora.
    
    
    If you're in a situation where you think the directory *should* be found
    automatically, please open a bug at https://github.com/sfackler/rust-openssl
    and include information about your system as well as this message.
    
        $HOST = x86_64-unknown-linux-gnu
        $TARGET = x86_64-unknown-linux-gnu
        openssl-sys = 0.9.33
    
    
    It looks like you're compiling on Linux and also targeting Linux. Currently this
    requires the `pkg-config` utility to find OpenSSL but unfortunately `pkg-config`
    could not be found. If you have OpenSSL installed you can likely fix this by
    installing `pkg-config`.
    
    ', /home/jbenedict/.cargo/registry/src/github.com-1ecc6299db9ec823/openssl-sys-0.9.33/build/main.rs:232:5
    note: Run with `RUST_BACKTRACE=1` for a backtrace.
    
    warning: build failed, waiting for other jobs to finish...
    error: failed to compile `diwata_cli v0.1.5`, intermediate artifacts can be found at `/tmp/cargo-install7r9fIC`
    
    Caused by:
      build failed
    
    opened by jasonjb82 2
  • Activating Open Collective

    Activating Open Collective

    Hi, I'm making updates for Open Collective. Either you or a supporter signed this repo up for Open Collective. This pull request adds backers and sponsors from your Open Collective https://opencollective.com/diwata ❀️

    It adds two badges at the top to show the latest number of backers and sponsors. It also adds placeholders so that the avatar/logo of new backers/sponsors can automatically be shown without having to update your README.md. [more info]. See how it looks on this repo. You can also add a "Donate" button to your website and automatically show your backers and sponsors there with our widgets. Have a look here: https://opencollective.com/widgets

    P.S: As with any pull request, feel free to comment or suggest changes. The only thing "required" are the placeholders on the README because we believe it's important to acknowledge the people in your community that are contributing (financially or with code!).

    Thank you for your great contribution to the open source community. You are awesome! πŸ™Œ And welcome to the open collective community! 😊

    Come chat with us in the #opensource channel on https://slack.opencollective.com - great place to ask questions and share best practices with other open source sustainers!

    opened by monkeywithacupcake 1
  • Spreadsheet UI mode

    Spreadsheet UI mode

    I found your comment here on Reddit and I think it's awesome that you want to make Diwata more like Airtable seeing as people love the data entry UI for it and often use it as the backend for apps e.g. CRM systems.

    This could be done via a UI toggle mode which allows more spreadsheet-like data entry, or just make adjustments to the existing UI.

    Some differences would be:

    • Creating field types: single line text, long text, single select etc
    • Make the sidebar for tables collapsible
    • Swapping from single field/column search to whole table search

    Great to see the improvements you've already made towards better UI, looking forward to more to come :)

    opened by ajvsol 1
  • Debounce search

    Debounce search

    I just quickly tried out a demo and found search to be very laggy. I guess that is because there is no debouncing - every keystroke triggers a query. It might speed up things to add a one second wait time if there are more keystrokes and then trigger the query.

    I have not looked at the code but probably it would be a good idea to cancel queries if they have become obsolete (one more key added)

    Other then that I found it very intersting to see and will have an eye on this project. Cheers!

    enhancement 
    opened by brasilikum 1
  • Loading of window perception time is too long

    Loading of window perception time is too long

    Loading of a window takes a long time, since the init function also fetches the records to be displayed in the window as well. To overcome this, the window has to be initialize and displayed first and then the loading of the records will have to kick in afterwards.

    enhancement 
    opened by ivanceras 1
  • Looking for a co-founder

    Looking for a co-founder

    I'm looking for a co-founder who can do marketing, and basic of building a website such as a landing page. This project is about to reach maturity and a commercial version will be released.

    opened by ivanceras 0
  • problem with git submodule init

    problem with git submodule init

    Hi! I try to install diwata to my server: when run command "git submodule update --init --recursive" i see error: git submodule update --init --recursive fatal: No url found for submodule path 'crates/sakila' in .gitmodules

    Can you fix this problem?

    opened by Aleks3050 1
  • error[E0554]: `#![feature]`

    error[E0554]: `#![feature]`

    got error error[E0554]: #![feature] may not be used on the stable release channel ---~/.cargo/registry/src/github.com-1ecc6299db9ec823/sauron_vdom-0.20.0/src/lib.rs:3:1 | 3 | #![feature(arbitrary_self_types)] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    error[E0554]: #![feature] may not be used on the stable release channel --> ~/.cargo/registry/src/github.com-1ecc6299db9ec823/sauron_vdom-0.7.1/src/lib.rs:3:1 | 3 | #![feature(arbitrary_self_types)] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    error: aborting due to previous error

    rustc version1.40.0 stable following git clone https://github.com/ivanceras/diwata cd diwata git submodule update --init --recursive ./run_sqlite_sakila.sh

    opened by goodforever 3
  • Panics when database has xml data type

    Panics when database has xml data type

    I get this error when trying to connect to my postgres database

    thread 'main' panicked at 'not yet handled: xml', /home/jbenedict/.cargo/registry/src/github.com-1ecc6299db9ec823/rustorm-0.10.7/src/pg/column_info.rs:320:26
    note: Run with `RUST_BACKTRACE=1` for a backtrace.
    

    This is what appears in the browser when I open http://localhost:8000 image

    missing datatype 
    opened by jasonjb82 2
  • Could not connect to database (no SSL connection possible?)

    Could not connect to database (no SSL connection possible?)

    Trying this out on a hosted database I got the following:

    connection Error: DbError(PlatformError(PostgresError(GenericError("From conversion", Error(Db(DbError { severity: "FATAL", parsed_severity: None, code: SqlState("28000"), message: "no pg_hba.conf entry for host \"......\", user \"......\", database \"......\", SSL off", detail: None, hint: None, position: None, where_: None, schema: None, table: None, column: None, datatype: None, constraint: None, file: Some("auth.c"), line: Some(470), routine: Some("ClientAuthentication") }))))))
    

    I suspect (?) the problem may be that SSL is required by the db host, but is turned off by rustorm over here: https://github.com/ivanceras/rustorm/blob/8da5be8dd143591f6ae09d1469fa4a54ba496d40/src/pg/mod.rs#L34

    EDIT: note that the hosting is on heroku https://devcenter.heroku.com/articles/connecting-to-heroku-postgres-databases-from-outside-of-heroku#ssl

    help wanted 
    opened by rehno-lindeque 5
  • Compile with stable release of rust

    Compile with stable release of rust

    Hi, I was trying to create a diwata package for NixOS (and other platforms where the nix package manager is available).

    However, in order to get it to build I've had to compile with nightly rustc, which would make it tough to get it accepted into the nixpkgs collection.

    Running cargo build --release
       Compiling serde v1.0.27
       Compiling rustc-serialize v0.3.24
       Compiling gcc v0.3.54
       Compiling byteorder v1.2.1
       Compiling bitflags v1.0.1
       Compiling lazy_static v0.2.11
       Compiling strsim v0.7.0
       Compiling pear v0.0.12
       Compiling ordermap v0.2.13
       Compiling num-traits v0.2.1
       Compiling scopeguard v0.3.3
       Compiling matches v0.1.6
       Compiling unicode-normalization v0.1.5
       Compiling ansi_term v0.11.0
       Compiling nodrop v0.1.12
       Compiling byte-tools v0.2.0
       Compiling state v0.3.3
    error[E0554]: #![feature] may not be used on the stable release channel
     --> /tmp/nix-build-diwata-0.1.0.drv-0/diwata-0.1.0-vendor/state/src/lib.rs:1:1
      |
    1 | #![feature(const_fn)]
      | ^^^^^^^^^^^^^^^^^^^^^
    
    error[E0554]: #![feature] may not be used on the stable release channel
     --> /tmp/nix-build-diwata-0.1.0.drv-0/diwata-0.1.0-vendor/state/src/lib.rs:2:1
      |
    2 | #![feature(const_unsafe_cell_new)]
      | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    error[E0554]: #![feature] may not be used on the stable release channel
     --> /tmp/nix-build-diwata-0.1.0.drv-0/diwata-0.1.0-vendor/state/src/lib.rs:3:1
      |
    3 | #![feature(const_atomic_usize_new)]
      | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    error[E0554]: #![feature] may not be used on the stable release channel
     --> /tmp/nix-build-diwata-0.1.0.drv-0/diwata-0.1.0-vendor/state/src/lib.rs:4:1
      |
    4 | #![feature(const_atomic_bool_new)]
      | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    error: aborting due to 4 previous errors
    
    error: Could not compile `state`.
    warning: build failed, waiting for other jobs to finish...
    error: build failed
    

    I think I may have had similar problems with other dependencies. Is there any chance of a fix?

    opened by rehno-lindeque 4
Owner
Jovansonlee Cesar
I'm for hire. If your company uses rust and interested in one of my projects, please recommend me.
Jovansonlee Cesar
OSINT from your favorite services in a friendly terminal user interface

osintui Open Source Intelligence Terminal User Interface Report Bug Β· Request Feature Installation First, install Rust (using the recommended rustup i

Will Sheldon 639 Jan 4, 2023
A Distributed SQL Database - Building the Database in the Public to Learn Database Internals

Table of Contents Overview Usage TODO MVCC in entangleDB SQL Query Execution in entangleDB entangleDB Raft Consensus Engine What I am trying to build

Sarthak Dalabehera 38 Jan 2, 2024
A simple, fast and user-friendly alternative to 'find'

fd [δΈ­ζ–‡] [ν•œκ΅­μ–΄] fd is a program to find entries in your filesytem. It is a simple, fast and user-friendly alternative to find. While it does not aim to

David Peter 25.8k Dec 30, 2022
Linear Programming for Rust, with an user-friendly API. This crate allows modeling LP problems, and let's you solve them with various solvers.

good_lp A Linear Programming modeler that is easy to use, performant with large problems, and well-typed. use good_lp::{variables, variable, coin_cbc,

Rust Operations Research 101 Dec 27, 2022
fd is a program to find entries in your filesystem. It is a simple, fast and user-friendly alternative to find

fd is a program to find entries in your filesystem. It is a simple, fast and user-friendly alternative to find. While it does not aim to support all of find's powerful functionality, it provides sensible (opinionated) defaults for a majority of use cases.

David Peter 25.9k Jan 9, 2023
A user-friendly TUI client for Matrix written in Rust!

Konoha A user-friendly TUI client for Matrix written in Rust! Notice: The client is currently not usable and is only hosted on GitHub for version cont

L3af 9 Jan 5, 2022
rh: user-friendly command-line HTTP client

Rust HTTP Cli The command name in your terminal is rh. rh: user-friendly command-line HTTP client rh is a user-friendly, lightweight and performant co

null 8 Nov 30, 2022
qn (quick note) is a simple, fast and user-friendly way to save notes πŸ¦€βš™οΈ

Quick Note qn Install This is currently for my personal use. I may push breaking changes at any time. If you want to use it, bring down the code and r

Code Smell 3 Jul 15, 2022
User-friendly secure computation engine based on secure multi-party computation

CipherCore If you have any questions, or, more generally, would like to discuss CipherCore, please join the Slack community. See a vastly extended ver

CipherMode Labs 356 Jan 5, 2023
A user-friendly TUI for secure file transfers, with arrow-key and VIM-style navigation

gsftp SFTP with an interactive text-based user interface (TUI). Transfer files through an encrypted connection with a visual interface, so you can see

Ben Jiron 3 Jul 7, 2022
A user-friendly re-implementation of existing hex tools in Rust

Hex A project to create alternate (and more user friendly) versions of existing hex tools. The project can be installed as a extension to the github-c

Sohom Datta 6 Sep 27, 2022
A developer-friendly framework for building user interfaces in Rust

Reading: "Fru" as in "fruit" and "i" as in "I" (I am). What is Frui? Frui is a developer-friendly UI framework that makes building user interfaces eas

Frui Framework 1.1k Jan 8, 2023
A user-friendly, lightweight TUI for disk imaging

Caligula Burning Tool Caligula is a user-friendly, lightweight TUI for imaging disks. $ caligula burn -h Burn an image to a disk Usage: caligula burn

Astrid Yu 25 Mar 26, 2023
An async, user-friendly Let's Encrypt/ACMEv2 library written in Rust

lers An async, user-friendly Let's Encrypt/ACMEv2 library written in Rust. The API and implementation were inspired by acme2, acme-micro, and lego. Fe

Alexander Krantz 20 Apr 3, 2023
A typesafe, flexible, simple, and user-friendly unit system library for Rust that has good error messages.

uy A typesafe, flexible, simple, and user-friendly unit system library for Rust that has good error messages. Usage uy not only stores the unit of a v

Lachlan Sneff 19 Aug 8, 2023
Estratto is a powerful and user-friendly Rust library designed for extracting rich audio features from digital audio signals.

estratto γ€œ An Audio Feature Extraction Library estratto is a powerful and user-friendly Rust library designed for extracting rich audio features from

Amber J Blue 5 Aug 25, 2023
Minimal, flexible & user-friendly X and Wayland tiling window manager with rust

SSWM Minimal, flexible & user-friendly X and Wayland tiling window manager but with rust. Feel free to open issues and make pull requests. [Overview]

Linus Walker 19 Aug 28, 2023
Byte is a blazingly fastπŸš€ Discord Bot with a user-friendly design using twilight written in rustπŸ¦€.

Byte Byte is a blazingly fast?? Discord Bot with a user-friendly design using twilight written in rust??. How To Run There is a public version of the

TakoTheDev 3 Nov 15, 2023
A user crud written in Rust, designed to connect to a MySQL database with full integration test coverage.

SQLX User CRUD Purpose This application demonstrates the how to implement a common design for CRUDs in, potentially, a system of microservices. The de

null 78 Nov 27, 2022
A Text User Interface library for the Rust programming language

Cursive Cursive is a TUI (Text User Interface) library for rust. It uses ncurses by default, but other backends are available. It allows you to build

Alexandre Bury 3.3k Jan 9, 2023