Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Ask HN: Easiest way to build a CRUD app?
211 points by tropicalfruit on Feb 13, 2022 | hide | past | favorite | 231 comments
Ideally, there would be no:

>multiple programming/scripting languages to learn

>external dependencies: packages, api's, services, saas

Should be simple and resilient, can last for a long time.

Doesn't require a lot of maintenance, large multiskilled teams, or dependency on services or API's that have a tendency to deprecate or disappear. Something which is not easy to compromise or hack.

Is it a stupid question? The closest I can think of is a static site generator with some kind of self-hosted database but I'm not aware of any.

Thanks



I would answer at the meta-level - pick the framework in the language you know best.

If you are already fluent in Python, use Django. PHP; Laravel? Etc. The benefit of using the “best” CRUD tool (if there even is one) is far less than the cost of learning a new language these days.

When Rails first came out, it was so much better than anything else that it was worth it to learn Ruby just to use that toolchain. Nowadays, the gap has closed for the simple use-case.

You can run Django/Rails & Postgres on Heroku with approximately zero infra burden. I still have a trivial app I last touched ten years ago and it’s still up and serving traffic.


This is good advice. Django, for example, isn't the hottest tech on the block by far, but that's not necessarily a bad thing. Where some see bloat, others see maturity. There are a lot of QoL features like the ORM, forms etc. etc. that make django a very stress-free option. Also, HN sometimes has a derisive attitude towards turbo-like variants, but still, `htmx` is an objectively good pairing with django as well. It's not quite the same as a framework that has web sockets built in, like say Phoenix+LiveView but I'm not completely sold on that anyway. IMO lingering web sockets have an associated cost that hasn't been fairly considered yet.

All that said, my personal favorite CRUD backend is absolutely servant, but will admit that haskell can be a deterrent to some.

Note since I mentioned Phoenix: It might be suitable to you OP, it doesn't necessarily need things like external static hosting, caches, task queues etc and with LiveView can accomplish plenty without surrendering the front-end to a javascript framework. Look up the emerging PETAL stack, it might be of interest. P(Phoenix) E(Elixir) T(TailwindCSS) A(AlpineJS) L(LiveView).


I feel the same way about using websockets to get SPA-like interactivity; Blazor Server in the .NET world is similar. htmx peeked my interest though, as I can see the appeal of the LiveView/Blazor/Hotwire approach, but would still prefer inexpensive HTTP requests for most use-cases.


Dont forget Blazor works on the client too via WASM. As for expensive, the claim to fame for Liveview is that it is very minimalist over the wire. It is not sending html chunks like in standard AJAX from the mid 2000s.


Can this be done while substituting Elixir for Erlang?


Phoenix is written in Elixir, so definitely not a 1:1 mapping, but because of the underlying BEAM VM, most of what makes Elixir robust should in theory also apply to Erlang. Apart from OTP which is amazing, I don't know anything at all about the Erlang web framework scene though, sorry.


OTP predates Elixir and stems from the creation of Erlang. The only real difference between the two is that Elixir has a nicer syntax and some higher level abstractions.

Cowboy is a decent Erlang web framework.


Except for Node.js, unfortunately there's still no good way of building a simple CRUD app like with Django/RoR. Available solutions are still very much do-it-yourself or very niche-buggy. This has some advantages! But it's really bad if you just want a CRUD app.


Currently using Prisma and Remix which both have some weight behind them and are pretty easy to get going with.


Have you heard of AdonisJS[1]? A couple of years ago we had JS as a hard requirement for a new project, and coming from a Rails background, Adoins was really good.

1: https://adonisjs.com/


Sure, it's one of the best looking for that case and actually looks better than I remembered, but still everything from the view templating system[1] to the database[2] it uses "by default" needs to be manually installed, which makes it def not like Django/RoR IMHO. Heck, even the simple session management needs to be installed separately[3].

[1] https://docs.adonisjs.com/guides/views/introduction#setup

[2] https://docs.adonisjs.com/guides/database/introduction

[3] https://docs.adonisjs.com/guides/session


1 and 3 come pre-installed with the web template, which is the equivalent of a scaffolded Django or RoR app. 2 is just an npm install. You're trying to draw a distinction when there really isnt one.


Doesn’t sound as batteries included as Django can be OOTB. You should be able to touch a database, setup templates and users without installing anything outside of Django. Which you absolutely can. Not sure the framework in question is this seamless.


ORM, Auth, Session and templates are first party packages and maintained by the core team.


I love Heroku but build packs are a nightmare. Getting the right libraries installed so I can process HEIC images is frustrating. I should be able to check a box to get this kind of support.


Heroku also supports docker containers if that’s more your style.


My style is it just works — as in they discover what I need based on the Gemfile.


I would consider Django and just using its Admin framework for building your UI, you can achieve so much very quickly with almost no code.

I believe it’s a brilliant tool for building internal CRUD type db apps.

Knowing how to use the admin framework well is basically a developer super power.

You won’t need any external libraries, it has brilliant docs and important tools like database migrations are built in.


Just want to add to what I said earlier, on the DB side which could be an external dependency, it doesn’t need to be. Django works super well with SQLite, again no external libs (it’s in the Python standard lib), and you should be able to handle a lot of traffic from a single sever with it.

I have in the past used Djangos built in “in memory” cache with a global invalidation on all db writes for simple apps like this that have a low write rate.


thanks, i will look into this


Second this. I have pulled off some minor miracles singlehandedly using Django. The significant data science ecosystem in python is a real plus if you eventually need to analyze things.

If you want to do something that the ORM isn't designed to do it can be a real pain. But if you have 20-30-100 different business objects you need to model and only a few don't fit in nicely you save so much time in the others that you can absolutely afford to figure out the special cases.


I use django-cookiecutter [0] for most of my projects as it sets up a myriad of things, saving an incredible amount of time if you need your app to be production ready quick. May be better suited for those experienced with django though.

[0] https://github.com/cookiecutter/cookiecutter-django


I'm not a python/Django developer but I'm playing with it for my personal project. It's really nicely made, a lot of things are very easy to do,etc. Couldn't recommend enough.


I'm reading this as a CRUD GUI app. Definitely Ruby on Rails coupled with Avo (shameless plug).

It literally takes you less than an hour to create a realistic usable CRUD app (that would take you at least a few days in the traditional way) without learning anything new. Generate a DSL (a Resource) and add one line per field.

Avo knows how to read and display in a rich way, handle creating/updating records using your already in place validations, add associations in a giffy and one-liner file uploads. If the provided fileds are not enough you can create your own. The Rails developer can forget about building a front-ned for their admin panel/back-office area.

When you need to break out from the CRUD, Avo makes it easy using regular Rails code and erb templates.

Maintenance you say? There's no real maintenance here. You don't generate any templates for your CRUD interface, but write declarative code with plenty of options to create the best experience for your users. Avo is beautifully packaged away and will not pollute your app with business files (only configuration files). Everything is abstracted away in the background so you get easy-updates by running one simple `gem update avo` command.

Large teams will move in a uniform way building the same UI all throughout the app.

https://github.com/avo-hq/avo

https://avo.cool


I second Rails. It's incredibly polished and has really good gems to speed up dev. ActiveAdmin is a great gem if you need to quickly make an admin dashboard. It was useful when I had a small consultancy.

https://activeadmin.info/


Yup. That's how we think about it. Avo is for Rails what Rails is for web development. It should increase your speed a few times (3x-10x).

Also Avo is so much more than just CRUD. You can easily break out of CRUD and create your own pages and dynamic content in it; dashboards is incoming in the next month; authorization; multi-tenancy; multi-resource search; and much more.

We're trying to figure out a way so we distance ourselver from being just "a prettier activeadmin", but a full on rocket of a developer platform.

Thank you for your compliment!


Except ruby is dead for literally anything else, so the moment you need it for anything else you're combining languages.


