13 ms·
Show HN: Amplication – Instantly Generate Node.js Apps with GraphQL and REST API
- yuvalhazaz 6y agoHello, co-founder here: as a backend developer I've had to develop web APIs for various projects over the years. Before I could spend any time on designing and testing my business logic, I had to invest hours into making sure my boilerplate code was valid and provisioning infrastructure, not to mention setting up my cloud environment. We built Amplication so that developers like us could focus on coding the parts that really matter, rather than get distracted by undifferentiated heavy lifting. Amplication is an open-source tool that lets you design your data schema and in return it generates for you a human-readable and editable TypeScript Node.js codebase. This server codebase includes a GraphQL API, REST API, authorization, authentication, admin UI, users management, logging utility, error handler, and much more right out of the box. we generate your server code dynamically based on changes in your schema. You can download the generated code or continuously push it to a GitHub repository to continue off and edit it further on your own. For your convenience, we use a web UI to manage this whole operation and it is available for the community as a managed service on https://app.amplication.com https://app.amplication.com, or you can run your own Amplication server. I’ll be more than happy to answer any questions you may have and get your feedback.
- tiborsaas 6y agoI really love this, years ago I made a similar tool that generated a CRUD app from a DB schema with an admin UI, auth, etc. How do you solve merging the modified codebase with a freshly generated ones? Let's say I need to add a new field. Do you rely on GIT for this? Also, the readme could use a link to a sample hello world repo that this Amplication generates.
- yuvalhazaz 6y agoLove your feedback! Thanks. We plan to have a set of policies to allow the developer to freely work within those policies so we can merge the code back to Amplication and even deploy the app with the custom code. There is a still way to go to get there... Meanwhile, we let the developer manage the merges in GitHub When you sign in to app.amplication.com you get a simple sample app with your account
- insomniacity 6y agoThis looks good - seems to be hammered currently? https://app.amplication.com/ckjuaxw2518112510s6qfb0xi8q https://app.amplication.com/ckjuaxw2518112510s6qfb0xi8q shows {"statusCode":500,"message":"Internal server error"} for code download, and has been waiting for a sandbox environment for a while. But I'll be back to try it again in a few days :)
- agiroth 6y agoI literally started asking around on the web for exactly this today. Seriously taking a look, this looks promising. We built an app on AppSync and Cognito and I want to get off AWS so I'm looking for alternatives, and this... fits the bill.
- yuvalhazaz 6y agoGlad to hear that! If You need support of any kind, join our discord channel and we will love to help https://discord.gg/b8MrjU6 https://discord.gg/b8MrjU6
- xgenecloud 6y ago@yuval : Congrats on launch. Happy to come across it. We need more people tackling this problem. UI looks cool :) At XgeneCloud[1], we are after the same problem. XgeneCloud provides a desktop app that can connect to any new/existing databases to instantly generate REST & GraphQL APIs. (Supports MySQL, Postgres, SQL server & SQLite) Happy to share notes on discord. [1] : https://github.com/xgenecloud/xgenecloud https://github.com/xgenecloud/xgenecloud
- highmastdon 6y agoMinor comment. On the homepage the titles of small paragraphs (like What we do, Why we do it), I can't help but notice that I'm ignoring the part that's in the pill, and reading the text only, getting confused, reading again, and spotting the pill, then realizing it's part of the full sentence. Could be only me, but if not, maybe change that?
- yuvalhazaz 6y agonoted! thanks
- liorshani 6y agoThis is EPIC
- deleted 6y ago[deleted]
- johnghanks 6y agoSo... you copied AWS' Amplify?
- wyck 6y agoReally cool, super intuitive UI. I won't really be able to use it though until it supports more data types, hopefully with specific DB's in mind.
- yuvalhazaz 6y agoThanks. Can you please share what data types you have in mind?
- wyck 6y agoWell with the quick spin I did I wanted to create a few integer based data types, which is pretty standard for a DB/API. Your numerical type only allows for 7 numbers which seems very odd. Postgres for example has 10 different default integer data types. Putting in 11111111 throws an error. There's more than enough reasons why you need larger ranges and more control over the types.
- ethan_smith 6y agoNice!! How does it compare with Postgraphile?
- yuvalhazaz 6y agoPostgraphile is a great tool. The main difference is that we generate code that you can use any way you like and deploy anywhere you want. If you are a Node.js developer you get a boost that helps you focus on your business logic without giving up on the flexibility of code. Also, on our roadmap, we want to provide developers with a full set of features to make development easier, e.g. integration, connecting to different DBs, and much more.
- jsnk 6y agoVery cool. What DB is the tool currently using?
- yuvalhazaz 6y agoPostgreSQL
- hilalh 6y agoSeems like a great tool I’ll make sure to give it a try
- yuvalhazaz 6y agoThanks! if you need any support or have feedback please find us on our discord channel. We are always there for a chat https://discord.gg/b8MrjU6 https://discord.gg/b8MrjU6
- SamBam 6y agoThis looks very neat. Why do you require a GitHub account to test it? --- Edit: and after I logged in with my GitHub credetials, I was directed to https://app.amplication.com/github/callback?code=968 https://app.amplication.com/github/callback?code=968[...] which just showed me a 500 error. Hug of Death?
- johnx123-up 6y agoI'm not the OP. FWIW, I have checked their video https://www.youtube.com/watch?v=tKGeLXoPr94 https://www.youtube.com/watch?v=tKGeLXoPr94
- yuvalhazaz 6y agoSorry to hear that. We will make sure to check the logs. As for the login, we ask for a GitHub sign since we thought it would be most convenient and cost affective at this stage since all users are developers. Also, we use it to send the generated code to your GitHub repo.
- egeozcan 6y agoWanted to test too... I'm getting " Error: Error in connector: Error querying the database: db error: FATAL: remaining connection slots are reserved for non-replication superuser connections " when deploying.
- jtth 6y agoCan you just make some page that doesn't save anything so we can see what you mean by "visual"? Or embed a youtube preview?
- yuvalhazaz 6y agoYou can watch this video https://www.youtube.com/watch?v=tKGeLXoPr94 https://www.youtube.com/watch?v=tKGeLXoPr94
- yuvalhazaz 6y agoSamBam if you need any support please jump to our discord channel and we will do out best to help https://discord.gg/b8MrjU6 https://discord.gg/b8MrjU6 Thanks
- nikolasburk 6y agoFor anyone who's interested, Iddan from the founding team recently gave a demo of Amplication on our "What's new in Prisma" livestream. You can watch it here: https://youtu.be/wQo_Ii_IjXA?t=4279 https://youtu.be/wQo_Ii_IjXA?t=4279 Really love the work they're doing, definitely check them out!
- ithrow 6y agoBuilt on top of immature overhyped tech (nestjs, prisma, etc...) with lots of issues. Something very common in the JS/NPM that always gives you headaches down the road. There's an arms race to sell hosting through immature buggy magical frameworks in the JS world, so this is to be expected. I'll take the one/two days to set up node, express, postgres with libs for now. What takes up the majority of the time is domain modeling anyway.
- yuvalhazaz 6y agoLooking forward we have a strong belief in both NestJS and Prisma. They are great technologies on there way up (and in many ways, they are already there)
- slingnow 6y agoThis does nothing to address the OPs concerns. You might as well have just said "Don't worry about it!"
- arcturus17 6y agoI've been developing web apps in Node for a couple years and I'm done with it - I'm all in on Django + DRF now. I only made the switch a couple months ago and it's amazing how cozy I am with it: everything feels mature, stable and reliable. I reach out for 3rd party packages as needed but it doesn't feel like I'm gluing a Frankenstein together, or that I'm rolling out a bunch of code I don't want to own, or that I'm overthinking for the umpteenth time how I should structure my app. I think after a couple months with Django I'm nearly as productive as I ever was Node.js. Granted that many web dev concepts just carry over, but the feeling is uncanny regardless. Also, the "language context switch penalty" is a complete myth. I picked up Django by reading two books in 2-3 days, and didn't need to even bother front-loading Python - I just picked it up as I went. I now switch between Python and JS/React seamlessly; I enjoy writing both and I really like the variety (though as dynamic, duck-typed languages maybe they're not that dissimilar). Every thousand characters I type in Python I'll make a silly mistake where I write some JS syntax and that's it - hardly what I'd a call a cognitive penalty. As it stands, I'd only develop something in Node.js if I really needed its performance characteristics (and then, I may be able to get close to them with Python's asyncio - though I haven't researched this avenue yet so there may be pitfalls I'm not aware of). All in all, I find it baffling that in over a decade of existence Node.js hasn't produced a web framework that even comes close to Django or Rails. I do wish OP, Nest, Prisma and all the devs in the Node ecosystem the best of luck nevertheless. I love JavaScript and if someone produces a web framework that really emphasizes developer productivity and happiness I would consider coming back in the future.
- Ataraxy 6y agoI had began creating my own sort of thing on top of Hasura which I prefer but this is pretty cool. I'm not at all too big on TS (which is sacrelige apparently) but I'll check this out.
- yuvalhazaz 6y agoWe already got some feedback from developers who used the generated code to learn Node.js :-) maybe it is your chance to jump into TS
- jamil7 6y ago> I'm not at all too big on TS (which is sacrelige apparently) All of JS with an :any appended to it ;)
- wbobeirne 6y agoThis really closely mirrors my preferred stack, so I'll definitely be taking a close look at this for my next project. One pipedream I've had with TS backed APIs is sharing the types between the backend and the frontend to prevent duplication. I didn't see anything in the API consumption docs, but is there anything here that tries to accomplish that deduplication?
- yuvalhazaz 6y agoWe are using this exact technique on the Amplication server where we automatically generate the models for the clients from the graphQL schema on the server. When you build your app with Amplicaiton you anyway get a generated code including the models both for the client and the server so you get exactly this OOB.
- yutuibe 6y agoWondering how many GQL programmers are aware of GQL injections.
- dave_sid 6y ago“Nodey On Rails”?
- brainbag 6y agoI was just searching for a tool exactly like this a few days ago. Looks really great!
- yuvalhazaz 6y agoGreat! Please share your feedback once you've tried it!
- mettamage 6y agoIs this a bit like Jhipster but then for JS/Node instead of Java/Spring Boot?
- lrmunoz 6y agoHow does this compare to https://redwoodjs.com/ https://redwoodjs.com/ ?
- yuvalhazaz 6y agoredwoodjs aims to provide a framework for a serverless architecture with jamstack - It looks amazing. Amplication aims to provide an easier and continuous development experience with Node.js, to allow node.JS developers to focus on their business domain instead of design and boilerplate. Amplication generates a human-readable source code to allow the developers the freedom to choose how to use their apps and how to deploy it - Whether because of business policies and architecture, privacy and security concerns, or just personal preferences.
- Dnguyen 6y agoLooks interesting. I've used similar setup but with Hasura. My current project needs to interface with a 3rd party REST API on top of Postgres. I was able to replaced many of the CRUD REST API with Postgraphile. To bring it all under one GraphQL endpoint I used Apollo Federation. When I have time I'll have to see how Amplication federate the various data sources.
- whalesalad 6y agoThe demo video is really great - I would make it more prominent: https://www.youtube.com/watch?v=tKGeLXoPr94&feature=youtu.be https://www.youtube.com/watch?v=tKGeLXoPr94&feature=youtu.be Really comprehensive product!
- yuvalhazaz 6y agothanks!
- city41 6y agoPlaying around in app.amplication.com I'm seeing a lot of similarities to supabase. Happy to see more competition in this space. My initial impression is I'm a bit confused as to whether the goal is a hosted service similar to supabase, firebase, etc, or an offline tool that generates the app then it's up to you to go host it somewhere.
- yuvalhazaz 6y agoWe want to give the developers to choose whether to use the hosted solution or take the app and the source code and host anywhere else. We understand developers need the freedom to choose
- gfrangakis 6y agoI'm curious - is there a tool handles solely the "frontend codebase generation" part of this? This looks great, but we already have a well-defined backend and REST API built using Python+FastAPI, with SQLAlchemy as an ORM and Postgres backing it. I am not a good UI/UX designer, but I understand and have built React applications, so really find myself looking for something that can take an OpenAPI.json spec and produce a hackable frontend codebase that follows best practices.
- muttantt 6y agoAre you using SQLAlchemy in a blocking way w/ FastAPI?
- gfrangakis 6y agoI believe so - basically following the vanilla SQLAlchemy integration guide they have [0], and not trying to await query results as they do in the the async guide [1] [0] https://fastapi.tiangolo.com/tutorial/sql-databases/ https://fastapi.tiangolo.com/tutorial/sql-databases/ [1] https://fastapi.tiangolo.com/advanced/async-sql-databases/ https://fastapi.tiangolo.com/advanced/async-sql-databases/
- iaml 6y agoReact-admin[0]? Doesn't read openapi from what I could gather but solves similar problems in a best-practicey kind of way. [0] https://marmelab.com/react-admin/Readme.html https://marmelab.com/react-admin/Readme.html
- gfrangakis 6y agoI had seen this a while ago but should take a fresh look at it - it seems like there should be a community tool that generates data providers from an openapi spec. Thanks!
- iddan 6y agoVery excited to see this project hitting the top page. Had the time of my life contributing to it
- yuvalhazaz 6y ago♥
- TameAntelope 6y agoI'm having a miserable time with Sequelize, and I see this uses Prisma. What contributed to that decision?
- yuvalhazaz 6y agoPrisma is awesome. We initially tried TypeOrm and Sequilize and quickly move to Prisma for various reasons. I may post a blog post about this journey soon
- latchkey 6y agoPlease give MikroORM a shot, vastly better than the mentioned. https://github.com/mikro-orm/mikro-orm https://github.com/mikro-orm/mikro-orm
- nikolasburk 6y agoWhat are the points that make you pick MikroORM over Prisma? (I work at Prisma and am always eager to learn about individual preferences of folks when it comes to choosing an ORM.)
- latchkey 6y agoUnit of Work.
- cratermoon 6y agoAutogenerated direct data coupling.
- RedShift1 6y agoWhat are you implying?
- cratermoon 6y agoI appreciate your question and thought it deserved some thought time, in contrast to my initial off-the-cuff comment. I had difficulty putting it into words, but today I was reading another article posted here on HN and it cut to the heart of the problem: https://macwright.com/2021/01/15/rust.html https://macwright.com/2021/01/15/rust.html "GraphQL basically lets your frontend application define queries, instead of the backend. You give it a range of things it could query, and the application - React or something else - sends arbitrary queries to the backend. This makes things hard for the backend. Any sort of SQL-level optimization is impossible - your server is writing dynamic SQL, so you rely on the intelligence of your GraphQL server, which is not always high. Juniper, for example: n+1 queries by default. The workaround - a dataloader - is rough and independently maintained. So at the end of the day, you’re going to have a blisteringly-fast application layer that’s spending all of its time inefficiently querying your database." This is the data coupling problem, allowing the front end to see and arbitrarily query the data model. Yes, you can put a great deal of effort into optimizing the GraphQL server, but then you've just introduced middleware again, and at that point it's hard to see what the GraphQL protocol has over REST.
- andrewprock 6y agoThis looks like it creates very tight coupling between the API and the implementation. This is probably great for prototyping, but probably not a good path for building robust long lived services.
- itisit 6y agoStrongLoop?
- geektips 6y agoReally cool... But I would really like to see more data type support and also if it isn't too much support for other frontend frameworks (Specifically Vue.js/Angular). Nest.js and Prisma is something I wanted to try for a long a time. All the best.
- yuvalhazaz 6y agoThanks! We are focusing on the backend but try to provide the minimal staring point for front end clients. We will consider adding more clients later down the road.
- kgiddens1 6y agoGreat stuff, from wonderful contributors :)
- yuvalhazaz 6y agoThanks
- Zaheer 6y agoBig fan of frameworks like this. AdonisJS is similar in this space: https://preview.adonisjs.com/ https://preview.adonisjs.com/
- turtlebits 6y agoVery cool, looks like it only works with Node.js and possibly React. I've a huge fan of Hasura which just sits in front of Postgres and presents GraphQL queries (and is easily deployable as a container).
- timbram 6y agotest
- grok22 6y agoSame conceptually as https://github.com/xgenecloud/xgenecloud https://github.com/xgenecloud/xgenecloud?
- pamicel 6y agoWhy not use typeORM as the ORM for Amplication ? It is already feature complete
- emilsoman 6y agoHow does this compare to https://wasp-lang.dev/ https://wasp-lang.dev/ ?
- zappo2938 6y agoI'm using the same ecosystem with React and Nest.js. Very awesome to see an app built with best practices for JavaScript in 2021. You might have saved me hundreds of hours of work. Why Prisma and not TypeORM?
- yuvalhazaz 6y agoTypeORM is no longer maintained in a frequency that gave us enough confidence about the future. See this discussion https://www.reddit.com/r/graphql/comments/duecak/comment/f77k43g https://www.reddit.com/r/graphql/comments/duecak/comment/f77...
- cutler 6y agoWhy do I have to run Docker to run the server locally? This always raises a red "over-engineered" flag for me. Docker is for deployment, not development.
- rpcwork 6y agoOur giants came before us, swallowed the enormous complexity and presented us with simpler abstraction to build on. When you move your work across environmental abstraction, these beneficial abstracts tend to show their cracks. By keeping the production and the development environments similar, my team avoids deployment surprises and disasters. More importantly, we avoid the escalation calls that take you away from the family dinner table. If you are gonna delpoy in a docker container, maybe develop in the docker container.
- elwebmaster 6y agoInteresting idea but I looked at the sample app and the amount of code it generates looks excessive for the features it provides. Thinking about the effort to maintain and extend this code I am not sure if it would be a good starting point for MVP projects.
- tschuehly 6y agoThat's what I thought when I tried JHipster, setting up a Spring Backend with a Generic CRUD Controller and Generic Services, takes 1-2 hours and is much cleaner.
- WalterGR 6y agoWhat other projects are competitors in this space?
- tudorconstantin 6y agoNot sure "competitor" is the right word, but I started to work on my own boilerplate/project-starter some time ago[0]. I choose to use NestJS, knex and NextJS. My objective is to achieve the best tradeoffs between autogenerated-boring-stuff and easily-customize-everything (yes, including complex DB queries, especially those actually). Also, there's BlitzJS which seems to have similar objectives. There's definitely no incumbent in the Js/ts/nodejs world similar to the django/laravel/rails/mojolicious frameworks in the other, more mature, dynamic languages. https://github.com/tudorconstantin/knests https://github.com/tudorconstantin/knests
- deleted 6y ago[deleted]