| Tool / Project | Type / Architecture | UI / Dashboard | CLI / API | Multi‑node / Clustering | Auto TLS / SSL / ACME | Zero‑downtime / Rolling Deploy | Preview / PR Environments | Team / Permissions | Volume / Backup Support | Open Source / License | Heroku‑style Compatibility | Pros / Strengths | Cons / Caveats / Weaknesses |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Dokku | Single‑server (extensions for multi) | Minimal (no central UI, though plugins exist) | CLI, plugin APIs | Via community / plugin / custom setups | Yes (Let’s Encrypt plugin) | Via Docker techniques / plugin | Limited, requires extra setup | Basic (single admin; community plugins) | Plugin / manual (e.g. volume backups) | MIT (fully open source) | Good: git push, buildpack style, plugins add DB, etc. | Very stable, mature, lots of community extensions | Scaling / multi‑node is manual; UI is weak; managing many apps / teams is harder |
| Dokploy | Multi‑node / cluster (Docker Swarm) | Yes (built‑in UI) | CLI + AP |
| import { z } from "zod"; | |
| const Post = z.object({ | |
| id: z.string(), | |
| slug: z.string(), | |
| content: z.string(), | |
| title: z.string() | |
| }) | |
| export function createAPIClient() { |
This gist is a simple no-brainer description of the 3 ways (actually 2.5) the Web handle events.
The declarative inline HTML event listener is mostly an indirection of DOM Level 0 events, meaning this simply uses the equivalent of tag.onclick = listener behind the scene.
click me| <Project> | |
| <PropertyGroup> | |
| <TargetFramework>netcoreapp3.1</TargetFramework> | |
| <OutputType>Exe</OutputType> | |
| <OutDir>build/bin</OutDir> | |
| <BaseIntermediateOutputPath>build/obj</BaseIntermediateOutputPath> | |
| </PropertyGroup> | |
| <Target Name="PrepareProgram" BeforeTargets="BeforeBuild"> | |
| <PropertyGroup> |
| using System; | |
| using System.Threading.Tasks; | |
| namespace System.Collections.Concurrent | |
| { | |
| public static class ConcurrentDictionaryExtensions | |
| { | |
| /// <summary> | |
| /// Provides an alternative to <see cref="ConcurrentDictionary{TKey, TValue}.GetOrAdd(TKey, Func{TKey, TValue})"/> that disposes values that implement <see cref="IDisposable"/>. | |
| /// </summary> |
uce vs lit-element
A very simple comparison table between these two libraries.
| uce | lit-element | |
|---|---|---|
| version | 1.11.9 | 2.4.0 |
| license | ISC (simplified MIT) | BSD-3-Clause License |
| language | JS w/ TS definition | TS w/ JS transpilation |
| size ( brotli ) | 9437b ES5 / 6811b ES2015+ | 8634b ES5 / 6708b ES2015+ |
a gist to recap the current status, also available as library picker!
do one thing only and do it well
- µhtml (HTML/SVG auto-keyed and manual keyed render)
- augmentor (hooks for anything)
- wickedElements (custom elements without custom elements ... wait, what?)
This is some sort of answer to recent posts regarding Web Components, where more than a few misconceptions were delivered as fact.
Let's start by defining what we are talking about.
As you can read in the dedicated GitHub page, Web Components is a group of features, where each feature works already by itself, and it doesn't need other features of the group to be already usable, or useful.
