Ask HN: What's the fastest tool for basic CRUD?

224 points by xupybd ↗ HN
I like to throw together small tools to automate things. Most involve Crud screens. Simple Crud screens are all very similar but seem to take a lot of time to throw together. Are there good tools that allow you to throw these up quickly?

113 comments

[ 3.1 ms ] story [ 172 ms ] thread
Are you looking for a framework or a more complete tool? Django or Ruby are good for putting together CRUD tools very quickly. If you make use of their ecosystem of libraries you'll be able to put a Bootstrap CRUD app together in no time (assuming you have webdev experience).
I've found success using Google Sheets as a backing datastore for some automation projects of mine. Google Sheets has a rest API that you can use.
If you want a database-backed CRUD with extra business logic then it's hard to beat the Django admin. You get support for common cases out of the box and extending/overriding the normal behaviour is fairly straightforward.

It looks fairly presentable and has a non-awful UI. Certainly not state of the art but good enough for non-public facing stuff.

I have used the Django admin as a way to get non-technical users entering data for basic CRUD, which is pretty much what it was developed for originally as I understand it. Its appearance sends the right message (non-threatening, but obviously not public-facing), and they seem to take to it readily.
For Django, the trick is to implement an MVC pattern: let a class sit in-between a model and its set of views and pilot the views from there, like the admin, drf and others.

However, the admin does not leverage the Django ecosystem, django-tables2, django-filter, and so on. Also, it's kind of moving slowly because they must try to respect backward compatibility.

I maintain CRUDLFA+ and I love it:

- lets each view define its own url generation method: the controller will use that to generate the urls for a model - each controller defines a get_queryset method which has a request parameter, allowing you to define what objects a user may see

- each view defines a has_perm method, as such a user may see a bunch of objects, but not necessarily execute all views on it,

- the default list view wraps django-tables2, django-filter, django-search, and generates a per-object menu, by iterating over each view of the controller and testing it with has_perm, as such a user will see an object menu with each view it can execute on an object, with no overhead

- allows you to override views in many ways

- works with non-managed models (models that are not backed with a database table)

- can be used for frontend pages too (admin is really limited to being a back-office),

Clearly, CRUDLFA+ goes beyond "basic crud", but I would never code a Django view without it ever again though.

However, so far I make it for my personal use and even though it's been in use on governmental production for a couple of years now, I wouldn't recommend it for beginners. If you're a Django expert and get your kicks out of trying new patterns then you might spend some good times with it.

https://yourlabs.io/oss/yourlabs https://gitpitch.com/yourlabs/crudlfap

We're in the (slow) process of replacing Jinja2 in it with Ryzom ( https://yourlabs.io/oss/ryzom ) , a component-based HTML renderer which supports data-binding and that we are looking forward to integrate or isomorphic research (from https://yourlabs.io/oss/chp ) into. When that's over we will release v1.

This is really interesting. Will take a look on how this works for me!
I'm really interested to try, but the yourlabs.io repo is locked down. Where can I see the CRDLFA+ codebase?
Ruby on Rails without a doubt. You can even take it a step further and use ActiveAdmin.
I think it is a matter of taste or experience language wise but I would say Django with the admin.
Have used both extensively. I like the Django ORM better than ActiveRecord but love the conventions and magic you get with rails + ActiveAdmin!
I have used both for years as well and I cannot stand the ‘magic’ ;) Hence my comment about taste.
There are a lot of nocode/lowcode tools with batteries included if you do not mind paying a monthly fee (although some do not even require that; only a one-off fee). Airtable, Bubble and many others make it really easy to create CRUD apps. There are also open source solutions (I did not try so no idea how good they are) like [0].

[0] https://garrylachman.github.io/ElectroCRUD/

There is also https://github.com/strapi/strapi which is a CMS for rest api. You only have to write a frontend.
Have you actually used it in production? I would love to try it but I'm hesitating in case it's still not ready for a more complicated project.
If you want No Code solution, AirTable and Coda. On one hand I sort of wish more business knew about it as it would likely simplify most of their work load. On the other hand I dont want that to happen as it gives current businesses advantage.

