- August 28, 2025
- Mins Read
🚨 V5 is now released! 🚨
Atributika
 is a Swift library that provides a simple way to build NSAttributedString from HTML-like text, by identifying and styling tags, links, phone numbers, hashtags etc.
A standalone AtributikaViews
 library offers UILabel/UITextView drop-in replacements capable of displaying highlightable and clickable links, with rich customization, and proper accessibility support.
While NSAttributedString is undoubtedly powerful, it’s also a low-level API that needs a considerable amount of setup work. If your string is a template and the actual content is only known at runtime, this becomes complicated. When dealing with localizations, constructing NSAttributedString isn’t straightforward either.
But wait, Atributika
 comes to your rescue!
let b = Attrs().font(.boldSystemFont(ofSize: 20)).foregroundColor(.red)
label.attributedText = “Hello <b>World</b>!!!”.style(tags: [“b”: b]).attributedString
Indeed, that’s much simpler. Atributika
 is easy-to-use, declarative, flexible, and handles the rough edges for you.
Atributika
AtributikaViews
normal/highlighted/disabled
 states.V5 is a major rewrite of the project, executed in early 2023. It’s not fully compatible with the previous version and requires some manual migration. The introduction of breaking changes was necessary for the project’s further evolution.
Here’s what’s new:
NSAttributedString Building
AttributedLabel / AttributedTextView
New examples have been added to the Demo application, including:
let redColor = UIColor(red:(0xD0 / 255.0), green: (0x02 / 255.0), blue:(0x1B / 255.0), alpha:1.0)
let a = Attrs().foregroundColor(redColor)
let font = UIFont(name: “AvenirNext-Regular”, size: 24)!
let grayColor = UIColor(white: 0x66 / 255.0, alpha: 1)
let base = Attrs().font(font).foregroundColor(grayColor)
let str = “<a><a></a>tributik<a></a></a>”
.style(tags: [“a”: a])
.styleBase(base)
.attributedString
let str = “#Hello @World!!!”
.styleHashtags(Attrs().font(.boldSystemFont(ofSize: 45)))
.styleMentions(Attrs().foregroundColor(.red))
.attributedString
let str = “Check this website http://google.com”
.styleLinks(Attrs().foregroundColor(.blue))
.attributedString
let str = “Call me (888)555-5512”
.stylePhoneNumbers(Attrs().foregroundColor(.red))
.attributedString
let links = Attrs().foregroundColor(.blue)
let phoneNumbers = Attrs().backgroundColor(.yellow)
let mentions = Attrs().font(.italicSystemFont(ofSize: 12)).foregroundColor(.black)
let b = Attrs().font(.boldSystemFont(ofSize: 12))
let u = Attrs().underlineStyle(.single)
let base = Attrs().font(.systemFont(ofSize: 12)).foregroundColor(.gray)
let str = “@all I found <u>really</u> nice framework to manage attributed strings. It is called <b>Atributika</b>. Call me if you want to know more (123)456-7890 #swift #nsattributedstring https://github.com/psharanda/Atributika”
.style(tags: [“u”: u, “b”: b])
.styleMentions(mentions)
.styleHashtags(links)
.styleLinks(links)
.stylePhoneNumbers(phoneNumbers)
.styleBase(base)
.attributedString
let tweetLabel = AttributedLabel()
tweetLabel.numberOfLines = 0
tweetLabel.highlightedLinkAttributes = Attrs().foregroundColor(.red).attributes
let baseLinkAttrs = Attrs().foregroundColor(.blue)
let a = TagTuner {
Attrs(baseLinkAttrs).akaLink($0.tag.attributes[“href”] ?? “”)
}
let hashtag = DetectionTuner {
Attrs(baseLinkAttrs).akaLink(“https://twitter.com/hashtag/\($0.text.replacingOccurrences(of: “#”, with: “”))”)
}
let mention = DetectionTuner {
Attrs(baseLinkAttrs).akaLink(“https://twitter.com/\($0.text.replacingOccurrences(of: “@”, with: “”))”)
}
let link = DetectionTuner {
Attrs(baseLinkAttrs).akaLink($0.text)
}
let tweet = “@all I found <u>really</u> nice framework to manage attributed strings. It is called <b>Atributika</b>. Call me if you want to know more (123)456-7890 #swift #nsattributedstring https://github.com/psharanda/Atributika”
tweetLabel.attributedText = tweet
.style(tags: [“a”: a])
.styleHashtags(hashtag)
.styleMentions(mention)
.styleLinks(link)
.attributedString
tweetLabel.onLinkTouchUpInside = { _, val in
if let linkStr = val as? String {
if let url = URL(string: linkStr) {
UIApplication.shared.openURL(url)
}
}
}
view.addSubview(tweetLabel)
Current version is compatible with:
Note:Â AttributedLabel
 / AttributedTextView
 are available only on iOS
Because in Belarusian/Russian we have one letter ‘t’ (атрыбутыка/атрибутика). So basically it is transcription, not a real word.
Add dependency to Package.swift
 file.
dependencies: [
.package(url: “https://github.com/psharanda/Atributika.git”, .upToNextMajor(from: “5.0.0”))
]
Add github "psharanda/Atributika"
 to your Cartfile
Atributika is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod “Atributika”
pod “AtributikaViews”
git submodule add https://github.com/psharanda/Atributika.git
Atributika
 folder & drag Atributika.xcodeproj
 into your project treeAtributika.framework
 to your target’s Link Binary with Libraries
 Build Phaseimport Atributika
 and you’re ready to goThis package provides you with an easy way to show tooltips over any SwiftUI view, since Apple does not provide ...
SimpleToast is a simple, lightweight, flexible and easy to use library to show toasts / popup notifications inside iOS or ...
Create Toast Views with Minimal Effort in SwiftUI Using SSToastMessage. SSToastMessage enables you to effortlessly add toast notifications, alerts, and ...