Novique’s script widgets are free, and writing one from a blank editor is the hardest part — not the API itself. These five are complete, working starting points: paste one into Create → Write a widget script, tap Run to preview it, and change the one or two lines that make it yours. For the full API reference, see How to Build a Custom Script Widget.
1. Countdown
Time remaining until a date you set, using a relative WidgetDate that keeps itself current — no reload needed for “in 12 days” to become “in 11” tomorrow.
const TARGET = new Date("2026-12-25") // change this to your date
const w = new ListWidget()
w.spacing = 4
const label = w.addText("COUNTDOWN")
label.font = Font.systemFont(12)
label.textColor = noviqueTheme.secondary()
// A relative WidgetDate keeps itself current with no reload — "in 12 days"
// becomes "in 11 days" tomorrow without the script running again.
const countdown = w.addDate(TARGET)
countdown.applyRelativeStyle()
countdown.font = Font.boldSystemFont(28)
countdown.textColor = noviqueTheme.foreground()
w.addSpacer()
const target = w.addText(TARGET.toDateString())
target.font = Font.systemFont(12)
target.textColor = noviqueTheme.secondary()
Script.setWidget(w)Make it yours: change the date on line 1. Nothing else needs to move.
2. Quote of the day
Rotates through a list you write yourself, one per day, with no network call and nothing stored — the day of the year picks the index.
const QUOTES = [
"Simplicity is the ultimate sophistication.",
"Do the work, not the performance of work.",
"Small and consistent beats big and occasional.",
"Make it work, then make it yours.",
"The best interface is the one you stop noticing.",
]
// Day of year, so the same quote holds all day and rotates at midnight —
// no network call, no stored state.
const now = new Date()
const startOfYear = new Date(now.getFullYear(), 0, 0)
const dayOfYear = Math.floor((now - startOfYear) / 86400000)
const quote = QUOTES[dayOfYear % QUOTES.length]
const w = new ListWidget()
w.spacing = 8
const mark = w.addText("“")
mark.font = Font.boldSystemFont(28)
mark.textColor = noviqueTheme.accent()
const body = w.addText(quote)
body.font = Font.systemFont(15)
body.textColor = noviqueTheme.foreground()
body.lineLimit = 4
w.addSpacer()
Script.setWidget(w)Make it yours: replace the five strings in QUOTES with your own — a longer list just means a longer cycle before it repeats.
3. Week strip
Seven letters in a row, today bolded and in your theme’s accent colour — built entirely from addStack() and a loop. Best on a medium or large widget, where seven letters have room to breathe.
const DAYS = ["S", "M", "T", "W", "T", "F", "S"]
const today = new Date().getDay()
const w = new ListWidget()
w.spacing = 4
const title = w.addText("THIS WEEK")
title.font = Font.systemFont(11)
title.textColor = noviqueTheme.secondary()
w.addSpacer(6)
const row = w.addStack()
row.layoutHorizontally()
row.spacing = 10
for (let i = 0; i < 7; i++) {
const day = row.addText(DAYS[i])
day.font = i === today ? Font.boldSystemFont(16) : Font.systemFont(16)
day.textColor = i === today ? noviqueTheme.accent() : noviqueTheme.secondary()
}
w.addSpacer()
Script.setWidget(w)Make it yours: swap the single-letter DAYS array for two-letter abbreviations if a single letter reads as too cryptic on your Home Screen.
4. Time-of-day greeting
A different headline depending on the hour, paired with a live-updating clock underneath.
const hour = new Date().getHours() const greeting = hour < 5 ? "Still up?" : hour < 12 ? "Good morning" : hour < 17 ? "Good afternoon" : hour < 21 ? "Good evening" : "Good night" const w = new ListWidget() w.spacing = 4 const line = w.addText(greeting) line.font = Font.boldSystemFont(24) line.textColor = noviqueTheme.foreground() w.addSpacer() const time = w.addDate(new Date()) time.applyTimeStyle() time.font = Font.systemFont(13) time.textColor = noviqueTheme.secondary() Script.setWidget(w)
Make it yours: the four hour thresholds are plain numbers — an early riser might move “Good morning” from 5 to 6.
5. Adaptive layout
One script that draws differently depending on which size it’s placed at, using config.widgetFamily. Small stays to a headline; medium and large get a second line.
const w = new ListWidget()
w.spacing = 4
const title = w.addText("Focus")
title.font = Font.boldSystemFont(config.widgetFamily === "small" ? 16 : 22)
title.textColor = noviqueTheme.foreground()
// Only medium and large have room for a second line — small stays
// to the headline rather than truncating one.
if (config.widgetFamily !== "small") {
w.addSpacer(4)
const detail = w.addText("One thing at a time.")
detail.font = Font.systemFont(14)
detail.textColor = noviqueTheme.secondary()
}
w.addSpacer()
Script.setWidget(w)FAQ
Are these official Novique scripts?
Yes — written for this guide, not submitted by other users. Novique has no catalogue or gallery of other people’s scripts; these are examples to copy into your own My Scripts library and edit freely.
Do any of these need an internet connection?
No. All five run entirely from data already on your phone — the date, the time, a list of quotes written into the script itself. For a live-data example (a price pulled from a public API), see the full guide’s network section.
Can I combine two of these into one script?
Yes — each one is just a normal ListWidget, so you can take the greeting from #4 and the countdown from #1 and stack them in the same script with an addSpacer() between.
Where do I actually paste this?
In Novique: Create → Write a widget script → + → Write a script. Paste the code, tap Run to preview, then Save and assign it to one of the three Widget slots.