For Coding Solution, ( Incoming Unpopular opinion ) if you dont mind modern PHP, ( which is a lot better than old PHP) Laravel [1] is to my mind undoubtedly the king of CRUD framework. The whole ecosystem is, and continue to be outpacing and growing faster than Rails ecosystem. Which makes me very envy.

If you dont like PHP, then Ruby Rails.

[1] https://laravel.com

And for a non-free addon, Laravel Nova was amazing for the admin CRUD for my API-only site.
Are organizations using AirTable with LDAP or Active Directory? I see there are some connectors, but it does not appear to have first class support.
I think the hate has gone too far on PHP. I work in Laravel for work, and it continues to impress me. Such a pleasure!

Also, Laravel collections are amazing. They make working with arrays and transforming data a breeze.

I still dont like PHP in any sort of way, as a programming language it really is the bottom of my list. At least modern php is easier to swallow.

But Laravel, the amount of things that could get done in so little time. I think laravel took all the good ideas from Rails and ran way further ahead with it.

>I think the hate has gone too far on PHP

It was very well deserved back in the pre-7.0 days, when it was common to have horrific spaghetti projects with zero structure, global variables/functions everywhere, and all kinds of logic (including database calls) mixed into view templates. Modern PHP is a whole different world, but most people will simply choose something else now because that stigma is impossible to lose, and finding dedicated PHP developers is increasingly uncommon.

I disagree. You can't slap on features on a bad language and make it good language. You can only make it more palatable.

Good languages start good because the people who designed and built them had good idea of what they wanted to achieve and did not have existing users to compromise with.

> You can slap on features on a bad language and make it good language.

I believe you meant to say “you can’t ...”

Yes. That is what happens when you edit your post and then skip proofreading.
A great developer will write great code in any language/framework. A bad developer will write bad code in any language/framework. I have seen this so many times in my 25+ years of developing software and don’t expect this to change anytime soon.
I am a long time fan of Laravel. A tool that I find to be extremely useful for building out CRUD front ends in Laravel is the product Nova[1] which has been developed by the core maintaienrs of Laravel.

Really fast for building maintainable admin/back office UIs quickly.

[1] https://nova.laravel.com/

React Admin is awesome for simple low code CRUD applications.

https://marmelab.com/react-admin

Combine React Admin with Hasura (automatic GraphQL on top of PostgreSQL) and you can build an entire back office admin suite (API endpoints and admin front end) in a matter of hours.

https://hasura.io

This adaptor connects react-admin with Hasura:

https://github.com/Steams/ra-data-hasura-graphql

Here's a reference application I put together:

https://github.com/cpursley/react-admin-low-code

blinks eyes

Wow Hasura + react admin look incredible. Thanks for this.

It's a great combo. Been fortunate to be able to use React + Hasura + Clojure(Script) + Re-Frame at my job; great stack to work with.
What's the backwards compatibility/breakage story? I think that's a critical question for any tool that wants to be the go to place for this kind of task. It has to be the kind of project you can run for years, making small changes to, and still be secure/deployable/upgradable.
Hasura allows you to use a pre-existing Postgres database as its source. Alternatively, you can either build a schema from scratch in SQL, with some other tool, or use Hasuras web console which has a visual schema-building and relationship-building UI.

The team takes pretty good care of upholding backwards compatibility -- as it stands, most of the new features they have been working on are niceties outside of the scope of basic CRUD functionality and permissions/authorization (which they have pretty much nailed at this point).

Hasura Engine instances are versioned, and if you like, you could also opt to just never upgrade.

Thanks, but isn't that just the backend/API? I should've stated this, but what really triggered the comment was the React frontend. There's a lot of churn in the JS/React world.
React Admin has the concept of data providers which can be swapped out.

https://marmelab.com/react-admin/DataProviders.html#availabl...

So for example, you could start with Hasura back end (GraphQL) and later swap to a custom JSON API without changes to the UI code. As for the react-admin framework, it's been around for a while and has regular frequent.

I really like React admin have used it for several projects now. Really fast to just knock out a back end admin system for managing users, roles, settings etc.
I have been working on this from some time. Checkout

https://github.com/daptin/daptin

I have been deferring another show hn since the last one, since I am always in the middle of adding one more feature :p

my overall goal in daptin is to build something reliable which can run for years without needing any maintenance. Some things to show this is that its written in golang and I build static targets for all target hosts, the thing is open-sourced and licensed to be used without fear.

