ihp
Phoenix
Our great sponsors
ihp | Phoenix | |
---|---|---|
121 | 103 | |
4,075 | 19,935 | |
1.0% | 1.0% | |
0.0 | 9.4 | |
7 days ago | 3 days ago | |
Haskell | Elixir | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
ihp
-
Haskell Optimization Handbook
In case this got you interested in Haskell, and you want a good way to start your Haskell journey (and have something to apply the optimization handbook to), check out IHP. It's the Rails/Laravel of the Haskell world. You can start here https://ihp.digitallyinduced.com/Guide/index.html or check it out on GitHub here https://github.com/digitallyinduced/ihp
-
Show HN: Algora.io – Open-source development bounties
At IHP we've been using Algora for a while now and it works really great. Here's e.g. one PR that was merged last week with a bounty attached https://github.com/digitallyinduced/ihp/issues/1621 Everything was set up in less than 15 minutes and ioannis and zafer have been super helpful with any questions we had.
In general I think this is a good direction and an interesting take on the open question around sustainable open source. Congrats on the launch and keep up the great work! :)
- Por que Elm é uma linguagem tão deliciosa?
-
Any open source projects to contribute to for beginners
You could contribute to IHP! We have some great docs to get started here https://github.com/digitallyinduced/ihp/blob/master/CONTRIBUTING.md And we have some low hanging fruits in GitHub issues for you to get started with, e.g. https://github.com/digitallyinduced/ihp/issues/1601 (also there's always lots of activity in the IHP Slack, in case you have any questions/need help)
- Using Rust at a startup: A cautionary tale
-
Show HN: IHP v1.0 (Batteries-included web framework built on Haskell and Nix)
Really happy we've finally go to the 1.0 status :) If you like to take a look at the code, check our GitHub at https://github.com/digitallyinduced/ihp
-
Is there an Elm like framework for cross-platform apps?
kinda early for running roc in production perhaps, but you can try out haskell and its frameworks like ihp or some other web / mobile / multiplatform framework.
-
Why Haskell Is Interesting?
In recent years the Haskell ecosystem has drastically improved.
With Haskell Language Server (HLS) there's now great autocompletion and inline error reporting for e.g. VSCode and other editors.
We've recently got dot-notation, so you can type `myRecord.myField` instead of `myField myRecord`, which makes Haskell code feel more familiar when switching from other languages.
With IHP we now even have a Haskell version of Rails/Laravel. Check it out here: https://ihp.digitallyinduced.com/ (I'm founder of IHP)
-
Functional Reactive Programming
Yes, it's possible to build a traditional web company with Haskell. We've made IHP exactly for that :) It's like Rails/Django but for Haskell. https://ihp.digitallyinduced.com/ We specifically try to be batteries-includes (like rails), so you don't have to think too much about what libraries to use, the core of IHP can get you very far without needing to manually decide between libraries.
IHP even won a G2 badge, which is kind of funny and ironic for a Haskell project :D https://www.g2.com/products/ihp/reviews
-
GHC 9.4.1 is now available
Thanks to reintroduction of deep subsumption we could finally update IHP to the GHC 9 series. So really happy about the recent GHC releases :)
If you're curious about Haskell, IHP is a good starting point (https://ihp.digitallyinduced.com/ https://github.com/digitallyinduced/ihp). IHP is Haskell's version of Laravel/Rails/Django. It's really a superpower to have Haskell's type system combined with the rapid development approach of Rails :) (Disclaimer: I'm founder of the company that makes IHP)
Phoenix
-
Emoji Generator with AI
Yes! I love Elixir :) [Phoenix LiveView](https://www.phoenixframework.org/) is really amazing. I feel so fast working in it. I got hooked after watching Chris McCord's ['Build a real-time Twitter clone in 15 minutes'](https://www.youtube.com/watch?v=MZvmYaFkNJI&embeds_referring...), and things have improved a lot since then.
- Ask HN: Leetcode for Back End and Server Development
-
30 Best Web Development Frameworks for 2023: A Comprehensive Guide
Phoenix
-
The Lazy Programmer's Intro to LiveView: Chapter 1
Whenever I forget how to start a new Phoenix project all I have to do is go to https://www.phoenixframework.org/, click on Guides, and right on my left then open the 'Installation' page. To get the latest Phoenix installer run the command below.
-
Ask HN: What are some of the most elegant codebases in your favorite language?
I’m surprised that nobody has posted about Elixir yet. I nominate the excellently written Phoenix library. Not only is the code well organized and easy to find, the documentation is expansive and right next to the code.
-
Switching to C over 'Modern' Programming Languages
I'm not personally familiar with it, but I think you want to take a look at Elixir. I've heard it often in the same vein as Rust but for web. Not exactly the same, but in terms of a high-quality language.
-
I think I messed up my CS degree. I am about to graduate and don't feel like I know anything. What do I do?
If you want to do web apps, I'd recommend Django (a python framework) https://docs.djangoproject.com/en/4.1/, but you can do Rails, or Phoenix, or Spring Boot, or whatever. It doesn't terribly matter *which* one you do, as they share characteristics, and, chances are, your company will be using a different one :). Just pick one and go. You can do it. You know a lot more than you think.
-
React is a fractal of bad design
4 letters. HTMX.
Or look at https://www.phoenixframework.org/ to see what a web framework would look like if real-time updates mattered. (That said I do find that simple IoT applications like a volume knob for my smart speakers in party mode or that can toggle my lights do work well with websockets + mobx + React.)
As for DX, I think waiting for "npm run start" to get out it's own way is a large enough decrement that I don't have to get into all the many problems w/ JS build systems.
I will grant that React is nice for an animation-heavy UI and I play video games enough that I appreciate such things. Another thing I like about React vs similar competitors is that the rendering model is flexible enough to enable things like react-three-fibers which is another reason for me not to invest in Vue, Svelte and things like that.
As for user experience isn't it the dark truth that Google and Facebook want "as many UI redraws as possible?" Let's face it, the honest clickthrough rate on ads is indistinguishable from zero but when you visit some site like anandtech it is by no means accidental that the layout rerenders endlessly because each rerender is a chance that a click on a link is transmogrified into a click on an ad. It's covert click fraud and is a large enough decrement and between that and the endless staring at spinners and waiting things to load any possible increment in user experience is at best hypothetical.
(e.g. in another window I have a completely SSRed app that uses HTMX. It uses zero spinners, runs as fast or faster than a desktop app, and never has the UI move around mindlessly. I grant it would be cool if it had some more animation but would I trade that for rock solid responsiveness?)
-
Ladies and Gentleman, the award for Developer of tue Year goes to:
Only takes 15 min to build a clone https://www.phoenixframework.org/
-
Phoenix 1.7.0 Released: Built-In Tailwind, Verified Routes, LiveView Streams
I don't think there is a definite answer for "what a property designed framework" is but I can try to explain where Phoenix sits in the possible trade-offs.
One possible approach frameworks use to provide escape hatches is configuration. You ship with a series of defaults and, once you want to change it, you need to find out the proper knob to turn. A downside of this approach is finding the proper knobs when you need to tweak it.
Another approach is code generation: you generate code (or configuration) and keep the knobs clear to user. There are still defaults (and conventions) but the knobs are laid out upfront in your application. The downside here is that having so many knobs upfront may seen daunting or noisy.
Since you mentioned Rails, I will provide references on how Rails and Phoenix use those.
Both frameworks leverage both techniques above, but Phoenix errs more on code generation and Rails more on configuration. Here is a practical example.
Rails has a middleware stack that is part of all applications. This stack is hidden from you. Here is how the generator file for said application looks like:
https://github.com/rails/rails/blob/d0d9e8e576b06c19f8507510...
Phoenix has a similar stack (called plug) and the default stack is part of your application. Here is the generator file for it (it is not part of your app but used to generate it):
https://github.com/phoenixframework/phoenix/blob/3c27a34c27c...
You can look at these approaches and try to compare the pros and cons.
---
My biased opinion: I have worked with both and I prefer the Phoenix approach. I understand someone may find having all steps in your endpoint noisy or daunting, but the plus side is that it takes a glance to see all steps a request goes through and you can tweak it in any way you want.
When comparing to Rails, if you want to insert a middleware in the middle of the default stack, you need to explicitly say before or after which middleware. If you want remove something, you need to state the negation and say "I don't want to have this". Overtime this makes it hard for you to visualize what your application does, because you need to assemble the pieces in your head and use tools to print the stack for you.
This also matters on releasing new framework versions. Because Rails has its own stack, if it changes the default middleware stack in any way, it can slightly change how your code. What if the middleware you were inserting before was moved up? Or removed altogether? Or maybe a middleware you deleted was replaced by another one, with similar functionality. Do you want to remove it too? This can lead to subtle differences of behaviour when upgrading.
The code generation approach requires you to opt-in to the new features, which is, IMO, one of the reasons why Phoenix could avoid breaking changes in the last 8 years or so.
This is in no way a knock on Rails. I am 100% confident the Rails team is aware of those trade-offs and could equally argue for their choices. It also isn't a binary choice either, both frameworks use both approaches, with some general preferences for one over the other.
What are some alternatives?
Django - The Web framework for perfectionists with deadlines.
sugar - Modular web framework for Elixir
hotwire-rails - Use Hotwire in your Ruby on Rails app
kitto - Kitto is a framework for interactive dashboards written in Elixir
trot - An Elixir web micro-framework.
RIG - Create low-latency, interactive user experiences for stateless microservices.
Elixir - Elixir is a dynamic, functional language for building scalable and maintainable applications
Ruby on Rails - Ruby on Rails
miso - :ramen: A tasty Haskell front-end framework
Stimulus - A modest JavaScript framework for the HTML you already have
morphdom - Fast and lightweight DOM diffing/patching (no virtual DOM needed)
placid - A REST toolkit for building highly-scalable and fault-tolerant HTTP APIs with Elixir