Simply paying Figma $15/month as a result of nothing else fucking works
My household wasn’t poor by any stretch of the creativeness, however I used to be raised to
keep away from spending cash at any time when potential.
I used to be additionally taught “it is a poor craftsman that blames their instruments”, which
apparently means “take duty in your fuckups”, however, to young-me,
undoubtedly sounded extra like “you do not deserve good issues”.
I used to be additionally taught from an early age that I used to be born a sinner, incapable of doing
good on my own, and that every one the earthly issues have been temptations, despatched by the
satan to deprave me (additional I suppose?) but in addition short-term, and that I should not
connect myself.
I am higher now — thanks for asking.
However I am certain you may see why “protestant ethics” primed me for head-first into
the pit of unpaid labor and burnout that’s “F/OSS at massive” (free and open
supply software program, for the youngsters within the again).
It is excellent: very similar to within the non secular atmosphere I grew up in, everyone seems to be
this shut to completely dropping it, and there is an infinite provide of
thankless work to be performed, which implies, and that is essential: nothing you do
will ever be ok.
In both place, there isn’t a redeeming your self.
And certain, okay, the different factor that attracted me to F/OSS was, in fact, the
good components: which you could take a look at the way it’s made, repair it up for your self
and others, and many others.
As somebody most undoubtedly someplace on the spectrum, having the ability to stare on the
internal workings of complicated techniques unperturbed, was simply… I preferred it, You
know?
Issues have modified since, to some extent.
The Early Unix Crowd lament having to consider languages apart from C. We in
the DevOps mines would pay good cash by no means to have to talk YAML once more.
I get it: GCC 2.95 was a better time.
However, like Andrew Morton famously mentioned:
It is time to surrender on it and simply drink extra espresso or play extra tetris or
one thing, I am afraid.Supply: LWN, The end of gcc 2.95 support
Immediately nonetheless, in case you attempt, in case you actually attempt, you can go in and try to
modify your favourite software program.
However, and I want 19-year-old me would’ve heeded that piece of recommendation, you at all times
have to take into account that you are both spending time or spending cash.
Let me IMMEDIATELY add caveats there, as a result of your intestine response could also be what mine
was again then: “Oh! you are certainly one of these. Those who put a quantity on every part,
and make selections primarily based on these numbers”.
After all not! There is no poetry in accounting. And little level in counting if
you are having an excellent time.
In addition to, once you are 19 / nonetheless a pupil / unemployed, time is all you will have
to spend, so the selection is made for you.
And naturally, it is actually exhausting to qualify all of the second-order results “spending
time performing unpaid labor for varied F/OSS tasks” has had on my profession
(for the perfect), my well being (for the worst), and many others.
I am not saying that to trigger extra nervousness over choosing which factor to spend
your time on: I consider it extra like an excellent purpose to spend your time on quite a bit
of various issues, and other people, and concepts, as a result of whether or not they go terribly
proper or terribly incorrect, there is a lesson to be discovered.
And pal, do I’ve a lesson to share with you at the moment.
I began writing someday round 2019.
Properly. I have been running a blog for a decade, which makes me a part of The Previous Folks In
The Room at conferences now. The 60-year-olds and me, we now have an excellent time.
However I began doing critical, please-give-me-money technical writing
round 2019. On a Lenovo X200, for avenue creds (and affordability) causes.
I wanted to make diagrams, so I in contrast just a few choices and shortly settled on
“draw.io”, which has been semi-rebranded to “diagrams.internet” the best way Twitter has
been semi-rebranded to X?
The desktop app nonetheless calls itself
draw.io, the file format remains to be .drawio
, and many others.
It is an Electron app, unmistakably:
…nevertheless it’s not in-your-face about it. It is quite constant throughout Linux (GNU
or not), macOS, Home windows, and, now an important shell of all: “the
browser”.
And it is actually good at diagrams. These days you’d in all probability use one thing
source-defined like Mermaid or one of many cool youngsters
like Excalidraw, however draw.io is burnt into the reminiscence
of The Previous Ones.
Why? As a result of, like all good merchandise, it began out with “fixing a tough
drawback” higher than anybody else. The exhausting bit was “making a graph editor that
might render to SVG and show in non-SVG browsers”, and if that sounds bizarre,
that is as a result of this occurred without end in the past:
We created mxGraph in 2005 as a business mission and it ran via to 2016
that manner. Our USP was the assist for non-SVG browsers, when that benefit
expired we moved onto business exercise round draw.io.Supply: mxgraph README, History
And I believe this spirit, of “taking the issue severely”, permeated all through
virtually your entire product and is among the causes draw.io felt so good to make use of
in comparison with, properly, anything on the time.
What else was I supposed to make use of? Dia?
Dia’s download page gives
binaries for Solaris 9 Sparc, and Irix 6.5.
A German web site, final up to date 2014, gives Home windows and macOS downloads:
It is exhausting to explain the emotions conjured by taking a look at this Vista-ass
screenshot, this huge rounded obtain button with a best-effort glass impact,
the delicate mixture of serif and sans-serif fonts.
The inventory photograph of a girl drawing a diagram on a whiteboard.
The “Donate by way of PayPal” button.
Heck, whereas we’re hurting ourselves with nostalgia, here is the final launch on
SourceForge:
That is not what SourceForge appeared like once I obtained my begin, however the scent is
the identical.
Simply take a look at these two lovingly hand-crafted .dmg information. No
CI/CD there, simply vibes.
Keep in mind Pidgin? Adium? I can do that all day.
GitHub did not simply usher in a brand new period of collaboration, of latest heroes and new
villains, it additionally despatched to the grave SourceForge, and a complete aesthetic with
it.
Personally, I do not miss it.
However all good issues should come to an finish sooner or later, and for draw.io (and the
remainder of the world, for barely completely different causes), that was 2016.
Because the historical past part I quoted earlier covers: “when that benefit expired (in
2016), we (jgraph) moved onto business exercise round draw.io”.
Now, it is extra delicate than that. draw.io is nonetheless good, and the dealbreaker
I am about to cowl pre-existed jgraph’s shift to “business exercise round
draw.io”.
In actual fact, it is actually essential that there be a income supply to fund continued
upkeep of draw.io, so, so long as it does not mess with the primary product too
a lot, I am pleased!
However that is when, for me not less than, draw.io stopped investing in “their very own
engine” and totally dedicated to doing “regardless of the browser does”. The browser
being, want I say it,
Chrome.
After all, you would in all probability get Gecko to do it as a substitute, however why go all of the
bother to finish up with a consequence that appears completely different from what you get within the
Electron-based desktop app?
At the very least the docs, and I might anticipate no much less from jgraph, whom I respect,
accurately describe draw.io’s capacity to do “wealthy textual content formatting” as merely
“having the ability to use HTML to model nodes”:
Type a part of a textual content label
Textual content labels in shapes and on connectors might be formatted with HTML, so you may
apply a method to a part of a textual content label. For instance, you may apply daring,
italicise, color, or a hyperlink to only one phrase.Supply: draw.io FAQ
Why does this matter? As a result of when you let HTML into your product, a product
that, by nature, cares concerning the exact structure of issues, you are fucked.
You are fucked as a result of, though I do not consider it is actually inconceivable to
make your individual browser (CW: Drew
DeVault), it’s
a number of orders of magnitude tougher than the exhausting drawback mxGraph solves within the
first place.
Which is why I preserve defending Electron as “not that unhealthy, truly, once you
actually give it some thought” in a very old video I’m quite embarrassed
about, and which thesis is
primarily: there’s extra to it than you in all probability assume (however you are very welcome
to attempt).
After all, in one other universe, draw.io did not take the shortcut and did not simply
say “you may simply put HTML int right here”. In one other universe, they solely allowed
daring, italic, underline, font-size and font-family… and line spacing, and
letter spacing, and textual content alignment, and superscript and subscript and…
…okay you see my level about there being extra to it than it appears now, however
level is: they may’ve picked a restricted function set and simply written their very own
textual content rendering engine.
And then you definately would not want Chrome’s DOM, its structure engine and the PDF backend
of its renderer to do a “correct export”
from draw.io.
However they did not! And also you do.
Worse: I do, and the factor I truly do for this weblog, as a result of I’ve stopped
“simply grabbing rectangular screenshots and pasting them onto my weblog” a protracted
time in the past (I blame HiDPI shows), is:
- Have a handwritten Rust app that..
- ..launches headless chrome
- ..hundreds draw.io in it (from a hyper HTTP server)
- ..asks draw.io to load the .drawio file (additionally over HTTP)
- ..asks chrome to print to PDF (this makes use of Skia’s PDF backend)
- ..opens that PDF utilizing poppler
- ..exports it utilizing cairo‘s SVG backend
- ..optimizes it utilizing svgcleaner (which is unmaintained and can quickly cease compiling)
And then you definately get certainly one of these, which seems crisp at any decision and might be
printed even when you do not have Iosevka put in in your pc:
(Additionally, the workflow for me is nice, I can simply “hit CtrlOrCtrl+S in draw.io”
and my ftl.localhost:1111
browser tab reloads with the brand new SVG asset).
And since apparently “placing all this collectively” wasn’t sufficient for me, I
documented the whole thing.
Prefer it was a standard or fascinating factor to do.
And the entire web went YKINMKBYKIOK.
Which, truthful.
However I began wanting into alternate options, for just a few causes.
One is that this entire contraption is, general, fairly painful to take care of.
My Don’t Shell Out spends a number of chapters describing
how I’ve managed to get the “glib cinematic universe” (“gee lib”, not
“slippery”) to hyperlink statically on Home windows, however I’ve since resigned myself to
solely run it on macOS or Linux, the place nix is accessible and solves nearly as
many issues because it causes.
This is the flake I am at present utilizing in case you’re curious:
nix
{ inputs = { # base nix packages nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; # this allows you to construct cargo tasks inside nix crane = { url = "github:ipetkov/crane"; # all these "follows" issues primarily be sure you solely rely # on one model of bundle x, even when a number of different packages depend upon x inputs.nixpkgs.follows = "nixpkgs"; inputs.rust-overlay.follows = "rust-overlay"; }; flake-utils.url = "github:numtide/flake-utils"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs = { nixpkgs.follows = "nixpkgs"; flake-utils.follows = "flake-utils"; }; }; }; outputs = { self, nixpkgs, crane, flake-utils, rust-overlay }: flake-utils.lib.eachDefaultSystem (system: let model = "1.6.0"; pkgs = import nixpkgs { system = system; overlays = [ (import rust-overlay) ]; }; # I exploit Rust nightly for a bunch of thisbecause I can not be bothered to # await options to stabilize. This retains it DRY, I solely must # specify "which nightly" in a single place. # That is solely obtainable as a result of we pulled in rust-overlay, afaict. rustToolchain = pkgs.pkgsBuildHost.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; craneLib = crane.lib.${system}.overrideToolchain rustToolchain; # You'll be able to't clone this, however I can, and that is the place my "non-public" crates # stay. In case you break in, it is no massive deal: they don't seem to be secrets and techniques, simply # "do not ask me questions on them" crates. craneLibWithRegistry = craneLib.appendCrateRegistries [ (craneLib.registryFromGitIndex { indexUrl = "https://code.bearcove.cloud/bearcove/_cargo-index.git"; rev = "7d22392df559a762b5b87597aad2e5a55847bd41"; }) ]; # As a result of we run draw.io as a part of the asset pipeline, we have to pull # in _all the draw.io sources_ (the HTML/JS/CSS half that runs within the # browser) as construct inputs. # This was enjoyable to determine. src = let drawioFilter = path: sort: builtins.match ".*drawio-assets.*" path != null; drawioOrCargo = path: sort: (drawioFilter path sort) || (craneLib.filterCargoSources path sort); in pkgs.lib.cleanSourceWith { src = craneLib.path ./.; filter = drawioOrCargo; }; buildInputs = with pkgs; [ poppler ]; nativeBuildInputs = with pkgs; [ # for poppler, cairo etc. pkg-config # to invoke mold (that became unnecessary at some point on some platforms, shrug) clang_14 # to link faster mold # needed for cairo iirc nasm # you can do your own research re: autoPatchelfHook and # get amazed+angry about it on your own time. ] ++ lib.optionals pkgs.stdenv.isLinux [ autoPatchelfHook ] ++ lib.optionals pkgs.stdenv.isDarwin (with pkgs.darwin.apple_sdk.frameworks; [ # why aren't these pulled in automatically? fuck if I know CoreFoundation SystemConfiguration Security ]); cargoArtifacts = craneLibWithRegistry.buildDepsOnly { inherit src buildInputs nativeBuildInputs; }; bin = craneLibWithRegistry.buildPackage { inherit src buildInputs nativeBuildInputs; }; # on Linux, we pull in chromium, however on macOS we depend on Google Chrome # being below `/Functions`: GUI apps are annoying to programmatically # set up below macOS in a manner CLI stuff merely is not (see homebrew # formulation vs casks, gatekeeper, and many others.) chromiumDep = if pkgs.stdenv.hostPlatform.system == "x86_64-linux" then with pkgs; [ chromium ] else [ ]; wrapped = pkgs.symlinkJoin { identify = "salvage-wrapped"; paths = [ bin ]; buildInputs = with pkgs; [ makeWrapper ] ++ chromiumDep; # we'd like chromium to be in PATH, so, we make a wrapper script. postBuild = with pkgs; '' wrapProgram $out/bin/salvage --set PATH ${nixpkgs.lib.makeBinPath chromiumDep} ''; }; in { packages = { bin = bin; wrapped = wrapped; default = wrapped; }; devShells.default = pkgs.mkShell { inputsFrom = [ bin ]; nativeBuildInputs = [ ]; packages = [ pkgs.just ]; }; }); }
This works at the moment, however I might sleep higher if Chromium was now not a part of my
asset pipeline, as a result of sooner or later I need to deploy this to servers as a substitute
of working it domestically (thus reducing the barrier to entry for different folks to
collaborate with me).
The different purpose I began wanting into alternate options is as a result of alternate options
began taking a look at me.
In 2023, I used to be contracted to do some very work associated to Figma, none
of which I can discuss as a result of I stupidly signed a really paranoidly-worded
contract, which I’ll by no means do once more except I’m actually on the verge of
dropping my house.
However! It pressured me to, you understand, truly study Figma. And, it is a bizarre and
unfair comparability, in fact, as a result of draw.io is a diagramming instrument and Figma is
an interface design instrument, however this factor is simply constructed completely different.
The primary time I truly heard of Figma (that is how sheltered us software program
engineers are) was when somebody requested me how I felt about them compiling Rust
and C++ code to WebAssembly for a product that, basically, feels prefer it
should not actually require greater than a buttload of JavaScript (perhaps even
TypeScript at that scale) and DOM crimes. Or maybe canvas, in case you actually
do care about pixel perfection and also you’re hell-bent on re-inventing the wheel.
However care they did, and so they did not simply reinvent the wheel: they modified the
sport.
Evan Wallace has incredible write-ups about a few of
the “informal genius” concepts he merely willed into existence throughout his tenure as
Figma co-founder.
Issues like vector
networks, which
instantly impose themselves as clearly superior to the classical “vector path”
mannequin actually everybody else is utilizing.
Or like efficiently migrating the server-side portion of their product from
TypeScript to Rust,
leading to 3.8x smaller reminiscence utilization, 6x smaller CPU utilization, 10x sooner file
serve time and 16.4x sooner worst-case save time.
The Figma group did not resolve one exhausting drawback, they solved dozens. All whereas
sustaining best-of-class UX and gaining the favor of designers in all places.
It is actually exhausting to not like them. Even Adobe agrees.
However! It prices cash. You get 3 information without cost to completely discover the product:
past that, it’s good to shell out for Figma Skilled, which is able to price you
$15/seat/month, except you are snug with year-long commitments (I am not),
at which level it falls to $12/seat/month.
And, I do not know in case you keep in mind from the intro however: I used to be raised on frugality.
You do not perceive. I am speaking about a whole neighborhood for which couponing
qualifies as foreplay. I am barely exaggerating.
And I had massive plans!
In 2023 I introduced I used to be constructing a group, in order that I might “produce extra
content material”: everybody hates this manner of placing it, and the “content material creator”
moniker, however “instructor” is a protected class and I have never totally internalized the
“clown” label but, so it is a pleased center floor.
And I did, for a bit! I paid two folks for just a few months, to assist each with the
“content material” half itself (serving to with analysis, triage concepts, observe up on drafts
and many others.) and on the “platform” half, as a result of, a part of the enjoyable of “working right here” is
that every part is custom-made and wonky (as evidenced by the draw.io asset
pipeline described above).
At every other firm, this could be a nightmare (and whew, have I been there),
however right here it is endearing and a function: doing “as a lot as potential” your self
means having quite a bit to write down about: the machine feeds itself.
And I hate, hate per-seat per-month pricing, as a result of everyone seems to be attempting to get
in on it, and for small enterprise, it provides up. To some extent the place one is perhaps
forgiven for asking themselves: “if I simply chunk the bullet and study Kubernetes,
might I self-host all that and ultimately save up cash?”.
This looks as if exhausting work to worsen issues. In different phrases: that is precisely
how I used to be raised.
Being a sinner from beginning, I in fact don’t deserve good issues. Nor ought to I
need them. I’ll use no matter’s in entrance of me, and I’ll be pleased about it.
If it isn’t struggling, it isn’t work.
And if it isn’t work, it is in all probability “of the satan”.
Which brings us to Penpot.
Penpot is not only a product, it is an concept.
The headline, which takes up 10% of the viewport peak on my browser, is:
Carry Design Freedom to your Product Workforce
Supply: https://penpot.app/ on the time of this writing
Adopted by “Enroll, it is free!” and “Self-host set up” calls to motion.
The following line is “Penpot is the Open-Supply Design & Prototyping Software for
Product Groups”.
And at this level, you have used the labels “free” twice, and “open-source” as soon as,
to market your factor, and, uh, as an example charitably: “I have been warned”.
This isn’t simply me being an asshole, by the best way. There is a wealthy historical past of a
vocal minority going “you may’t excuse every part by saying it is free software program”
and being met with “PRs welcome kthxbye”.
That is custom at this level. Even perhaps sport.
Anyway: I used to be informed loads of good about Penpot. “Of the free alternate options to
Figma”, I used to be informed (and that is key), “it’s by far the perfect”.
However after spending just a few hours attempting to get something performed with it, my
evaluation is that, if that is true, then it is actually not value testing any
of the opposite alternate options.
And I’ll describe my consumer story, however solely after you and I agree that you would
repair every particular person situation I am going to discuss, one after the other, and it nonetheless would not
detract from my core argument.
Deal? Deal.
So! The Penpot homepage talks about its desktop app: is smart, draw.io
(though in a barely completely different class, as I’ve already mentioned) has one, Figma
has one, the Penpot userbase actually would love one, and so somebody made
one.
I hope this hyperlink nonetheless hundreds by the point you learn this, as a result of it’s a
forgejo occasion which I can solely assume runs on a
Raspberry Pi on somebody’s desk.
Simply kidding, it is working on a Raspberry Pi behind Cloudflare. I suppose
solely client-side software program is evil or one thing.
Anyway, the desktop app is not official or formally supported (though to
their credit score, Penpot, or I suppose Kaleidos, sponsors sudovanilla. I do not know
for the way a lot).
The best way you must run Penpot is to… properly you must simply pay for a seat on
their cloud providing however that is what we’re attempting not to do, so that you’re
imagined to self-host it.
The self-host web page first suggests paying someone else to run it for
you,
a totally legitimate reply to that query (many individuals do this with Mastodon),
however since I’ve by no means heard of Elestio and I am already going the street much less
traveled… may as properly go all the best way.
Once more the self-host web page hammers what is actually their solely promoting level:
it no price cash:
For too lengthy, a essential piece of the software program growth pipeline has been
obtainable solely by way of dear proprietary SaaS subscriptions or Mac-only desktop
apps.Penpot brings complete freedom for groups by encouraging self-hosted deployments
so you may make the most of your safety and backup insurance policies, in addition to
extending and customizing your Penpot server the best way you want.
(Emphasis theirs, annoyingly).
I am not copywriting skilled, however even I can acknowledge a chunk of artwork once I
see one.
Anyway, choice 2 is “set up with Docker”, which supplies you a docker-compose
file,
ok to run it in your MacBookPro for certain, however, and let me emphasize
this: completely no person ought to be working something in manufacturing utilizing a
docker-compose file.
What you are meant to do is, in fact, run it on Kubernetes, which is essentially
the identical (it is containers all the best way down) besides it is configured in a different way,
now you can take into consideration scaling out (on a number of nodes), you will have precise
well being/liveness checks and insurance policies for rolling out new variations, restarting,
and many others.
It is k8s! All of us like to hate it, however not less than the trade has sorta
standardized round it, in order that makes commiserating simpler.
And since penpot is made up of three providers (backend, exporter, frontend —
not counting postgres and redis), though you might technically deploy all
three of them individually, the idiomatic and era-appropriate factor to do on the
time of this writing is to make use of a helm chart, which helps you to deploy a number of
assets directly.
No one informed me, however there’s one place usually accepted as “the helm chart
search engine”, and it is ArtifactHub.
Looking for “penpot” will flip up two choices: one by CodeChem (final up to date 9
months in the past), and one by TrueCharts (final up to date 6 months in the past).
I selected the previous, not realizing it was pointing on the 1.16.0-beta
tag for
all three penpot photos.
After a lot trial and error, I got here up with the next k3s manifest:
YAML
--- apiVersion: helm.cattle.io/v1 variety: HelmChart metadata: identify: penpot namespace: default spec: repo: https://charts.codechem.com chart: penpot valuesContent: | world: # the plan was to ultimately transfer this postgres DB to a correct postgres # operator like I do with the _other_ stuff I self-host, however I've stopped # caring within the meantime postgresqlEnabled: true postgresql: auth: postgresPassword: REDACTED redisEnabled: true config: publicURI: https://penpot.instance.org flags: "enable-registration enable-login disable-demo-users disable-demo-warning enable-smtp" registrationDomainWhitelist: instance.org smtp: enabled: true defaultFrom: penpot <penpot@instance.org> defaultReplyTo: penpot <penpot@instance.org> host: smtp.sendgrid.internet port: 587 username: "apikey" password: "REDACTED" tls: true postgresql: host: penpot-postgresql.default.svc.cluster.native username: postgres password: REDACTED redis: host: penpot-redis-headless.default.svc.cluster.native # this can be a current addition, that overrides the model of the penpot # photos getting used. backend: picture: tag: 1.19.3 exporter: picture: tag: 1.19.3 frontend: picture: tag: 1.19.3 --- apiVersion: cert-manager.io/v1 variety: Certificates metadata: identify: penpot.instance.org-cert spec: secretName: penpot.instance.org-secret issuerRef: identify: letsencrypt-prod variety: ClusterIssuer dnsNames: - penpot.instance.org --- apiVersion: traefik.io/v1alpha1 variety: IngressRoute metadata: identify: penpot spec: entryPoints: - internet - websecure routes: - match: Host(`penpot.instance.org`) variety: Rule providers: - identify: penpot port: 80 tls: secretName: penpot.instance.org-secret
And, properly, it really works!
So it is obtained that going for it.
I am unsure why the preview for the “wsl2-kernel” file is lacking (the URL simply
returns a 404): presumably one of many items is misconfigured within the helm chart,
as a result of the cloud providing will get it proper:
Recreating my boring outdated draw.io diagram in penpot felt prefer it took without end,
however I chalked it as much as “being unfamiliar with the instrument”.
At first, exporting did not work in any respect (it might simply outing), however upgrading
to the non-beta 1.19.3 appears to have mounted a few of it.
I can, for instance, export to SVG now. It takes a number of seconds, and we find yourself
with this:
Appears high quality! What’s in there? For instance, what SVG node sort is it utilizing for
“RAM stick #1”?
XML
<textual content xmlns="http://www.w3.org/2000/svg" x="20.00000000000007" y="29.601562499999858" dominant-baseline="ideographic" textLength="72" lengthAdjust="spacingAndGlyphs" model="text-transform: none; font-family: Iosevka; letter-spacing: regular; font-style: regular; font-weight: 100; white-space: pre; font-size: 12px; text-decoration: none stable rgb(0, 0, 0); path: ltr; fill: rgb(0, 0, 0); fill-opacity: 1;">RAM stick #1</textual content>
Proper. Only a textual content node. This implies it’s good to have the “Iosevka” font
put in, which does not work for me: I need my SVG diagrams to be displayed
precisely the identical in all places, so I need them to be paths.
What if we use the identical trick as with draw.io, and export to PDF first, then
use cairo to transform that to SVG?
It does not fucking work! We get “generic serif font” as a substitute of Iosevka.
You wanna know why?
Properly, it takes a number of seconds as a result of what the penpot exporter is doing is,
that is proper, spawning a chromium
occasion and printing to PDF.
(However hey, ClojureScript!)
And I suppose the factor that is supposed to present chromium entry to the doc’s
“{custom} fonts” is damaged in a roundabout way. As a result of they did not utterly fumble
this one: Penpot does have a correct “Customized Fonts” function:
It even detects mismatched vertical metrics and factors you at this
service to see for your self, and
Transfonter to repair it.
I imply, it isn’t Figma’s “simply install this native
app
and you should use all of your fonts, even from a browser”, however: somebody, someplace, cared about this!
Nevertheless, it is also horrible, horrible information.
Even when it did work correctly, we’re again to only “doing regardless of the browser
does” (the browser being, not less than for now, universally, chromium) by way of
textual content structure and rendering.
Which suggests export is at all times going to be sluggish, and if, like me, you are utilizing
the platform-appropriate browser in your working system (Firefox in all places if
your fetish is Google-funded antitrust mitigations, and Edge on Home windows + Safari
on macOS in any other case), it isn’t going to match precisely what you see within the editor.
I’ve additionally recreated the diagram in Figma, which was a a lot nicer expertise,
and never simply because Figma is the unique and Penpot is the copy, but in addition
as a result of… it really works? Snapping works, and when 80% of your interplay with the
software program is “shifting/resizing issues”, that issues quite a bit.
Figma helps you to alter superior stroke settings, so I can truly match
the draw.io default:
Exporting the body to SVG is prompt (it is all taking place client-side) and
ought to look the identical for everybody:
As a result of it isn’t utilizing the SVG textual content node wherever: it is utilizing paths.
The “RAM stick #1” string is simply this (extraordinarily lengthy, reduce in your
comfort) SVG path:
XML
<path d="M20.896 34V23.71H23.584C23.836 23.71 24.0833 (reduce) 23.71H101.466V34H100.374Z" fill="black"/>
And that occurs to be precisely what I need, as a result of, very similar to Figma, I care
about exact design (them, as a result of it pays. me, as a result of I can). Even when my
diagrams and figures are unhealthy, I need them to look the identical in all places.
Penpot did not resolve that onerous drawback. It is a number of enormous engineering efforts
away from fixing that drawback. In actual fact, I do know they’re by no means going to resolve
that drawback, as a result of they turned it right into a promoting level.
See, Penpot is not solely bashing no “dear SaaS subscriptions and macOS-only
apps” (which is don’t-sue-me speech for Figma and
Sketch), it is saying the way it’s nice that their
flexbox mannequin precisely matches the CSS one, saving beneficial time when builders
must implement the designers’.. designs, as HTML and CSS.
Properly, no shit! It is the CSS mannequin, since they do not have a structure engine.
Figma is simply from a distinct time, I suppose.
A time when you would afford to have “design” and “implementation” be separate
jobs with separate experience.
When you would design for issues apart from the net.
And when you would get paid $100K to quit
school and
focus full-time on instruments like Figma, as a substitute of no matter AI/ML slop everyone seems to be
being served now.
Now that, I miss.
I am going to go away you with the artificial model of this text, which motivated me
to truly write it out for actual:
If I had a greenback each time I noticed an “open supply” mission vaguely recreate a
handful of surface-level options of some business resolution then go “there you
have it of us, YOU’RE FREE” whereas Nothing Really Works, I might be capable to,
like, pay lease with it.
If the Adobe acquisition
closes,
then I shall mourn that, too.
Within the meantime: Figma’s earned my $15 a month.