We are currently thinking about how to break that barrier.

When talking about configuring Avo, it's not really about having the best ruby developer. Instead, you just need a crafty developer.

If you bring in any PHP/JS/Python/INSERT_PROGRAMMING_LANG_HERE developer, they will know how to write that one-liner that adds that new field to a resource.

The alternatives are to use "general purpose" low-code tools (like re-tool) or mash it all together yourself using packages like AG Grid, both having the burden of a steep learning curve and continuous maintenance. With Avo, you need to know a bit of ruby and let it help you get the job done.

Avo is designed to be a bit boring like Rails. You build it; it works, and then you forget about it.


Not true. DragonRuby is a relatively new game dev engine/runtime:

http://dragonruby.org/


I would recommend Rails.

You can just do:

     bin/rails generate scaffold Car title:string amount:integer
and it will generate code to support all CRUD operations (model, views, controller) for Car with the two attributes title and amount.

I can also be deployed without any K8s, Docker ... (but I recommend at least an Ansible set up so you can migrate the hosting easy between providers)

You can directly deploy it simply to a machine with Nginx and PostgreSQL.


Rails removes so many questions 'how should i set this up?' 'where should this code go' 'how do i setup a db connection'. It is fast to setup.


I'll probably be a minority here, but I'd say: java + Vaadin [1] + raw jdbc (no ORM nonsense). On Vaadin site, you can use starter [2] to create an app template. There is no need to write javascript; most Vaadin code looks like good old desktop programming. Due Java stability, that thing will run forever and will be performant.

If you want to be "cloud native" (or whatever cool name now is) in the future, you can later recompile it with graalvm [3] and produce a single, static binary, like cool kids these days does with golang and rust.

[1] https://vaadin.com/

[2] https://start.vaadin.com/app/

[3] https://www.graalvm.org/


+1 for good old Java, rock solid and just works for so many large, mission critical, and high performance (!) systems.

As for vaadin - how far can u get without the pro version? None of the samples include a login, and the LoginView seems to be a PRO feature? It looks full of features.


Vaadin is very nice but I would only recommend it when you can afford to keep the state server side. Vaadin works best when you can use sticky sessions


Yes, it really doesn’t work at all without sticky sessions.


I haven't checked LoginView, but I guess it will be a couple of text fields, a button with an attached event, maybe CSSLayout, and some javascript code for effects. Something you can easily get done quickly by following tutorials.

PRO components are there you can get something fast with zero coding, but everything else is open source Vaadin.


Vaadin is interesting, and choice of java is ok (though I prefer Kotlin).

But raw jdbc in 2022 is absolutely bonkers. If you don't prefer ORMs that's ok, but a light abstraction like SQLDelight or Spring data jdbc (if you prefer working with SQL) or a query builder like jOOQ (if you like type-safety) can make your life simpler by an order of magnitude.


I was hoping someone would mention Kotlin and Spring! Kotlin is a pleasure to code with. And Spring Boot simplifies Spring tremendously, https://start.spring.io/

Lots of documentation for Java/Spring out there, but somewhat lacking for Kotlin/Spring. Some IDEs help by automatically converting from Java to Kotlin, like IDEA InteliJ.


Yup, Kotlin is absolutely a pleasure to work with.

Actually, the spring official docs have kotlin compatibility sections and kotlin examples for most major projects now.


Technologies like JSF/Vaadin/GWT are obsolete now. They require sticky sessions, server-side state (gobbles huge memory), cumbersome and complex code for client side rendering (JSF is the worst offender here). The tech world has moved on and stateless light-weight dockers or serverless functions coupled with pure JS front-ends (react, vue, etc) are the new norms.


+1

Backend: Java, C#, F#

Frontend: Svelte, React

Deployment: AWS with Pulumi

This yields to a pretty good TCO.


I used to use Django for this kind of thing, but I have found that Flask connected to your fully managed database of choice like AWS with dynamodb (nosql db gets rid of even worrying about schemas) is the simplest way to quickly get up and running and do almost everything in Python with very little learning of various settings and details of specific frameworks since it is so minimal. This is how I tend to prototype then if there's anything promising I'll move to a better stack of tech based on the needs of the user (ex: is the end result going to be better as an iphone app, are there particular scaling needs that I need to worry about, etc.).


My journey: Django -> Flask -> FastAPI


I second FastAPI. It's the fastest way to get a modern webapp or api up and running in Python with full support for async and it works nicely with ORMs like SQLAlchemy.


For me CherryPy is my go to as opposed to Flask because I can define classes that are Restful and paths that go to those routes.

If I want more power I reach for Django since it has an automatic admin UI.

I have heard really good things about FastAPI for Python but never used it.


How many people will use it and how will it be used? What is the app exactly going to do?

Whe first thing that comes to mind i Notion, which is a true no-code alternative if you want to build internal CRUD apps.

The next step would be to use a managed backend and a no-code frontend. For backend you can use services like Firebase [1], Nhost [2], or Supabase [3].

For frontend you can use something like Retool [4].

[1] https://firebase.com/

[2] https://nhost.io/ - Discloser: I'm the co-founder of Nhost

[3] https://supabase.com/

[4] https://retool.com/


i use this setup (besides using python fastapi code in the backend) and i really love it. Retool is awesome.


I'm a large fan of Django/Python for anything CRUD-like.

It has been my go-to web framework for the better part of a decade and I continue to be impressed with it. "The web framework for perfectionists with deadlines" tagline is quite apt, as it has the highest combo of power and developer efficiency of any framework I've come across even today.

It is Python, which gives you the entirety of the Python ecosystem including all of the data science stuff and a bunch of Django-specific extras if you need them.

With the recent crop of Javascript-less tools like HTMX and AlpineJS you can do most things without any Javascript at all. Bootstrap or Tailwind both work great for CSS.

I still find the database ORM to be one of the most pleasant ways to interface with a datastore, and the migrations system usually makes database changes pretty easy. Can work with Postgres, Sqlite, mySql and a few others.

It has basically zero external dependencies besides one or two tiny ones.

I've been pleased with how easy it has been to keep Django upgraded. It feels like relatively little has changed in a backwards incompatible way compared to some of the frontend churn I've experienced.

It's widely used, and so it is relatively easy to find people who can work on a Django codebase compared to something more obscure. Django embraces convention over configuration, so if you've worked on one Django codebase you can probably work on another.

The documentation is excellent, and since it is widespread there is a huge amount of learning materials, articles, and Stackoverflow questions around.

Django has 16 years worth of work put into it and is extremely well tested. It implements a lot of the security things I have no interest in trying myself, like password hashing, sanitizing, etc.

Unless your requirements call for extreme performance needs or massively big data, Django can probably handle your workload just fine.

You can get pretty far with the base framework, and then if you need something else, consult the massive list of extras: https://awesomedjango.org/

Happy to answer any Django questions. Cheers


Excellent comment with all the advantages of Django/Python clearly laid out. 100% agree.


I would go for Ruby on Rails, or a more modern Phoenix Framework (Elixir). With Phoenix you can also use Phoenix LiveView to avoid writing JavaScript. Very stable, scalable and low-hassle once you deploy.


A similar setup, for those more comfortable with PHP, would be Laravel [0] in conjunction with Livewire [1].

Laravel is basically the “Rails of PHP”, and has an absolutely incredible ecosystem to go with it.

Livewire was directly inspired by Phoenix LiveView. I only just recently started using it in my own projects, but it’s invaluable. Backend has always been my speciality, but now I can make real-time UIs just like the cool JS kids can too :)

[0] https://laravel.com/

[1] https://laravel-livewire.com/


LiveView is amazingly productive, and it allows you to make highly interactive webapps much faster than if you make a REST/front-end split, just using regular Elixir.


I can second this. I am using Elixir/Phoenix/LiveView for a new web app I am launching soon, and I have not written a single line of javascript so far.


