zine: XMPP - 25 years of Digital Independence (Daniel Gultsch)
This commit is contained in:
parent
0b95225106
commit
a4a9789d63
6 changed files with 1978 additions and 0 deletions
1586
XMPP - 25 years/XMPP - 25 years.pdf
Normal file
1586
XMPP - 25 years/XMPP - 25 years.pdf
Normal file
File diff suppressed because it is too large
Load diff
126
XMPP - 25 years/XMPP_logo_notext.svg
Normal file
126
XMPP - 25 years/XMPP_logo_notext.svg
Normal file
|
|
@ -0,0 +1,126 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
version="1.1"
|
||||||
|
xml:space="preserve"
|
||||||
|
viewBox="0 0 174.98412 127.21901"
|
||||||
|
width="174.98412"
|
||||||
|
height="127.21901"
|
||||||
|
x="0px"
|
||||||
|
y="0px"
|
||||||
|
enable-background="new 0 0 200 200"
|
||||||
|
id="svg15"
|
||||||
|
sodipodi:docname="XMPP_logo_notext.svg"
|
||||||
|
inkscape:version="1.4.4 (dcaf3e7d9e, 2026-05-05)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs15" /><sodipodi:namedview
|
||||||
|
id="namedview15"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="4.04"
|
||||||
|
inkscape:cx="86.509901"
|
||||||
|
inkscape:cy="84.653465"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="995"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg15" />
|
||||||
|
|
||||||
|
<style
|
||||||
|
id="style1">
|
||||||
|
path {
|
||||||
|
fill: black;
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
path {
|
||||||
|
fill: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
id="SVGID_right_"
|
||||||
|
y2="1.279e-13"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x2="-1073.2"
|
||||||
|
gradientTransform="translate(1183.188)"
|
||||||
|
y1="126.85"
|
||||||
|
x1="-1073.2">
|
||||||
|
<stop
|
||||||
|
stop-color="#1b3967"
|
||||||
|
offset=".011"
|
||||||
|
id="stop1" />
|
||||||
|
<stop
|
||||||
|
stop-color="#13b5ea"
|
||||||
|
offset=".467"
|
||||||
|
id="stop2" />
|
||||||
|
<stop
|
||||||
|
stop-color="#002b5c"
|
||||||
|
offset=".9945"
|
||||||
|
id="stop3" />
|
||||||
|
</linearGradient>
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
id="SVGID_left_"
|
||||||
|
y2="1.279e-13"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x2="-1073.2"
|
||||||
|
gradientTransform="matrix(-1,0,0,1,-1008.204,-10e-4)"
|
||||||
|
y1="126.85"
|
||||||
|
x1="-1073.2">
|
||||||
|
<stop
|
||||||
|
stop-color="#1b3967"
|
||||||
|
offset=".011"
|
||||||
|
id="stop4" />
|
||||||
|
<stop
|
||||||
|
stop-color="#13b5ea"
|
||||||
|
offset=".467"
|
||||||
|
id="stop5" />
|
||||||
|
<stop
|
||||||
|
stop-color="#002b5c"
|
||||||
|
offset=".9945"
|
||||||
|
id="stop6" />
|
||||||
|
</linearGradient>
|
||||||
|
|
||||||
|
<path
|
||||||
|
d="m 138.38912,14.189001 c 0.077,1.313 -1.787,0.968 -1.787,2.293 0,38.551 -46.558,97.366009 -91.687985,108.730009 v 1.639 C 104.86713,121.33101 173.47412,59.051001 174.98412,0.001 l -36.599,14.189001 z"
|
||||||
|
style="fill:url(#SVGID_right_)"
|
||||||
|
id="path6" />
|
||||||
|
<path
|
||||||
|
d="m 120.25712,18.932001 c 0.076,1.313 0.12,2.63 0.12,3.957 0,38.551 -30.69898,90.497009 -75.826985,101.860009 v 1.639 c 59.044005,-2.79 105.809995,-63.024009 105.809995,-109.200009 0,-2.375 -0.128,-4.729 -0.371,-7.056 l -29.73,8.798 z"
|
||||||
|
style="fill:#e96d1f"
|
||||||
|
id="path7" />
|
||||||
|
<path
|
||||||
|
d="m 150.27512,9.583001 -7.61699,2.722 c 0.041,0.962 0.066,2.254 0.066,3.225 0,41.219 -37.271,98.204009 -87.271995,107.120009 -3.24501,1.088 -7.53801,2.077 -10.932,2.931 v 1.638 C 109.77413,121.65901 155.62013,55.353001 150.28012,9.579001 Z"
|
||||||
|
style="fill:#d9541e"
|
||||||
|
id="path8" />
|
||||||
|
|
||||||
|
<path
|
||||||
|
d="m 36.595,14.188001 c -0.077,1.313 1.787,0.968 1.787,2.293 0,38.551 46.558007,97.366009 91.68799,108.730009 v 1.639 C 70.117,121.33001 1.51,59.050001 0,0 l 36.599,14.189001 z"
|
||||||
|
style="fill:url(#SVGID_left_)"
|
||||||
|
id="path9" />
|
||||||
|
<path
|
||||||
|
d="m 54.727,18.931001 c -0.076,1.313 -0.12,2.63 -0.12,3.957 0,38.551 30.698995,90.497009 75.82699,101.860009 v 1.639 C 71.39,123.59701 24.624,63.363001 24.624,17.187001 c 0,-2.375 0.128,-4.729 0.371,-7.056 l 29.73,8.798 z"
|
||||||
|
style="fill:#a0ce67"
|
||||||
|
id="path10" />
|
||||||
|
<path
|
||||||
|
d="m 24.709,9.582001 7.617,2.722 c -0.041,0.962 -0.066,2.254 -0.066,3.225 0,41.219 37.271,98.204009 87.27199,107.120009 3.245,1.088 7.538,2.077 10.932,2.931 v 1.638 C 65.21,121.65801 19.364,55.352001 24.704,9.578001 Z"
|
||||||
|
style="fill:#439639"
|
||||||
|
id="path11" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.7 KiB |
6
XMPP - 25 years/build.sh
Executable file
6
XMPP - 25 years/build.sh
Executable file
|
|
@ -0,0 +1,6 @@
|
||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
name="$(basename "$(pwd)")"
|
||||||
|
|
||||||
|
typst compile --root .. ./main.typ ./"$name".pdf
|
||||||
15
XMPP - 25 years/dev.sh
Executable file
15
XMPP - 25 years/dev.sh
Executable file
|
|
@ -0,0 +1,15 @@
|
||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
name="$(basename "$(pwd)")"
|
||||||
|
|
||||||
|
t="$(mktemp --suffix=.pdf)"
|
||||||
|
if ! typst compile --root .. ./main.typ "$t"; then
|
||||||
|
echo "Failed to compile $name/main.typ. Please fix errors and run me again."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Initial compilation successful. Now starting watch mode. Opening $t"
|
||||||
|
xdg-open "$t"
|
||||||
|
|
||||||
|
typst watch --root .. ./main.typ "$t"
|
||||||
125
XMPP - 25 years/main.typ
Normal file
125
XMPP - 25 years/main.typ
Normal file
|
|
@ -0,0 +1,125 @@
|
||||||
|
#set page(
|
||||||
|
paper: "a4",
|
||||||
|
margin: (inside: 2cm, outside: 1cm),
|
||||||
|
)
|
||||||
|
#set text(
|
||||||
|
font: "DejaVu Sans",
|
||||||
|
size: 13.7pt,
|
||||||
|
)
|
||||||
|
#set par(justify: true)
|
||||||
|
|
||||||
|
#align(
|
||||||
|
center,
|
||||||
|
text(
|
||||||
|
size: 48pt,
|
||||||
|
// font: "Communard",
|
||||||
|
[ = Jabber/XMPP ]
|
||||||
|
) + text(
|
||||||
|
size: 19pt,
|
||||||
|
[ = 25 years of Digital Independence ],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
#align(
|
||||||
|
center + horizon,
|
||||||
|
image(height: 50%, "XMPP_logo_notext.svg"),
|
||||||
|
),
|
||||||
|
|
||||||
|
#align(
|
||||||
|
center + bottom,
|
||||||
|
[ *Daniel Gultsch - August 24, 2026* ],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#show heading.where(level: 2): set block(above: 1.5em, below: 1.5em)
|
||||||
|
#set page(
|
||||||
|
numbering: "1",
|
||||||
|
)
|
||||||
|
|
||||||
|
== Infrastructure
|
||||||
|
|
||||||
|
“We should own our infrastructure.” A lot of people would instinctively nod in agreement with that statement. Yet who “we” refers to shifts depending on the type of infrastructure. Highways, railways, bridges, and ports require nation-scale efforts. The water supply is usually put into the hands of municipalities. And the desire to own infrastructure goes down to a much smaller level: Owning your home is a dream for many—though such ownership doesn’t necessarily have to be organized on an individual level. Instead, cooperatives or city-owned housing #footnote[#link("https://en.wikipedia.org/wiki/Housing_in_Vienna")] can provide similar benefits.
|
||||||
|
|
||||||
|
China’s neo-colonialism, which manifests, among other things, as building and buying infrastructure in sovereign nations, is rightly criticized by many. Not selling your water supply to Nestlé is a universally accepted principle, and landlords are one of the most hated classes.
|
||||||
|
|
||||||
|
For a long time, Europe has not held digital services to the same standard. In part, this can be explained by Europe implicitly including American corporations in a collective “we”—~an assumption that officially fell apart under the current Trump regime, but should have been regarded with skepticism well before then. Corporations are not our friends. However, the larger factor at play is that Europe simply did not consider digital services infrastructure. While anti-Americanism is en vogue again and drives much of the digital sovereignty movement, Europe must be careful not to simply replace American corporations with European ones, but to strive towards collective ownership instead.
|
||||||
|
|
||||||
|
Under capitalism, profit-oriented companies will always play a part in building and even operating our infrastructure. However, they need to be forced into a position where they are easily replaceable. It’s acceptable to hire a company to build a road, but when it comes to maintaining and repairing it half a century later, we need to be able to hire a different company for the job. It’s acceptable to hire a company to build and operate the backbone transmission lines, but we don’t want that company to own the entire power grid. We want smaller players to be able to connect to and interoperate within the grid. That’s where open standards come in.
|
||||||
|
|
||||||
|
The Internet used to be —~and to some degree still is~— built around standards. A data center operator can buy servers from one company, switches from another, routers from a third, and connect them to a backbone internet provider that runs hardware from yet another company. If a company goes out of business or shifts to anti-consumer practices, the next generation of hardware can easily be ordered from a different vendor. The need for and the benefits of this supply chain independence are easily understood even by people who don’t operate data centers for a living. However, when it comes to communication tools, even the tech-literate fail to apply the same critical scrutiny.
|
||||||
|
|
||||||
|
After breathing, eating, and procreating, communicating is probably the fourth most important thing humans do. Yet we often fail to recognize our communication tools as part of our infrastructure.
|
||||||
|
|
||||||
|
Digital rights advocates often point to Signal, Wire and Threema as examples of communication tools developed and operated by entities with slightly more ethical business practices than their Big Tech counterparts. What most privacy enthusiasts fail to understand is that these companies are still in the business of operating walled gardens with no escape. They do not interoperate. It’s not that Signal has done something inherently malicious —~although paying its CEO close to a million dollars a year and running its servers on AWS are certainly questionable~— it’s that we don’t have a hedge in place if it ever does.
|
||||||
|
|
||||||
|
Open-source software is orthogonal to this problem. It helps to ensure that the software isn’t spyware —~unlike WhatsApp and other Meta products #footnote[#link("https://localmess.github.io/")]~— and that the end-to-end encryption is sound, but it does not protect us if Signal shuts down its servers tomorrow or ceases EU operations #footnote[#link("https://mastodon.world/@Mer__edith/112535616774247450")]. Open-source alone is not sufficient to meet the requirements we should have for our infrastructure.
|
||||||
|
|
||||||
|
To live up to the standards we set for ourselves, we need to design systems in which self-hosting is structurally possible but not strictly necessary. Like owning a home, running your own server should be possible, and so should collective ownership. Digital systems can and should replicate the advantages of cooperative housing alongside those of individual ownership.
|
||||||
|
|
||||||
|
Treating digital communication as true infrastructure can only be achieved by adopting and mandating open standards.
|
||||||
|
|
||||||
|
The Extensible Messaging and Presence Protocol (XMPP) #footnote[#link("https://www.rfc-editor.org/rfc/rfc6120.html")]<ref4> #footnote[#link("https://www.rfc-editor.org/rfc/rfc6121.html")] is a standard for communicating online. It wasn’t created to fit a particular zeitgeist or address the current political climate. In fact, its roots go back more than 25 years.
|
||||||
|
|
||||||
|
== Standards
|
||||||
|
|
||||||
|
Interoperability and vendor independence are achieved by setting and adhering to standards. To avoid individual vendors pushing standards that explicitly or implicitly exclude potential competitors or otherwise give unfair advantages, standards-developing organizations (SDOs) are set up for mutual cooperation, and usually have safeguards in place that prevent a single company from becoming too powerful. Well-known examples of such organizations include the ISO, the IETF, the W3C, and the Unicode Consortium.
|
||||||
|
|
||||||
|
There is a distinction to be made between a vendor publishing its API and allowing others to use it, and stakeholders coming together to collectively develop a standard within the framework of an SDO. Organizations like the IETF succeed because they force different people with different needs to agree. Protocols aren’t dictated by the priorities of a single company; instead, they are reviewed and tested by competitors, security researchers, and independent developers.
|
||||||
|
|
||||||
|
Element, formerly known as Riot and NewVector, develops an instant messaging product with a feature set —~such as self-hosting and federation~— similar to that of XMPP-based solutions. Notably, however, it chose not to adopt XMPP, but instead published its own API under the name Matrix for others to use. Unlike with traditional standards, Element maintains tight control over any modifications or additions to its public API. Key leadership positions in the Matrix Foundation are predominantly held by current and former Element employees. Getting outside contributions accepted into the specification is notoriously difficult. #footnote[#link("https://github.com/matrix-org/matrix-spec-proposals/pull/4174")] Yet European public administrations, in their push for digital sovereignty, routinely fall into the trap of procuring such single-vendor platforms, confusing an open-source codebase with an open standard.
|
||||||
|
|
||||||
|
It’s natural for standard proposals to originate within a single organization. JMAP, a modern replacement for IMAP and SMTP Submission, which is not too dissimilar from Matrix —~a JSON API over HTTP ~—started within Fastmail before being brought to the IETF. Jabber started out as an open-source community project before it was brought to the IETF and renamed to XMPP. Ideas start small, but to create a standard, outside feedback, collaboration, and the structure of an SDO are needed.
|
||||||
|
|
||||||
|
For consumers, the difference in the approaches of Fastmail and Element is striking. Not only was JMAP noticeably improved on a protocol level while going through the IETF working group process, but it now has at least three independent servers and numerous independent client applications. Matrix, on the other hand —~despite dating back to the same era around 2014~— is still stuck with one predominant reference implementation and a second alternative still in its infancy and struggling to gain traction. Operating that reference implementation is notoriously resource-intensive, which makes self-hosting difficult for smaller organizations and individuals. Element sells closed-source plugins to speed up performance.
|
||||||
|
|
||||||
|
== The X in XMPP
|
||||||
|
|
||||||
|
The origins of XMPP —~which started out as Jabber~— go back over a quarter of a century. The original RFC #footnote[#link("https://www.rfc-editor.org/rfc/rfc3920.html")] dates to October 2004 and only received minor revisions in March 2011 @ref4. Requirements for instant messaging will naturally change over a time span that long. Luckily, the X in XMPP stands for Extensible, and extensions provide a way for the protocol to adapt and change over time. Extensions to XMPP are called XMPP Extension Protocols (XEPs) and are managed by the XMPP Standards Foundation (XSF). The XSF doesn’t write extensions itself; rather, it provides the framework of an SDO for developers to propose and standardize their own.
|
||||||
|
|
||||||
|
Adapting to changing requirements hasn’t always been smooth sailing. XEP-0198 (Stream Management), an extension crucial for preventing message loss in mobile deployments, was stabilized in 2009, but only gained widespread implementation around 2014–2015. The iPhone was released in 2007; the HTC Dream, the first commercial Android phone, followed in 2008. OMEMO (XEP-0384), XMPP’s specification for industry-standard end-to-end encryption, gained traction from 2016 onward, three years after Edward Snowden #footnote[#link("https://en.wikipedia.org/wiki/Snowden_disclosures")] exposed the NSA’s global surveillance and put the need for E2EE on the map. The articles “The (Sad) State of Mobile XMPP in 2014” by Georg Lukas #footnote[#link("https://op-co.de/blog/posts/mobile_xmpp_in_2014/")] and “The State of Mobile XMPP in 2016” by this author #footnote[#link("https://gultsch.de/posts/the-state-of-mobile-xmpp-in-2016/")] illustrate this rocky transition into the mobile era.
|
||||||
|
|
||||||
|
This demonstrates that merely having specifications is not enough. Standards need to be backed by multiple, preferably independent, implementations. Today, the XSF keeps track of the implementation status of its XEPs #footnote[#link("https://xmpp.org/extensions/")]. This data helps authors and the XSF guide proposals through their lifecycle, such as determining the right moment to advance an XEP from Experimental to Stable. It also allows developers to easily identify other clients and servers that support a given specification for interoperability testing. Finally, by providing a reverse lookup of which software supports which features, it helps end users find the right client for their needs.
|
||||||
|
|
||||||
|
Modern clients like Dino on Linux or Conversations on Android are on par with alternatives built on proprietary protocols. Recent additions to the feature set include emoji reactions, cross-device read-state synchronization, and time zone indicators to avoid messaging contacts during their local night hours. A unique feature among self-hostable instant messaging solutions, which sadly became relevant after a state-sponsored attack on a public XMPP provider #footnote[#link("https://notes.valdikss.org.ru/jabber.ru-mitm/")], is channel binding, a mechanism to prevent certain machine-in-the-middle attacks.
|
||||||
|
|
||||||
|
Looking to the not-too-distant future, the XMPP community is currently working on message replies, gallery-style multi-image sharing, and OAuth support. All of these features already have experimental XEPs backing them, but the community is currently awaiting implementation experience before advancing them. Meanwhile, the community is also exploring options for updating the RFC and bringing the protocol back to the IETF as “XMPP 2.0.”
|
||||||
|
|
||||||
|
Instant messaging is not a homogeneous user experience. A messenger for teams might require a different feature set than something optimized for use with friends and family. Not every XMPP client aims to provide the same user experience, but the standards exist for developers to build whatever specialized client their users need without inventing a protocol from scratch.
|
||||||
|
|
||||||
|
== A future in the Past
|
||||||
|
|
||||||
|
There is something fascinating about the fact that XMPP has developers in its community who are younger than the protocol itself. It has quietly outlived venture-funded startups, proprietary platforms, and entire tech cycles. That endurance provides the resilience we need in challenging times. It is the anchor, the backbone, the infrastructure.
|
||||||
|
|
||||||
|
Matrix reinvented the wheel as a rubber-tyred metro. On paper, it provides real benefits, such as climbing steeper inclines, which are then used to aggressively advertise and lobby local governments to buy in. But in the end, the municipality gets locked into a single vendor.
|
||||||
|
|
||||||
|
A changing geopolitical situation and the realization that Big Tech holds too much power lead us to seek out and develop alternatives. But what if the alternative has been right under our noses for over 25 years? The standard for instant messaging —~RFC 6120: Extensible Messaging and Presence Protocol (XMPP).
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#set page(
|
||||||
|
numbering: none,
|
||||||
|
)
|
||||||
|
|
||||||
|
#align(
|
||||||
|
center + horizon,
|
||||||
|
block(
|
||||||
|
height: 50%,
|
||||||
|
width: 80%,
|
||||||
|
[
|
||||||
|
= About standard federated instant messaging
|
||||||
|
\
|
||||||
|
|
||||||
|
In this text, Daniel Gultsch, maintainer of the Conversations XMPP client for Android, celebrates the 25 years of the XMPP RFC standard, reminding us why we cannot trust
|
||||||
|
a single actor with our communications.
|
||||||
|
|
||||||
|
Despite all its limitations, the Jabber/XMPP ecosystem retains today vibrant non-profit communities and projects for smaller hosts independent of the tech giants.
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
#align(
|
||||||
|
center + bottom,
|
||||||
|
image("../resources/noslop.svg"),
|
||||||
|
)
|
||||||
120
resources/noslop.svg
Normal file
120
resources/noslop.svg
Normal file
|
|
@ -0,0 +1,120 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="610.92938mm"
|
||||||
|
height="128.66519mm"
|
||||||
|
viewBox="0 0 610.92938 128.66519"
|
||||||
|
version="1.1"
|
||||||
|
id="svg1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:version="1.4.4 (dcaf3e7d9e, 2026-05-05)"
|
||||||
|
sodipodi:docname="noslop.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||||
|
id="namedview1"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:zoom="0.23283773"
|
||||||
|
inkscape:cx="1114.5101"
|
||||||
|
inkscape:cy="438.07333"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="995"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="layer1" /><defs
|
||||||
|
id="defs1"><style
|
||||||
|
id="style1">.cls-1{stroke:#000;}.cls-1,.cls-2{stroke-miterlimit:10;stroke-width:5.98px;}.cls-2{fill:none;stroke:#231f20;}.cls-3{fill:#fff;}.cls-4{fill:red;}.cls-5{fill:#161616;}</style></defs><g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(202.59583,-121.60007)"><g
|
||||||
|
id="Layer_1-2"
|
||||||
|
transform="matrix(0.19169329,0,0,0.19169329,129.36419,190.26527)"><g
|
||||||
|
id="g3"
|
||||||
|
transform="translate(-55.209722)"><circle
|
||||||
|
class="cls-3"
|
||||||
|
cx="156.25"
|
||||||
|
cy="157.78999"
|
||||||
|
r="144.5"
|
||||||
|
id="circle1" /><g
|
||||||
|
id="g2"><path
|
||||||
|
id="icon"
|
||||||
|
class="cls-5"
|
||||||
|
d="m 191.55,135.14 h -72.13 c -13.84,0 -25.18,11.34 -25.18,25.18 v 0.48 c 0,13.84 11.34,25.18 25.18,25.18 h 72.13 c 13.84,0 25.18,-11.34 25.18,-25.18 v -0.48 c 0,-13.84 -11.34,-25.18 -25.18,-25.18 z m -54.73,35.08 c -2.39,2.39 -5.66,3.87 -9.28,3.87 -3.62,0 -6.87,-1.48 -9.26,-3.87 -2.36,-2.39 -3.84,-5.66 -3.84,-9.26 0,-3.6 1.48,-6.9 3.84,-9.28 2.39,-2.36 5.66,-3.84 9.26,-3.84 7.23,0 13.13,5.9 13.13,13.13 0,3.6 -1.48,6.87 -3.84,9.26 z m 55.42,0 c -2.36,2.39 -5.66,3.87 -9.26,3.87 -3.6,0 -6.9,-1.48 -9.28,-3.87 -2.36,-2.39 -3.84,-5.66 -3.84,-9.26 0,-3.6 1.48,-6.9 3.84,-9.28 2.39,-2.36 5.68,-3.84 9.28,-3.84 7.21,0 13.13,5.9 13.13,13.13 0,3.6 -1.48,6.87 -3.87,9.26 z m 68.35,-82.7 c -4.22,0 -7.64,3.41 -7.64,7.64 0,1.46 0.41,2.79 1.1,3.94 l -21.65,42.01 h -1.46 v -1.41 c 0,-16.44 -13.37,-29.83 -29.83,-29.83 h -91.29 c -16.44,0 -29.83,13.39 -29.83,29.83 v 1.41 H 78.56 L 56.91,99.1 c 0.69,-1.15 1.1,-2.48 1.1,-3.94 0,-4.22 -3.44,-7.64 -7.66,-7.64 -4.22,0 -7.64,3.41 -7.64,7.64 0,4.23 3.41,7.66 7.64,7.66 0.14,0 0.29,0 0.43,-0.02 l 20.67,40.12 c -1.98,1.55 -3.27,3.99 -3.27,6.68 v 3.56 h -2.17 c -3.44,0 -6.23,2.77 -6.23,6.21 v 30.26 c 0,3.44 2.79,6.21 6.23,6.21 h 2.17 v 2.7 c 0,4.7 3.82,8.52 8.5,8.52 H 80 v 1.41 c 0,16.44 13.39,29.83 29.83,29.83 h 91.29 c 16.47,0 29.83,-13.39 29.83,-29.83 v -1.41 h 2.84 c 4.7,0 8.52,-3.82 8.52,-8.52 v -2.7 h 2.17 c 3.44,0 6.23,-2.77 6.23,-6.21 v -30.26 c 0,-3.44 -2.79,-6.21 -6.23,-6.21 h -2.17 v -3.56 c 0,-2.55 -1.15,-4.85 -2.94,-6.42 l 20.81,-40.38 c 0.14,0.02 0.26,0.02 0.41,0.02 4.22,0 7.66,-3.44 7.66,-7.66 0,-4.22 -3.44,-7.64 -7.66,-7.64 z M 79.99,199.89 h -3.32 c -0.72,0 -1.34,-0.62 -1.34,-1.36 V 149.6 c 0,-0.72 0.62,-1.34 1.34,-1.34 h 3.32 v 51.62 z m 143.8,8.57 c 0,12.48 -10.17,22.67 -22.67,22.67 h -91.29 c -12.51,0 -22.67,-10.19 -22.67,-22.67 V 139.7 c 0,-12.51 10.17,-22.67 22.67,-22.67 h 91.29 c 12.51,0 22.67,10.17 22.67,22.67 z m 11.36,-9.93 c 0,0.74 -0.62,1.36 -1.36,1.36 h -2.84 v -51.62 h 2.84 c 0.74,0 1.36,0.62 1.36,1.34 v 48.93 z m -48.2,13.55 H 128.3 c -0.55,0 -1,-0.45 -1,-1 v -2.72 c 0,-0.55 0.45,-1 1,-1 h 58.65 c 0.55,0 1,0.45 1,1 v 2.72 c 0,0.55 -0.45,1 -1,1 z" /><line
|
||||||
|
class="cls-2"
|
||||||
|
x1="155.48"
|
||||||
|
y1="109.58"
|
||||||
|
x2="155.48"
|
||||||
|
y2="78.830002"
|
||||||
|
id="line1" /><circle
|
||||||
|
class="cls-1"
|
||||||
|
cx="155.07001"
|
||||||
|
cy="76.690002"
|
||||||
|
r="14.52"
|
||||||
|
id="circle2" /></g><path
|
||||||
|
class="cls-4"
|
||||||
|
d="M 156.5,0 C 70.21,0 0,70.21 0,156.5 0,242.79 70.21,313 156.5,313 242.79,313 313,242.79 313,156.5 313,70.21 242.79,0 156.5,0 Z M 30,156.5 c 0,-29.36 10.05,-56.41 26.89,-77.89 l 177.5,177.5 C 212.9,272.95 185.85,283 156.5,283 86.75,283 30,226.25 30,156.5 Z M 255.66,234.95 78.05,57.34 C 99.63,40.23 126.89,30 156.5,30 226.25,30 283,86.75 283,156.5 c 0,29.61 -10.23,56.87 -27.34,78.45 z"
|
||||||
|
id="path2" /></g></g><text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-size:70.5556px;line-height:110%;font-family:Rubik;-inkscape-font-specification:Rubik;text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;opacity:0.8;fill:#808080;fill-opacity:0;stroke:#000000;stroke-width:3;stroke-dasharray:none"
|
||||||
|
x="101.35187"
|
||||||
|
y="173.19449"
|
||||||
|
id="text1"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan1"
|
||||||
|
style="font-size:70.5556px;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
x="101.35188"
|
||||||
|
y="173.19449">NO SLOP EDITIONS</tspan></text><g
|
||||||
|
id="g1"
|
||||||
|
transform="matrix(0.05669291,0,0,0.05669291,21.421876,209.94527)"><path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path7944"
|
||||||
|
d="M 654.02984,-347.13333 637.39001,-295.92147 522.68229,57.113819 H 97.631245 L 441.50482,306.95232 310.15676,711.19948 654.02984,461.36098 997.90343,711.19998 866.55537,306.95232 1210.4289,57.113819 h -425.051 z m 0,113.23806 105.9248,326.001267 H 1102.7337 L 825.41936,293.58673 931.34416,619.58903 654.02984,418.10833 376.71601,619.588 482.64081,293.58673 205.32647,92.105997 h 342.77908 z"
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:34.9922;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke markers fill;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path5688"
|
||||||
|
d="M 654.03008,-290.51485 535.39385,74.609974 H 151.479 L 462.07263,300.26947 343.4364,665.3942 654.03008,439.73471 964.62377,665.39426 845.98754,300.26947 1156.5812,74.609974 H 772.66631 Z"
|
||||||
|
style="fill:#dd0000;fill-opacity:1;stroke:none;stroke-width:0.617225px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><path
|
||||||
|
sodipodi:nodetypes="cccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path5690"
|
||||||
|
d="M 151.48003,74.609286 462.07263,300.26947 654.0294,237.89893 Z"
|
||||||
|
style="opacity:0.15;fill:#dd0000;fill-opacity:1;stroke:none;stroke-width:0.617225px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><path
|
||||||
|
sodipodi:nodetypes="cccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path5692"
|
||||||
|
d="M 654.0294,237.89893 535.39385,74.609974 654.03008,-290.51485 Z"
|
||||||
|
style="opacity:0.15;fill:#dd0000;fill-opacity:1;stroke:none;stroke-width:0.617225px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><path
|
||||||
|
style="fill:#000000;stroke:none;stroke-width:0.617225px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 1156.5812,74.609974 H 772.66631 L 343.4364,665.3942 654.03008,439.73471 964.62377,665.39426 845.98754,300.26947 Z"
|
||||||
|
id="path5706"
|
||||||
|
inkscape:connector-curvature="0" /><path
|
||||||
|
sodipodi:nodetypes="cccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path5694"
|
||||||
|
d="M 654.03008,237.89866 772.66631,74.609974 1156.5813,74.609895 Z"
|
||||||
|
style="opacity:0.15;fill:#000000;stroke:none;stroke-width:0.617225px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><path
|
||||||
|
sodipodi:nodetypes="cccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path5698"
|
||||||
|
d="M 964.62377,665.39426 654.03008,237.89866 845.98754,300.26947 Z"
|
||||||
|
style="opacity:0.15;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.617225px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><path
|
||||||
|
sodipodi:nodetypes="cccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path5700"
|
||||||
|
d="M 343.4364,665.39431 654.0294,237.89893 V 439.73471 Z"
|
||||||
|
style="opacity:0.15;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.617225px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="m 654.03056,52.660972 a 185.23762,185.23762 0 0 1 0,370.475238 185.23762,185.23762 0 0 1 0,-370.475238 z m -46.927,182.767788 h 93.85398 L 654.03056,134.78301 Z m 112.37775,39.51735 H 588.57982 l -33.03381,70.69902 a 146.02899,146.02899 0 0 0 196.96908,0 z M 678.72902,94.339434 779.99213,311.68493 A 146.02899,146.02899 0 0 0 678.72902,94.339434 Z m -49.39694,0 A 146.02899,146.02899 0 0 0 528.06898,311.68493 Z"
|
||||||
|
id="path8833"
|
||||||
|
style="fill:#ffffff;stroke-width:0.617458" /></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 10 KiB |
Loading…
Reference in a new issue