It was a busy end of summer — Deno KV on Deno Deploy is now in open beta, npm is now natively supported on Deno Deploy, Fresh 1.4 is out with even faster page loads, and much more. Let's dive right in!
Deno KV is a key-value database that works with zero configuration during local development, and scales to millions of operations on Deno Deploy. The API is also baked right into the runtime, so instead of having to provision a database and juggle API keys, you can add persistence to your applications with a few lines of code:
const kv = await Deno.openKv();
await kv.set(["scores", "player1"], 500);
const score = await kv.get<number>(["scores", "player1"]);
console.log("Player 1's score is:", score.value);
We've also released some new features to make it easier for you to use Deno KV:
deno_kv_oauth
moduleRead the announcement or watch the video to see what's next for Deno KV 👀 →
Back in Deno 1.28, we added npm support so you could combine the modern zero-config development experience of Deno with the best of the npm ecosystem. Today, we’re excited to share that you can bring the best of npm with you to your apps running on the edge as well. Deno Deploy now natively supports running npm modules via npm specifiers!
Here’s an example of running an Express app on Deno Deploy:
// Import express and instantiate it
import express from "npm:express@4";
const app = express();
// Register a route
app.get("/", (req, res) => {
res.send("Hello World!");
});
// Run the server!
app.listen(3000);
Try it yourself in a playground →
But what does exactly does “native” support mean? It means there’s no transpilation, bundle step, source mapping, or polyfill injection taking place, providing a better developer experience and better compatibility:
Read the announcement or watch the video →
Fresh has gotten even faster with ahead-of-time compilation and easier to use with layouts, route groups, and more.
Until this release, Fresh has compiled frontend assets on the fly. This allowed for lightning fast deployments with no build step. But we noticed just-in-time rendering with large islands was noticeably slower. So we decided to add a pre-compile solution that results in assets being served ~45-60x faster for a cold start of a serverless function with minimal impact on deployment times. Note ahead-of-time builds is optional. Learn more in the documentation.
In addition to faster page loads, we also added better ways to organize your code through Layouts. Previously, in order to share components across routes, you would need to add that to routes/_app.tsx
, but there was no way beyond that. Now, you can create _layout.tsx
files, which are routes local app wrapper:
routes/
_app.tsx
_layout.tsx
page.tsx # Inherits _app and _layout
sub-route/
_layout.tsx # Inherits _app and _layout
index.tsx # Inherits _app, _layout and sub-route/_layout
about.tsx # Inherits _app, _layout and sub-route/_layout
The _layout
file itself is similar to a route file or app wrapper:
// routes/_layout.tsx
import { LayoutProps } from "$fresh/server.ts";
export default function MyLayout({ Component }: LayoutProps) {
return (
<div class="my-layout">
<h2>This is rendered by a layout</h2>
<Component />
</div>
);
}
Read the blog post or watch the video →
You all have been active building with and writing about Deno! Here’s a (very incomplete) list of projects and articles.
For more Deno projects, modules, and resources (or if you’d like to share yours), check out the Discord’s #showcase channel.
But that's not all — we’ve shipped more articles, videos, and more. Check them out below: