FeaturesTemplatesShowcaseTownie
AI
BlogDocsPricing
Log inSign up
xkonti
xkontintfy
Public
Like
7
ntfy
Home
Code
2
README.md
main.tsx
Branches
1
Pull requests
Remixes
1
History
Environment variables
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Sign up now
Code
/
Code
/
Search
README.md

Allows to publish a ntfy notification using a fluent builder configuration.

Usage example

Create val
import { ntfy } from "https://esm.town/v/xkonti/ntfy"; await ntfy() .toServer(Deno.env.get("ntfyServer")) .asUser(Deno.env.get("ntfyUser"), Deno.env.get("ntfyPassword")) .toTopic("testing") .withMessage("Hello there!") .withTitle("First test") .withViewAction("My website", "https://xkonti.tech") .withTags("package", "val-town") .withPriority("high") .publish();

⚠️ For the notification to be sent it needs to be published (publish function).

Use helper

Executes specified functions that can modify the notification. Can be used to streamline authentication, apply common operations, etc.

Create val
import { ntfy } from "https://esm.town/v/xkonti/ntfy"; const toMyNtfyServer = (builder: ReturnType<typeof ntfy>) => { builder .toServer(Deno.env.get("ntfyServer")) .asUser(Deno.env.get("ntfyUser"), Deno.env.get("ntfyPassword")); }; await ntfy() .use(toMyNtfyServer) .toTopic('home-automation') .withMessage('You left the front door open') .publish();

You can pass it multiple functions.

Functions

toServer(url) - optional

Specifies a server that the notification will be sent do. By default it's https://ntfy.sh.

asUser(user, password) - optional

Authenticates with the user and password. Please use ValTown's secrets for this.

Create val
await ntfy() .asUser('user123', '12345') ...

usingToken(token) - optional

Authenticates using the provided token. Please use ValTown's secrets for this.

Create val
await ntfy() .usingToken('some-token') ...

toTopic(topic) - required

Specifies which topic to publish the message to.

Create val
await ntfy() .toTopic('home-automation') ...

withMessage(message, markdown) - required

Specifies the main message of the notification. You can also flag it as markdown by passing true as a second argument. By default markdown is false.

Create val
await ntfy() .toTopic('home-automation') .withMessage('You left the front door open') ...
Create val
await ntfy() .toTopic('home-automation') .withMessage('Your garage is **flooding**!', true) ...

withTitle(title) - optional

Sets the title of the notification.

Create val
await ntfy() .toTopic('home-automation') .withTitle('Garage') .withMessage('You left the front door open') ...

withPriority(priority) - optional

Sets the priority of the notification. Possible from lowest to highest priority: min, low, default, high, max

Create val
await ntfy() .toTopic('home-automation') .withMessage('You left the front door open') .withPriority('high') ...

Alternatively you can use dedicated functions: .withMinPriority(), .withLowPriority(), .withDefaultPriority(), .withHighPriority(), .withMaxPriority()

Create val
await ntfy() .toTopic('home-automation') .withMessage('You left the front door open') .withHighPriority() ...

withTags(...tags) - optional

Sets tags of the notification. This overrides any previously existing tags.

Create val
await ntfy() .toTopic('home-automation') .withMessage('You left the front door open') .withTags('door', 'safety') ...

withDelay(delay) - optional

Sets the delay for notification delivery. Read ntfy docs for more info.

Create val
await ntfy() .toTopic('home-automation') .withMessage('You left the front door open') .withDelay('tomorrow, 10am') ...

withViewAction(label, url, clear?) - optional

Adds an action button that opens a website or app when tapped.

  • label - Label of the action button in the notification
  • url - URL to open when action is tapped
  • clear - Clear notification after action button is tapped (defaults to false)
Create val
await ntfy() .toTopic('home-automation') .withMessage('You left the front door open') .withViewAction('View Val', 'https://www.val.town/v/xkonti/ntfy') ...

withBroadcastAction(label, intent?, extras?, clear?) - optional

Adds an action button that sends an Android broadcast intent when tapped.

  • label - Label of the action button in the notification
  • intent - Android intent name, default is io.heckel.ntfy.USER_ACTION
  • extras - Android intent extras.
  • clear - Clear notification after action button is tapped (defaults to false)
Create val
await ntfy() .toTopic('home-automation') .withMessage('You left the front door open') .withBroadcastAction('Selfie', 'Take picture', { 'cmd': 'pic' }) ...

withHtmlAction(label, url, method?, headers?, body?, clear?) - optional

Adds an action button that sends a HTTP request when tapped.

  • label - Label of the action button in the notification
  • url - URL to which the HTTP request will be sent
  • method - HTTP method to use for request, default is POST
  • headers - HTTP headers to pass in request.
  • body - HTTP body as a string
  • clear - Clear notification after action button is tapped (defaults to false)
Create val
await ntfy() .toTopic('home-automation') .withMessage('You left the front door open') .withHtmlAction( 'Self-destruct', 'https://self.destruct/initiate', 'POST', { 'Authentication': 'Bearer 123' }, '{"countdown":60}' ) ...

withClickUrl(url) - optional

Makes the notification open the specified URL when clicked (tapped).

withRawAttachment(filename, filedata) - optional

Attached a file to the notification. Only one file can be attached.

Create val
await ntfy() .toTopic('home-automation') .withMessage('You left the front door open') .withRawAttachment('todo.txt', 'Nothing!') ...

withUrlAttachment(url) - optional

Attaches a file that is hosted elsewhere (URL).

withIcon(url) - optional

Sets an icon for the notification.

viaEmail(email) - optional

Sends the notification via email instead.

viaPhoneCall(number) - optional

Sends the notification via a phone call. The number defaults to yes, which makes it use the first phone number defined on your ntfy account.

withoutCache() - optional

Disables the cache for the notification. Read the docs on caching for more info.

withoutFirebase() - optional

Disables Firebase forwarding for the notification. Read the docs on Firebase for more info.

withUnifiedPush() - optional

Indicates intent of using the Unified Push for the notification. Read the docs on Unified Push for more info.

Migrated from folder: Utilities/Ntfy/ntfy

Code
README.mdmain.tsx
Go to top
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Product
FeaturesPricing
Developers
DocsStatusAPI ExamplesNPM Package Examples
Explore
ShowcaseTemplatesNewest ValsTrending ValsNewsletter
Company
AboutBlogCareersBrandhi@val.town
Terms of usePrivacy policyAbuse contact
© 2025 Val Town, Inc.