Exactly what I would choose.


The best thing to do is not to build anything at all, if you can. This depends on what exactly you're trying to accomplish, who the target audience is, etc.

If you need something similar to a website or a store, the easiest option is to go with something like Wix (for websites) or Shopify for a store.

If you need something that's similar to a website but with a tad more complexity or with the potential to add more complexity, a good option might be a hosted WordPress site. You can start with something simple ad add a lot of comlexity via plugins or via writing your own code.

If you're looking for something fully custom, that's really not like anything else, then the easiest might be a low-code no-code tool. Haven't used many myself but that's often a good option.

Finally, if all of that fails, and assuming you need a web app (and not a desktop or mobile app), then you probably should use something like Django with Python or a similar framework for building an app, while keeping the HTML inline (as opposed to a separate React codebase or similar). Use whatever tools you know best to do this. IF you don't know anything, use whatever's the most similar to stuff you already know. (E.g. do you know Python? Use Django. Know Rails? Use Ruby).

This solution is still fairly easy, but also not exactly great for growth. My default these days is usually to start with a backend that's only there to provide an API, and a separate JS-based frontend. That's a lot more work, but most things end up there fairly quickly so usually worth just starting there.


I’m surprised nobody had said MS Access. You don’t need to learn any programming languages, it comes with everything you need, and every Access app has lasted way longer than anyone wanted it to. ;)


If Access had straightforward (ideally one-click), rock-solid tools for web deployment, it would be the killer no-code app.


Agreed 100%. The fact that this doesn't exist is one of Microsoft's biggest missed opportunities, in my opinion.


><You don’t need to learn any programming languages

Yes you do. If you want to have buttons and tables and do something above of only showing the data you'll need to learn VBA. Also SQL implementation for MSAccess has some peculiar stuff in regards to LIKE or how datetime is handled. So you'll learn 2 programming languages actually - VBA % the variaton of SQL that MSAccess has. And you can't scale up from single user to multiple users as MSAccess is not a server like PostgreSQL.


IIRC (it's been a while), you can check all the boxes of C, R, U, and D, using forms.

And Access is multi-user. You don't want a lot of users on it, but you can have more than one. This is extra credit though, the OP never asked for a multi-user solution.


Can also say that the SQL implementation in Access is reprehensible in terms of silent errors and other weirdness.


MS Access works just as well on an SQL Server database as on its internal database, so your scaling works just as well as on any other established database server, and then the SQL dialect is T-SQL, which is reasonably standards compliant.


That and FileMaker were my first thoughts, too, but reading https://support.microsoft.com/en-us/office/access-2010-web-d... Access isn’t an option anymore if web access is required.

FileMaker Pro (https://www.claris.com/filemaker/pro/) probably still is an option. It isn’t free in any sense, though.

dBase also still exists (http://www.dbase.com/ (web page looks like a print of an ugly presentation)), but I wouldn’t know whether that ticks all the boxes.


^ legit point -- tight coupling between data + UX widgets is like postgREST + retool in a single package that has been evolutionarily stagnant since like 1992


I started my CRUD with MS Access, then moved to SQL Server > MVC > .Net 6 web app. MS Access was a great launching point.


For non enterprise graded CRUD apps, I usually go the PHP way, it's not sexy but it's cheap to run both in term of server cost and brain space to worry about what could go wrong, doesn't require constant maintenance and is likely to outlive the majority of what is considered sexy today.


Why would using PHP make an app not require maintenance?


.NET, razor pages, sqlite, entity framework.

Its hard to build anything non-trivial with a gui without involving a few languages these days.

You can package your .NET server as completely self contained and run it on anything, just need a web browser.

Edit: python might get you close with a simple html framework.


This is the only valid answer as far as I’m concerned. No other solution offered allows you to write client-side code, SQL commands, and back-end code all in the same language (in this case, C#).


With the SAFE stack and SQL data providers you can go 100% F#


I would use EF core (code first) even if my app wasn't in dotnet. Migrations and deployments just. work.


Blazor is even better; awesome to be able to use C# both the for the web front end and back-end.


im actually trying to build a kind of admin UI in .NET Core, scaffolding on POCOs through EF Core: https://github.com/cloudy-net/Cloudy.CMS

although it is a little bit in disarray at the moment because of a migration to preact.


.NET Core and Razor Pages are a solid option!


I specifically wrote a starter kit/framework to solve this problem -- at least for me, and hopefully for others: https://nodewood.com/

Since you'll be running JavaScript in the browser, it also uses Node.js for the backend. This allows you to use the same code for validation, business logic, etc, and it specifically has multiple patterns to encourage this.

It's all one bundle that you run locally (or on one machine in production, or two if you want to split out the DB, which I'd recommend). By default, it uses Docker to run locally, but I've included instructions to run it on bare-metal, if you choose. For subscriptions, I use Stripe, but I mean you gotta use _someone_ for that, and I found their API to be easiest to work with, and thus modify.

I specifically built it so that I wouldn't have to keep re-creating the wheel when I wanted to try out a new SaaS idea as just one person, so it should work just fine for someone who doesn't want to require a team, but it should also work well for people who do want to scale to teams: one of the core components is that you break up work into "features" which are directories that repeat the common subdirectories (api, lib, ui) and make it easy to keep commonly-used code together.

Full docs are available publicly on the site, and if you have any questions, I'm more than happy to answer!


If this isn't a business application, ignore this entire comment.

If it is a business application, you probably shouldn't build a CRUD app, at least not the way that's commonly understood. Stick with me for a minute.

First off, you must never delete business data (except per GDPR, retention policies, or other legal requirements). I'm sure someone will pipe in with a contrived use case where you would want to, but in general you must not. Soft-deletes, sure. Hard deletes with immutable history, also ok. Generally the popular frameworks will not help you here.

Second, realize that an update is logically equivalent to a delete followed by an insert (under the hood, Postgres implements `update` precisely thus). So per the above, you should think twice about updates. As with deletes, an immutable history can make updates safe. Alternatively, you can use append-only versioning with a current version pointer. Again, the frameworks are just not going to help you here.

So out of CRUD that leaves just CR that are fully safe, and those are the easiest parts.

I'm sure most folks will think this is ridiculous but that's because "building business software" is 1) not taught in school, 2) considered hopelessly boring, and therefore 3) not valued by developers. Nevertheless, it's generally, y'know, our job. Good business software must keep records. It must track when things happened, who did them, and so on. The typical approach to CRUD, as exemplified by all the frameworks suggested in other comments, does not keep such records, and therefore produces software that is unfit for its purpose.

One common objection will be that you don't need these things, or don't know that you need these things, at the beginning of a project. Yes you do! Imagine telling the IRS "oh I didn't keep very good records this year, after all my business is just getting started". Record-keeping needs to be treated as a hard, non-negotiable requirement for all business software.


Yes. Anyone that's worked with accounting software knows this. There is no delete or update. It would insane to update a transaction that happened three months ago. You have to do a reverse transaction.

Actually, MediaWiki works the same way. You can see the history.


Durable records are actually legally mandated in France under "NF525": https://www.ikosoft.com/en-gb/all-knowledge-about-the-nf525-...


Excellent comment.

I will say this: as someone who has to interact with a system where nullifying and deleting data is a legal requirement for privacy reasons, I desperately wish that weren’t true. Auditing, tracing, even basic production robustness…everything just seems to fall apart when one can’t follow your model.


What stack would you suggest for this? Or what are the recommended approaches to achieve history/versioning of the data? EventSourcing/CQRS is one that I know, but are there other ways to achieve that by using Postgres?


tips hat in a grumpy voice

Damn, take my upvote. You're right and you won.


We ended up with a system like this too but came at it from another angle - building offline sync. After reading your comment though I realise it can be more widely applied.