As for the features, I will try to list some here:

- YAML/JSON based data declaration

- CRUD api implementing https://jsonapi.org/

- GraphQL api

- Definable actions, for custom apis

- Integration to any 3rd party api based on swagger/openapi spec

- Runs on mysql/postgres/sqlite

For more advance features:

- SMTP server, IMAP server

- Self generated cert/ Acme TLS generation support

- Encrypted columns

- Asset columns (file/image/binary store)

- Asset columns backed by cloud storage (like ftp/disk/gdrive/s3/bb and many)

- Native OAuth/3rd party login support

- Exposing cloud store folders as static websites

I have built a lot of apps on daptin over some time now and I love that it has become what I envisioned it to be.

That's a great set of features! I'll try it on my next prototype.

Especially the OpenAPI export is great; I had always problems with automatically generating it (in go/node.js/.net core).

Not only openapi export, but you can import openapi/swagger specs and use them in actions. Effectively third party integrations.

And I forgot to mention table and row level user authentication permissions and groups.

Do you plan MS SQL integration?
I haven't planned mssql, mostly because the library which covers most sql dialects in golang currently supports just those 3(mysql, postgres, sqlite) .

I can look into it but I don't know what's the fastest way to get a mssql instance right now :) it might not actually be a huge task.

> I don't know what's the fastest way to get a mssql instance right now

MSSQL for Linux is available as a Docker image :)

Nice, I will try to run daptin with mssql and see what's the amount of effort required.
Django admin, with Django rest if you want to easily add APIs.
Django has everything a simple CRUD needs built-in, and migrations, which you don't need now, but will need if your project is successful. Highly recommended.
Also, pro-tip: host it on Heroku for ease if you're not anticipating a ton of traffic. Literally minutes to set up and almost no maintenance overhead going forward.
+1 for Django. It is well structured, battle tested and highly scalable. You get all the simplicity and "batteries included" features of Rails with much better performance and RESTful API support.
For non-web, give the Red programming language a try. Java is also another good one. I am afraid there just isn't a good, robust, free and open source system when it comes to client-server stuff. Rapid development tools also tend to be less mature on Linux, compared to OS X and Windows (Mac and Windows have a rich tradition of business/enterprise rapid prototyping e.g. FileMaker, HyperCard, Visual FoxPro). If you are on the Microsoft stack (and don't need gimmicks like multiple screen size support, Material-style shadows and animations), the standard WinForms system is also quite productive. I heard that the new SwiftUI system is starting to bring back the spirit of rapid development too though I have no tried it myself. These days "no-code" systems are also making a comeback with half a dozen new SaaSes showing up on HN every other week.
Did you have any specific examples of Red for non-web CRUD interfaces?
Jhipster if you want to do it in Java. Do check it out if you want a lot of options. For example angular or react frontend, SQL or nosql, monolith or microservices. Warning: it relies heavily on spring framework. So that may be an entry barrier too.
To me it's still surprising that nobody has done something like MS Access or VB6 for the web. They were easy to learn but had enough power to create really complex solutions. The only downside were scaling and multiple user support. These problems shouldn't be that hard to solve.
We are building something like that at yazz.com, but still early days
You should take a look at Retool. You still need to configure the databases separately in SQL, but the user interface builder is pretty intuitive.
I love access, and pushed it at many jobs that I have been at. Many times you have small teams who just are not worth the investment of enterprise systems while they are still growing that part of the business. Access allowed them to solution their needs while the requirements are still in flux. Once a department becomes big enough the access solution serves as a working prototype to generate requirements to build a proper system. It is a shame that Access has fallen out of favor and there really are no web tools that compare to how well it enabled users.
Except that for most of us there's probably an eternity between "big enough ... to build a proper system" and actually building one.
One could argue that Microsoft PowerApps (Dynamics 365 CDS model apps) is the enterprise equivalent of Access. It's extremely easy to build a CRUD app without writing any code.
Access has always been relatively easy to build an app with close "to no code". The problem is that you still need to understand the principles of a relational database to use it properly and that is usually taught after basic coding.
Same. I'm building the foundations with a relational lang (https://github.com/Tablam/TablaM), because where Access/Excel "fail" was to have a huge disconnect between how use it and how program it. Also because I think the lang could make everything else easier (for example: transform datasources).

