[HN Gopher] Fresh 1.1 - Automatic JSX, plugins, DevTools, and more
       ___________________________________________________________________
        
       Fresh 1.1 - Automatic JSX, plugins, DevTools, and more
        
       Author : gripfx
       Score  : 163 points
       Date   : 2022-09-08 13:28 UTC (9 hours ago)
        
 (HTM) web link (deno.com)
 (TXT) w3m dump (deno.com)
        
       | Waterluvian wrote:
       | Is Fresh primarily a server side rendering tool? Or might it be
       | an option for static-ish webpages hosted by GitHub.io?
       | 
       | I love the idea of eliminating lots of build boilerplate but I do
       | ultimately want to output static assets for a read-only webpage.
        
         | rough-sea wrote:
         | It's a server-side framework that delivers static content - but
         | the static content is rendered just in time rather than ahead
         | of time.
         | 
         | For ahead of time static sites in Deno, check out Packup
         | https://packup.deno.dev/
        
           | Waterluvian wrote:
           | Ahhh gotcha. So unlikely to be a good fit for my needs.
           | 
           | Thanks!
        
           | pier25 wrote:
           | AFAIK the static content is cached somehow with Fresh/Deno.
           | It's not compiled on every request.
        
       | robofanatic wrote:
       | I just ran this and got a bad cert error. How should I fix it?
       | 
       | deno run -A -r https://fresh.deno.dev my-project
       | 
       | Sending fatal alert BadCertificate error: error sending request
       | for url (https://fresh.deno.dev/): error trying to connect:
       | invalid peer certificate contents: invalid peer certificate:
       | UnknownIssuer
        
         | lucacasonato wrote:
         | Are you behind a corporate firewall? Can you set
         | `DENO_TLS_CA_STORE=system` and try again?
        
           | verdverm wrote:
           | Is deno using a custom cert store by default?
           | 
           | ---
           | 
           | https://deno.com/blog/v1.13#use-system-certificate-store-
           | for...
        
             | lucacasonato wrote:
             | It uses the Mozilla certificate store by default.
        
           | robofanatic wrote:
           | yes and thanks so much. that did the trick!
        
       | obviyus wrote:
       | Great update! I wonder if Fresh plans to use Deno's (new) HTTP
       | server[1]. Benchmarks for that look incredible (compared to
       | Express).
       | 
       | Off-topic but how does the video[2] under Preact Dev Tools look
       | so sharp yet only weight 43KB? Edit: nevermind, the downloaded
       | file's 2.9MB. Must be something up with Chrome's network tab.
       | 
       | [1]: https://deno.com/blog/v1.25#new-experimental-http-server-api
       | 
       | [2]: https://deno.com/fresh-1.1/preact_devtools.mp4
        
         | rough-sea wrote:
         | https://deno.com/blog/fresh-1.1#experimental-denoserve-suppo...
         | 
         | Just use --unstable to enable it.
        
           | lucacasonato wrote:
           | You also need to pass a `experimentalDenoServe: true` option
           | in the options bag passed to `start()` in your `main.ts`
           | file.
           | 
           | I forgot to add this to the post initially. Have
           | retroactively added it now :)
        
             | MarkBennett wrote:
             | Are there any benchmarks with the new server yet? Would be
             | keen to see how it compares to the existing server as
             | benchmarking on my machine showed a significant improvement
             | over the existing http server in stdlib.
        
       | gibbonsrcool wrote:
       | I've been writing a simple single page form app the past few days
       | and I like Fresh a lot. I really appreciate the simplified
       | project layout vs my last setup of a react app project nestled in
       | a parent express project. It just makes the devops, if you would
       | even called it that, of writing a one-person full stack app
       | easier. Deno running TypeScript without a compile to JS adds to
       | this. I'm happy to see the Preact Signals demo to help manage
       | state between islands in 1.1. Thank you for this great framework.
       | :)
        
         | lucacasonato wrote:
         | Thanks for the kind words!
        
           | hazn wrote:
           | this update fixed all the drawbacks I experienced while
           | building my webpage: www.hazn.deno.dev
           | 
           | Fresh and deno are the embodiment of: ergonimic, performant,
           | secure -- pick three.
           | 
           | thank you (and all the contributors) for your work :)
        
         | [deleted]
        
       | winrid wrote:
       | Wow, great work! One question - isn't doing the tailwind
       | processing on every page load pretty CPU intensive? Could you
       | foresee opting-in to that as a build step in the future?
        
       | brundolf wrote:
       | Anybody here used Fresh for a non-toy project yet? Have anecdotal
       | experiences to share?
        
         | bcjordan wrote:
         | Not exactly what you're looking for but in case helpful, I used
         | Fresh/Deno/Deno Deploy for a toy project & have some takeaways
         | that might apply more broadly:
         | 
         | - there's a bunch of mildly annoying paper cuts due to not
         | running the full set of npm/JavaScript (yet?). I had to Google
         | for and debug deno specific versions of libraries I wanted to
         | use. Felt similar to trying to write Web Worker subset JS for
         | Cloudflare Workers. Hope this improves. Though being able to
         | address packages at import location by URL was neat.
         | 
         | - Deno Deploy was outrageously fast at deploying. It made
         | updating the live site a joy compared to other FaaS stuff I've
         | used
         | 
         | - I liked that I could process multiple domains on the same
         | project (I was able to make 3 sites
         | https://thisclowndoesnotexist.com
         | https://thisbernerdoesnotexist.com and
         | https://thisghostdoesnotexist.com live with their own domains
         | within 5 mins or so each which was neat). Their https
         | certificate tool was sometimes being rate limited so required a
         | couple retries
         | 
         | - the deno runtime itself is fast as heck. I know bun goes even
         | further but dang, stuff installs and executes so quickly it
         | feels broken at first
         | 
         | - the Deno Deploy edge is quite fast, and there seems to be no
         | major cold start issues. See https://bench.t3.gg/ for some
         | comparisons (I found it fun use `fly curl` to test global
         | response times)
        
       | TeffenEllis wrote:
       | Fresh looks seriously cool! I'm especially fond of the plugins
       | concept for bringing in compiled assets like Markdown and SCSS.
       | And Getting started with a `deno run` command is very exciting
       | for new-comers too!
       | 
       | Shameless-self promotion: I've been working on a similar web
       | framework built on Deno and Cloudflare Workers. It's called
       | Keywork[1] and it's made for folks who would like to create web
       | apps for the V8 runtime, without getting too attached to a single
       | cloud provider.
       | 
       | Keywork has powered all my projects as of recently, but Fresh
       | looks like a serious contender. I would love to chat with the
       | Deno team if they're floating around this HN thread! You're
       | creating amazing stuff!
       | 
       | - [1] https://keywork.app
        
       | AbraKdabra wrote:
       | I seriously cannot wrap around my head how in 2022 people really
       | like JSX and all that X-in-JS crap, it's like people doesn't know
       | about separation of concerns or clean code at all.
        
         | n3pg wrote:
         | Seperation of languages != seperation of concerns
         | 
         | One could argue the adoption of JSX actually allows for better
         | seperation and cleaner code as you can group all the necessary
         | pieces of your component together, and use components
         | declaratively without introducing some DSL seen in some
         | frameworks like Vue, Angular etc.
        
           | verdverm wrote:
           | Isn't className custom DSL in React?
           | 
           | Vue's concepts in the v-* are more pleasant than the React
           | way, imho. Learning a bit of DAL is not a blocker for me,
           | given how many tools already require this
        
             | hunterb123 wrote:
             | I'd rather just use JS syntax than learn a random v-*
             | syntax.
             | 
             | You can just use the std lib to loop, filter, reduce,
             | conditionally render, etc. rather than looking up how to
             | loop in this specific framework with v-if, v-for, etc.
             | 
             | Angular 1 did that and it was limiting. Two-way data
             | binding also failed.
             | 
             | Templates are dead, long live JSX.
        
             | jakelazaroff wrote:
             | No, `className` is the DOM property exposed to JavaScript
             | that corresponds to the `class` attribute in HTML:
             | https://developer.mozilla.org/en-
             | US/docs/Web/API/Element/cla...
        
         | AgentME wrote:
         | For almost anything more interactive than a static document,
         | modularizing UI code primarily based on component boundaries
         | makes a lot more sense than modularizing primarily based on
         | markup / interactivity / styling boundaries.
        
           | qbasic_forever wrote:
           | Exactly, it comes from a bygone era when there was a clear
           | separation between frontend developers (i.e. people that
           | wrote markup, CSS, and jquery style JS) and backend
           | developers (people that wrote PHP, ASP, java, etc. to spit
           | out markup that frontend devs wrote). Nowadays everyone is
           | basically full stack with specializations or focus in
           | specific parts.
        
         | gherkinnn wrote:
         | Separating which concerns?
        
           | richeyryan wrote:
           | I guess software is like your cutlery drawer. You want to
           | keep your knives, forks and spoons separate.
        
             | gherkinnn wrote:
             | True. I like keeping my knives, forks, and spoons separate.
             | 
             | Alternatively, try organising your cutlery by "implement"
             | and "handle". Surely, separating what goes in your mouth
             | from what your grubby hands touch is the right thing to do.
             | The two concerns that should be kept separate!
             | 
             | To push this analogy over the edge, the former is how I see
             | JSX. And my admittedly facetious proposal is how I view the
             | "classical" approach of strict HTML|CSS|JS separation.
             | 
             | Which poses the question: after seven+ years of JSX and it
             | having become the most prominent approach to building UIs,
             | can the "classical"way even be called that anymore?
        
         | rglover wrote:
         | There's hope: https://github.com/cheatcode/joystick.
        
         | root_axis wrote:
         | There are quite a few motivations for this, but the primary
         | advantage is that it causes markup elements to become first-
         | class entities within your code, allowing your view composition
         | to be checked by the compiler as well as allowing you to design
         | your own reusable markup elements that fold up application
         | level concerns. It's also nice when your views have lexical
         | access to your application state variables so you don't have to
         | pre-render a big string template and interlace it with an
         | explicit map of serialized parameters - it's very nice when the
         | compiler lets you know a view simply cannot display the type of
         | data you're trying to shove into it rather than rendering a
         | broken looking page.
        
       | redonkulus wrote:
       | Is it easy to support other CSS frameworks? I haven't checked the
       | docs yet.
        
       | lucacasonato wrote:
       | Hey folks, author of Fresh here. Very excited for this rather
       | significant release. Happy to answer any questions you may have
       | :)
        
         | jplhomer wrote:
         | Terrific update! You resolved the only two pain points I'd
         | experienced (`tw` template literal and JSX pragma stuff).
         | 
         | Out of curiosity: does the support for automatic JSX incur any
         | startup or deployment penalty? I'd assumed Deno didn't have a
         | "build step" per se, but maybe I'm mistaken.
        
           | lucacasonato wrote:
           | Nope, no startup penalty. It is just as performant as the
           | classic JSX pragma. The actual JavaScript that is executed by
           | the runtime is pretty much identical.
        
         | teebot wrote:
         | I really want to try fresh together with edgedb. Any chance a
         | builtin authentication will be added soon? Or is there a recipe
         | to implement something like auth0?
        
         | cercatrova wrote:
         | I'd be interested to see a more built in solution for Markdown
         | and MDX, as with Astro or NextJS, since I've been mainly using
         | either for blog type websites and I'd love to use Fresh as
         | well.
        
           | MarkBennett wrote:
           | It's my understanding that GFM is already easy to do, in fact
           | there's an example of using it with Fresh in the fresh
           | repository as it's used for the docs!
           | 
           | https://github.com/denoland/fresh/blob/main/www/routes/docs/.
           | ..
           | 
           | Using MDX is a little trickier as the .mdx file needs to be
           | compiled to a javascript file which is then interpretted.
           | When running Deno yourself this isn't hard as you can use a
           | dynamic import, but if you're planning on using Deno Deploy
           | you'll be out of luck as it doesn't support dynamic imports
           | currently.
           | 
           | https://github.com/denoland/fresh/issues/640
           | 
           | Deno Deploy has an open issue asking for support if you want
           | to give it a star. ;)
           | 
           | https://github.com/denoland/deploy_feedback/issues/1
           | 
           | As a workaround, you can always setup a watcher and
           | preprocess MDX files before deploying to Deno Deploy, but
           | that seems against the spirit of what Fresh is trying to
           | accomplish by getting rid of preprocessors.
           | 
           | Let me know if you figure out a way to get MDX on Deno Deploy
           | working without precompile as I'd like to use it myself!
        
         | gherkinnn wrote:
         | Solid release! It fixes most of the rough edges I encountered.
         | 
         | Was Twind chosen to stay true to the "no build step" idea?
        
           | lucacasonato wrote:
           | Indeed it was :)
        
         | pier25 wrote:
         | Fresh is looking awesome Luca!
         | 
         | The only thing I'm missing to try it out is some sort of SASS
         | support.
        
           | lucacasonato wrote:
           | This is actually something I am planning a plugin for, just
           | like we have for Twind.
        
         | dmix wrote:
         | How big is the "team" working on Fresh? Is there a primary
         | product which it spawned off of (the demo website?)?
        
           | lucacasonato wrote:
           | Yes, it was a tech demo for some internal projects. I
           | maintain the framework itself, but a lot of the work in other
           | parts of the Deno system (Deno Deploy, Deno CLI) that are
           | related to Fresh are done by other folks on the team :)
        
       ___________________________________________________________________
       (page generated 2022-09-08 23:01 UTC)