We just use our log as a history if we need it. We very rarely need it.

Obviously it depends upon your exact domain. But overbuilding history can be a mistake too.


Not sure if this qualifies but hasura[1] sounds like it would work well. It’s not REST and you could consider it to be a dependency but you wouldn’t have to write any code and you could deploy it using a docker container.

[1] https://hasura.io/


I've used Hasura before with react-admin to build a back-office CRUD with great success. Hasura is awesome.


Seconded for Hasura - really great tool that's make it easy to setup an API on your database. Also makes it easy to manage your data models and permissions. You can use it to build REST API endpoints as well as GraphQL ones.


"Easiest way to build a CRUD app".

Using the CRUD-app-building framework in which you are competent.

Beyond toy apps there are no shortcuts without that competence but there are plenty of prospective frameworks to develop it in, as evidenced by the other comments.


This is the right answer. There are use cases which are served well by simple builders - temporary or event-related apps, short-lived internal tools, etc., but if there is the faintest possibility that this will require maintenance and extension - and "can last for a long time" points to this - you need something robust that you can reliably tinker with.


> Using the CRUD-app-building framework in which you are competent.

That's assuming people already know one. If they don't, which would you recommand?


I wouldn't. There are no silver bullets. I would say (assuming there were no other motivations) to trial whichever popular, community-supported and well-documented frameworks seem the best match for whatever skills (languages, business domains, whatever) they already have, and go with the one they feel most comfortable with.


Lots of variables in your question.

For simple stuff I am a big believer in building backends with tools like Strapi, it's hard to beat for MVP

For more customized stuff I do believe Rails is still the safest choice in terms of ease of use, docs, learning resources, community, available libraries and integrations, etc. etc. Close 2nd/3rd probably something like Django or Express.js based stuff.

For more complex stuff my weapon of choice is Elixir/Phoenix/LiveView - hard to beat for actual web projects that need to handle some traffic. I am actually close to believing that there's probably nothing better suited for web projects than Erlang BEAM.


it's relatively easy to do simple stuff in Phoenix, too, especially if you're used to "having to learn a lot of the ceremony" around a more heavyweight framework like rails.

What is missing is a good database management system (like Django ships with) but on the other hand, the discipline of Phoenix will in the long run avoid your self/staff learning how to "abuse" Django's control panel to do super dangerous stuff (I have seen this happen in several places I have worked)

In the long run, using elixir the language will have far, far fewer head-bashing-in/tableflip moments than, Python and Ruby, in my experience, so if you value your sanity it may be a good choice


For me personally Elixir is the weapon of choice. But it’s probably fair to say, that if you want “simple CRUD app” that the OP asked about, and you have little experience in functional programming etc, then Rails is proabably easier to pick up for that purpose.


Depending on just how simple it needs to be, I'd reach for Sinatra, or Plug, even, actually plug is arguably better since you can easily scale to Phoenix.


Damn, I loved Sinatra! Haven’t used it in ages, is it still under active development actually?


Laravel. You'll get a lot of plug n' play stuff within its ecosystem. The community is at this point massive, so there's no doubt it will stick around for the time to come.

It's not a no-code solution, but the shallow learning curve will allow you to get up to speed in no time.


No one mentioned Spring Boot and Spring Data with Thymeleaf yet? I find it quite simple to build stable web apps in a short time. Plus it removes a metric ton of boilerplate that's inherent in Java applications.


I'm also a fan. I think Java fell out of favor about a decade ago as hipsters rushed towards Node and Rails. Meanwhile the Java pros have been delivering incremental improvements to an already mature and stable system that is Spring and now with Boot not only is it a venerable battle tested solution but with the Starters it's downright joyful to use. Year after year it's seen steady progress leveraging a 30 year old ecosystem with no drama and no craziness surrounding the newer stacks.


I use Grails, which is Spring Boot with sane defaults already configured. Grails is very similar to Rails, while Spring Boot still involves some configuration.


yup, spring boot, jpa, thymeleaf and htmx if you want to sprinkle sunshine.


+1


If you intend to build the CRUD app with a programming language (opposed to a low-code or no-code tool), then PHP would be suitable.

At least half of HN will recoil in horror, but PHP was designed for web programming and nothing else. The standard library will have almost everything you need. Deployment is easier than many other languages. It can be as simple as uploading your PHP files to a folder located on your hosting provider.

"Something which is not easy to compromise or hack."

Well, this is dependent on the skill of the programmer and takes time to learn. The alternative is to pull in external dependencies i.e a framework that tackles security issues like authentication, database access etc. But learning to use a framework will also be a time sink (but less time-consuming that building from scratch).

"The closest I can think of is a static site generator with some kind of self-hosted database but I'm not aware of any."

Static Site Generators (SSG) do not use databases and would not be suitable for a dynamic CRUD app. Even a 'simple' task such as signing-in to your CRUD app (if needed) is not possible with a SSG unless you plug in an external dependency.

Remember, if you go down the low-code or no-code tool approach you'll always be tied to the low-code platform who will host your CRUD app.


Write an OpenAPI schema file describing your CRUD, and generate code with OpenAPI Generator. Download the official Postgres docker image, run it as a daemon, and configure your app to use it. Configure Nginx as your app's reverse proxy. That's it.


If all you need is CRUD you could use Postgrest [1] which generates the endpoints for you based on your database schema. I use it to build admin backends.

[1] https://postgrest.org/en/stable/


If it's for a side project, i would think about resiliency and lasting for long time once there's a need for it. This's also contributed by the stack or how you setup infra. So don't bother initially.

You can pick a framework if you're comfortable with mix of frontend and backend (rails, django etc)

