Version 2.1
18 September 2026Guests and invites
- Guests choose their own seat and snacks. Their invite opens with the available choices. Saving adds those choices to the ticket and sends them back to the booking in One Row.
- The booker sees every person's choices together. The booking now shows each app attendee and guest with their own seat and snacks, and known occupied seats cannot be selected twice.
- Seats are allocated when the booking is made. Start with one place in the room and One Row assigns consecutive available seats to everyone attending. App users can change their own later; the booker can adjust a guest's before sending the invite.
- The guest page is now a two-step experience. Choose first, then see the finished ticket with those choices printed on it. Guests can return to change them, add the showing to Calendar, save the ticket, or join the TestFlight beta.
- Add guests to a booking. Type the name of anyone who doesn't have the app and they'll appear on the ticket alongside everyone else.
- Send a guest their ticket. Each guest gets a "Send invite" button on the booking screen, which shares a short message naming them and a link to their ticket.
- Invites carry nothing but a message and a link. The ticket picture and the calendar file used to be attached to every invite, which made an email a couple of megabytes for something the guest's own page already shows. Email, Messages and WhatsApp now all send exactly the same wording, and everything a guest needs stays on the page, where they can get at it more than once.
- Email invites fill in their own subject line. It used to arrive blank.
- Moving a booking offers to tell your guests. Reschedule a night with guests on it and the app asks whether to send fresh invites, then works through them one at a time.
- Fixed: a guest's name typed in but not added with the "+" button was silently thrown away when you confirmed the booking. It's now taken as read. The button also greys out until there's a name to add, rather than looking ready when it isn't.
- A web page for guests. The link opens their actual ticket, which flips over just like in the app, with "Add to Calendar" and "Save ticket" buttons. No app, no account, no sign-in.
- Fixed: "Add to Calendar" on the guest page did nothing when tapped on a phone. It now hands over a proper calendar file, so iOS offers its own "Add Event" sheet and other calendar apps get something they understand.
The film and showtime are a snapshot from when you sent the invite. The guest can keep changing their own seat and snacks through that link, but rescheduling still needs a fresh invite so their ticket carries the new time.
Your own calendar
- Add a booking to your calendar. Under the new … menu on any upcoming booking. The event is titled with the film and set at your cinema's name.
- Cancel booking moved into that same menu. Reschedule and Mark as watched stay as buttons. A fourth button in the row was one too many.
- Mark a booking watched whenever you like. The button only appeared once the showtime had been and gone, which assumed the diary is always right about the past. You can watch a film early, or find on the night that it was booked for the wrong day. It asks for the date either way, so an early showing still lands on the day it actually happened.
Library
- Filter by genre. A new menu next to sort and location, built from what your library actually holds rather than a fixed list. It hides itself when there's nothing to choose between.
- Custom locations are reusable. Type "Amazon Prime" on one film and it's offered back on every other, and appears in the location filter. Previously the only way to use a name twice was to type it again, which is how a library ends up holding "Amazon Prime" and "amazon prime" as two different places.
- Custom locations get a badge: their initials, "AP" for Amazon Prime. Until now a film at "Other" had no badge at all, so it looked exactly like a film with nowhere set.
- Rename a custom location. Long-press it in the location list. The rename covers every film at that name, and renaming onto a name already in use merges the two, which is the misspelling case itself.
- Fixed: long-pressing a built-in location lifted the row and opened an empty menu.
- Press and hold a poster to do something with it. The menu that comes up with the preview card now puts a film on Now Showing or on your watch list, as well as removing it from the library. Both are toggles, so the same press takes it back off. Previously the only thing there was Remove, and the owner was the only person it did anything for.
Watch List and Shopping List
- The Wishlist tab is now the Watch List. Same place, new name, and the switch inside it gets you to the shopping list.
- Fixed: the welcome tour still called that tab the Wishlist, and described it as one list rather than two.
- The wishlist is now two lists. A Watch List of everything you want to see, owned or not, and a Shopping List of films you want to own. The switch at the top moves between them and remembers which one you were last on.
- A film can be on both. Deciding to buy something doesn't stop you wanting to watch it, so putting it on the shopping list copies it there rather than taking it off the watch list.
- Tap a film to open it. A film you own goes to its own screen, where you can book it, so the watch list is now a way into an evening rather than just a note of one. A film you don't own yet opens its TMDb page, where you can add it to the library.
- The shopping bag button. On any watch-list row, it asks how you'll buy the film and adds it to the shopping list.
- Change your mind about a format. Tap it on any shopping-list row. It says "Set format" if you skipped the question when you added it.
- Say how you'll buy it. 4K UHD, Blu-ray, DVD, Steelbook, Apple TV, Amazon Prime, or a name you type in yourself.
- Bought. Adds the film to your library, asks where you've put it, and takes the row off the shopping list. If it wasn't already on your watch list it goes there, since you almost certainly bought it in order to watch it.
- One list of places, everywhere. A film on the watch list now picks from the same places a library film does: NAS, Physical Media, Apple TV, or any name you've typed before. The separate list of streaming services is gone, so the same service can't be spelled two ways depending on which screen you were on. Anything you'd already noted is carried over as it was.
- Where it is comes with it. Say a film is on Netflix and it arrives in your library at Netflix, rather than opening an empty picker.
- The shopping list is the library owner's. Everyone can see it, so anyone sharing your library can see what you're after and buy one as a present, but only the owner decides what goes on it.
- Set a location straight from the list, and change it later. Tap where a film is on any watch-list row, whether you own it or not. It opens the same picker the film's own screen uses, and says "Set location" when nothing has been chosen yet. Names you've typed on a wishlist row are offered back on films too, and renaming one fixes it in both places.
- Watched. Records the evening: it asks when you saw it and who was there, files it in your history alongside the nights you booked in advance, and then offers you the review form. Asking the date is what keeps the stats honest, since a Sunday film ticked off on Tuesday would otherwise be counted as a Tuesday.
- Marking anything watched asks whether to clear it off the watch list. However you got there, from the list itself or by ticking off a booked night. It asks rather than doing it, because some films go straight back on for somebody else.
- Rows say when a night is already booked. "Booked for Friday" sits under the title, so you're not picking something you've already got plans for.
- Watch-list films stay put once you own them. They used to disappear the moment they entered your library. Owning something is no reason to stop wanting to watch it.
- Swipe either way. Removing is a swipe now rather than a button on every row, which gives the row back some room. Swipe left to remove, which asks first and tells you if it's staying on the other list. Swipe right to put the film in your library. Neither fires on a long swipe, so you have to mean it.
- Drag the list into order. Each list keeps its own order, shared with the other phone.
- Filter by who added it. A menu above the list reading "Added by anyone", which appears once there's more than one name on it.
- The heart is a toggle now. On a search result, on a film's own page, and behind a long press on a poster. Tap a filled heart and the film comes off the watch list. It used to switch itself off once tapped, so undoing a mis-tap meant going to the other tab and finding the row.
- Add a film you own to the watch list from its own page, in the "..." menu at the top, so it no longer means going back through the search or holding down its poster. It's a toggle there too.
- The switch between the two lists is smooth now. It stuttered on a long list, because throwing it redrew every row before the switch itself was allowed to move.
- Shopping-list rows no longer say where the film is. Nothing on that list has been bought yet, so it isn't anywhere. It also made the format look wrong: "Apple TV" is both a place to keep a film and a place to buy one, so a row could name it twice and read as though the format hadn't updated.
- Fixed: swiping to mark something bought didn't work on a film you already owned, which is exactly the case the shopping list exists for. You own the DVD and you want the 4K.
- Fixed: marking something bought handed the row its shopping bag straight back, offering to go and buy the thing you had just finished buying.
- Rows no longer explain what the library owner can do and you can't. It was a line about someone else's permissions on every row of a list you can't act on anyway.
Everything already on your wishlist moves to the Watch List. No guessing: that is what the old wishlist was. Put anything you want to own onto the shopping list with the bag button.
Film detail
- "Mark as watched" now asks when. Only for a film you never booked, where the app has no showtime to go on. It used to file the evening at whatever moment you happened to tap the button, which the stats then counted as the night you watched it.
- A film's formats and location are now the owner's alone. Adding and removing films was already limited to whoever owns the library, but the details on a film weren't, so anybody you had shared with could change a film's Dolby Atmos badge or say it lives somewhere else. Those two rows now read as plain text for everyone else.
- Booking history is now a table. Date, then each person against their rating and comment, so the stars line up down the page however many people were there. The old cream panel was the last screen left from before the redesign and read as a foreign object against everything else.
Sharing
- Share Library says what people you invite can't change. Your film library is yours: nobody else can add a film, remove one, or alter its formats or location. What they can do is book a film night and write reviews, and those show up for everybody.
- Share Library now says your own second device needs no invite. Anything on the same Apple ID already has your library. Sending yourself an invite didn't just do nothing. It stopped the library loading on that phone and looked exactly like sync being dead.
- Fixed: accepting an invite on a second phone often left the library empty until you opened the invite a second time. The app gave up waiting for the shared library after six seconds and never looked again. It now keeps checking as the sync arrives.
- Fixed: anything added on a second phone was recorded under the library owner's name rather than the name of whoever added it. Tapping the heart on a film recorded nobody at all, so the row read "Added by" and then nothing.
- The sharing screen knows whose library it is. If you accepted someone's invite, the people icon now opens a plain status: "You're viewing Woodey's library", who else is in it, and what you can and can't do. It used to open the owner's own screen, offering to invite people to, manage, and resync a library that wasn't yours. None of those were ever going to work: iCloud only lets the owner manage a share.
- Clearer wording about who can change what. "Other users cannot edit/update your library" is now "Only you, as the library owner, can add, remove or edit films and library details. Everyone can make and manage bookings."
- An invite opened from a cold start is no longer given up on after two and a half seconds. Tapping an invite link launches the app, and the invite often arrives before iCloud has finished loading. The app waited five half-second turns and then dropped it without a word, which is the most likely real reason behind "I tapped the link and nothing happened". It now waits a full minute, and if it truly can't be opened it says so on screen instead of leaving you watching for a library that was never coming.
- Your whole library is sent automatically when you first invite someone. Films that were already in the library when the share was created don't always get swept in by iCloud on their own. The fix for that was a "Resync" button the owner had to know to press, so a recipient could end up with part of a library and neither of you could see why. It now runs by itself as soon as the invite has been sent, and says when it's done. The button stays, for when you want to run it again.
- A slow invite is no longer reported as a failed one. Creating the share gives iCloud twenty seconds before it says something's wrong, and iCloud sometimes answers later than that. The app now asks whether the share exists before telling you to try again, and a late success takes over from the warning rather than being thrown away. While it's still working the button reads "Still finishing" rather than inviting you to start a second attempt on top of the first, and a "Check again" button asks iCloud where it got to.
- Sharing problems stop disappearing quietly. Saves of who's in the library used to fail without a trace, which is how a booking could end up attributed to the wrong person on one phone and the right one on another. They're now recorded where the diagnostics can show them, as is every other save in the app.
Media server
- A failed connection now tells you when iOS is the reason. Your server sits on your home network, and iOS asks permission before an app is allowed to look there. When that permission is off, iOS doesn't say so: it reports it as though the phone had no connection at all, so the app said "Couldn't reach the server" and sent you off checking a router that was fine. The app now works out when that's what happened, says so plainly, and puts an "Open Settings" button under the message.
- It also catches the case where the switch looks on but isn't. Permission can quietly stop working after it has already been granted once, which is the version of this that's hardest to spot, because the app worked yesterday. Turning Local Network off and back on again fixes it, and the app now tells you to try that.
- Coming back from Settings re-tests on its own. No hunting for the Connect button to find out whether the change worked.
- "Couldn't reach the server" now lists the causes in the order worth checking. Local network permission first, then the phone being on a different network or a VPN sending its traffic elsewhere, then the server being off or a NAS having gone to sleep.
- Plex sign-in failures get the same treatment. Signing in talks to Plex over the internet, so it succeeds even when the app can't see your own network, and then no server is reachable. That combination used to point at your router's settings. It now checks the permission first.
- You can leave the port off the address. Type just the box's address, like 192.168.1.50, and the app fills in the usual port for the server you picked: 8096 for Jellyfin and Emby, 32400 for Plex. It shows you the full address it used, so you can change it if your server is somewhere else. Before, the shortest thing anyone would naturally type quietly went to the wrong port and came back as "couldn't reach the server".
- Disconnect now names the server it would forget. Switching the Jellyfin, Emby or Plex picker doesn't change what's saved until you connect, but the Disconnect button described whichever one the picker was showing. Point it at Plex with a Jellyfin server saved and it offered to forget "your Plex token" while the thing it would actually delete was your Jellyfin API key.
- A library whose films couldn't be counted no longer reads as empty. The count sits beside each library so you can tell a film library from a folder of test clips, and a count that failed was being written as "0 films", which is exactly the cue to leave that library unticked. It now says the count couldn't be read, and says that the library can still be imported.
- Plex setup asks for local network access at the right moment. Signing in to Plex happens over the internet, but finding your server happens on your own network, and the app was looking before iOS had ever asked you whether it could. That made a first-time setup fail in a way that then had to be guessed at.
- And it no longer blames that permission when it can't be sure. A Plex server that can't be found at any of its addresses used to produce a flat "One Row isn't allowed onto your home network", when a server that's switched off, a sleeping NAS and a router blocking Plex's secure addresses all look the same from the app's side. It now says what it knows, lists the likely causes, and still offers the Settings button in case it is the permission.
- A Plex sign-in no longer sits for five minutes when plex.tv is unreachable. The app checks every couple of seconds to see whether you've approved the code, and it ignored failures on the grounds that your phone might briefly have changed network. It ignored them for the full five minutes. It now waits half a minute before saying that Plex itself can't be reached, and points at this device's internet connection rather than your home network, which isn't involved.
- Everything that talks to Plex's website now says so when it can't. Signing in, loading your list of servers and finding your players all go out to plex.tv over the internet, and all three used to report a failure as "Couldn't reach the server", with advice about local network access, VPNs and sleeping NAS drives. If your internet dropped just before you signed in, you were sent to check a home server that was never being contacted.
- No local network prompt for a server you reach through Plex's relay. If none of the addresses Plex lists for your server are on your own network, the permission has nothing to do with your connection, so the app no longer asks for it, and no longer blames it when the server can't be found. The same goes for a Jellyfin or Emby server reached through a web address of your own rather than a local one.
- Waiting five minutes and never approving now says so. It used to report "an unexpected response (408)".
- Fixed: the app wrote "api key" in the middle of a sentence, having lowercased the whole phrase rather than just the word in front of it. Plex got "plex token" the same way.
- Fixed: if the iPhone refused to store your API key or token, the app still said it was connected, and the screen was back to disconnected the next time you opened it with nothing explaining why. It now tells you the key couldn't be saved, and leaves the server you already had alone.
Fixes and housekeeping
- Posters are built for a big library. The app used to pull every poster in the library into memory the moment you opened it, at full size, all at once. On a few dozen films that was fine; on a thousand it is a thousand downloads competing with each other and hundreds of megabytes of pictures held for films you have scrolled past. It now fetches a few rows ahead of where you are, prepares each poster at the size it is actually drawn, and keeps a fixed amount in memory rather than a fixed number of pictures. Scrolling should be smoother, and the app should be far less likely to be shut down in the background.
- The poster folder has a limit. Posters are kept on the phone so they don't download twice. That folder now trims itself rather than growing with the library.
- A save that fails is no longer silent. Every write in the app, booking a night, writing a review, setting a film's location, reordering a list, used to throw its errors away, so a change that didn't stick looked exactly like one that did until it wasn't there the next time you looked. All of them now report, and Settings → Diagnostics names which one it was.
- Tap the ticket you get after booking. It opens that booking, the same screen you reach by tapping it in the Bookings list. Until now the confirmation was a dead end with only "View bookings" out of it, which left you hunting for the booking you had just made.
- Add a guest after you've booked. "Add or remove guests" under Guests on a booking opens a short screen for it, so someone deciding to come on the day no longer means rebooking the evening. Tickets already saved or sent keep the names they were made with, so send the new guest their own invite.
- Cancel a booking from the list. Press and hold its ticket in Bookings and it's in the menu, under saving and sharing. It asks first, and only appears on a booking that hasn't happened yet. Until now you had to open the booking to call it off.
- Change a review you've written. Open the booking and tap your own stars. A pencil beside them shows which one is yours.
- Fixed: reaching a booking through History and tapping "Add review" did nothing at all. Reviews now open from History the same way they do from Bookings.
- Custom names now actually sync. Places you type yourself had never been set up in the cloud database, so they only ever existed on the phone that typed them. They looked like they were working, because on that phone they were.
- Wording tidied throughout: dashes swapped for commas and full stops across every screen and error message.
- Put the keyboard away by scrolling. Searching the library, adding to a list, or finding a film in Settings. Results appear as you type, so the keyboard's own Search key was never needed, which left it the only way to clear a keyboard covering half the results.
- The ticket keeps everyone's names on one line. On a smaller phone they ran onto a second and pushed the rest of the ticket down.
- Swipe icons on the two lists now match the rest of the app: a shopping bag for Bought, and the same film stack the Library tab uses for Move to Library.
- The app no longer closes on itself when the library won't open. On the rare occasion it couldn't open its own library, most likely just after an update, the app shut the instant you tapped its icon. That looks like a broken app and tells you nothing. It now opens on a screen that says what has happened and asks you to restart the iPhone first, because deleting the app is the one thing that would actually lose anything added since the last sync.
- Settings, under About, now credits Font Awesome alongside TMDB and the display font. Its icons are free to use and ask only that they are credited.
This build talks to the live database for the first time. Every test build before it was pointed at a separate development one by mistake, so anything you added while testing earlier versions won't be here. Your library starts fresh from this build on.