Where some tools in this space ALSO fail is to be ONLY for cloud. I think nothing will displace access/excel if don't have a native/local experience.

https://apex.oracle.com is a solution for most of the use-cases similar to MS Access and VB6. But useful only if you have an Oracle database.

I mentioned OpenXava as a development tool in another post. They had their own 0 programming hosted environment with similar ease of use as APEX, but I can't find the link now.

We're working on a new VB6 for the web platform, and would love your feedback :). Good for quickly spinning up CRUD apps with a few new features such as embedded BI and simple ML tools.

It's still in early access, but if you'd like to play around with it, please don't hesitate to message me at verygoodtool1@gmail.com.

We have in fact built a "VB6 for the web"! It's called Anvil (https://anvil.works), and it has:

- Drag'n'drop UI design (https://anvil.works/docs/client/quickstart)

- Python code (browser-side and server-side)

- A built-in database (https://anvil.works/docs/data-tables/quickstart)

- Multi-user support out-of-the-box (https://anvil.works/docs/users)

- Built in email/cron/secrets/etc

- Plug-in integration with Python code running anywhere else on the internet. You import a library, it connects via websocket to your hosted app, you get two-way RPC between your code any your app (https://anvil.works/learn/tutorials/jupyter-notebook-to-web-...)

DaDaBIK (https://dadabik.com) is a no-code low-code platform that can generate a Web CRUD app in minutes starting from your existing DB (but you can also design the DB in DaDaBIK itself).

It has been around since 2001, CRUD generation has been its main aim since the beginning, with the last versions you can also generate very complex applications injecting some custom code (php, javascript) to implement your business logic.

Disclaimer: I am the founder.

Remake - a server-rendered framework for building CRUD web apps [0]

This is an open-source framework I've been working on for the past year to try and solve this problem. I was tired of building the same back-end over and over again and wanted to be able to define my data all in one place.

It works kind of like Vapid[1], in that it allows you to define back-end logic with front-end syntax. But it goes a step further and has more built-in web app capabilities like support for each user owning their own application, nested elements and pages, sorting elements, and inline edit areas.

I just posted a Show HN[2] in another thread. I love for you to read more about it there. You can also see some code examples and a simple demo application here: https://docs.remaketheweb.com/

Reach out to me with any questions. I'm always available to talk: david@remaketheweb.com

[0] https://remaketheweb.com/

[1] https://www.vapid.com/

[2] https://news.ycombinator.com/item?id=22092480

Interesting idea, I checked out the site.

One piece of feedback, I had to go into the docs, under (A Simple Example App) to get a sense for what it was/how exactly it worked.

In place of the video that is the first piece of media content on the landing page, I would have much preferred some snippet of code and a visualization of its result. That way as soon as I come to the site, I get a feel for what exactly it is.

I think this would markedly improve your ability to communicate what Remake is. As the old adage goes:

'Show, don't tell.'

This is my #1 priority. I've gotten this feedback from 4 different people now. Thank you!
either this or a 90 second demo of building something (e.g. how you made the cards in the demo app)
It's a little longer than 90 seconds, but you can find the full ~40 minute tutorial for that here: https://docs.remaketheweb.com/introducing-remake/

I agree, however, something short and sweet showing off the code and how to build something is sorely needed on the home page. I'll brainstorm about it and update the page soon.

you could probably cover most of the todo example in 90 seconds
The tool you are already the most familiar with will most likely be the fastest. Every new tool has a non-zero upfront learning cost.
Counterpoint, I started using SQLite with Python and after less than a day of writing SQL manually I decided just to learn SQLAlchemy. Its cut the amount of code down a lot and the learning time has paid itself back quite quickly.
Low-code solutions are great for this. I worked at Mendix in the past, which I still really like. Competitors are outsystems, Google appmaker, Microsoft powerapps and more.
Just do an AWS API Gateway to DynamoDB serverless integration, free CRUD, no need to implement the individual operations manually.
But then you’re stuck with DynamoDB. DDB is only suitable if you have a well defined access pattern.

I’m all in on AWS, but I wouldn’t recommend APIGW/DDB as a general purpose solution.