If you are more on backend, pick say react in frontend and your choice of language in backend and write monolith. Have a database if needed. Avoid cache completely (You don't need to scale or make it performant). Infact you can use file based db (eg: bolt) and add Pg/Mongo/Sql later.

My usual setup is,

  1. Go for backend, react frontend
  2. Deployed backend in free-tier GCP VM
  3. Deployed frontend in Netlify/Heroku
  4. Use free pg database in Heroku
Avoid self provisioning as much as possible if you don't need the control.

If it's for Indiehacker project, would suggest to not build it right away, use nocode platform or template to setup landing page, validate and do things.


I've spent years building an open-source framework for building CRUD apps [0]

I made it because I was tired of spending months designing beautiful interfaces, only to realize I was only 30% done with building a full app -- it was exhausting.

So I thought of a simpler way to create a dynamic app: treat HTML as a data structure.

---

Here's how to use it:

Tag your HTML elements as editable and/or containing data.

The syntax for this is simple:

    <div object key:page-title="@innerText" edit:page-title>I am an editable page title</div>
This gets converted into:

    { "pageTitle": "I am an editable page title" }
---

Based on just some HTML templates marked up in this way, you'll get a full application with user accounts baked in -- where each user can edit their own copy of the HTML templates you made, filling it with their own data.

It's a super-fast way of building an application with multiple users, when all you have is some HTML and CSS. And it only requires learning ~8 custom attributes to build some pretty powerful apps [1]

---

Here's how it works behind the scenes:

1. The framework scans through the page, converting nested HTML into nested JSON data

2. The framework saves this JSON data to the current user's account

Pretty simple, right? I've spent years improving the syntax and behavior to make it really easy to use. I'd love your feedback.

I even made a client-side-only version, so you can test it out without installing anything [2]

---

[0] https://remaketheweb.com/

[1] https://recipes.remaketheweb.com/

[2] https://codepen.io/panphora/pen/rNMVYZz


The concept looks very similar to the idea behind Mavo[1] and I think is great. Mavo is probably is too dumbed down for the HN crowd, but for simpler requirements I don't see how I personally could get a CRUD app running any quicker. A big part of this is being able to make the back end someone else's problem without fuss (local storage, GitHub, Dropbox, Firebase, Google Sheets, etc), but there are other options too.

It looks like Remake (when run self-hosted) gives a bit more depth, control and ownership, but also the responsibility and complexity that comes with it. I'll have to check it out.

[1] https://mavo.io


Almost all the answers I can see at time of replying are assuming a web application. Web applications will require at a minimum HTML, CSS a server side language and probably Javascript.

To meet your criteria for:

no: >multiple programming/scripting languages to learn

You could look at building a Java FX or Java Swing desktop application with a Java server (SOAP or RPC).

Quite a few exploits (CORS, XSS) are not possible in a desktop app or are less likely to cause problems as your users aren't loading web pages.

The Java ecosystem is large and there are many stable libraries and frameworks out there that can help with CRUD application development.

The difficulty with desktop apps is updating the client on users machines. If you can get a Long Term Support (LTS) version of OpenJDK installed on your users machines, updates could be as simple as getting the users to copy paste a JAR file from a network share. There are probably nifty ways to get the client to ask the server for any updates, download the new JAR then tell the user to restart.


http://iommi.rocks

Any tool that can do CRUD in a web context has a minimum level of complexity. I strongly believe iommi comes closer to that minimum than standard django by a lot.


You can't really have crud without "external dependencies" because you need to store state somewhere.

I'd say, figure out your storage layer (sql, mongo, files etc) then pick the right tech. Django and Rails will let you very easily bootstrap simple crud apps with very little code.

If you need CRUD API i'd personally go with Go and some db that i'm familiar with (pg). You can achieve tons with Go without any external deps.


I'm a little surprised I didn't see more people mention Go honestly. It's kind of easy as a language to pick up, and depending on what you're doing, it might have everything you need in one swoop. Of course I've not done anything too advanced with it yet. Although uAdmin seems to be a Django inspired thing from Go, I'm not sure if it will ever take off or what, but it seems interesting at least to me. The name is kind of terrible though.


You can use the following for CRUD app:

- bubble.io for commercial solution - appsmith.com or budibase.com for self-host open source solution

Both are fantastic solutions for CRUD apps


I find it a little disappointing that everyone (including the OP) assumes a CRUD app must be a web-application.

In a web-application you are NECESSARILY breaking, in all but the most exotic cases, the "multiple programming/scripting languages to learn" AND "external dependencies" requirement. Almost always, the "simple and resilient, can last for a long time" requirement goes out the window as well.

If the requirements given by the OP are intended to be strict, then they need to go desktop. A few things come to mind...

* java swing -- OK, it's not simple, but it is "one language" and quite self-contained, ORM is extensive. Many teams still work on 20 year old codebases in this stuff.

* .net desktop UI's -- .net, especially lately, is a great choice if you want to remain in a "large-enough" walled-garden. For UI, there's a lot to choose from, winforms would keep the OP very strictly in the "one language" zone. If they're willing to go XAML based, then options open up a lot with the trade off that there's a lot more complexity/learning-curve to deal with.

Both of these options have the ability to "launch" from a website (java webstart and .net clickonce), and both could talk through native remote procedure calls, use a REST API or even through gRPC to a service written by the OP in the same language. So it's not like they're inflexible.


> In a web-application you are NECESSARILY breaking, in all but the most exotic cases, the "multiple programming/scripting languages to learn" AND "external dependencies" requirement. Almost always, the "simple and resilient, can last for a long time" requirement goes out the window as well.

No? PHP web CRUD apps from a decade ago still work ( some updates are required for security issues, but still), have little to no external dependencies ( you need a webserver like Apache or PHP-FPM to serve your PHP, but that's it), and are in one programming/scripting language - PHP, with some markup in HTML. Nobody is forcing nobody to use JavaScript, that's only if you want and need client side dynamic content. Alternatively, node.js allows you to use JS client and server side, and it can last a long time. However, you need some dependencies.


>I find it a little disappointing that everyone (including the OP) assumes a CRUD app must be a web-application.

Because in the modern era cross device compatibility is a requirement, not an option. And the only truly universal write-once-run-everywhere VM in existence is the web browser.


It certainly depends on what's your definition of "easy".

If you're coming with no experience in programming at all, nothing will be easy. There might be tools which focus on one programming language, but they would abstract away too much details of how web based apps work in general to really understand what you're doing.

If you have some experience in a programming language or coming from just another field than web development, I'd suggest you go with a web framework which is commonly used in your programming language's universe. That might be Django for Python, ASP.NET for C#, etc.

Then, there are many lowcode/nocode tools which gives quick results. I have used Anvil in a tutorial to build a Twitter Dashboard: https://bas.codes/posts/python-anvil-twitter-stats

Your idea with the static site generators could also work. Keep in mind that you're going to create mostly frontend code when using this approach. That involves JS and npm – so you might go deep into the rabbit holes of front end web development, which can be huge. However, if that's what you want, I'd suggest using NextJS over Gatsby since I'd consider it easier to setup for beginners. Using a non-JS static site gen would contradict your "no multiple languages" requirement ;)


This thread is basically name your favorite language/framework. My vote goes to good ol:

Node.js + Postgres

Most flexible, biggest ecosystem of all, runs everywhere, talks to everything. Bonus: Get Github Copilot, it knows Node very well, and you don't even have to code most of the time, just tab, tab, tab.


The answer is use whatever language/framework you know best. Know PHP? Use Laravel. Know Python? Use Django.

For me, I am mainly a Javascript developer so I use AWS + Next.js. It's very easy to create an API with Serverless, hook up a DynamoDB table, maybe add some Cognito in there, etc. All just Javascript. You can deploy the Next.js site to S3.

Obviously, this means a ton of external dependencies, but if you want something easily it I think it works well.


Can you make it out of a google form and a google sheet?


No, because then I would be relying on an external service from Google.


You will always rely on some external services.

Either AWS for hosting or if you go the crazy root your ISP to bring internet to your own server.

Relying on Google sheet and Google form seems like a reasonable safe bet.

Then of course, the simple stack may not be enough, but if it is enough, I am not aware of anything simpler.


They didn't say they will rely on an some external services. But an external service from Google. Not using Google or similar can be a requirement. For example if they want to build a CRUD application manipulating personal information in Europe.


What do you want to achieve or build with it? I'd suggest Rails as it's pretty easy to get something up and running but that depends on what tech you are familiar with. It's boring, has a lot of resources online and doesn't change much so maybe a good choice.


I'd love to see a good non-trivial example of a CRUD app --- something like the old Northwind Traders thing for Microsoft platforms --- in tcl, sqlite, and tk. Not that I would recommend you try this at work or for your career or anything.


Easy in all ways: - plain HTML + JS + CSS to start with, then add some simple framework like Bootstrap + Datatables for quick results - MS SQL Express Edition or Developer Edition as backend; it has the easiest GUI-driven installation, configuration and operation (via SQL Server Management Studio) while it is still completely free - server side programming ... not sure, for me PHP is the simplest, but this is based on a very limited view over all options. PHP is very simple because you can just use Notepad++ or VS Code to edit files, save, run - no build, no dependencies. You can run it under Windows (IIS) or Linux, configuration is minimal.


I may be an outlier here, but if you are comfortable with C++, then Witty (https://www.webtoolkit.eu) It is developing webapps like you develop desktop apps.


+1 for Django. Defining your model is easier than CREATE TABLE and built-in admin is ridiculously powerful - it can do all the CRUD operations, makes it super easy to add bulk actions (literally just a function), comes with filtering and search that you simply need to enable and handles nested forms (like 1-N or N-M relationships) out of the box.

User authentication and permissions are built in and there are many 3rd party modules available to do all sorts of thing. django-import-export for example allows importing and exporting to/from any spreadsheet format, including a preview of the changes before you run it for real.


If you're not planning to code and prefer to instead use a no-code platform, may I suggest, nocodb[0].

It's really the best no-code app out there.

[0]: https://nocodb.com


Use what you know, and if you don't know, use something boring. Ruby on Rails, or Django, or Spring Boot/Hibernate. Something battle-tested, with lots of documentation and Stack Overflow answers.


The absolute simplest setup that i've ever seen would be along the lines of the following:

  - PHP on the server, regular .php files that process the requests
  - Apache2/httpd as your web server
  - SQLite as your database (just a file), through PHP's PDO
  - just regular JS/CSS files for additional functionality that you need (e.g. add jQuery/Bootstrap)
  - no Composer or reliance on external dependencies or package management whatsoever
That said, every application that i've seen that has been written this way has been pretty bad - eventually you develop your own badly tested and badly documented abstractions that will slow you down towards the end of the project development and will cripple most of the developers that will need to take over your mess. Furthermore, security is generally an issue, since you should almost never write your own security code under most circumstances, but you probably will do just that with this approach. Also, managing the installation will eventually be a bit problematic, as your current PHP version will be deprecated.

For those reasons (and some others), i'd generally advise people to go with one of the other popular web frameworks with server side rendering:

  - PHP with Laravel/Lumen/Slim
  - Ruby with Rails
  - Python with Django
Now, some might prefer having a separate front end application (Angular, React, Vue, Svelte) from the back end (probably REST for its simplicity), but that's just introducing more complexity into the mix than necessary in this case, even though it has other benefits in regards to eventually scaling and/or swapping out bits of functionality for other technologies down the road.

Personally, i'd look in the direction of using something like MariaDB for the simpler apps that might need to eventually have a separate DB instance, as well as containers for managing the runtimes of everything as well as networking (Docker, Docker Compose, Docker Swarm, rather than something complicated like Kubernetes), but none of that is also strictly necessary.

As for the actual servers, just get an Ubuntu LTS VPS on whatever provider is affordable to you. It has a long life cycle, is generally pretty well documented and pretty boring. That way you can also migrate elsewhere if need be.


For apps I've built in the past, I've found the hardest thing was having to pay monthly hosting costs for years (which is pretty much a necessity if you use a cloud SQL database that things like Rails and Django rely on heavily).

Even $10 a month becomes annoying after 5 years.

I built this: https://forever-free-cloud-app-starter.chriszhu.me/ as a way to build a basic CRUD app that would be free to host forever.


Can you elaborate on what the app does and also prioritize your criteria?

If simplicity is your main requirement you might find inspiration in this:

> My focus has been on how to adapt the lessons I have learned working in teams at Google to a single programmer building small business work. There are many great engineering practices in Silicon Valley's big companies and well-capitalized VC firms, but one person does not have enough bandwidth to use them all and write software. The exercise for me is: what to keep and what must go.

> If I have been doing it right, the technology and techniques described here will sound easy. I have to fit it all in my head while having enough capacity left over to write software people want. Every extra thing has great cost, especially rarely touched software that comes back to bite in the middle of the night six months later.

https://crawshaw.io/blog/one-process-programming-notes https://news.ycombinator.com/item?id=17701882


This sounds like priming the Hacker News community for a follow-up submission (by a different account of course) introducing the perfect answer.


Laravel does CRUD out of the box doesn't have many dependencies once installed. Documentation is excellent and can you get started quickly.


1. The tool you already know 2. Django


Your requirements are contradictory and incomplete:

  - No single language can do all of that successfully, unless you ditch GUI and client-server models
  - Without external dependencies you will either be reinventing the wheel or adding lots of layers
  - All software will require maintenance, more layers equal more maintenance
  - All software can be compromised or hacked, more layers equal more attack surface
  - If it has to last a long time, it cannot use anything that moves fast (or without LTS releases), but it depends on what you define by 'last' and 'a long time'

This doesn't mean your question is stupid, it's just not something that is simple and resilient while also being those other things.

If it is a single-user, single-machine "app", you could use a plain UTF-8 text file which can be read and written to by any relevant text editor. No app is the best app in this case. This does depend in what kind of information you intend to CRUD.


If I were to make a lot of assumptions, you are probably going to need something that can compile statically into a (mostly) self-sustainable binary. That means Java and C# .NET are out. You can use a GUI, but only if you pin yourself do a single OS and single GUI system. For a macOS/iOS target, I would say: Swift. It mostly compiles down to a single application (well a bundle...) and the native frameworks supply persistence and UX methods that last long enough to be considered 'a long time' by my personal vague concepts. For Windows, you'll be stuck with something like Win32 C++. For Linux, you'll probably be stuck with a choice between GTK and Qt, and again something like C++. If you don't need to target any of those systems specifically, or you don't need to make use of a UI, you can do Rust or Go for all/any of them.

If you want to do something for the web, you are screwed. You'll always end up targeting a scoped set of browser versions, use something that either is or compiles down to CSS, JavaScript and HTML (3 languages at least), and if you run a server component, that requires maintenance too (even static file serving). Nothing on the web really 'lasts a long time' as-is.


> If it is a single-user, single-machine "app", you could use a plain UTF-8 text file which can be read and written to by any relevant text editor. No app is the best app in this case. This does depend in what kind of information you intend to CRUD.

I would similarly say a Rails app that uses a filesystem DB for records, sessions, logging, etc despite never having touched Ruby more than 3 times in the last 2 decades.

Many of your listed points are puzzling though.

> No single language can do all of that successfully, unless you ditch GUI and client-server models

There's nothing in the requirements about a GUI or client/server model. A CRUD app by API is pretty common.

> - Without external dependencies you will either be reinventing the wheel or adding lots of layers

No need for reinventing or using additional "layers" (whatever that's supposed to mean).

> - All software can be compromised or hacked, more layers equal more attack surface

"not easily" can be interpreted many ways, but assuring that nothing is 100% secure is irrelevant.

The question is quite sophisticated, within modern technology choices. However, the ease of CRUD app generation has been streamlined by Ruby to a ridiculous degree. Ruby has been great for this kind of thing for a long time, despite it's problems as a language for larger applications. People who are recommending Java, using Spring or not, are either ignorant or in denial. Java is a horrific choice for development speed and reliability for what amounts to requirements for a small application. Additionally, big/popular frameworks like Laravel/Django etc are also going to slower to develop and more problematic than a simple Rails app. This is primarily because of the ecosystems that shun the concept of a filesystem as a DB because it breaks their sensibilities about "the right way to do things".


As I described: the requirements do not list enough. I use the word 'layers' as a loose term to describe anything from APIs between code written in different languages that needs to interact, modules within languages, frameworks, libraries, package managers and other 'things' that end up in your development lifecycle that can all introduce vulnerabilities, incompatibilities and other maintenance tasks.

If you want less maintenance, you have to reduce your dependencies, and to do that you might need to (partially) re-implement some of the features in your dependencies to be able to discard them, thus re-inventing the wheel.

Most of your other replies are not really up to you, and can only be answered by mouzogu.


Typescript/JS React FE + Node BE - one language.


No, that's more like four languages: Typescript, CSS, HTML and the JavaScript the TS gets compiled down to. You can't just write TS once, and never touch it again, because you are now targeting a webbrowser and running a webserver, and are probably using a billion NPM packages. None of those are 'static' for a year, let a long a 'long time'.


Overly pessimistic view.

You do only have to write one language, and web pages are highly backwards compatible. You don't need to use any NPM packages.


We're talking about low maintenance, low security risk and long lasting. None of those are compatible with transpilers, node, javascript or web tech in general.


Hasura is the greatest CRUD tool of all time. It gives you a UI you can build a database schema in or you can put in on top of an existing schema (PostgreSQL and MSSQL support), it has support for migrations, it easily integrates any auth you like, and you just run GraphQL queries against it to CRUD the data. Not a single need to write SQL or REST APIs or anything!


>Is it a stupid question?

It is not a stupid question at all. A problem I thought would have been solved by now or very closed to solving it. But we are not even half way there. Especially the self hosted API and services part.

Basically you want to bring Native App development model to the web. Although I think WebObject in the old days were quite close?

The current recommendation are Laravel, Rails and Django.


I've been working on a tool that generates the basic scaffolding for a CRUD API/GraphQL app in Node/Mongo/Express. Basically you write descriptions of your database models and it produces a very simple standalone app - you just go into the new folder, do npm install and run it, and it works out the gate. It's made to save you all the dull parts of creating a simple CRUD tool to get up and running, which you can then go ahead and add on to as you need.

I'd link to it but it's not really ready for prime time. But there's probably a billion other similar tools like it already. For me, it was built out of the desire to create, not a framework, but a static code generator - it literally generates the .js files for you, you only run it once to generate those files, and the tool itself isn't part of the finished app at all.


You can't have it all. You may achieve simplicity but it's not easy. Rails has most of what you need for a web app, and its ecosystem has many complementary subsystems and libraries. So, it's very easy to develop something fast. But, after a certain size it starts to be less and less maintainable.


Rails. Use the default Rails 7 stack (Importmaps, Hotwire).

You also can't get away from knowing at least a couple programming 'languages', it's hard to get away from writing at least some HTML/CSS unless you go with all pre-built solutions, at which point you may as well use a website builder...


I guess no one uses Clojure/Script on HN anymore. All of your requirements fit the cluster in designspace that the language was designed to occupy.

(cf. 'situated programs' in https://youtu.be/2V1FtfBDsLU)


jasonette.

https://jasonette.com/

I would still build a crud app with the frameworks and dependency hell you are referring to. Magic solutions tend to save time in the short term but often cost more than it saved in the mid to long term.


Project has moved to https://jasonelle.com/


Good catch. I saw jasonelle and assumed it was a forked project.


I love using C# and SQLite with EFCore for this kind of applications. Then I put it behind nginx.


I reckon python bottle.py (or flask), psycopg2, with basic auth. And sqlite or postgres..

I tried django but spent more time trying to understand the magic. I like writing out my SQL in the endpoint function for readability.

Oh if you want GUI component as well. Jinja2 and Htmx.


As others have mentioned, see if you can rope together something with a Google form and sheets.

Django is great, you can get very far with it's defaults e.g. it uses local SQLite db.


Two thoughts:

* you didn't specify anything the app *should* do besides "CRUD". You'll get better answers if you can say more about your needs and goals.

* some of the given requirements are mutually contradictory - "no services / SaaS" and "doesn't require a lot of maintenance", for instance. Part of the tradeoff you make using third-party services is "risk of them disappearing" vs "maintenance effort reduction".


+1 for FastAPI

If you know any Python at all, it's extremely easy to get into, and has a lot of "battery included" for standard problems you encounter in the CRUD-world.


Depends on what you're aiming for. For an API that will not be very flexible, its https://strapi.io/ may be good. https://feathersjs.com/ is good if you're looking for something flexible. If you are looking for more flexibility, you should write from scratch.


Plain HTML + Alpine.js + HTMX for the frontend. Use the language that you prefer for the backend handle the HTTP requests and return HTML to the frontend.


Seen here last week, exactly what you are asking for: Linux, Apache, PHP. No database, no Javascript, no framework, no AWS (or other cloud service). Part-time project by one person:

Standard Ebooks serves millions of requests per month with a 2GB VPS https://news.ycombinator.com/item?id=30302819


If you want something that does not require much maintenance or external dependencies, I would lean towards a hosted data store from an established provider. Google Cloud Firestore [1] is just one example and I know there are others in the same vein.

[1]: https://firebase.google.com/products/firestore


I would say a classic old school LAMP stack is as close as you're gonna get to no dependencies (assuming you count frameworks as dependencies)


Check out https://www.anvil.works. Python on the front and backend.


Maybe this sounds a bit dumb, but you could just use git and store everything in files?

I mean if you think about it, git is technically a CRUD app...


People do this - usually when they want to encourage contributions from a wider community.

I'm working on a python tool to make this easier. You can set up your data repository in git with some config files and it will help with a static site builder to make using and contributing data easier. It's at https://pypi.org/project/DataTig/ but I haven't had the chance to set up a good intro yet, tho I have started a tutorial: https://datatig.readthedocs.io/en/latest/tutorial/index.html


Bubble seems like the closest thing: https://bubble.io/


the ask for no external dependencies means you need to do one of two things.

1. choose a language with a LOT of "batteries included" (you don't want to have to write HTTP connection protocol handling from scratch). 2. re-create (or copy in) a ton of external code, which is still really "external dependencies" you've just copied them in to your code so you don't have to worry about them disappearing.

Either way you'll be writing a boatload of stuff from scratch that already exists. Regardless of which option you've chosen "easy" is no longer on the table. You want easy, you use the code other people have written to simplify things. That's why Rails, and its clones dominate web-dev. They have already done all the hard bits so that what's left is the "easy" bits and the proprietary bits.

> Should be simple and resilient, can last for a long time.

define "a long time"

Are we talking decades? C+ is probably the way to go. There's a ton of it in just about every industry so it's guaranteed to keep being supported for decades. Alternately, choose a language that's existed for a long time and still seems to be going strong like Smalltalk. As a benefit, Smalltalk's got a LOT of "batteries included".

> The closest I can think of is a static site generator with some kind of self-hosted database but I'm not aware of any.

that's an external dependency and most all of them depend on packages / libraries so it's an external dependency with external dependencies.

also, having a self-hosted database defeats the point of a "static" site generator. If it's static you don't need a db, unless you're storing meta-data that helps you generate the static files. That's why you're not finding any.


This is what https://darklang is intended to be. I think in fairness it's not there yet (and it's also a service, so not what you want), but it's certainly fully integrated and doesn't need DBs, external SaaSes, devops, cloud expertise, etc.


I am building something of this sort.

Im the app, if you have the right permission, you can use xml to describe tables, forms, and you can use lua to respond on the sever side to control and database events.

It is very staright forward, and you can do it all directly on the web.

It is still alpha, but if you are interested let me jnow and i will open a playground for you.


If it is purely a CRUD app and you know python, I would recommend https://pywebio.readthedocs.io/en/latest/. It allows you to write a website as if you are writing a console application.


If you like TypeScript/JavaScript, I recently discovered RedwoodJS [1], and while I have never tried it, it looks like a simple and rather complete framework for basic CRUD apps, while leaving room for growth.

[1] https://redwoodjs.com/


Microsoft Access/OpenOffice Base


Underrated recommendation.

Also MS Access alternatives like Knack maybe https://www.knack.com/


Try the Yii PHP framework. It can generate full CRUD directly from the database. Building in support for access controls etc is quite easy. schema. https://www.yiiframework.com/


Django is a solid choice. I used to do laravel a lot but moved to django for some reason. .net core is good as well, has a lot of scaffolding from the cli. Java has jhipster if you want to generate stuff quickly too. Choose any language that you’re strong in


I know, use WordPress!

(...I'll show myself out)


You joke, but this is how I start most of my apps. Minutes to spin up a WordPress site which handles routing, user registration and accounts, and admin access. Add CPTUI and ACF Front-end and all you need is front-end display of the data. I use Beaver Builder, but there are a number of options.


Building a CRUD app is easy. You can write it in any number of languages, I wrote them in Turbo Pascal back in the 1980s.

Then you mention "static site generator", which implies the web, and all the layers that come with it. That will never be easy, nor stable.


Also, whatever happened to zope and plone? [2006] https://archive.org/details/SeanKellyGettingYourFeetWetwithP...


They were complex to use and run. You have to learn many concepts which are entirely unique to that ecosystem, and are not very reusable elsewhere. I've been writing Python professionally for over a decade now and I've never come across an app built with Zope/Plane that hadn't been replaced long ago.

They're really quite clever, but they just did too much too differently.


If applicable, instead of a full-blown app, could try a self-hosted forms solution, like https://github.com/ohmyform/ohmyform


I have been working with Phoenix/LiveView for several years and really like it. It is extremely performant and scalable, and a joy to program in. In my opinion, it meets your requirements and may be worth a try.


Super biased here, but you should definitely try Abstra (https://abstra.app/)

It allows you to create CRUD apps visually with little to no JS code


I would go for Sandman, without a doubt: https://pythonhosted.org/sandman2/


I am really liking nextjs but with the caveat of only if you already are on the NPM hamster wheel (braking changes are too regular in that ecosystem) and already love React


If you're going to be doing anything more complex than form validation and CSS animations on the client, you're going to need JS. If it's a constraint that there must only be one language then you have to use JS on the server too.

Nowadays the best experience with full stack JS is a full-stack framework like Next.js, Next or the one I recommend, sveltekit. You can easily write client pages & server routes Next to each other, with all the standard client side features like components and use tried and tested JS libraries like node-postgres. It's great and is unlikely to break for years, or decades if dependencies are updated.


You could also go long on client side JS and use Firebase


Don't listen to this guy, next and svelt are basically legacy at this point. You need remix or solid js. Or wait three months for Naxt or Angular 3.

Jokes aside.

Django < python

Rails < Ruby

Laravel < Php

Phoenix < Elixir


No, you don't need a humongous framework.

Install Node.js and an SQLite adapter. Learn to use the standard HTTP/S module. Write plain ol' JavaScript for the frontend and don't make it a SPA. Unless the app is getting a ton of traffic or has a lot of pages, there's no reason it can't be about that simple. In that case you only need 1 language and the only dependency is whatever you use to read/write to an SQLite database. No need for Rails, Laravel, Django, or anything that fancy.

On the other hand, one of those frameworks may be what you're looking for. I'm just saying it could be a lot simpler than that.


Ruby on Rails because it can generate all the scaffolding you need instantly and then you can focus on adding business logic instead of worrying about boilerplate BS.


several years ago i took a feature-rich object-storage platform (written in pike) as a backend, added a RESTful API and then built various SPA sites on top of that. once the API was sufficiently feature complete i didn't need to touch the backend at all anymore.

besides the backend itself, the only other dependency is a database.

as a result, building a site nowadays is drastically simplified. javascript and my favorite frontend framework is all i need.


If you don't mind PHP, there are tools like PDOCrud, ajaxCrud, xCrud et al that provide simple ways to create cruds with a limited number of lines.


It sounds like you want to have a thing built, and don’t want to spend time/effort on code. Have you considered hiring someone to build it for you?


thetip already covered this. Use what you know

I would say use Firebase or another fully managed solution. Don't waste time on a server if you can avoid it


We are still in stealth mode with our out of the box CRUD generator, but you might wanna join our closed alpha. PM me, if interested.


Only a good idea if you already know Go, but I just write simple HTTP servers in Go. I deploy a SPA separately in Vue using netlify.


Django


Vue on the front end, along with Quasar Framework Python+Falcon on the back end Postgres/Redis for data store, caching


Vaadin meets all your requirements. It has some templates so you can basically make an app by just commenting stuff out.



Maybe a RAD tool like https://wappler.io


Ruby on Rails, unless you’re more familiar with PHP/Laravel or Python/Django—then use one of them.


Check out blitz.

https://blitzjs.com/


Everyone will hate me for saying this, but nothing like glideapps for this.


Ruby on Rails

I wonder why people keep asking such questions instead of just learning some of rails


For the lack of dependencies – probably Go.

For simplicity – probably JavaScript w/ Express.


if you’re looking for easiest the best bet are OS frameworks like Visual Studio and Xcode. you’ll get comprehensive platform support ,great tooling , great docs

go and build a simple gui app for macos and it’s a dream .


When I need a simple-ish CRUD app, I use Django. I know the parts I need to know, and learning wasn't too hard. The database schema lives in one easy to view/edit file, no need to both create language objects and write SQL. Jinja2 is the nicest templating language that's not HTML-specific. Deploymemt is easy enough.

That said, I have some issues with Django as well: Integrating JavaScript with the Django goodies (e.g. form system, CSRF prevention) is far from ideal. I remember spending hours to add a form field for multiple handwritten entries "properly", I ended up writing the form template manually and just not using the abstraction for that one field. It worked, but felt hacky. I now had rendering, parsing, and validation in two places.

Permissions are handled the way you'd probably expect them to be: Permissions are strings which users have and pages can require or check them. This is fine for most apps, but sometimes you want multiple views of the same data with complex permissions (e.g. the data determines whether the current user can see the item), Django provides little support there.

I also wish the Admin interface was easier to modify. It can be done, but feels to me like monkeypatching an existing app, not using an abstraction I could build an app on. It's probably meant that way, but I wish there was a framework with a less rigid analogue.

I'm slowly working on my own approach to tackle this problem, mostly focusing on declarative permissions (I wrote about an old version: https://dvdkon.gitlab.io/articles/mocasys-dascore/). I'd appreciate any pointers to other solutions to similar problems.

EDIT: As an aside, here are my criteria for a good CRUD app framework:

- The data model is the source of truth: I shouldn't have to repeat what tables and columns I have, or what constraints are placed on them. Server-side validation and client-side inputs should be autogenerated

- Permissions are all in one place: Critical parts of app security shouldn't be all over the place, especially they shouldn't be duplicated between the backend and frontend.

- Permissions should be granular to both columns and rows: I know this isn't always needed and that it's hard to implement, but sometimes you just need granularity, and hacking it in is, IMO, a bad idea for security reasons (see point above)

- The app is in a git repository, separate from the data it operates on: This is where a lot of "low-code" solutions fail for me, I get the goal of user-extensibility, but when I'm making software that will run a business' core functions, I don't want hidden state. Plain text is the best we've got in that regard.

EDIT2: Another criterion: Transparent handling of history. Keeping every change of an item should't need to be programmed once for every datatype, same for the retrieval UI.


Appsmith as the front-end with Appwrite as the backend would work well.


Rails with server side rendering and Postgres. One stop shop.


The question is too vague. Why do you even need a CRUD app?


nginx + language of choice as CGI + sqlite on a DO droplet


This. If you can use Go you can skip ngnix and add auto cert gen with let’s encrypt with about 3 lines of code.


Api Platform + React. That's just impossible to beat


what you mean by "api platform"?


My bad! The name is indeed generic enough to not be obvious. Here it is: https://api-platform.com/

This is a framework built on top of Symfony and it provides you with full blown Hydra API simply by adding annotations on your entities. It enables you to make simple crud in like 15 minutes, but as it's built on top of Symfony it can also be used for really complex projects

It was originally made by @dunglas which is also a Symfony core team member and does a lot of stuff (the Mercure protocol and Vulcain among other things)


I'd go with Perl Dancer, SQLite and plain HTML.


Perl rocks.


Retool + Dark Lang


None of the above. Microsoft Power Apps.


i ended up with a fastapi (on lamdas) and retool as a frontend. I really like it.


rails


agreed. rails.


Any low-code will enable you to create multiple CRUD pages in less than 5 minutes.


Such as?


Mendix, outsystems, etc. In mendix you can build a CRUD page with a few clicks, as documented here: https://docs.mendix.com/howto/front-end/create-your-first-tw.... Or you can simply click "generate overviewpage" on an entity and have it all done for you. One more "deploy" click, and it runs in a container on AWS with an RDS database.


https://apibakery.com/ for Django and Node/Express for APIs


Laravel. Hands down.


Rails or pho.


web2py


“Just do it.” Frameworks absolutely suck, don’t use them. Normalize your data and just build things one step at a time.




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: